Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8.10.11.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.95 Mб
Скачать

Совместное использование памяти

Тип защиты страниц “копирование при записи” – это средство оптимизации , которое диспетчер виртуальной памяти использует для экономии памяти. Если два процесса желают читать или изменять содержимое одной и той же области памяти (но не использовать его совместно) , диспетчер виртуальной памяти назначает этой области защиту “копирование при записи”. Затем оба процесса совместно используют эту область памяти до тех пор , пока ни один из них не пишет в неё. Если поток одного из процессов модифицирует страницу этой области , диспетчер виртуальной памяти копирует физический страничный фрейм в другое место памяти , модифицирует виртуальное адресное пространство процесса , что бы оно указывало копию , и назначает новой странице защиту “чтение/запись”. Как показано на рисунке 6-7 , скопированная страница невидима потокам других процессов. Таким образом, поток может изменять свою копию страницы, не затра­гивая других использующих ее процессов.

Защита "копирование при записи" важна для страниц, содержащих код; она гарантирует, что изменение исполняемого образа затронет только тот про­цесс, чей поток выполнил это изменение. Например, первоначально страницы кода помечаются как "только исполнение". Однако, если в процессе отладки программист задает точку останова, то отладчик должен поместить в код соот­ветствующую машинную команду. Для этого отладчик сначала изменяет защиту страницы на "копирование при записи". Диспетчер виртуальной памяти немед­ленно создает отдельную копию страницы для процесса, чей поток устанавлива­ет точку останова. Остальные процессы продолжают использовать неизменен­ный вариант кода. Подсистема Win32 не позволяет приложениям непосред­ственно использовать защиту вида "копирование при записи", однако косвен­ным образом использует ее, чтобы предоставить процессу отдельный экземпляр данных в DLL и для других целей.

49. Адресное пространство. Подкачка страниц. Адресное пространство

Каждому процессу в NT предоставляется большое виртуальное адресное про­странство размером 4 Гбайт, из которых 2 Гбайт зарезервированы для использо­вания системой. Нижняя половина виртуального адресного пространства дос­тупна потокам пользовательского режима и режима ядра и уникальна для каж­дого процесса. Верхняя половина доступна только потокам режима ядра и для всех процессов одинакова. Виртуальное адресное пространство процесса изоб­ражено на рис. 6-8.

рис. 6-8

Код и данные ядра расположены в нижней части системной памяти (от 80000000h до BFFFFFFFh на MIPS R4000) и никогда не откачиваются на диск. На MIPS R4000 эта область памяти непосредственно отображается аппаратурой. Это означает , что процессор обнуляет три самых старших бита любого виртуального адреса (в результате эти данные помещаются в нижние адреса физической памяти). Так как адреса из этого диапазона отображаются аппаратно и всегда действительны , обращение к данному региону памяти выполняется очень быстро. В нём размещаются части ядра , которым требуется максимальная производительность , например , код , направляющий потоки на исполнение.

Верхняя часть системной памяти управляется диспетчером виртуальной памяти и используется для хранения другого системного кода и данных. Часть этой области выделена для кода и данных , которые можно откачивать на диск , а другая часть – для кода и данных , которые постоянно являются резидентными (например , для кода , выполняющего подкачку страниц).

При создании процесса диспетчер виртуальной памяти может инициализировать его адресное пространство либо копией адресного пространства другого процесса , либо проекцией файла. В частности , подсистема PISIX использует первый метод , когда один из её клиентов создаёт дочерний процесс. Адресное пространство дочернего процесса есть копия родительского процесса . Второй метод используется при создании нового процесса для выполнения исполняемого файла. Например , когда пользователь запускает утилиту chkdsk , диспетчер процессов NT создаёт процесс , а диспетчер виртуальной памяти инициализирует адресное пространство этого процесса исполняемым образом chkdsk , который затем выполняется.

Подсистемы среды могут представлять своим клиентам память в виде , не совпадающем со схемой адресного пространства базового процесса NT. Виртуальное адресное пространство приложений Win32 идентично адресному пространству базового процесса , однако подсистема OS/2 и виртуальные DOS- машины представляют своим клиентам память иначе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]