Операционные системы Управление виртуальной памятью в Win 32

Содержание

Слайд 2

Менеджер виртуальной памяти

управление виртуальными адресными пространствами процессов;
разделение памяти между процессами;
защита

Менеджер виртуальной памяти управление виртуальными адресными пространствами процессов; разделение памяти между процессами;
виртуальной памяти одного процесса от других процессов.

Слайд 3

Менеджер виртуальной памяти

Менеджер виртуальной памяти (VMM) является составной частью ядра ОС. Приложения

Менеджер виртуальной памяти Менеджер виртуальной памяти (VMM) является составной частью ядра ОС.
не могут получить к нему прямой доступ.
Для управления памятью прикладным программам предоставляются различные интерфейсы (API).
Virtual Memory API – набор функций, позволяющих приложению работать с виртуальным адресным пространством: назначать физические страницы блоку адресов и освобождать их, устанавливать атрибуты защиты.
Memory Mapped File API – набор функций, позволяющий работать с файлами, отображаемыми в память. Новый механизм, предоставляемый Win32 API для работы с файлами и взаимодействия процессов.
Heap Memory API – набор функций, позволяющих работать с динамически распределяемыми областями памяти (кучами).
Local, Global Memory API – набор функций работы с памятью, совместимых с 16-битной Windows. Следует избегать их использования.
CRT Memory API – функции стандартной библиотеки языка “С” периода исполнения (runtime).

Слайд 4

Архитектура API управления памятью

Архитектура API управления памятью

Слайд 5

Адресное пространство процесса

Чтобы включить в Windows Server 2003 и Windows 2000

Адресное пространство процесса Чтобы включить в Windows Server 2003 и Windows 2000
расширенное пользовательское пространство, необходимо указать в файле Boot.ini ключ /3GB.
Программа для адресации 3 Гб должна быть собрана с ключом /LARGEADDRESSAWARE:YES.

Слайд 6

Средства защиты памяти

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

Средства защиты памяти Объектно-ориентированная защита памяти. Каждый раз, когда процесс открывает указатель
на блок адресов, монитор ссылок безопасности проверяет, разрешен ли доступ процесса к данному объекту.
Отдельное адресное пространство для каждого процесса. Аппаратура запрещает процессу доступ к физическим адресам другого процесса.
Два режима работы: режим ядра, в котором процессам разрешен доступ к системным данным, и пользовательский режим, в котором это запрещен.
Страничный механизм защиты. Каждая виртуальная страница имеет набор признаков, который определяет разрешенные типы доступа в пользовательском режиме и в режиме ядра.
Принудительная очистка страниц, освобождаемых процессами.

Слайд 7

Расширение физических адресов (PAE)

Расширение физических адресов (Physical Address Extension – РАЕ) –

Расширение физических адресов (PAE) Расширение физических адресов (Physical Address Extension – РАЕ)
это функция процессоров с архитектурой IA32, которая делает возможной адресацию физической памяти объемом свыше 4 ГБ.
PAE – режим работы встроенного блока управления памятью x86-совместимых процессоров, в котором используются 64-битные элементы таблиц страниц (из которых для адресации используются только 36 бит), с помощью которых процессор может адресовать 64 ГБ физической памяти, хотя каждый процесс всё равно может адресовать максимум до 4 ГБ ВП.

Слайд 8

Поддержка PAE в различных операционных системах

Microsoft Windows 2000 Advanced Server
Microsoft Windows 2000

Поддержка PAE в различных операционных системах Microsoft Windows 2000 Advanced Server Microsoft
Datacenter Server
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Datacenter Edition
Linux начиная с версии 2.3.23
FreeBSD поддерживает PAE: в линейке 4.x версий — начиная с 4.9, в линейке 5.x версий  – начиная с 5.1, все 6.x и более поздние.
Solaris поддерживает PAE, начиная с версии 7
В Mac OS X режим PAE включён по умолчанию при использовании 32-разрядного ядра.

Слайд 9

Реализация PAE в Windows

Чтобы включить PAE, необходимо указать в файле Boot.ini ключ

Реализация PAE в Windows Чтобы включить PAE, необходимо указать в файле Boot.ini ключ /PAE.
/PAE.

Слайд 10

Операционные системы

Управление виртуальной памятью в Win32.
Страничное преобразование.

Операционные системы Управление виртуальной памятью в Win32. Страничное преобразование.

Слайд 11

Страничное преобразование

Виртуальная память в Windows имеет страничную организацию, принятую во многих современных

Страничное преобразование Виртуальная память в Windows имеет страничную организацию, принятую во многих
ОС. Процессоры Intel начиная с Pentium Pro позволяют ОС применять одно-, двух- и трехступенчатые схемы. И даже разрешается одновременное использование страниц различного размера.
Каждому процессу назначается свой каталог страниц. Именно поэтому адресное пространство каждого процесса изолировано, что очень хорошо с точки зрения защиты процессов друг от друга.
В прошлом Windows поддерживала только двухступенчатую схему преобразования с фиксированным размером страниц.
Последние версии Windows поддерживают страницы двух размеров, а также реализацию трехступенчатой схемы страничного преобразования для реализации механизма PAE.

Слайд 12

Страничное преобразование

32-разрядный виртуальный адрес в ОС Windows разбивается на три части:
Старшие 10

Страничное преобразование 32-разрядный виртуальный адрес в ОС Windows разбивается на три части:
разрядов адреса определяют номер одного из 1024 элементов в каталоге страниц, адрес которого находится в регистре процессора CR3. Этот элемент содержит физический адрес таблицы страниц.
Следующие 10 разрядов линейного адреса определяют номер элемента таблицы. Элемент, в свою очередь, содержит физический адрес страницы виртуальной памяти.
Размер страницы – 4 Кбайт, и младших 12 разрядов линейного адреса как раз хватает (212 = 4096), чтобы определить точный физический номер адресуемой ячейки памяти внутри этой страницы.

Слайд 13

Трансляция виртуального адреса в x86 системах

Трансляция виртуального адреса в x86 системах

Слайд 14

Проецирование страниц по механизму PAE

Проецирование страниц по механизму PAE

Слайд 15

Ассоциативный буфер трансляции

Чтобы ускорить этот процесс современные процессоры используют ассоциативный буфер трансляции

Ассоциативный буфер трансляции Чтобы ускорить этот процесс современные процессоры используют ассоциативный буфер
(translation look-aside buffer, TLB), для кэширования наиболее частых связей между физической и виртуальной памятью.
TLB кэш имеет большое значение, так как страниц памяти в стандартных 32-разрядных Linux, Unix или Windows серверах очень много.
Кэш TLB представляет собой вектор, ячейки которого можно считывать и сразу сравнивать с целевым значением. В случае TLB вектор содержит сопоставления физических и виртуальных адресов для недавно использовавшихся страниц, а также атрибуты защиты каждой страницы
Если запрашиваемый адрес не находится в кэше, то процессор, перед ответом на запрос, переходит к таблице страниц для поиска соответствия виртуального адреса физическому.
TLB должен также предусматривать способы организации записей в кэш и принятия решения о том, какая из старых записей должна быть удалена при внесении в кэш новой записи.

Слайд 16

Реализация TLB

Реализация TLB

Слайд 17

Пример использования TLB

Процессор аппаратно способен одновременно опрашивать все записи TLB для определения

Пример использования TLB Процессор аппаратно способен одновременно опрашивать все записи TLB для
того, какая из них соответствует заданному номеру страницы.
Такой подход известен как ассоциативное отображение (associative mapping).

Слайд 18

Поддержка больших страниц

Начиная с версии Windows Server 2008 включена поддержка сверхбольших страниц

Поддержка больших страниц Начиная с версии Windows Server 2008 включена поддержка сверхбольших
(обычно 2Мбайт). Реальный размер зависит от аппаратной платформы.
Недостатком маленьких страниц является неэффективное использование TLB (Translation Lookside Buffer), в случае использования больших страниц TLB используется более эффективно, что приводит к значительному увеличению производительности.

Слайд 19

Эффективность использования больших страниц

Для страниц размером 4 КБ, механизм TLB содержит 32

Эффективность использования больших страниц Для страниц размером 4 КБ, механизм TLB содержит
записи в L1 кэше и 512 записей в L2 кэше. Так как каждая запись ссылается на 4 КБ, вы можете посчитать что вместе они покрывают чуть более 2 МБ виртуальной памяти.
Для больших страниц TLB содержит восемь записей. Так как каждая страница отображает 2 МБ, TLB может показывать 16 МБ виртуальной памяти.

Слайд 20

Элемент таблицы страниц

Элемент таблицы страниц

Слайд 21

Элемент таблицы страниц

Защита – Win32 API поддерживает ряд значений, в том числе:

Элемент таблицы страниц Защита – Win32 API поддерживает ряд значений, в том
PAGE_NOACCESS, PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE.
Базовый физический адрес страницы в памяти.
Pagefile – индекс используемого файла подкачки (один из 16 возможных в системе файлов).
State – состояние страницы в системе:
T (Transition) – отмечает страницу как переходную;
D (Dirty) – страница, в которую была произведена запись;
P (Present) – страница присутствует в ОП или находится в файле подкачки.

Слайд 22

Отдельные состояния страниц

Valid – страница используется процессом. Она реально существует в ОП

Отдельные состояния страниц Valid – страница используется процессом. Она реально существует в
и помечена в PTE как присутствующая в рабочем множестве процесса (P=1, D=0,1).
Modified – содержимое страницы было изменено (D=1). В PTE страница помечена как отсутствующая (P=0) и переходная (T=1).
Standby – содержимое страницы не изменялось (D=0). В PTE страница помечена как отсутствующая (P=0) и переходная (T=1).
Free – страница, на которую не ссылается ни один PTE. Страница свободна, но подлежит обнулению, прежде чем будет использована.
Zeroed – свободная и обнуленная страница, пригодная к непосредственному использованию любым процессом.
Bad – страница, которая вызывает аппаратные ошибки и не может быть использована ни одним процессом.

Слайд 23

Отдельные состояния страниц

Отдельные состояния страниц

Слайд 24

Операционные системы

Управление виртуальной памятью в Win32.
Свопинг.

Операционные системы Управление виртуальной памятью в Win32. Свопинг.

Слайд 25

Cвопинг

Для того, чтобы обеспечить все линейное адресное пространство процесса физическими ячейками памяти,

Cвопинг Для того, чтобы обеспечить все линейное адресное пространство процесса физическими ячейками
Windows применяет свопинг.
Организацией свопинга занимается VMM. При генерации системы на диске образуется специальный файл свопинга, куда записываются те страницы, которым не находится места в физической памяти. Процессы могут захватывать память в своем ВАП и, затем, использовать ее. Страница может иметь различные состояния.
VMM использует локальный алгоритм LRU (Least Recently Used) – замещение дольше всех неиспользовавшихся страниц.

Слайд 26

Стратегия управления виртуальной памятью

Стратегия  выборки (fetch policy)
Стратегия размещения (placement policy)
Стратегия 

Стратегия управления виртуальной памятью Стратегия выборки (fetch policy) Стратегия размещения (placement policy) Стратегия замещения (replacement policy)
замещения (replacement policy)

Слайд 27

Стратегия выборки

Стратегия  выборки (fetch policy):
Выборка определяет, в какой момент необходимо переписать страницу

Стратегия выборки Стратегия выборки (fetch policy): Выборка определяет, в какой момент необходимо
с диска в ОП.
В Windows используется классическая схема выборки с упреждением: система переписывает в память не только выбранную страницу, но и несколько следующих по принципу пространственной локальности, гласящему: наиболее вероятным является обращение к тем ячейкам памяти, которые находятся в непосредственной близости от ячейки, к которой производится обращение в настоящий момент. Поэтому вероятность того, что будут востребованы последовательные страницы, достаточна высока. Их упреждающая подкачка позволяет снизить накладные расходы, связанные с обработкой прерываний.
Стратегия размещения (placement policy)
Стратегия  замещения (replacement policy)

Слайд 28

Стратегия размещения

Стратегия  выборки (fetch policy)
Стратегия размещения (placement policy):
Размещение определяет, в какое

Стратегия размещения Стратегия выборки (fetch policy) Стратегия размещения (placement policy): Размещение определяет,
место оперативной памяти необходимо поместить подгружаемую страницу.
Для систем со страничной организацией данная стратегия практически не имеет никакого значения, и поэтому Windows выбирает первую попавшуюся свободную страницу.
Стратегия  замещения (replacement policy)

Слайд 29

Стратегия замещения

Стратегия  выборки (fetch policy)
Стратегия размещения (placement policy)
Стратегия  замещения (replacement

Стратегия замещения Стратегия выборки (fetch policy) Стратегия размещения (placement policy) Стратегия замещения
policy):
Замещение начинает действовать с того момента, когда в оперативной памяти компьютера не остается свободного места для размещения подгружаемой страницы. В этом случае необходимо решить, какую страницу вытеснить из физической памяти в файл подкачки (свопинг).

Слайд 30

Реализация свопинга

Реализация свопинга

Слайд 31

Реализация алгоритма замещения LRU

VMM периодически просматривает список страниц с атрибутом Valid и

Реализация алгоритма замещения LRU VMM периодически просматривает список страниц с атрибутом Valid
пытается похитить их у процесса (1). Он помечает их как отсутствующие (P=0), но на самом деле оставляет их на месте, только переводит в разряд Modified или Standby в зависимости от значения бита D из PTE.
Если содержимое страницы была изменено в ОП (D=1), то VMM выполнит запись страницы на диск (4).
Если похищенная страница принадлежит рабочему множеству, то к ней в ближайшее время произойдет обращение. Это, конечно, вызовет исключение - ведь страница-то помечена как отсутствующая. Но VMM очень быстро сделает эту страницу вновь доступной процессу, поскольку она реально находится в памяти (2).
Далее если к странице не будет обращений (страница вне рабочего множества), то она со временем перейдет в состояние Free (5) и станет доступна для замещения страниц в рамках данного процесса (6).
Затем системный поток обнуляет страницу – Zeroed (7), и она станет доступна другим процессам системы (8).