Главная страница Межпроцессное взаимодействие (состязание) Определение наилучшего размера страниц требует равновесия нескольких параллельных факторов. Поэтому не существует абсолютного оптимального решения. Прежде всего, есть два довода в пользу маленького размера страниц. Случайно выбранный текст, данные или сегмент стека не заполняют целое количество страниц. В среднем половина последней страницы оказывается пустой, и это дополнительное пространство пропадает. Такие потери называют внутренней фрагментацией. Если в памяти п сегментов, а размер страницы равен р байтам, пр/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. В одномерном адресном пространстве при росте таблиц одна может упереться в другую
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |