Оперативная память является важнейшим ресурсом вычислительной систе-мы, требующим тщательного управления со стороны мультипрограммной операционной системы. Особая роль памяти объясняется тем, что процес-сор может выполнять инструкции программы только в том случае, если они нахо-дятся в памяти.
Память распределяется как между модулями прикладных программ, так и ме-жду модулями самой операционной системы.
Функциями ОС по управлению памятью в мультипрограммной системе яв-ляются:
отслеживание наличия свободной и занятой памяти;
выделение памяти процессам и освобождение памяти при завершении процессов;
вытеснение кодов и данных процессов из оперативной памяти на диск (полное или частичное), когда размеры основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место;
настройка адресов программы на конкретную область физической памя-ти;
защита памяти процессов от взаимного вмешательства.
На разных этапах жизненного цикла программы для представления пере-мен-ных и кодов требуются три типа адресов: символьные (имена, исполь-зуемые программистом), виртуальные (условные числа, вырабатываемые компилято-ром) и физические (адреса фактического размещения в опера-тивной памяти).
Совокупность виртуальных адресов процесса называется виртуальным ад-рес-ным пространством. Диапазон возможных адресов виртуального про-странст-ва у всех процессов является одним и тем же.
Виртуальное адресное пространство может быть плоским (линейным) или структурированным.
Необходимо различать максимально возможное виртуальное адресное про-странство процесса, которое определяется только разрядностью виртуаль-ного адреса и архитектурой компьютера, и назначенное (выделенное) про-цессу виртуальное адресное пространство, состоящее из набора виртуаль-ных адре-сов, действительно нужных процессу для работы.
Виртуальное адресное пространство процесса делится на две непрерывные части: системную и пользовательскую. Системная часть является общей для всех процессов, в ней размещаются коды и данные операционной сис-темы.
Наиболее эффективным способом управления памятью является виртуаль-ная память, вытеснившая в современных ОС методы распределения памя-ти фиксированными, динамическими или перемещаемыми разделами.
Виртуальная память использует дисковую память для временного хране-ния не помещающихся в оперативную память данных и кодов выполняе-мых про-цессов ОС.
В настоящее время все множество реализации виртуальной памяти может быть представлено тремя классами:
страничная виртуальная память организует перемещение данных между памятью и диском страницами - частями виртуального адресного про-стран-ства фиксированного и сравнительно небольшого размера (досто-инства - высокая скорость обмена, низкий уровень фрагментации; не-достатки - сложно организовать защиту данных, разделенных на части механически);
сегментная виртуальная память предусматривает перемещение данных сег-ментами - частями виртуального адресного пространства произ-вольного размера, полученными с учетом смыслового значения данных (достоинст-ва - "осмысленность" сегментов упрощает их защиту; недос-татки - мед-ленное преобразование адреса, высокий уровень фрагмента-ции);
сегментно-страничная виртуальная память сочетает достоинства обоих пре-дыдущих подходов.
Сегменты виртуальной памяти могут быть разделяемыми между несколь-ки-ми процессами. Разделяемые сегменты используются либо для экономии фи-зической памяти, когда несколько пользователей работают с одним кодовым сегментом приложения, либо в качестве средства обмена данными между процессами.
Для ускорения доступа к данным в вычислительных системах широко ис-поль-зуется принцип кэширования. В компьютерах существует иерархия запоми-нающих устройств, в которой нижний уровень занимают емкая, но относи-тельно медленная дисковая память, затем располагается оператив-ная память, а верхний уровень составляет сверхоперативная память про-цессорного кэша. Каждый уровень памяти (кроме нижнего) выполняет роль кэша по отноше-нию к нижележащему.
Каждая запись в кэш-памяти об элементе данных включает в себя:
значение элемента данных;
адрес, который этот элемент данных имеет в основной памяти;
дополнительную информацию, которая используется для реализации ал-горитма замещения данных в кэше и обычно включает признак модифи-ка-ции и признак действительности данных.
При кэшировании данных из оперативной памяти широко используются две основные схемы отображения: случайное отображение и детерминиро-ванное отображение.
При случайном отображении элемент оперативной памяти может быть разме-щен в произвольном месте кэш-памяти. Для того чтобы в дальней-шем можно было найти нужные данные в кэше, они помещаются туда вме-сте со своим ад-ресом оперативной памяти.
Детерминированный (прямой) способ отображения предполагает, что лю-бой элемент основной памяти всегда отображается в одно и то же место кэш-па-мяти. В этом случае кэш-память разделена на строки, каждая из ко-торых предназначена для хранения одной записи об одном элементе дан-ных и имеет свой номер.
Во многих современных процессорах кэш-память строится на основе соче-та-ния этих двух подходов, что позволяет найти компромисс между сравни-тель-но низкой стоимостью кэша с прямым отображением и интеллекту-альностью алгоритмов замещения в кэше со случайным отображением.
Задачи и упражнения
1. Чем ограничивается максимальный размер физической памяти, которую мож-но установить в компьютере определенной модели?
2. Чем ограничивается максимальный размер виртуального адресного про-стран-ства, доступного приложению?
3. Может ли прикладной процесс использовать системную часть виртуаль-ной памяти?
4. Какое из этих двух утверждений верно?
) все виртуальные адреса заменяются на физические во время загрузки программы в оперативную память;
) виртуальные адреса заменяются на физические во время выполнения программы в момент обращения по данному виртуальному адресу.
5. В каких случаях транслятор создает объектный код программы не в вир-ту-альных, а в физических адресах?
6. Что такое виртуальная память? Какой из следующих методов распределе-ния памяти может рассматриваться как частный случай виртуальной па-мяти?
) распределение фиксированными разделами;
) распределение динамическими разделами;
) страничное распределение;
) сегментное распределение;
) сегментно-страничное распределение.
7. Распределение памяти перемещаемыми разделами основано на примене-нии процедуры сжатия. Имеет ли смысл использовать данную процедуру при страничном распределении? А при сегментном?
8. Поясните разные значения термина "свопинг".
9. Как величина файла подкачки влияет на производительность системы?
10. Почему размер страницы выбирается равным степени двойки? Можно ли принять такое же ограничение для сегмента?
11. На что влияет размер страницы? Каковы преимущества и недостатки боль-шого размера страницы?
12. Пусть в некоторой программе, работающей в системе со страничной ор-гани-зацией памяти, произошло обращение по виртуальному адресу 0123568. Преоб-разуйте этот адрес в физический, учитывая, что размер страницы равен 2 байт и что таблица страниц данного процесса содержит следующий фрагмент:
Номер виртуальной страницы Номер физической страницы
0000 0101
0001 0010
0010 0011
0011 0000
13. Где хранятся таблицы страниц и таблицы сегментов?
14. Чем определяется количество таблиц сегментов, имеющихся в операци-онной системе в произвольный момент времени?
15. Какие характеристики содержит таблица сегментов и таблица страниц при сегментно-страничной организации памяти?
16. Пусть ОС реализует выгрузку страниц на основе критерия "выгружается стра-ница, которая не использовалась дольше остальных". Предложите ал-горитм вычисления данного критерия, использующий аппаратно-устанавливаемые би-ты доступа.
17. В кэше хранятся данные, которые наиболее активно используются в по-след-нее время. Каким образом система определяет, какие данные должны быть за-гружены в кэш?
18. Пусть программа циклически обрабатывает данные, то есть в некотором диа-пазоне адресов идет последовательное обращение к данным, а затем следует возврат в начало и т.д. В системе имеется кэш, объем которого меньше объема обрабатываемых программой данных. Какой алгоритм вытеснения данных из кэша в данном случае будет эффективнее?
) выгружаются данные, которые не использовались дольше остальных;
) выгружаются данные, выбранные случайным образом.
19. Почему загрузка и выгрузка данных из кэш-памяти производится блока-ми?
20. Как обеспечивается согласование данных в кэше с помощью методов об-рат-ной и сквозной записи?
21. Известно, что с помощью программных конвейеров данными могут об-мени-ваться только процессы-родственники. В то же время все процессы в UNIX являются родственниками, так как все они - потомки специально-го процес-са, инициализирующего систему. Почему же механизм про-граммных конвей-еров не работает для двух произвольных процессов?