Вирт адр прос-во. Реализация. Файлы, отобр. в память.



В 32-битных системах процессор может сгенерировать 32-битный адрес. Это означает, что каждому процессу выделяется диапазон виртуальных адресов от 0x00000000 до 0xFFFFFFFF. Эти 4 Гб адресов система делит примерно пополам, и для кода и данных пользовательского режима отводятся 2 Гб в нижней части памяти. Если быть более точным, то речь идет об виртуальных адресах, начиная с 0x00010000 и кончая 07FFEFFFF. Таким образом, система управления памятью позволяет пользовательской программе с помощью Win32 API записать нужный байт в любую виртуальную ячейку из этого диапазона адресов. Адреса верхней части виртуальной памяти используется для кода и данных режима ядра и других системных нужд.                                                                                                 По умолчанию адресное пространство каждого процесса изолировано. Данные двух разных процессов, записанные по одному и тому же виртуальному адресу, оказываются в разных страницах физической памяти при помощи корректной работы системы трансляции адреса. В ряде случаев изоляция может быть частично снята (файлы, отображаемые в память; разделяемая память). Разумеется, в подобных случаях нужно отдельно обеспечить контроль доступа к области памяти, для чего создается отдельный объект (объект-секция или объект-раздел, section object), включающий атрибуты защиты.                   Техника файлов, проецируемых в память (см. рис. 9.4), активно используется новейшими ОС. Она позволяет пользователю решать такие задачи, как работа с данными файла при помощи операций копирования и перемещения байтов в памяти или организация совместного доступа к областям памяти.

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

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

Для отображения файла в память используется функция CreateFileMapping, а для получения указателя на отображенную область - функция MapViewOfFile. Успешное выполнение обеих операций позволяет прикладной программе работать с этой областью как с любым другим фрагментом выделенной памяти, в частности, изменять ее содержимое. В связи с этим возникает проблема соответствия (когерентности) содержимого региона и файла на диске.

Менеджер памяти. Таблица страниц. Страничная ошибка.

Базовой операцией менеджера памяти является трансляция виртуального адреса в физический с помощью таблицы страниц и ассоциативной (TLB) памяти. В ряде случаев, для реализации разделяемой памяти, интеграции с системой ввода/вывода и др., применяется прототипная таблица страниц, которая является промежуточным звеном между обычной таблицей страниц и физической памятью. Для описания страниц физической памяти поддерживается база данных PFN (Page Frame Number). Локализацию страниц памяти, контроль процессом памяти другого процесса и технику копирования при записи можно отнести к интересным особенностям системы управления памятью ОС Windows

При сброшенном V бите возникает страничная ошибка (page fault). Наиболее распространенный вариант page fault'а - нахождение страницы в файле выгрузки (отсутствующая страница). В этом случае первые 20 битов PTE будут указывать на смещение в страничном файле. Обработка таких ситуаций состоит в приостановке процесса, сгенерировавшего page fault, подкачке страницы с диска в свободный кадр физической памяти, модификации PTE и возобновлении неудавшейся операции. Таким образом, недействительный PTE превращается в действительный. Эта ситуация возникает часто, более того, нередки случаи обращения к одной и той же отсутствующей странице двух потоков одного процесса (конфликт ошибок страниц), которые успешно обрабатываются системой (см. [6]). Помимо нужной страницы диспетчер на всякий случай загружает в память несколько, обычно от 1 до 8, соседних страниц, чтобы минимизировать количество обращений к диску (стратегия подкачки по требованию с кластериза цией).

Для трансляции виртуального адреса, сгенерированного процессором, нужно определить номер виртуальной страницы, содержащей данный адрес, а также принадлежность страницы к зарезервированному региону. Некоторым виртуальным страницам таблица страниц ставит в соответствие физические страницы (страничные кадры или фреймы) в оперативной памяти. Любопытно, что код режима ядра, например, драйверов, может выполнить обратную трансляцию - получение виртуального адреса по физическому. Тем страницам, которым места в физической памяти не нашлось, соответствуют теневые страницы в системном файле выгрузки. Таблица страниц здесь представлена схематично, ее более точная версия будет продемонстрирована ниже.

Каждая строка в таблице страниц называется PTE (page table entry). В 32-разрядных архитектурах IA-32 PTE занимает 4 байта.


Дата добавления: 2018-05-31; просмотров: 278; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!