В редких случаях программист задает при разработке программы реальные адреса в ОП, в большинстве же случаев между программистом и средой выполнения его программы стоит тот или иной аппарат преобразования адресов. В общем случае то адресное пространство, в котором пишется программа, называется виртуальною памятью в отличие от реальной или физической памяти - в которой происходит выполнение процесса.
Преобразование виртуальных адресов в реальные (привязка адресов) может происходить при загрузке программы или при выполнении программы. В настоящее время только в ОС MS DOS привязка адресов выполняется при загрузке, во всех же современных системах – при выполнении. При таком подходе привязка выполняется при каждом обращении к памяти, то есть очень часто. Поэтому естественным решением является выполнение этой функции на аппаратном уровне. Аппаратура переводит виртуальные адреса в реальные, используя некоторые таблицы привязки. Подготовка таблиц привязки адресов - операция, выполняемая для процесса одноразово, модификация их производится также одноразово, поэтому задача формирования и модификации таблиц привязки возлагается на ОС. Разработка программ, работающих в виртуальном адресном пространстве, имеет целый ряд преимуществ, которые можно сгруппировать по трем основным направлениям.
1. Удобство для программиста. Программист имеет в своем распоряжении виртуальную память, представляющую собой адресное пространство либо совершенно плоское - с адресами, линейно возрастающими от 0 до максимального значения, либо сегментированное в соответствии с потребностями задачи. При этом он не заботится о том, как будет размещен его процесс в реальной памяти.
2. Реорганизация памяти. Системные средства управления памятью могут выбрать такое отображение виртуальной памяти в реальную, которое обеспечит максимально эффективное использование реальной памяти. В случае, если обеспечивается аппаратная привязка адресов, реорганизация реальной памяти может производиться и в ходе выполнения процесса прозрачно для последнего.
3. Защита. Процесс никак не может обратиться за пределы своего виртуального пространства, никакой процесс не будет иметь доступа к адресному пространству другого процесса.
4. При наличии аппаратной поддержки системы виртуальной памяти позволяют работать с виртуальными адресными пространствами, размер которых превышает доступный размер ОП. Это достигается за счет хранения части программ и данных на внешней (дисковой) памяти и управления миграцией данных между оперативной и внешней памятью (свопинг).
Модели виртуальной памяти.
Традиционные моделей виртуальной памяти, использующие развитые средства аппаратной трансляции адресов сводятся к: сегментной; страничной; комбинированной сегментно-страничной.
В сегментной модели распределение реальной памяти производится блоками переменной длины (сегментами), в страничной – блоками постоянной длины (страницами). Первая модель удобнее для программиста, так как позволяет структурировать адресное пространство программы, вторая – для ОС, т.к. управлять страницами одинакового размера проще. Современные аппаратные средства (Intel-Pentium) поддерживают сегментно-страничную модель, в которой адресное пространство процесса состоит из набора сегментов, а каждый сегмент – из набора страниц. Свопинг ведется на уровне страниц. Для обеспечения возможности миграции страниц из ОП во внешнюю память и обратно, аппаратура поддерживает дескриптор для каждой виртуальной страницы, в котором имеются признаки: присутствия виртуальной страницы в реальной памяти, обращения к странице, обращения к странице для записи. В случае нехватки ОП для вытеснения выбирается страница, к которой дольше всего не было обращений.
В некоторых современных системах на базе 32-разрядных процессоров (Windows 9х, Windows NT, OS/2) обеспечивается плоская модель, в которой виртуальное адресное пространство не сегментируется. Однако, методы такового обеспечения различны. Windows 9х просто отводит каждому процессу единственный сегмент размером 4Гбайт и, таким образом, сводит плоскую модель к страничной. Сама ОС располагается в верхней части этого адресного пространства и, таким образом, не гарантируется ее надежная защита. OS/2 выделяет процессу несколько сегментов, но обеспечивает прозрачный для процесса переход между сегментами. ОС также располагается в верхней части адресного пространства, но в отдельных сегментах, таким образом, ее защита надежнее. Windows NT также создает один сегмент, но верхняя часть адресного пространства содержит не саму ОС, а только переходники – обращения к защищенным процессам ОС, порча этой части адресного пространства не приведет к порче ОС.
Дальнейшее расширение разрядной сетки процессоров может привести к появлению совершенно новых моделей памяти. Уже сейчас одна из таких моделей – одноуровневая – реализована в вычислительной системе AS/400. 64-разрядное адресное слово позволяет процессу иметь плоскую виртуальную память размером до 64 Гэксабайт (!). В AS/400 эта возможность позволяет реализовать два принципиально важных свойства модели памяти:
· в виртуальное адресное пространство процесса включается не только ОП, но вся память - и оперативная и внешняя - имеющаяся в системе;
· все процессы работают в одном и том же виртуальном адресном пространстве, разделяя его, защита памяти обеспечивается дополнительными программно-аппаратными средствами;