Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Защищенный режим процессоров Intel 80286/80386/80486

© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 234 стр.

[Назад] [Содеожание] [Дальше]

1.4. Виртуальная память в процессоре i80286

Процессор i80286 может непосредственно адресовать до 16 мегабайт физической памяти, однако реально компьютеры редко имеют оперативную память такого размера. Обычный размер оперативной памяти для IBM AT составляет 2-4 мегабайта (здесь имеется в виду расширенная память - Extended Memory).

Механизм виртуальной памяти, реализованный в процессоре i80286, позволяет организовать память большого размера (например, 16 мегабайт) с использованием относительно небольшой физической оперативной памяти и дисковой памяти.

Основная идея виртуальной памяти заключается в том, чтобы хранить (и обновлять) содержимое большой виртуальной памяти на диске, подкачивая отдельные участки виртуальной памяти в реальную оперативную память по необходимости.

Можно, например, хранить все используемые программой сегменты на диске, а в физическую память записывать только те сегменты, которые необходимы для выполнения программы в настоящий момент. Процесс "подкачки" сегментов с диска в память и их выгрузки после изменения на диск называется свопингом.

Операционная система должна вести учёт сегментов и знать, какие сегменты находятся в памяти, а какие - на диске. Процессор i80286 может оказать ей в этом существенную помощь. Последние два поля дескриптора, которые мы ещё не рассматривали - бит присутствия сегмента в памяти P и бит обращения к сегменту памяти A - предназначены для аппаратной реализации учёта сегментов.

Бит P должен быть установлен в 1 для тех сегментов, которые находятся в физической памяти. Сегменты, временно отсутствующие в памяти и находящиеся на диске, помечаются в дескрипторе битом P, сброшенным в 0.

Установкой и сбросом бита P занимается операционная система. А вот проверка этого бита - работа для процессора. Когда программа обращается к отсутствующему в физической памяти сегменту (загрузкой селектора в сегментный регистр), выполнение программы прерывается и управление передаётся операционной системе. Та, в свою очередь, подкачивает нужный сегмент в оперативную память и устанавливает для него бит P в 1, после чего работа программы возобновляется.

Время от времени операционная система должна находить сегменты, к которым было обращение, и в случае их изменения сбрасывать на диск. Кроме того, если для закачки нового сегмента в физической памяти недостаточно свободного места, можно выгрузить самые старые сегменты из физической памяти на диск и на их место загрузить новый сегмент.

Процессор может оказать помощь операционной системе в определении тех сегментов, к которым было обращение. Для этих сегментов бит обращения A устанавливается процессором в 1. Сбросить бит обращения можно только из программы, поэтому такая работа возлагается на саму операционную систему.

Реально описанная выше схема реализации виртуальной памяти со свопингом сегментов используется в операционной системе OS/2 версий от 1.0 до 1.3 включительно.

Однако у этой схемы есть один серьёзный недостаток. Так как все сегменты имеют разные размеры, и все они подкачиваются по очереди (и по несколько штук) в одну область физической памяти, возможно возникновение фрагментации физической памяти. Например, был удалён сегмент размером в 10 килобайт, и образовался свободный участок физической памяти такого же размера. Новый сегмент, который требуется закачать в память, имеет размер 15 килобайт, и он не поместится на место старого.

Операционная система может выполнить перемещение сегментов в физической памяти, изменив соответствующим образом 24-битовые базовые адреса сегментов в таблицах дескрипторов. После перемещения сегментов можно объединить все свободные участки памяти в один и использовать этот участок для загрузки нового сегмента. Так как программы защищённого режима не знают физических адресов памяти (они работают только с селекторами), перемещение сегментов никак не отразится на их работе.

Но на перемещение сегментов требуется время, и кроме того, часто нужен не весь сегмент, а только его небольшой участок. Процессор i80286 не предлагает никакого решения проблемы фрагментации физической памяти при свопинге сегментов, и не позволяет загружать сегмент по частям.

Все эти возможности имеются только в процессорах i80386 и i80486. Только эти процессоры позволяют эффективно реализовать механизм виртуальной памяти.

[Назад] [Содеожание] [Дальше]