Управление виртуальной и физической памятью и рабочими наборами в Windows

Для организации виртуальной памяти используются следующие функции Win32:

· VirtualAllocрезервирует или согласует для резервирования виртуальную память.

· VirtualFreeосвобождает виртуальную память.

Эти функции дают возможность приложению запомнить виртуальный адрес, по которому была выделена виртуальная память.

Приложение может использовать память, отобразив файл в свое адресное пространство. Два процесса могут совместно использовать память, отображая один и тот же файл в свою виртуальную память.

Куча (heap) в окружении Win32 – это область (region) зарезервированного адресного пространства. Для процесса Win32 создается куча, размер которой по умолчанию равен 1 MB .Доступ к куче синхронизирован, с целью защиты структур данных, связанных с распределением памяти в куче, от разрушения при совместном доступе из нескольких потоков.

Поскольку функции, которые основаны на глобальных или статических данных, неправильно работают в многопоточном окружении, предоставлен механизм выделения глобальной, но связанной с конкретным потоком памяти ( thread-local storage - TLS ). Данный механизм предоставляет как статические, так и динамические методы выделения памяти, связанной с потоком.

Для управление физической памятью поддерживается традиционная концепция рабочего набора (множества) – working set.Рабочий набор — все физические страницы, которыми "владеет" процесс. Посуществу, это все страницы, к которым процесс может обратиться, не вызвав сбоя страницы. Предел рабочего набора— максимальное число страниц, которыми процесс можетвладеть. При достижении предела добавление каждой новой страницы должно сопровождаться исключением одной страницы из набора ( замена в рабочем наборе ).

Верхний предел размера набора для каждого процесса по умолчанию - максимальное значение для всей системы - вычисляется и сохраняется в MmMaximumWorkingSetSize. Это примерно объем основной памяти минус 512 страниц (2 мегабайта в архитектуре x86) и минус минимальный размер системного рабочего набора (1.5 мегабайта в x86). Это интересные данные, поскольку они дают представление, сколько памяти реально теряется на нужды ОС. Реальный верхний предел составляет 2 гигабайта минус 64 мегабайта для 32-битовой ОС Windows.

Процесс всегда запускается с пустым рабочим набором. Затем он вызывает отказы страницпри обращении к странице, не входящей в его рабочий набор. Многие отказы страниц могут быть разрешены с использованием памяти.

Когда размер рабочего набора достигает максимума (либо выполняется подстройка рабочего набора), выполняется выброс страниц, чтобы высвободить место для новых. В Windows используется политика локальной замены страниц (для сравнения, в большинстве систем типа UNIX реализована глобальная замена). Это означает, что один процесс не может занять всю физическую память, кроме случая, когда другие процессы не используют ее. Алгоритм замены замещает наиболее давние по использованию страницы (ведется учет возраста страниц).

В Windows подобная схема реализована только для однопроцессорных систем, в Windows XP и Windows Server 2003 — для любых, в том числе – для многопроцессорных систем. В системах Windows XP и Windows Server 2003 для управления памятью реализован новый флаг VirtualAlloc— MEM_WRITE_WATCH.

В Windows различаются следующие типы отказов страниц основной памяти:

· Страницы могут быть возвращены путем механизма отказа в процесс из списков резервных и измененных страниц;

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

Некоторые отказы страниц диска неизбежны, например, при запуске нового процесса (и соответствующей загрузке EXE- или DLL-файлов). Кроме того, нормальная файловая операция ввода-вывода выполняется посредством подкачки. При этом кэшированные файлы добавляются сбоем в системный рабочий набор.

Системный рабочий набор. Подобно тому, как все процессы имеют рабочие наборы, подкачиваемые код и данные системного пространства Windows размещаются в системном рабочем наборе. Он состоит из 4 компонентов:

· подкачиваемый пул;

· поддерживающие подкачку код и данные в исполнительном сегменте ядра;

