Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SPO_VM_konspekt

.pdf
Скачиваний:
15
Добавлен:
01.03.2016
Размер:
7.34 Mб
Скачать

Лекция №7 (11.04.2012): Организация памяти в ОС Windows

В компьютерах фон-Неймановской архитектуры, код и данные располагаются в одной памяти. ОС должна управлять распределением памяти между процессами и компонентами операционной системы. Часть операционной системы, управляющая памятью, называется менеджером памяти.

Физическая память компьютера является аппаратным запоминающим устройством. Выделяют два уровня физической памяти: 1) оперативная память (она же основная); 2) внешняя память (она же вторичная, она же, чаще всего, дисковая). Одной из задач менеджера памяти является сокращение обращений внешней памяти. Оперативная память представляет собой упорядоченный одномерный массив однобайтовых ячеек, каждая из которых имеет свой уникальный адрес. Совокупность адресов основной памяти называется физическим адресным пространством.

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

7.1. Связывание адресов

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

7.2. Описание виртуальной сегментно-страничной памяти ОС Windows

Размер пользовательского процесса ограничен объемом логического адресного пространства, что чаще всего превышает объем оперативной памяти. Поэтому часть процесса может прозрачно располагаться во внешней памяти. Для сегментно-страничной виртуальной памяти Windows характерно представление адресного пространства процесса в виде набора сегментов переменного размера с однородной информацией. Для удобства отображения на физическую память, сегменты делятся на страницы – блоки данных фиксированного размера. При этом основная память делится на страничные кадры точно такого же размера. Функция связывания страниц и страничных кадров возлагается на таблицу страниц. Таблица страниц ставит в соответствие виртуальной странице номер страничного кадра в виртуальной памяти. Для описания совокупности свободных и занятых страничных кадров Windows использует базу данных PFN (Page Frame Number). При обращении к странице, не отображенной на основную память, происходит страничная ошибка.

7.3.Виртуальное адресное пространство процессов

В32-битных системах процессор может сгенерировать 32-битный адрес, что достаточно для адресации 4 Гб оперативной памяти. Для кода и данных пользователя

21

отведено нижние 2 Гб виртуального адресного пространства. WinAPI позволяет записать любую информацию в любую виртуальную ячейку. Верхняя часть отводится для режима ядра. По умолчанию, виртуальное адресное пространство процессов изолировано, т.е.

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

7.4. Регионы в виртуальном адресном пространстве

Изначально, всё виртуальное адресное пространство процесса свободно и начинает заполняться по мере выполнения программы. Чтобы воспользоваться какойлибо частью этого пространства, в нём нужно создать регион, зарегистрировав диапазон адресного пространства. Первые регионы для кода, стека, стандартной кучи и возможно некоторых других, операционная система создает сама в момент загрузки процесса. Для создания региона явным образом используется функция VirtualAlloc. Функции

CreateFileMapping и CreateHeap также создают регионы.

Создание региона делится на два этапа: резервирование (reserve) и выделение памяти (commit). В итоге, каждая виртуальная страница может находиться в одном из трех состояний: свободная (free), зарезервированная (reserved) и выделенная (committed). Начало региона выравнивается с учетом гранулярности памяти, а размер региона должен быть кратен размеру страниц. По умолчанию гранулярность – 64 k, размер страницы – 4 k. Чтобы использовать зарезервированный регион, ему необходимо реально передать физическую память. Однако, это можно делать поэтапно, по мере необходимости. Таким образом, обеспечивается экономия физической памяти.

7.4.1. Регион кучи

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

7.4.2. Регион стека. Сторожевые страницы

Для поддержки функционирования стека резервируется соответствующий регион. Стек – это динамическая структура, увеличивающая свой размер в сторону уменьшения адресов. Заранее размер стека предугадать невозможно. Поэтому в Windows передача памяти стеку реализована с помощью механизма сторожевых страниц (guard page).

При создании потока, зарезервированному региону в 1 Мбайт передаются две страницы памяти, нижняя из которых является сторожевой. Как только верхняя страница заполняется и происходит обращение к нижней сторожевой странице, происходит исключительная ситуация (0x80000001), после чего с этой страницы снимается флаг сторожевой и с ней можно работать как с обычной страницей. Региону выделяется еще одна страница, которая становится сторожевой.

7.4.3. Регион файла, отображаемого в память

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

22

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

Для отображения файлов используется функция CreateFileMapping. Для получения указателя на отображаемую область используется функция MapViewOfFile. В результате, с этой областью можно будет работать как с любым другим фрагментом памяти, в том числе и изменять её содержимое. В связи с этим возникает проблема соответствия между данными выделенной области и данными исходного файла. За соответствие данных должна отвечать операционная система, однако программист может принудительно сбросить данные в файл при помощи функции FlushViewOfFile.

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

23

Лекция №8 (14.04.2012): Функционирование менеджера памяти

Как было показано ранее, общая схема связывания виртуальных и физических адресов выглядит следующим образом:

Рисунок 8.1 - Схема связывания

Для трансляции виртуального адреса, сгенерированного процессом, нужно определить номер виртуальной страницы, содержащей данный адрес, и принадлежность страницы зарезервированному региону. Виртуальным страницам таблица страниц ставит в соответствие страничные кадры из основной памяти, либо теневые страницы из системного файла выгрузки (pagefile.sys). Каждая строка из таблицы страниц называется PTE (Page Table Entry).

Рисунок 8.2 - Строка PTE

0 – бит присутствия V; 1 – запись разрешена; 3 – сквозная запись без КЭШ; 4 – КЭШ запрещен; 5 – бит обращения R; 6 – бит модификации M; 7 – большая страница (4 МБ); 8 – глобальная страница для всех процессов; 9-12 – зарезервировано.

При сброшенном бите V возникает страничная ошибка (page fault). Чаще всего означающая нахождение страницы в системном файле выгрузки. В этом случае, 20 бит из PTE будут указывать на смещение в файле выгрузки. Обработка страничной ошибки состоит в приостановке процесса, подкачки страницы в свободный либо освобожденный страничный кадр, а также подкачка от одной до восьми соседних страниц, чтобы минимизировать количество обращений к диску. В действительности, схема трансляции выглядит слегка сложнее:

24

Рисунок 8.3 - Трансляция адреса с использованием ассоциативной памяти и двухуровневой таблицы страниц

Размер таблицы страниц равен объему одной страницы – 4 Кб. Для быстрого нахождения таблицы страниц один из регистров процессора (для процессоров Intel это регистр CR3) указывает на каталог таблицы страниц.

8.1. Разделяемая память

При отображении файла в память образуется регион в виртуальной памяти, а также сопутствующий ему объект «раздел». В случае возникновения страничной ошибки подкачка осуществляется не из общесистемного файла выгрузки, а из проецируемого файла. Для таких регионов формируется массив прототипных PTE (Page Table Entry), описывающий нахождение всех страниц этого фрагмента памяти. PTE самого процесса будут ссылаться на прототипные PTE и считаться недействительными. Если при этом другой процесс выполнил отображение того же файла, то PTE его таблицы будут ссылаться на те же самые прототипные PTE.

Рисунок 8.4 - Реализация разделяемого между двумя процессами региона проецируемого в память файла

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

25

8.2. Особенности функционирования менеджера памяти Windows

8.2.1. Физическая память

Максимальный размер – 4 Гб. Информация о состоянии страниц и принадлежности их процессам хранится в базе данных PFN. Использование внешней памяти осуществляется через страничные файлы или файлы выгрузки. Страничные файлы, в отличие от файлов, проецируемых в память, хранят только модифицированные страницы, выгруженные из основной памяти. Страницы, содержащие код, отображаются прямо из исполняемых модулей (.exe, .dll) и не хранятся в общесистемных файлах выгрузки. Структура pagefile.sys не документирована.

8.2.2. Рабочие наборы процесса

Часть виртуальных страниц, непосредственно отображенных в память, называется

резидентным множеством процесса.

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

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

8.2.3. Локализация страниц в памяти

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

8.2.4. База данных PFN (Page Frame Number)

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

26

Лекция №9 (21.04.2012): Система управления доступом

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

Для описания дискреционной модели используются формальные понятия: информационная система представляется в виде совокупности взаимодействующих субъектов и объектов. Объектами Windows считаются файлы, каналы, устройства, семафоры, события, разделы общей памяти, разделы реестра и т.п. Субъектами считаются процессы и потоки, запускаемые конкретными пользователями.

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

Ключевая цель защиты Windows – следить за тем, какой субъект и к каким объектам осуществляет доступ. Windows требует, чтобы субъект на этапе открытия объекта указывал, какие операции он будет выполнять в отношении этого объекта. Единообразие контроля доступа обеспечивается тем, что с каждым субъектом связан маркер доступа, а с каждым объектом – дескриптор защиты.

9.1. Пользователи и группы пользователей

Каждый пользователь и группа пользователей должны иметь учетную запись в базе данных системы безопасности. Учетные записи идентифицируются именем и хранятся в базе данных SAM (Security Account Manager), которая хранится в реестре в ветке HKEY_LOCAL_MACHINE/SAM. Каждая учетная запись содержит реквизиты пользователя (пароль, имя, адрес и т.п.), список привилегий пользователя в отношении данной системы, список групп, в которых состоит пользователь и идентификатор безопасности (SID, Security IDentifier). SID генерируется при создании учетной записи и служит основой для идентификации субъекта.

9.2. Идентификатор безопасности SID

