Сегментное распределение
При страничной организации виртуальное адресное пространство процесса делится на равные части механически, без учета смыслового значения данных.
Однако, разбиение виртуального адресного пространства па «осмысленные» части делает принципиально возможным совместное использование фрагментов программ разными процессами. Например, двум процессам требуется одна и та же подпрограмма, которая к тому же обладает свойством реентерабельности. Тогда коды этой подпрограммы могут быть оформлены в виде отдельного сегмента и включены в виртуальные адресные пространства обоих процессов.
При отображении в физическую память сегменты, содержащие коды подпрограммы из обоих виртуальных пространств, проецируются на одну и ту же область физической памяти. Таким образом, оба процесса получат доступ к одной и той же копии подпрограммы.
Виртуальное адресное пространство процесса делится на части — сегменты.
Их размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. и. Деление виртуального адресного пространства па сегменты осуществляется компилятором на основе указаний программиста или по умолчанию, на основе принятых в системе соглашений. Максимальный размер сегмента определяется разрядностью виртуального адреса, например при 32-разрядной организации процессора он равен 4 Гбайт. При этом максимально возможное виртуальное адресное пространство процесса представляет собой набор из N виртуальных сегментов, каждый размером по 4 Гбайт. В каждом сегменте виртуальные адреса находятся в диапазоне от 0000000016 до FFFFFFFF16.
Сегменты не упорядочиваются относительно друг друга, так что общего для сегментов линейного виртуального адреса не существует, виртуальный адрес задается парой чисел: номером сегмента и линейным виртуальным адресом.
При загрузке процесса в оперативную память помещается только часть его сегментов, полная копия виртуального адресного пространства находится в дисковой памяти. Для каждого загружаемого сегмента ОС подыскивает непрерывный участок свободной памяти достаточного размера. Смежные в виртуальной памяти сегменты одного процесса могут занимать в оперативной памяти несмежные участки (это очевидно). Если во время выполнения процесса происходит обращение по виртуальному адресу, относящемуся к сегменту, который в данный момент отсутствует в памяти, то происходит прерывание. ОС приостанавливает активный процесс, запускает на выполнение следующий процесс из очереди, а параллельно организует загрузку нужного сегмента. При отсутствии в памяти места, ОС выбирает сегмент на выгрузку.
На этапе создания процесса во время загрузки его образа в оперативную память система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается:
· базовый физический адрес сегмента в оперативной памяти;
· размер сегмента;
· правила доступа к сегменту;
· признаки модификации, присутствия и обращения к данному сегменту, а также некоторая другая информация
Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре.
Механизмы преобразования адресов в страничном и сегментном способах организации памяти весьма схожи. Однако в них имеются и существенные отличия. Эти отличия являются следствием того, что сегменты, в отличие от страниц имеют произвольный размер.
Виртуальный адрес при сегментной организации можно представлен парой (g, s), где g - номер сегмента, as- смещение.
Страницы имеют одинаковый размер, а значит, их начальные адреса кратны размеру страниц. Поэтому ОС заносит в таблицы страниц не полные адреса, а номера физических страниц, которые совпадают со старшими разрядами базовых адресов.
Сегмент может в общем случае располагаться в физической памяти начиная с любого адреса. Следовательно, для определения местоположения в памяти необходимо задавать его полный начальный физический адрес.
Использование операции сложения замедляет процедуру преобразования виртуального адреса в физический по сравнению со страничной организацией (там просто объединение старших и младших разрядов).
Другим недостатком сегментного распределения является избыточность. При сегментной организации единицей перемещения между памятью и диском является сегмент, общем которого, как правило, больший, чем страница. Но во многих случаях для работы программы не требуется загружать весь сегмент целиком, достаточно было бы одной или двух страниц. Аналогично при отсутствии свободного места не следует выгружать целый сегмент, если можно ограничится несколькими страницами.
Но главный недостаток — это фрагментация, который возникает из-за непредсказуемости размеров сегментов.
Наиболее существенным отличием сегментной организации от страничной является возможность задания дифференцированных прав доступа процесса к его сегментам.
Например, сегмент данных исходной информации может иметь права доступа «только чтение», а сегмент результатов, — «чтение и запись». Это свойство определяет преимущество сперед страничной.
Дата добавления: 2016-06-15; просмотров: 2903;