· поддерживающие подкачку код и данные в драйверах режима ядра, Win32K.Sys, графических драйверах и т. д.;

· глобальный кэш данных файловой системы.

Чтобы подсчитать физический (резидентный) размер этих компонентов с помощью системной утилиты PerfMon, следует выяснить значения следующих показателей:

· Память | число подкачанных в пул резидентных байтов

· Память | число резидентных байтов системного кода

· Память | число резидентных байтов системных драйверов

· Память | число резидентных байтов системного кэша.

Показатель счетчика байтов в памяти | кэше представляет собой сумму показателей этих четырех "резидентных" (физических) счетчиков.

Управление физической памятью.Система хранит не назначенные физические страницы в одном из нескольких списков:

· Список свободных страниц

· Список измененных страниц

· Список резервных страниц

· Список нулевых страниц

· Список плохих страниц — страницы, не прошедшие тест памяти при загрузке системы.

Списки реализованы как записи в базе данных PFN. Они обслуживаются как списки FIFO, или очереди.

Динамика подкачки.Новые страницы распределяются по рабочим наборам из начала списка свободных или нулевых страниц. Страницы, исключенные из рабочего набора в ходе операции замены, помещаются в конец одного из следующих списков:

· Список измененных страниц (если они были изменены в рабочем наборе)

· Список резервных страниц (если изменения не вносились).

Решение принимается на основе значении бита D (dirty = изменена)в записи таблицы страницы. Пока физическая страница находится в одном из этих списков, между ней и процессом по-прежнему поддерживается связь.

По мере того как процессы вызывают отказы страниц, страницы изымаются из списка свободных или резервных страниц и включаются в состав рабочего набора процесса. Общая страница может быть одновременно резидентной в рабочих наборах нескольких процессов.

Ключевые термины

NTFS (NT File System)– основная файловая система Windows, основанная на концепциях тома и логического номера кластера.

Master File Table (MFT)– системный файл в файловой системе NTFS, содержащий записи с информацией о каждом файле.

Mirror set– в файловой системе NTFS две секции одного размера на разных частях диска с идентичным содержимым, используемые для большей надежности хранения данных.

NetBEUI (NetBIOS Extended User Interface)– сетевой протокол по умолчанию для одноранговых сетей Windows 95 и Windows for Workgroups.

Stripe set– набор от двух до 32 дисков в файловой системе NТFS, логически объединенных в единый том, при записи данных в который данные записываются по очереди на каждый диск порциями по 64 Кб.

Windows Internet Name Service (WINS)– собственный механизм разрешения имен (преобразования доменных имен компьютеров в IP-адреса), используемый в системе Windows.

Winsock- API для реализации сокетов для Windows; интерфейс уровня сеанса, обеспечивающий стандартизованный интерфейс сокетов.

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

Домен (domain)– группа компьютеров, работающих под управлением ОС типа Windows NT Server, которые используют одну и ту же политику безопасности и одну и ту же пользовательскую базу данных.

Кластер –единица выделения дисковой памяти в системе NTFS.

Рабочий набор (working set)– множество всех физических страниц, которыми владеет процесс.

Том (volume)– хранилище файлов в NTFS; может занимать часть логического диска, целый диск или распределяться по нескольким дискам.

Краткие итоги

Основной системой файлов в Windows является система NTFS. Она основана на следующих концепциях: том – хранилище файлов, которое может занимать часть логического диска, один или несколько логических дисков; stripe set – множество порций информации по 64 KB из одного файла, хранящихся на разных дисках для оптимизации параллельного доступа; Master File Table – таблицы с информацией о каждом файле в томе. Единицей выделения памяти в файле в NTFS является кластер. Каждый файл адресуется по 64-битовой ссылке (file reference). NTFS организована как транзакционнаяфайловая система, с возможностью отмены и повторного выполнения транзакций. Безопасность в NTFS реализована на основе дескрипторов безопасности, которые имеет каждый файл. Утилита FtDisk обеспечивает логическое объединение нескольких SCSI-дисков в один логический том. NTFS использует сжатие с целью экономии памяти.