SID пользователя и группы представляет собой структуру переменной длины с коротким заголовком и длинным случайным числом в конце. Является уникальным не только в рамках одной системы, но и уникальным в рамках всех систем. В текстовом виде идентификатор имеет определенный формат: S-<число>-<число>-…

Для администратора системы или домена SID имеет следующее значение: S-1-5- <домен>-500. Единственный SID, который одинаков для всех систем имеет вид: S-1-1-0.

9.3. Объекты. Дескриптор защиты

Все типы объектов Windows защищены одинаковым образом. С каждым объектом связан дескриптор защиты, который описывается структурой SECURITY_DESCRIPTOR. Связь объекта с дескриптором происходит в момент создания объекта. Дескриптор защиты содержит SID владельца объекта, SID групп для данного объекта и два указателя DACL (Discretionary Access Control List) и SACL (System Access Control List) на списки контроля доступа. Эти списки содержат разрешающие и запрещающие доступ списки пользователей и групп, а также список пользователей, чьи попытки доступа подлежат аудиту. Список ACL представляет собой набор записей ACE (Access Control Entry), каждая

27

из которых содержит SID и список прав для этого SID. ACE бывают двух типов: разрешающие и запрещающие. Права представлены в виде битового массива (Access Mask), который определяет набор операций, разрешенный либо запрещенный процессу, запущенному от имени данного пользователя в отношении данного объекта.

Рисунок 9.1 - Структура дескриптора защиты для файла

Список SACL имеет такую же структуру, как и DACL, только вместо запрета/разрешения доступа определяет список операций, подлежащих аудиту. Поскольку процесс создания дескриптора является довольно сложным мероприятием, в Windows предусмотрен стандартный механизм, назначающий доступ к объектам по умолчанию.

9.4. Субъекты. Процессы, потоки. Маркер доступа

Также как и объекты, субъекты должны иметь отличительные признаки (контекст пользователя) для того, чтобы система могла контролировать их действия. Контекст пользователя хранится в структуре, называемой маркер (token). При входе в систему пользователь вводит логин и пароль. Системная процедура Winlogon находит соответствующую учетную запись, извлекает из неё информацию о пользователе, формирует список привилегий и объединяет полученные данные в маркер доступа. Маркер является как бы удостоверением, которое субъект предъявляет для доступа к объекту. Все процессы пользователя наследуют этот маркер.

Рисунок 9.2 - Основные компоненты маркера доступа

Включение в маркер DACL по умолчанию облегчает Windows создание объектов со стандартными параметрами.

9.5. Проверка прав доступа

Основные этапы проверки

1) Если SID субъекта совпадает с SID объекта и запрашиваются стандартные права, то доступ предоставляется независимо от содержимого DACL.

28

2) В противном случае, система последовательно сравнивает SID маркера с SID каждого ACE из DACL. Если обнаруживается соответствие, то выполняется сравнение маски доступа с запрашиваемыми правами. Для запрещающих ACE, даже при частичном совпадении, запрос немедленно отклоняется. Для успешного доступа необходимо полное совпадение запрашиваемых прав с разрешающими ACE. Для ускорения проверки Microsoft рекомендует размещать запрещающие элементы в начале списка.

Рисунок 9.3 - Пример проверки прав доступа к защищенному объекту

29

Лекция №10 (05.05.2012): Структура системы безопасности

Рисунок 10.1 - Структура системы безопасности ОС Windows

Процедура регистрации обрабатывает запросы пользователей на вход в систему. Включает в себя начальную интерактивную процедуру для локальных пользователей и процедуры для входа удаленных пользователей. Реализован в файле Winlogon.exe с использованием библиотеки аутентификации GINA.

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

Менеджер учета пользователей (Security Account Manager) – управляет базой данных, содержащей все данные обо всех пользователях и группах. Реализован в файле samsrv.dll, выполняется внутри процесса lsass.exe.

Справочный монитор безопасности (Security Reference Monitor) – проверяет, имеет ли пользователь право на доступ к объекту и на выполнение запрошенных действий. Может создавать сообщения для службы аудита.

10.1. Политика безопасности

Требования, предъявляемые к операционной системе:

1)Каждый пользователь должен быть идентифицирован уникальным входным именем и паролем. Доступ к операционной системе предоставляется после аутентификации.

2)Система должна быть в состоянии использовать уникальные идентификаторы, чтобы следить за действиями пользователей. Владелец ресурса должен иметь возможность контролировать доступ к своему ресурсу.

3)Управление доверительными отношениями – необходимы поддержка наборов ролей и средства для управления привилегированным доступом.

4)Операционная система должна защищать объекты от повторного использования.

5)Система должна защищать себя от внешнего влияния или навязывания.

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

10.2.Ролевой доступ. Привилегии

30

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