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

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

Определение наилучшего размера страниц требует равновесия нескольких параллельных факторов. Поэтому не существует абсолютного оптимального решения. Прежде всего, есть два довода в пользу маленького размера страниц. Случайно выбранный текст, данные или сегмент стека не заполняют целое количество страниц. В среднем половина последней страницы оказывается пустой, и это дополнительное пространство пропадает. Такие потери называют внутренней фрагментацией. Если в памяти п сегментов, а размер страницы равен р байтам, пр/2 байт будет потрачено ни на что в результате внутренней фрагментации. Это разумный аргумент в пользу страниц небольшого размера.

Другой довод становится очевидным, если мы представим себе программу, выполняемую в восемь последовательных этапов, по 4 Кбайт каждый. При размере страницы 32 Кбайт программе должно быть постоянно выделено 32 Кбайт. При размере страницы 16 Кбайт ей необходимо только 16 Кбайт. При размере страницы 4 Кбайт или меньше программа требует всего лишь 4 Кбайт в любой момент времени. То есть большой размер страницы скорее, чем маленький, станет причиной того, что в памяти находится неиспользуемая часть страницы.

С другой стороны, небольшой размер страницы означает, что программам будет нужно их большое количество, следовательно - огромная таблица страниц. Программа размером 32 Кбайт требует всего четыре страницы по 8 Кбайт и 64 страницы по 512 байт. Как правило, страница за раз переносится на диск и с него, при этом большая часть времени уходит на поиск цилиндра и задержку врашения, так что перемещение маленькой страницы занимает почти столько же времени, сколько и большой. Может потребоваться 64 х 10 мс, чтобы загрузить 64 страницы размером 512 байт, и всего лишь 4 х 12 мс для загрузки четырех страниц по 8 Кбайт.

На некоторых машинах таблица страниц должна записываться в аппаратные регистры каждый раз, когда процессор переключается от одного процесса к другому. Если на таком компьютере страница имеет маленький размер, то время, требуемое для загрузки таблицы, будет увеличиваться пропорционально уменьшению размера страницы. Более того, пространство, занятое таблицей страниц, также возрастает с уменьшением страницы.

Этот последний момент можно проанализировать математически. Пусть средний размер процесса равен s байтам, а страницы - р байтам. Кроме того, предположим, что запись для каждой страницы требует е байтов. Тогда приблизительное количество страниц, необходимое для процесса, равно s/p, что соответствует se/p байтам для таблицы страниц. Потеря памяти в последней странице процесса вследствие внутренней фрагментации равна р/2. Таким образом, общие накладные расходы вследствие поддержки таблицы страниц и потери от внутренней фрагментации равны сумме этих двух составляющих:

расход = se/p + р/2.

Первое слагаемое (размер таблицы страниц) растет при уменьшении размера страницы. И наоборот, при увеличении размера страницы возрастает второе слагаемое (внутренняя фрагментация). Оптимальный вариант следует искать где-то посередине. Если взять первую производную по переменной р и приравнять ее к нулю, мы получим равенство:



-se/p +1/2=0.

Из этого равенства мы можем вывести формулу, дающую оптимально сбалансированный размер страниц (принимая во внимание только потери памяти на фрагментацию, а также величину таблицы страниц). В результате получится:

р =V2se.

Для среднего размера процесса s = 1 Мбайт и длины записи в таблице страниц е = 8 байт оптимальный размер страницы будет равен 4 Кбайт. В серийно выпускаемых компьютерах были приняты значения в диапазоне от 512 байт до 64 Кбайт.

4.5.4. Интерфейс виртуальной памяти

До сих пор в нащих рассуждениях предполагалось, что виртуальная память прозрачна для процессов и программистов, то есть все, что они видят - это огромное виртуальное адресное пространство на компьютере с небольшой (или меньшей) физической памятью. Обычно это соответствует истине, но в некоторых прогрессивных системах программистам предоставлена определенная свобода управления картой памяти, которую они могут направить на улучшение поведения программы нетрадиционными способами. В этом разделе мы кратко рассмотрим некоторые из них.

Одной из причин предоставления программистам контроля над картой памяти является желание позволить двум и более процессам совместно использовать одну и ту же память. Если программисты сами будут давать названия областям памяти, один процесс сможет дать другому процессу имя области памяти, и этот второй процесс также сможет ей пользоваться. Если два (или больше) процессов разделяют страницы памяти, становится реальной высокая пропускная способность совместного доступа - один процесс пишет в разделяемую память, а другой читает из нее.

Совместное использование страниц также находит применение для высокопроизводительных систем передачи сообщений. Когда передается сообщение, данные обычно копируются из одного адресного пространства в другое, а это значительные издержки. Если процессы будут управлять своей картой страниц, можно передавать сообщения с помощью процесса-отправителя, убирающего из карты страницу (страницы) с сообщением, и процесса-получателя, помещающего ее (их) в карту. При этом должны копироваться только имена страниц вместо всех данных.

Еще одна современная техника управления памятью носит название распределенной памяти совместного доступа [32, 55, 89]. Она позволяет нескольким процессам в сети совместно использовать набор страниц, возможно (но не обязательно) как единственное разделяемое линейное адресное пространство. Когда процесс обращается к странице, не отображаемой в данный момент, он инициирует страничное прерывание. Обработчик страничных прерываний, находящийся в ядре или в пользовательском пространстве, определяет машину, содержащую страницу, и посылает ей сообщение с просьбой выгрузить страницу



и послать ее по сети. Когда страница прибывает, она попадает в карту, и прерванная команда перезапускается.

4.6. Сегментация

Обсуждавшаяся до сих пор виртуальная память представляет собой одномерное пространство, потому что виртуальные адреса идут один за другим от О до некоторого максимума. Для многих задач наличие двух и более отдельных виртуальных адресных пространств может оказаться намного лучше, чем всего одно. Например, у компилятора есть много таблиц, которые формируются по мере трансляции, возможно, включая в себя:

1. Исходный текст, сохраненный для печати листинга (в пакетных системах).

2. Символьную таблицу, содержащую имена и атрибуты переменных.

3. Таблицу, содержащую все используемые константы: целые и с плавающей точкой.

4. Дерево фамматического разбора, содержащее синтаксический анализ профаммы.

5. Стек, используемый для процедурных вызовов внутри компилятора.

Во время компиляции каждая из первых четырех таблиц непрерывно растет. Последняя таблица при компиляции непредсказуемо увеличивается или уменьшается. В одномерной памяти эти пять таблиц должны были бы размещаться в смежных частях виртуального адресного пространства, как на рис. 4.18.

Виртуальное адресное пространство

Адресное пространство, предоставленное для дерева синтаксического пространства

Дерево синтаксического анализа

Табпица констант

Исходный те

Свободно

Пространство, в данный момент используемое деревом синтаксического анализа


Таблица кодировки символов достигла таблицы с исходным текстом

Рис. 4.18. В одномерном адресном пространстве при росте таблиц одна может упереться в другую



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 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.