Главная страница  Межпроцессное взаимодействие (состязание) 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 [ 124 ] 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

скольку пользователь сегментированной памяти имеет дело с иллюзией постоянного нахождения всех сегментов в оперативной памяти - то есть он может адресоваться к ним так, как будто они существуют, - он может защищать сегменты по отдельности, не заботясь об управлении их загрузкой в память.

4.6.1. Реализация сегментации

Реализация сегментации существенно отличается от страничной организации памяти: страницы имеют фиксированный размер, а сегменты - нет. На рис. 4.20, а показан пример физической памяти, изначально содержащей пять сегментов. Теперь взглянем, что произойдет, если удаляется сегмент 1, а на его место помещается сегмент 7 меньшего размера. Мы получим конфигурацию памяти, изображенную на рис. 4.20, б. Между сегментом 7 и сегментом 2 расположена неиспользуемая область, то есть дыра. Затем сегмент 4 замещается сегментом 5 (рис. 4.20, в), а сегмент 3 заменяется сегментом 6, как на рис. 4.20, г. После того как система поработает какое-то время, память разделится на некоторое количество участков, часть которых содержит сегменты, а остальные свободны. Этот феномен разделения памяти на маленькие свободные участки называется поклеточной разбивкой или внешней фрагментацией. С внешней фрагментацией можно бороться с помощью уплотнения, как показано на рис. 4.20, д.

Сегмент 4

Сегмент 4

(7 К)

(7 К)

Сегмент 5 (4 К)

Сегмент 5 (4 К)

Сегмент 3

Сегмент 3

Сегмент 3

(8 К)

(8 К)

(8 К)

Сегмент 6 (4 К)

Сегмент 2 (5 К)

Сегмент 2 (5 К)

Сегмент 2 (5 К)

Сегмент 2 (5 К)

Сегмент 1 (8 К)

/ /

Сегмент 7 (5 К)

Сегмент 7 (5 К)

Сегмент 7 (5 К)

Сегмент 0 (4 К)

Сегмент 0 (4 К)

Сегмент 0 (4 К)

Сегмент 0 (4 К)


Сегмент 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



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 [ 124 ] 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

© 2000 - 2018 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.