Главная страница Межпроцессное взаимодействие (состязание) скольку пользователь сегментированной памяти имеет дело с иллюзией постоянного нахождения всех сегментов в оперативной памяти - то есть он может адресоваться к ним так, как будто они существуют, - он может защищать сегменты по отдельности, не заботясь об управлении их загрузкой в память. 4.6.1. Реализация сегментации Реализация сегментации существенно отличается от страничной организации памяти: страницы имеют фиксированный размер, а сегменты - нет. На рис. 4.20, а показан пример физической памяти, изначально содержащей пять сегментов. Теперь взглянем, что произойдет, если удаляется сегмент 1, а на его место помещается сегмент 7 меньшего размера. Мы получим конфигурацию памяти, изображенную на рис. 4.20, б. Между сегментом 7 и сегментом 2 расположена неиспользуемая область, то есть дыра. Затем сегмент 4 замещается сегментом 5 (рис. 4.20, в), а сегмент 3 заменяется сегментом 6, как на рис. 4.20, г. После того как система поработает какое-то время, память разделится на некоторое количество участков, часть которых содержит сегменты, а остальные свободны. Этот феномен разделения памяти на маленькие свободные участки называется поклеточной разбивкой или внешней фрагментацией. С внешней фрагментацией можно бороться с помощью уплотнения, как показано на рис. 4.20, д.
Сегмент 5 (4 К) Сегмент 6 (4 К) Сегмент 2 (5 К) Сегмент 7 (5 К) Сегмент О (4 К) Рис. 4.20. а-г - развитие внешней фрагментации; д - устранение фрагментации с помощью уплотнения 4.6.2. Сегментация с использованием страниц: MULTICS При большом размере сегментов может быть неудобно или даже невозможно хранить их в оперативной памяти целиком. Это приводит к идее их страничной организации, чтобы рядом располагались только те страницы, которые нужны на самом деле. Страничные сегменты поддерживались несколькими важными для нас системами. В этом разделе мы будем описывать первую из них: MULTICS. В следующем разделе мы обратимся к более современной системе Intel Pentium. Система MULTICS работала на компьютерах Honeywell 6000 и их потомках и обеспечивала каждую программу виртуальной памятью размером вплоть до 2* сегментов (более 250 ООО), с длинами до 65 536 (36-разрядных) слов. Чтобы добиться этого, разработчики системы MULTICS решили трактовать каждый сегмент как виртуальную память и разбить его на страницы, комбинируя преимущества страничной организации памяти (постоянный размер страницы и отсутствие необходимости хранения целого сегмента в памяти, если используется только его часть) с выгодой сегментации (упрощение программирования, модульности, защиты и совместного доступа). Каждая программа в MULTICS имеет таблицу сегментов с одним дескриптором на сегмент. Так как записей в таблице потенциально больше четверти миллиона, таблица сегментов сама является сегментом и разбита на страницы. Дескриптор сегмента содержит индикатор того, находится ли сегмент в памяти или нет. Если какая-то часть сегмента присутствует в памяти, считается, что и сегмент в памяти, его таблица страниц также будет в памяти. Если сегмент находится в памяти, то его дескриптор содержит 18-разрядный указатель на его таблицу страниц (рис. 4.21, а). Поскольку физические адреса 24-разрядные, а страницы выравниваются по 64-байтовым границам (предполагается, что шесть битов низших разрядов адреса страницы - это 000000), необходимо только 18 бит в дескрипторе для хранения адреса таблицы страниц. Дескриптор также содержит размер сегмента, биты защиты и несколько других полей. Рисунок 4.21, б демонстрирует дескриптор сегмента в системе MULTICS. Адрес сегмента во вспомогательной памяти не включен в дескриптор сегмента, но в другой таблице используется обработчиком сегментных прерываний. 1. Каждый сегмент представляет собой обыкновенное адресное пространство и поделен на страницы точно так, как и несегментированная страничная память, описанная ранее в этой главе. Нормальный размер страницы равен 1024 словам (хотя несколько меньшие сегменты, используемые MULTICS, не разбиты на страницы или же все-таки разделены иа блоки по 64 слова). 2. Адрес в системе MULTICS состоит из двух частей: сегмента и адреса внутри сегмента. Последний, в свою очередь, делится на номер страницы и слово внутри страницы, как показано на рис. 4.22. Когда происходит обращение к памяти, вьшолняется следующий алгоритм: 1) по номеру сегмента находится дескриптор сегмента; 2) проверяется, находится ли таблица страниц сегмента в памяти. Если да, определяется расположение таблицы. Если нет, генерируется сегментное прерывание. При нарушении защиты происходит прерывание; 3) изучается запись в таблице страниц для запрашиваемой виртуальной страницы. Если страница не находится в памяти, возбуждается страничное прерывание. Если она в памяти, из записи таблицы страниц извлекается адрес начала страницы в оперативной памяти; -36 бит- Дескриптор сегмента 6 Дескриптор сегмента 5 Дескриптор сегмента 4 Дескриптор сегмента 3 Дескриптор сегмента 2 Дескриптор сегмента 1 Дескриптор сегмента О Сегмент дескрипторов Запись страницы 2 Запись страницы 1 Запись страницы О м абпица страниц для сегмента 3 Запись страницы 2 Запись страницы 1 Запись страницы О Таблица страниц для сепиента 1 1 1 1 Адрес таблицы страниц в оперативной памяти Длина сегмента (в страницах) Размер страницы 0 = 1024 слова - 1 = 64 слова 0 = сегмент разбит на страницы 1 = сегмент не разбит на страницы Разносторонние биты -Биты защиты б Рис. 4.21. Виртуальная память системы MULTICS: а - дескрипторы указывает на таблицы страниц; б - дескриптор сегмента. Числа означают длину полей Адрес внутри сепиента Номер сегмента
Рис. 4.22. 32-разрядный виртуальный адрес в системе MULTICS
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |