Адресация памяти в IBM OS/2 Warp
Операционная система IBM OS/2 Warp способна работать только на процессоре i386 и процессорах более старших моделей. В отличие от i80286, эти процессоры могут работать в 32-разрядном режиме с использованием так называемой страничной адресации памяти.
Схема страничной адресации на первый взгляд выглядит достаточно сложно.
Программы оперируют с логическим адресом, состоящим из 16-разрядного селектора и 32-разрядного смещения. С помощью глобальной или локальной таблицы дескрипторов логический адрес преобразуется в 32-разрядный линейный адрес (рис. 1.11).
Рис. 1.11. Преобразование логического адреса в линейный адрес
На следующем этапе преобразования 32-разрядный линейный адрес разбивается на компоненты 10-разрядного индекса в таблице страниц, 10-разрядного номера страницы и 12-разрядного смещения.
Операционная система создает в памяти каталог таблиц страниц, а также одну или несколько таблиц страниц. Каждый элемент таблицы страниц описывает один блок памяти размером 4 Кбайта.
Индекс в таблице страниц используется для выбора одной из таблиц страниц. Номер страницы, соответственно, является индексом в таблице страниц.
В таблице страниц среди прочей информации хранится физический базовый адрес страницы. Для получения физического адреса этот базовый адрес складывается с 12-разрядным смещением (рис. 1.12).
Рис. 1.12. Преобразование линейного адреса в физический адрес
Эта сложная схема адресации прозрачна для программиста, так как заполнение таблиц дескрипторов, каталога таблиц страниц и самих таблиц страниц выполняется операционной системой. Программист работает только с логическим адресом, состоящим из 16-разрядного селектора и 32-разрядного смещения.
В то же время операционная система имеет большую свободу при отображении физических страниц памяти в пространство логических адресов. Незаметно для программ она может перемещать страницы в памяти или изменять физические адреса с сохранением логических адресов. Возможно отображение несмежных страниц памяти в непрерывное логическое адресное пространство, что уменьшает проблему дефрагментации оперативной памяти.
Но самое главное - в процессоре i386 появилась возможность организации так называемой виртуальной памяти (процессор i80286 также мог работать с виртуальной памятью, но соответствующий механизм был не очень совершенен).
При использовании виртуальной памяти часть страниц можно разместить на диске в специальном файле и загружать в оперативную память при необходимости, замещая старые или больше не нужные страницы.
Для программиста виртуальная память создает иллюзию присутствия в системе оперативной памяти очень большого объема (в IBM OS/2 Warp - немного меньше 512 Мбайт). Операционная система берет на себя всю работу по выгрузке и загрузке страниц в файл виртуальной памяти, так что этот механизм полностью скрыт от программиста и удобен в использовании.