Сетевые средства Windows обеспечивают поддержку большого числа протоколов – Server Message Block, NetBIOS, NetBEUI, PPTP, NWLink (для взаимодействия с сетями Novell), DLC (для доступа к оборудованиюIBM и HP), AppleTalk (для взаимодействия с компьютерами Macontosh). Для передачи сообщений через сеть используются mail-слоты и именованные конвейеры. WinSock API обеспечивает стандартизированный сокетный интерфейс для Windows. Поддерживается механизм удаленного вызова процедуры (RPC). Доступ к удаленным файлам осуществляется с помощью драйвера MUP. Используется концепция сетевого домена. Для разрешения сетевых имен и их преобразования в IP-адреса используется DNS, а также собственный сервис WINS.

Программный интерфейс Windows (API) обеспечивает обработку системных объектов с помощью объектных ссылок. Процессы запускаются функцией CreateProcess, потоки – функцией CreateThread. Механизм планирования в Windows различает процессы реального времени (soft real-time) и интерактивные. Когда диаголовый процесс становится активным (его элемент GUI выбран на экране), его квант времени увеличивается в три раза.

Для синхронизации в ядре используются мьютексы или критические секции.

В Windows поддержан новый вид параллельного выполнения – волокна (fibers), аналогичный потокам, но, в отличие от потоков, явно управляемый пользователем.

Для взаимодействия потоков используется передача сообщений, причем каждый поток имеет собственную входную очередь, что более надежно.

Поддерживается механизм виртуальной памяти. Процессы совместно используют область виртуальной памяти, отображая один и тот же файл в свои адресные пространства.

Для каждого процесса (потока) создается куча и выделяется локальная память потока (thread-local storage).

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

Вопросы для самопроверки:

1. Что такое NTFS?

2. Что такое том и как он может размещаться на логических дисках?

3. Что такое кластер и каков его размер?

4. Что такое logical cluster numbers и как они используются в системе?

5. Что такое Master File Table?

6. Какие возможности обеспечивает транзакционный механизм NTFS?

7. Какие объекты используются для управления безопасностью файлов?

8. Какие возможности обеспечивает утилита FtDisk?

9. Что такое stripe set?

10. Что такое stripe set with parity?

11. Что такое mirror set?

12. Какие протоколы поддерживает сетевой механизм Windows?

13. Как организовано разрешение сетевых имен в Windows?

14. Что такое WinSock?

15. Что такое RPC?

16. Что такое именованный конвейер?

17. Что такое mail-слот?

18. Что такое сетевой домен?

19. Что такое redirector?

20. Каким образом и с помощью какого драйвера выполняется доступ к удаленному файлу?

21. Какие системные функции используются для управления системными объектами?

22. Какие функции используются для создания процесса и потока?

23. Что такое волокно и каким образом организуется параллельное выполнение с использованием волокон?

24. Какие классы процессов выделяются системой планирования Windows?

25. Каким образом изменяется квант времени диалогового процесса, если его элемент GUI выбран на экране?

26. Какие методы синхронизации используются для объектов ядра?

27. Какие функции используются для управления виртуальной памятью?

28. Каким образом два процесса могут исполь зовать общую область виртуальной памяти?

29. Какие области физической памяти выделяются системой для каждого потока?

30. Что такое рабочий набор процесса?

31. Что такое системный рабочий набор?

32. Каким образом изменяется рабочий набор при достижении верхнего предела его размера?

33. Какие списки страниц используются системой?

Упражнения

1. Разработайте программу визуализации системных структур, используемых для представления файлов в системе NTFS.

2. Используя утилиту PerfMon, изучите и опишите механизм управления рабочими наборами страниц в Windows.

3. Организуйте сетевой домен для своей домашней или офисной локальной сети под управлением Windows.