Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сказки_3.rtf
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

Механизм реализации виртуальной памяти [04,08,...,68]

Виртуальная память это действующая модель памяти вычислительной платформы, ёмкость которой превышает имеющуюся физическую память и обеспечивает адресацию ВАП в соответствии с разрядностью регистров ВС. При этом часть адресного пространства ядра и других задач отображается с помощью таблиц отображения на физическую память, а часть хранится в виде образа на внешнем накопителе. В принципе, виртуальная память может быть организована, например, в однозадачной системе, чисто программным способом, без использования специальных аппаратных средств. Но для большей эффективности реализации в аппаратуру современных ВС они специально включаются. При страничной организации области ВАП размером со страницу физической памяти сопоставляется страничный кадр, имеющий дескриптор. Дескрипторы выделенных участков ВАП располагаются в физической памяти постоянно, будучи организованными для каждой задачи в виде иерархии типа дерева. Корень дерева – управляющий регистр (в архитектуре IA32 это CR3), старшие 20 разрядов которого PDBR содержат физический адрес начала каталога таблиц, строка каталога указывает на таблицу страниц, строка таблицы содержит дескриптор страничного кадра. Путь от корня к дескриптору задаётся полями линейного адреса Table, Page, играющими роль ассоциативного ключа, поле Byte (или Index) указывает смещение относительно физического адреса начала страницы, хранящегося в дескрипторе. Кроме него, дескриптор содержит биты достоверности (данных о нём), присутствия (страницы в памяти) и мусора (несоответствия содержимого страницы её копии на диске).

При обращении к памяти в защищённом режиме после трансляции виртуального адреса в линейный блок страничной трансляции работает следующим образом. Если в TLB нет дескриптора с (достоверным соответствующим) ассоциативным ключом (кэш-промах) производится поиск в дереве (table walk). При найденном соответствии дескриптор помещается в свободную строку TLB с битом достоверности 1. Если страница отсутствует, при обращении к ней происходит прерывание «ошибка страницы», линейный адрес ошибки страницы запоминается в управляющем регистре CR2, задача переводится в состояние ожидания и ядром производится операция PageIn замещения (подкачки) её образом из области сохранения на внешнем накопителе одной из свободных страниц памяти. При обнаружении нужного ассоциативного ключа (кэш-попадании) результатом трансляции становится сумма физического адреса начала страницы и поля Byte.

Операционная система при планировании ресурсов может выделять процессам квоты использования физической и виртуальной памяти. Если квота физической памяти исчерпана, а необходимо произвести подкачку, необходимо исключить из физической памяти одну из страниц процесса в соответствии с некоторой стратегией. Если бит мусора данной страницы сброшен, подкачка производится на её место, с соответствующими изменениями полей дескриптора. В ином случае, ядром производится операция PageOut выгрузки (откачки) её образа в область сохранения на внешнем накопителе, а затем PageIn. Ядро и процессы WINNT имеют пулы выгружаемых и невыгружаемых страниц. При превышении квоты использования виртуальной памяти ОС могут принимать разные решения – от прекращения обработки задачи до расширения области сохранения, в последнем случае это не ОС реального времени, так как эта операция должна выполняться после перевода всех процессов в состояние ожидания.

Область сохранения в UNIX называется swap file (свопингом когда-то называлась подкачка сегментами), в WINNT - pagefile.sys (подкачка страниц по английски paging), но это не совсем файлы, так как обычные файловые операции для них запрещены, в Win2K pagefile.sys был скрытым системным файлом, но фигурировал в каталоге файловой системы, а сейчас – попробуйте найти. Win32_PageFile не имеет экземпляров, так как заменён на два, из которых Win32_PageFileUsage имеет экземпляр при работе системы свопинга, а Win32_PageFileSetting, как написано в описании – в состоянии сохранения.