- •36. Подсистема Win32. 32-х разрядный api. Подсистема Win32
- •37. Структура.
- •38. Конструктивные изменения.
- •39. Api: ms-dos и 16-ти разрядной Windows. Виртуальные dos-машины. Api: ms-dos и 16-ти разрядной Windows.
- •Виртуальные dos-машины
- •44. Диспетчер. Виртуальная память. Диспетчер.
- •Виртуальная память
- •45. Средства пользовательского режима: управление памятью, совместное использование. Средства пользовательского режима
- •Управление памятью
- •Совместное использование памяти
- •46. Совместное использование: секции, проекции и проецируемые файлы. Секции, проекции и проецируемые файлы
- •47. Объект-секция. Способы защиты памяти. Объект-секция
- •Защита памяти
- •48. Собственная память процесса. Совместное использование памяти. Собственная память процесса
- •Совместное использование памяти
- •49. Адресное пространство. Подкачка страниц. Адресное пространство
- •Подкачка страниц
- •50. Механизмы подкачки страниц. Механизмы подкачки страниц
- •51. Стратегия подкачки и рабочие наборы. Стратегия подкачки и рабочие наборы
Совместное использование памяти
Тип защиты страниц “копирование при записи” – это средство оптимизации , которое диспетчер виртуальной памяти использует для экономии памяти. Если два процесса желают читать или изменять содержимое одной и той же области памяти (но не использовать его совместно) , диспетчер виртуальной памяти назначает этой области защиту “копирование при записи”. Затем оба процесса совместно используют эту область памяти до тех пор , пока ни один из них не пишет в неё. Если поток одного из процессов модифицирует страницу этой области , диспетчер виртуальной памяти копирует физический страничный фрейм в другое место памяти , модифицирует виртуальное адресное пространство процесса , что бы оно указывало копию , и назначает новой странице защиту “чтение/запись”. Как показано на рисунке 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- машины представляют своим клиентам память иначе.
