Операционные системы учебное пособие (1085734), страница 10
Текст из файла (страница 10)
Объекты задания
В Windows 2000 появился новый объект ядра - объект задание. Объект задание позволяет управлять группой процессов как единым целым. Объект задание именуемый, защищаемый, разделяемый объект, который управляет атрибутами связанных с ним процессов. Операции выполняемые с объектом задание влияют на все связанные с ним процессы.
По умолчанию, порожденные процессы создаваемые процессом ассоциированным с заданием, также будут связаны с этим заданием.
Если для задания установить флаг BREAKAWAY_OK, порожденный процесс не будет связан с заданием, когда создается процесс с флагом CREATE_ BREAKAWAY_FROM_JOB, но для задания не установлен флаг BREAKAWAY_OK, процесс не создастся.
Если для задания установлен флаг SILENT_BREAKAWAY_OK, порожденный процесс всегда выполняется вне задания. Данный флаг необходим для процессов ничего не знающих о понятии объект задание.
Работа с Объектом задание
Задание можно ограничить в рабочем пространстве, приоритете, времени выполнения и т.д.
Управление памятью. ОС Windows Server 2003
В этой главе вы узнаете, как реализована виртуальная память в Microsoft Windows и как осуществляется управление той частью виртуальной памяти, которая находится в физической. Мы также опишем внутреннюю структуру диспетчера памяти и его компоненты, в том числе ключевые структуры данных и алгоритмы. Прежде чем изучать механизмы управления памятью, давайте рассмотрим базовые сервисы, предоставляемые диспетчером памяти, и основные концепции, такие как зарезервированная (reserved memory), переданная (committed memory) и разделяемая память (shared memory).
Виртуальная память
Проецирование виртуальной памяти на физическую
В Windows реализована система виртуальной памяти, основанная на плоском (линейном) адресном пространстве. Она создает каждому процессу иллюзию того, что у него есть собственное большое и закрытое адресное пространство. Виртуальная память дает логическое представление, не обязательно соответствующее структуре физической памяти. В период выполнения диспетчер памяти, используя аппаратную поддержку, транслирует, или проецирует (maps), виртуальные адреса на физические, по которым реально хранятся данные. Управляя проецированием и защитой страниц памяти, операционная система гарантирует, что ни один процесс не помешает другому и не сможет повредить данные самой операционной системы.
Поскольку у большинства компьютеров объем физической памяти намного меньше общего объема виртуальной памяти, задействованной выполняемыми процессами, диспетчер памяти перемещает, или подкачивает (pages), часть содержимого памяти на диск. Подкачка данных на диск освобождает физическую память для других процессов или самой операционной системы. Когда поток обращается к странице виртуальной памяти, сброшенной на диск, диспетчер виртуальной памяти загружает эту информацию с диска обратно в память. Для использования преимуществ подкачки в приложениях никакого дополнительного кода не требуется, так как диспетчер памяти опирается на аппаратную поддержку этого механизма.
Размер виртуального адресного пространства зависит от конкретной аппаратной платформы. На 32-разрядных х8б-системах теоретический максимум для общего виртуального адресного пространства составляет 4 Гб.
Структуры адресных пространств для 32-разрядных Windows
Структуры адресных пространств для 32-разрядных Windows
Windows 2000 Advanced Server, Windows 2000 Datacenter Server, Windows XP (SP2 и выше) и Windows Server 2003 поддерживают загрузочные параметры /3GB и /USERVA, которые указываются в файле Boot.ini, что позволяет процессам, выполняющим программы со специальным флагом в заголовке исполняемого образа, использовать до 3 Гб закрытого адресного пространства и оставляет операционной системе только 1 Гб. Этот вариант дает возможность приложению вроде сервера базы данных хранить в адресном пространстве своего процесса большие порции базы данных и тем самым уменьшить частоту проецирования отдельных представлений этой базы.
Введение в диспетчер памяти
Задачи диспетчера управления памятью:
-
Трансляция виртуального адресного пространства процесса на физическую память
-
Подкачка части содержимого памяти на диск
Предоставление базового набора сервисов:
-
Поддержка файлов проецируемых в память
-
Поддержка приложений использующих большие разреженные адресные пространства
-
Использование больше памяти, чем можно спроецировать на виртуальное адресное пространство процесса (AWE)
По умолчанию виртуальный размер процесса в 32-разрядной Windows — 2 Гб. Если образ помечен как поддерживающий большое адресное пространство и система загружается со специальным ключом, 32-разрядный процесс может занимать до 3 Гб в 32-разрядной Window's и до 4 Гб в 64-разрядной. Размер виртуального адресного пространства процесса в 64-разрядной Windows составляет 7152 Гб на платформе IA64 и 8192 Гб на платформе хб4. (Это значение может увеличиться в следующих выпусках 64-разрядной Windows.)
Диспетчер управления памятью решает две главные задачи:
-
Трансляция, или проецирование (mapping), виртуального адресного пространства процесса на физическую память. Это позволяет ссылаться на корректные адреса физической памяти, когда потоки, выполняемые в контексте процесса, читают и записывают в его виртуальном адресном пространстве. Физически резидентное подмножество виртуального адресного пространства процесса называется рабочим набором (working set).
-
Подкачка части содержимого памяти на диск, когда потоки или системный код пытаются задействовать больший объем физической памяти, чем тот, который имеется в наличии, и загрузка страниц обратно в физическую память по мере необходимости.
Компоненты диспетчера памяти
Содержится в файле Ntoskrnl.exe
-
Набор сервисов исполнительной системы для выделения, освобождения и управления виртуальной памятью
-
Обработчики ловушек трансляции недействительных адресов и нарушений доступа для аппаратно обнаруживаемых исключений
-
Несколько ключевых компонентов, работающих в контексте шести различных системных потоков режима ядра
Диспетчер рабочих наборов (working set manager) с приоритетом 16. Диспетчер настройки баланса (системный поток, создаваемый ядром) вызывает его раз в секунду или при уменьшении объема свободной памяти ниже определенного порогового значения. Он реализует общие правила управления памятью, например усечение рабочего набора, старение и запись модифицированных страниц.
Поток загрузки и выгрузки стеков (process/stack swapper) с приоритетом 23- Выгружает (outswapping) и загружает (inswapping) стеки процесса и потока. При необходимости операций со страничным файлом этот поток пробуждается диспетчером рабочих наборов и кодом ядра, отвечающим за планирование.
Подсистема записи модифицированных страниц (modified page writer) с приоритетом 17. Записывает измененные страницы, зарегистрированные в списке модифицированных страниц, обратно в соответствующие страничные файлы. Этот поток пробуждается, когда возникает необходимость в уменьшении размера списка модифицированных страниц.
Подсистема записи спроецированных страниц (mapped page «writer) с приоритетом 17. Записывает измененные страницы спроецированных файлов на диск. Пробуждается, когда нужно уменьшить размер списка модифицированных страниц или когда страницы модифицированных файлов находятся в этом списке более 5 минут. Этот второй поток записи модифицированных страниц требуется потому, что он может генерировать ошибки страниц, в результате которых выдаются запросы на свободные страницы. Если бы в системе был лишь один поток записи модифицированных страниц, она могла бы перейти в бесконечное ожидание свободных страниц.
Поток сегмента разыменования (dereference segment thread) с приоритетом 18. Отвечает за уменьшение размеров системного кэша и изменение размеров страничного файла.
Поток обнуления страниц (zero page thread) с приоритетом 0. Заполняет нулями страницы, зарегистрированные в списке свободных страниц.
Компоненты диспетчера памяти
Компоненты работающие в контексте шести различных системных потоков режима ядра:
-
Диспетчер рабочих наборов с приоритетом 16
-
Поток загрузки/выгрузки стеков с приоритетом 23
-
Подсистема записи модифицированных страниц с приоритетом 17
-
Подсистема записи спроецированных страниц с приоритетом 17
-
Поток сегмента разыменования с приоритетом 18
-
Поток обнуления страниц с приоритетом 0
Внутренняя синхронизация
Синхронизирует доступ к общесистемным ресурсам:
-
База данных номеров фреймов страниц
-
Объектам «раздел» и системный рабочий набор
-
Станичным файлам
Полностью реентерабелен и поддерживает одновременное выполнение в многопроцессорных системах управляя тем, как потоки захватывают ресурсы. С этой целью диспетчер памяти контролирует доступ к собственным структурам данным, используя внутренние механизмы синхронизации, например спин-блокировку и ресурсы исполнительной системы.
Сервисы диспетчера памяти
Большие и малые страницы
Архитектура | Размер малой страницы | Размер большой страницы |
Х86 | 4 КБ | 4 МБ(2 МБ в РАЕ-режиме) |
х64 | 4 КБ | 2 МБ |
IA86 | 8 КБ | 16 МБ |
Диспетчер памяти предоставляет набор системных сервисов для выделения и освобождения виртуальной памяти, разделения памяти между процессами, проецирования файлов в память, сброса виртуальных страниц на диск, получения информации о диапазоне виртуальных страниц, изменения атрибутов защиты виртуальных страниц и блокировки в памяти.
Диспетчер памяти поддерживает такие сервисы, как выделение и освобождение физической памяти, блокировка страниц в физической памяти для передачи данных другим компонентам исполнительной системы режима ядра и драйверам устройств через DMA.
Большие и малые страницы
Виртуальное адресное пространство делится на единицы, называемые страницами. Это вызвано тем, что аппаратный блок управления памятью транслирует виртуальные адреса в физические по страницам. Поэтому страница — наименьшая единица защиты на аппаратном уровне. Страницы бывают двух размеров: малого и большого. Реальный размер зависит от аппаратной платформы.
Преимущество больших страниц — скорость трансляции адресов для ссылок на другие данные в большой странице.
Один из побочных эффектов применения больших страниц заключается в следующем. Так как аппаратная защита памяти оперирует страницами как наименьшей единицей, то, если на большой странице содержатся код только для чтения и данные для записи/чтения, она должна быть помечена как доступная для чтения и записи, т. е. код станет открытым для записи.
Блокировка памяти
Два способа блокировки страниц памяти:
-
Приложения могут блокировать страницы в рабочем наборе своего процесса через функцию VirtualLock
-
Драйверы устройств могут вызывать функции режима ядра MmProbeAndLockPages, MmLockPagableSectionByHandle...
В целом, принятие решений о том, какие страницы следует оставить в физической памяти, лучше сохранить за диспетчером памяти. Однако в особых обстоятельствах можно подкорректировать работу диспетчера памяти. Существует два способа блокировки страниц в памяти.
Разделяемая память и проецируемые файлы
Разделяемая память и проецируемые файлы
Как и большинство современных операционных систем, Windows поддерживает механизм разделения памяти. Разделяемой (shared memory) называется память, видимая более чем одному процессу или присутствующая в виртуальном адресном пространстве более чем одного процесса.
Каждый процесс поддерживает закрытые области памяти для хранения собственных данных, но программные инструкции и страницы немодифицируемых данных в принципе можно использовать совместно с другими процессами.
Для реализации разделяемой памяти используются примитивы диспетчера памяти, объекты «раздел», которые в Windows API называются объектами «проекция файла» (file mapping objects). Этот фундаментальный примитив диспетчера памяти применяется для проецирования виртуальных адресов в основной памяти, страничном файле или любых других файлах, к которым приложение хочет обращаться так, будто они находятся в памяти. Раздел может быть открыт как одним процессом, так и несколькими; иначе говоря, объекты «раздел» вовсе не обязательно представляют разделяемую память.
Объект «раздел» может быть связан с открытым файлом на диске (который в этом случае называется проецируемым) или с переданной памятью (для ее разделения).
Защита памяти
Четыре основных способа защиты памяти:
-
Режима ядра
-
Индивидуальное закрытое адресное пространство
-
Все процессоры, поддерживаемые Windows, предоставляют ту или иную форму аппаратной защиты памяти
-
Списки контроля доступа
Windows обеспечивает защиту памяти, предотвращая случайную или преднамеренную порчу пользовательскими процессами данных в адресном пространстве системы или других процессов. В Windows предусмотрено четыре основных способа защиты памяти.
Во-первых, доступ ко всем общесистемным структурам данных и пулам памяти, используемым системными компонентами режима ядра, возможен лишь из режима ядра — у потоков пользовательского режима нет доступа к соответствующим страницам.