Сегментная организация памяти
Автор: 4325333333 • Декабрь 25, 2022 • Контрольная работа • 934 Слов (4 Страниц) • 164 Просмотры
Теоретический вопрос: Сегментная организация памяти.
Обычно программа состоит из нескольких частей, размеры которых заранее неизвестны и могут меняться в процессе выполнения программы. Для каждой из этих частей должна быть отведена область в пространстве виртуальных адресов, поскольку пользоваться виртуальной памятью с непрерывной нумерацией байтов всех частей не всегда удобно. Более удобно, когда каждая часть имеет свою нумерацию байтов начиная с нуля. Желательно также, чтобы составленная таким образом программа могла работать при динамическом распределении памяти, не требуя от программиста усилий по объединению различных ее частей в единый массив. Эта задача решается во многих компьютерах путем использования особого метода преобразования виртуальных адресов в физические и называется сегментной организацией памяти.
Сегментация – механизм адресации, обеспечивающий существование нескольких независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния. Основой механизма сегментации является понятие сегмента, который представляет собой независимый блок памяти, поддерживаемый на аппаратном уровне.
Принципы сегментной организации памяти являются следующими:
– виртуальная память каждого приложения делится на части, называемые сегментами;
– внутри сегмента адресация байтов является независимой, начиная от нуля до какого-то максимального значения;
– различные сегменты могут иметь разную длину;
– длина сегмента может варьироваться в процессе работы;
– так как каждый сегмент занимает независимое адресное пространство, сегменты могут расти и сокращаться независимо друг от друга.
Различают две основные схемы адресации:
Сегмент памяти – это блок ячеек памяти с последовательными адресами (номерами), где физическое адрес любой ячейки сегмента определяется как сумма физического адреса первой ячейки сегмента (адреса сегмента) и адреса ячейки в сегменте. Адрес ячейки в сегменте называют смещением ячейки в сегменте (offset). Таким образом сегмент памяти можно трактовать как искусственно порожденный ОЗУ в поле обычного ОЗУ. При таком определении любой ОЗУ может иметь сегменты. Поэтому принципиальным является аппаратная поддержка сегментной организации памяти со стороны процессора, которая заключается в том, что люба физический адрес автоматически формируется процессором как сумма базы сегмента и смещения в сегменте.
Каждая программа в общем случае может состоять из любого количества сегментов, но непосредственный доступ она имеет только к трем основным сегментам (коду, данным и стеку), а также к дополнительным сегментам данных числом от одного трех. Сегмент – это специальные области в программе для хранения кода (CS), данных (DS) и стека (SS). Для обращения к сегменту следует изменить значение в соответствующем сегментном регистре. Программа никогда не знает, по какому физическому адресу будут размещены ее сегменты. Этим занимается операционная система. Операционная система размещает сегменты программы в оперативной памяти по определенным физическим адресам, после чего размещает значения этих адресов в определенные места. Куда именно, зависит от режима работы процессора.
В 32-разрядных регистрах процессоров Intel, например, Pentium адресная шина 32-разрядная, что соответствует адресному пространству 232 = 4 Гбайт, однако сегментная адресация памяти не позволяет выйти за пределы 1 Мбайта. Для преодоления этого ограничения в 32-разрядных процессорах используют два режима работы: реальный и защищенный. В реальном режиме процессор функционирует так, как процессор І8086 с повышенным быстродействием и обращается только к 1 Мбайту адресного пространства, другого пространства он обращаться не может. В реальном режиме физические адреса помещаются непосредственно в соответствующие сегментные регистры.
...