Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Обзор инструментов SEO-оптимизатора и методов продвижения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Создай свою операционную систему! #12
Информационный Канал Subscribe.Ru |
| ||
Сетевые операционные системы | ||
Глава 5. Управление памятью | ||
Продолжение Свопинг и виртуальная памятьНеобходимым условием для того, чтобы программа могла выполнять-ся, являет-ся ее нахождение в оперативной памяти. Только в этом случае про-цессор может извлекать команды из памяти и интерпретировать их, выполняя заданные дейст-вия. Объем оперативной памяти, который имеется в компью-тере, существенно сказывается на характере протекания вычислительного процесса. Он ограничи-вает число одновременно выполняющихся программ и размеры их виртуальных адресных пространств. В некоторых случаях, когда все задачи мультипрограмм-ной смеси являются вычислительными (то есть выполняют относительно мало операций ввода-вывода, разгружающих центральный процессор), для хорошей загрузки процессора может оказаться достаточным всего 3-5 задач. Однако если вычислительная система загруже-на выполнением интерактивных задач, то для эффективного использования процессора может потребоваться уже несколько де-сятков, а то и сотен задач. Эти рассуждения хорошо иллюстрирует рис. 5.11, на котором показан график зависимости коэффициента загрузки процессора от числа одновременно вы-полняемых процессов и доли времени, проводимого эти-ми процессами в со-стоянии ожидания ввода-вывода. Большое количество задач, необходимое для высокой загрузки про-цессора, тре-бует большого объема оперативной памяти. В условиях, когда для обеспечения приемлемого уровня мультипрограммирования имеющейся оперативной памяти недостаточно, был предложен метод организации вы-числительного процесса, при котором образы некоторых процессов целиком или частично временно вы-гружаются на диск. В мультипрограммном режиме помимо активного процесса, то есть процесса, коды которого в настоящий момент интерпретируются процессо-ром, имеются приостановленные процессы, находящиеся в ожидании завер-шения ввода-выво-да или освобождения ресурсов, а также процессы в состоя-нии готовности, стоя-щие в очереди к процессору. Образы таких неактивных процессов могут быть временно, до следующего цикла активности, выгруже-ны на диск. Несмотря на то, что коды и данные процесса отсутствуют в опе-ративной памяти, ОС "знает" о его существовании и в полной мере учитыва-ет это при распределении процессорно-го времени и других системных ресур-сов. К моменту, когда подходит очередь выполнения выгруженного процес-са, его образ возвращается с диска в оператив-ную память. Если при этом об-наруживается, что свободного места в оперативной памяти не хватает, то на диск выгружается другой процесс. Такая подмена (виртуализация) оперативной памяти дисковой памя-тью позво-ляет повысить уровень мультипрограммирования - объем опера-тивной памяти компьютера теперь не столь жестко ограничивает количество одновременно вы-полняемых процессов, поскольку суммарный объем памяти, занимаемой образа-ми этих процессов, может существенно превосходить имеющийся объем опера-тивной памяти. Виртуальным называется ресурс, который пользователю или пользовательской программе представляется обладающим свойствами, которы-ми он в действительности не обладает. В данном случае в распоряжение приклад-ного программиста предоставляется виртуальная оперативная память, размер которой намного превосходит всю имеющуюся в системе реальную оперативную память. Пользователь пишет программу, а транслятор, используя виртуальные адреса, переводит ее в машинные коды так, как будто в распоряжении програм-мы имеется однородная оперативная память большого объема. В действитель-ности же все коды и данные, используемые программой, хранятся на дисках и только при необходимости загружаются в реальную оперативную память. По-нятно, однако, что работа такой "оперативной памяти" происходит значительно медленнее. Виртуализация оперативной памяти осуществляется совокупностью программ-ных модулей ОС и аппаратных схем процессора и включает реше-ние следующих задач: Очень важно то, что все действия по организации совместного ис-пользования диска и оперативной памяти - выделение места для перемещае-мых фрагментов, настройка адресов, выбор кандидатов на загрузку и выгруз-ку - осуществляются операционной системой и аппаратурой процессора ав-томатически, без участия программиста, и никак не сказываются на логике работы приложений.
Виртуализация памяти может быть осуществлена на основе двух раз-личных под-ходов:
Свопинг представляет собой частный случай виртуальной памяти и, следователь-но, более простой в реализации способ совместного использова-ния оператив-ной памяти и диска. Однако подкачке свойственна избыточ-ность: когда ОС ре-шает активизировать процесс, для его выполнения, как правило, Не требуется за-гружать в оперативную память все его сегменты полностью - достаточно загрузить небольшую часть кодового сегмента с подлежащей выполнению инст-рукцией и частью сегментов данных, с кото-рыми работает эта инструкция, а так-же отвести место под сегмент стека. Аналогично при освобождении памяти для загрузки нового процесса очень часто вовсе не требуется выгружать другой про-цесс на диск целиком, доста-точно вытеснить на диск только часть его образа. Перемещение избыточной информации замедляет работу системы, а также при-водит к неэффективному использованию памяти. Кроме того, системы, поддер-живающие свопинг, имеют еще один очень существенный недостаток: они не способны загрузить для выполнения процесс, виртуальное адресное пространст-во которого превышает имеющуюся в наличии свободную память. Именно из-за указанных недостатков свопинг как основной механизм управле-ния памятью почти не используется в современных ОС . На смену ему пришел более совершенный механизм виртуальной памяти, который, как уже было сказано, заключается в том, что при нехватке места в оператив-ной памяти на диск выгружаются только части образов процессов. Ключевой проблемой виртуальной памяти, возникающей в результате много-кратного изменения местоположения в оперативной памяти образов процессов или их частей, является преобразование виртуальных адресов в физические. Ре-шение этой проблемы, в свою очередь, зависит от того; какой способ структури-зации виртуального адресного пространства принят в дан-ной системе управ-ления памятью. В настоящее время все множество реали-зации виртуальной памяти может быть представлено тремя классами. Для временного хранения сегментов и страниц на диске отводится ли-бо специ-альная область, либо специальный файл, которые во многих ОС по традиции продолжают называть областью, или файлом свопинга, хотя пере-мещение ин-формации между оперативной памятью и диском осуществляется уже не в фор-ме полного замещения одного процесса другим, а частями. Другое популярное название этой области - страничный файл (page file, или paging file). Текущий размер страничного файла является важным параметром, оказывающим влияние на возможности операционной системы: чем больше страничный файл, тем боль-ше приложений может одновременно выполнять ОС (при фиксированном раз-мере оперативной памяти). Однако необходимо понимать, что увеличение числа одновременно работающих приложений за счет увеличения размера страничного файла замедляет их работу, так как значительная часть времени при этом тра-тится на перекачку кодов и данных из оперативной памяти на диск и обратно. Размер страничного файла в современных ОС является настраиваемым парамет-ром, который выбирается администратором системы для достижения компро-мисса между уровнем мультипрограммирования и быстродействием системы. Страничное распределениеНа рис. 5.12 показана схема страничного распределения памяти. Вир-туальное адресное пространство каждого процесса делится на части одина-кового, фикси-рованного для данной системы размера, называемые виртуаль-ными страницами (virtual pages). В общем случае размер виртуального ад-ресного пространства про-цесса не кратен размеру страницы, поэтому по-следняя страница каждого процес-са дополняется фиктивной областью. Вся оперативная память машины также делится на части такого же раз-мера, на-зываемые физическими страницами (или блоками, или кадрами). Размер страницы выбирается равным степени двойки: 512, 1024, 4096 байт и т.д. Это позволяет упростить механизм преобразования адресов. При создании процесса ОС загружает в оперативную память несколь-ко его вир-туальных страниц (начальные страницы кодового сегмента и сег-мента данных). Копия всего виртуального адресного пространства процесса находится на диске. Смежные виртуальные страницы не обязательно распо-лагаются в смежных фи-зических страницах. Для каждого процесса операци-онная система создает таб-лицу страниц - информационную структуру, со-держащую записи обо всех вир-туальных страницах процесса. Запись таблицы, называемая дескриптором страницы, включает сле-дующую ин-формацию:
Признаки присутствия, модификации и обращения в большинстве мо-делей со-временных процессоров устанавливаются аппаратно, схемами про-цессора при выполнении операции с памятью. Информация из таблиц стра-ниц используется для решения вопроса о необходимости перемещения той или иной страницы ме-жду памятью и диском, а также для преобразования виртуального адреса в физи-ческий. Сами таблицы страниц, так же как и опи-сываемые ими страницы, разме-щаются в оперативной памяти. Адрес табли-цы страниц включается в контекст соответствующего процесса. При активи-зации очередного процесса операцион-ная система загружает адрес его табли-цы страниц в специальный регистр про-цессора. При каждом обращении к памяти выполняется поиск номера вирту-альной стра-ницы, содержащей требуемый адрес, затем по этому номеру оп-ределяется нуж-ный элемент таблицы страниц, и из него извлекается описы-вающая страницу информация . Далее анализируется признак присутствия, и, если данная вирту-альная страница находится в оперативной памяти, то вы-полняется преобразова-ние виртуального адреса в физический, то есть вирту-альный адрес заменяется указанным в записи таблицы физическим адресом. Если же нужная виртуальная страница в данный момент выгружена на диск, то происходит так называемое страничное прерывание. Выполняющийся процесс переводится в состояние ожи-дания, и активизируется другой про-цесс из очереди процессов, находящихся в со-стоянии готовности. Парал-лельно программа обработки страничного прерывания находит на диске тре-буемую виртуальную страницу (для этого операционная система должна помнить положение вытесненной страницы в страничном файле диска) и пы-тается загрузить ее в оперативную память. Если в памяти имеется свободная физическая страница, то загрузка выполняется немедленно, если же свобод-ных страниц нет, то на основании принятой в данной системе стратегии за-мещения страниц решается вопрос о том, какую страницу следует выгрузить из оперативной памяти. После того как выбрана страница, которая должна покинуть опера-тивную па-мять, обнуляется ее бит присутствия и анализируется ее признак модификации. Если выталкиваемая страница за время последнего пребыва-ния в оперативной памяти была модифицирована, то ее новая версия должна быть переписана на диск. Если нет, то принимается во внимание, что на дис-ке уже имеется предыду-щая копия этой виртуальной страницы, и никакой записи на диск не произво-дится. Физическая страница объявляется свобод-ной. Из соображений безопас-ности в некоторых системах освобождаемая страница обнуляется, с тем чтобы невозможно было использовать содержи-мое выгруженной страницы. Для хранения информации о положении вытесненной страницы в стра-ничном файле ОС может использовать поля таблицы страниц или же другую системную структуру данных (например, дескриптор сегмента при сегментно-страничной организации виртуальной памяти). Виртуальный адрес при страничном распределении может быть пред-ставлен в виде пары (р, sv), где р - порядковый номер виртуальной страницы процесса (нумерация страниц начинается с 0), a sv - смещение в пределах вир-туальной страницы. Физический адрес также может быть представлен в виде пары (n, sf), где n - номер физической страницы, а sf - смещение в пределах физической страницы. Задача подсистемы виртуальной памяти состоит в отображении (р, sv) в (n, sf). Прежде чем приступить к рассмотрению схемы преобразования вир-туального адреса в физический, остановимся на двух базисных свойствах страничной орга-низации. Первое из них состоит в том, что объем страницы выбирается равным степени двойки - 2k. Из этого следует, что смещение s может быть получено простым от-делением k младших разрядов в двоичной записи адреса, а остав-шиеся старшие разряды адреса представляют собой двоичную запись номера страницы (при этом неважно, является страница виртуальной или физиче-ской). Например, если размер страницы 1 Кбайт (210), то из двоичной записи адреса 50718 = 101 000 111 0012 можно определить, что он принадлежит странице, номер ко-торой в двоичном выражении равен 102 и смещен относи-тельно ее начала на 1 000 111 0012 байт (рис. 5.13). Из рисунка хорошо видно, что номер страницы и ее начальный адрес легко мо-гут быть получены один из другого дополнением или отбрасывани-ем k нулей, соответствующих смещению. Именно по этой причине часто го-ворят, что таблица страниц содержит начальный физический адрес страницы в памяти (а не но-мер физической страницы), хотя на самом деле в таблице указаны только стар-шие разряды адреса. Начальный адрес страницы называ-ется базовым адресом. Второе свойство заключается в том, что в пределах страницы непрерывная по-следовательность виртуальных адресов однозначно отображается в непрерыв-ную последовательность физических адресов, а значит, смещения в виртуальном и физическом адресах sv и sf равны между собой (рис. 5.14). Отсюда следует простая схема преобразования виртуального адреса в физический (рис. 5.15). Младшие разряды физического адреса, соответст-вующие смещению, получаются переносом такого же количества младших разрядов из виртуального адреса. Старшие разряды физического адреса, со-ответствующие номеру физиче-ской страницы, определяются из таблицы страниц, в которой указывается соот-ветствие виртуальных и физических страниц. Итак, пусть произошло обращение к памяти по некоторому виртуальному адре-су. Аппаратными схемами процессора выполняются следующие действия:
Типичная машинная инструкция требует 3-4 обращений к памяти (вы-борка команды, извлечение операндов, запись результата). И при каждом обращении происходит либо преобразование виртуального адреса в физиче-ский, либо обра-ботка страничного прерывания. Время выполнения этих операций в значитель-ной степени влияет на общую производительность вы-числительной системы, поэтому столь большое внимание разработчиков уде-ляется оптимизации вирту-альной памяти. Именно для уменьшения времени преобразования адресов во всех процессорах предусмотрен аппаратный механизм получения физического ад-реса по вирту-альному. С той же целью размер страницы выбирается равным степени двойки, благодаря чему двоичная запись адреса легко разделяется на номер страницы и смещение, и в результате в процедуре преобразования ад-ресов более длительная операция сложения заменяется операцией присоеди-нения (конкатенации). Ис-пользуются и другие способы ускорения преобра-зования, такие, например, как кэширование таблицы страниц - хранение наи-более активно используемых за-писей в быстродействующих запоминающих устройствах, в частности в регист-рах процессора. Другим важным фактором, влияющим на производительность систе-мы, являет-ся частота страничных прерываний, на которую, в свою очередь, влияют размер страницы и принятые в данной системе правила выбора стра-ниц для выгрузки и загрузки. При неправильно выбранной стратегии заме-щения страниц могут воз-никать ситуации, когда система тратит большую часть времени впустую, на под-качку страниц из оперативной памяти на диск и обратно. При выборе страницы на выгрузку могут быть использованы различ-ные крите-рии, смысл которых сводится к одному: на диск выталкивается страница, к которой в будущем начиная с данного момента дольше всего не будет обращений. Поскольку точно предсказать ход вычислительного про-цесса невозможно, то не-возможно точно определить страницу, подлежащую выгрузке. В таких условиях решение принимается на основе неких эмпири-ческих критериев, часто осно-вывающихся на предположении об инерцион-ности вычислительного процесса. Так, например, из того, что страница не использовалась долгое время, делается вывод о том, что она, скорее всего, не будет использоваться и в ближайшее вре-мя. Однако привлечение критериев такого рода не исключает ситуаций, когда сразу после выгрузки страницы к ней происходит обращение и она снова должна быть загружена в память. Ве-роятность таких "напрасных" перемещений на-столько велика, что в некото-рых реализациях виртуальной памяти вообще отка-зываются от количествен-ных критериев и предпочитают случайный выбор, при котором на диск вы-гружается первая попавшаяся страница. Возникающее при этом некоторое увеличение интенсивности страничного обмена компенсируется снижением вычислительных затрат на поддержание и анализ критерия выборки страниц на выгрузку. Наиболее популярным критерием выбора страницы на выгрузку явля-ется число обращений к ней за последний период времени. Вычисление этого критерия про-исходит следующим образом. Операционная система ведет для каждой страни-цы программный счетчик. Значения счетчиков определяются значениями при-знаков доступа. Всякий раз, когда происходит обращение к какой-либо странице, процессор устанавливает в единицу признак доступа в относящейся к данной странице записи таблицы страниц. ОС периодически просматривает признаки доступа всех страниц во всех существующих в дан-ный момент записях таблицы страниц. Если какой-либо признак оказывается равным 1 (было обращение), то система сбрасывает его в 0, увеличивая при этом на единицу значение связанно-го с этой страницей счетчика обращений. Когда возникает необходимость уда-лить какую-либо страницу из памяти, ОС находит страницу, счетчик обращений которой имеет наименьшее значение. Для того чтобы критерий учитывал интен-сивность обращений за последний период, ОС с соответствующей периодично-стью обнуляет все счетчики. Интенсивность страничного обмена может быть также снижена в ре-зультате так называемой упреждающей загрузки, в соответствии с которой при возникнове-нии страничного прерывания в память загружается не одна страница, содержа-щая адрес обращения, а сразу несколько прилегающих к ней страниц. Здесь ис-пользуется эмпирическое правило: если обращение произошло по некоторому адресу, то велика вероятность того, что следую-щие обращения произойдут по со-седним адресам. Другим важным резервом повышения производительности системы является пра-вильный выбор размера страницы. Каким же должен быть опти-мальный размер страницы? С одной стороны, чтобы уменьшить частоту страничных прерываний, следовало бы увеличивать размер страницы. С дру-гой стороны, если страница велика, то велика и фиктивная область в послед-ней виртуальной странице каж-дого процесса. Если учесть, что в среднем в каждом процессе фиктивная область составляет половину страницы, то в сумме при большом объеме страницы поте-ри могут составить существенную величину. Из приведенных соображений следует, что выбор размера страницы является сложной оптимизационной задачей, требующей учета многих факторов. На практике же разработчики ОС и процес-соров ограничиваются неким рациональным решением, пригодным для широко-го класса вычислительных систем. Типичный размер страницы составляет не-сколько килобайт, например, наиболее распространенные процессоры х86 и Pentium компании Intel, а также операционные системы, устанавливаемые на этих процессорах, поддерживают страницы размером 4096 байт (4 Кбайт) . Размер страницы влияет также на количество записей в таблицах стра-ниц. Чем меньше страница, тем более объемными являются таблицы страниц процессов и тем больше места они занимают в памяти. Учитывая, что в современных процес-сорах максимальный объем виртуального адресного пространства процесса, как правило, не меньше 4 Гбайт (232), то при размере страницы 4 Кбайт (212) и длине записи 4 байта для хранения таблицы страниц может потребоваться 4 Мбайт памяти! Выходом в такой ситуации является хранение в памяти только той час-ти таблицы страниц, которая активно используется в данный период времени - так как сама таблица страниц хранится в таких же страницах физической памя-ти, что и описываемые ею страницы, то принципиально возможно временно вы-теснять часть таблицы страниц из оперативной памяти. Именно такой результат может быть достигнут путем более сложной структури-зации виртуального адресного пространства, при котором все мно-жество вирту-альных адресов процесса делится на разделы, а разделы делятся на страницы (рис. 5.16). Все страницы имеют одинаковый размер, а разделы содержат одина-ковое количество страниц. Если размер страницы и количество страниц в разделе выбрать равными степени двойки (2k и 2n соответственно), то принадлежность виртуального адреса к разделу и странице, а также смещение внутри страницы можно определить очень просто: младшие k двоичных разрядов дают смещение, следующие n разрядов представляют собой номер виртуальной страницы, а ос-тавшиеся старшие разряды (обозначим их количество m) содержат номер раздела. Для каждого раздела строится собственная таблица страниц. Количе-ство дескрип-торов в таблице и их размер подбираются такими, чтобы объем таблицы оказался равным объему страницы. Например, в процессоре Pentium при размере страницы 4 Кбайт длина дескриптора страницы составляет 4 байта и количество записей в таблице страниц, помещающейся на страницу, равняется соответственно 1024. Каж-дая таблица страниц описывается деск-риптором, структура которого полностью совпадает со структурой дескрип-тора обычной страницы. Эти дескрипторы сведены в таблицу разделов, на-зываемую также каталогом страниц. Физический адрес таб-лицы разделов ак-тивного процесса содержится в специальном регистре процессора и поэтому всегда известен операционной системе. Страница, содержащая таблицу раз-делов, никогда не выгружается из памяти, в противном случае работа вирту-аль-ной памяти была бы невозможна. Выгрузка страниц с таблицами страниц позволяет сэкономить память, но при этом приводит к дополнительным временным затратам при получении физического адреса. Действительно, может случиться так, что та таблица страниц, которая содер-жит нужный дескриптор, в данный момент выгружена на диск, тогда процесс пре-образования адреса приостанавливается до тех пор, пока требуемая страница не бу-дет снова загружена в память. Для уменьшения вероятности отсутствия страницы в памяти используются различные приемы, основным из которых является кэширо-вание. Проследим более подробно схему преобразования адресов для случая двухуровне-вой структуризации виртуального адресного пространства (рис. 5.17):
В результате получается искомый физический ад-рес. Страничное распределение памяти может быть реализовано в упро-щенном вариан-те, без выгрузки страниц на диск. В этом случае все вирту-альные страницы всех процессов постоянно находятся в оперативной памяти. Такой вариант страничной организации хотя и не предоставляет пользовате-лю преимуществ работы с вирту-альной памятью большого объема, но сохра-няет другое достоинство страничной организации - позволяет успешно бо-роться с фрагментацией физической памяти. Действительно, во-первых, про-грамму можно разбить на части и загрузить в разроз-ненные участки свобод-ной памяти, во-вторых, при загрузке виртуальных страниц никогда не обра-зуется неиспользуемых остатков, так как размеры виртуальных и физических страниц совпадают. Такой режим работы системы управления памятью ис-пользуется в некоторых специализированных ОС, когда требуется высокая реак-тивность системы и способность выполнять переменный набор прило-жений (при-мер - ОС семейства Novell NetWare 3.х и 4.х). Продолжение следует...
В следующем выпуске:
| ||
Copyright (C) 2004-2005 UzhOS-Team | ||
Ведущий рассылки DFirst (winexp[@]yandex.ru) | ||
Дизайн Vladimir Tsarkov (bvbn[@]lipetsk.ru) |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.othos.osmaker |
Отписаться
Вспомнить пароль |
В избранное | ||