Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
modul — копия.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.53 Mб
Скачать

5 Вариант

1. Общее понятие ядра. Объекты ядра. Управляющие объекты и объекты диспетчера

Ядро состоит из набора функций в Ntoskrnl.exe, предоставляющих фундаментальные механизмы, которые используются компонентами исполнительной системы и низкоуровневыми аппаратно-зависимыми средствами поддержки (диспетчеризации прерываний и исключений), различными в каждой архитектуре CPU.

Объекты ядра. Ядро состоит из низкоуровневых, четко определенных и хорошо предсказуемых примитивов и механизмов ОС, позволяющих компонентам исполнительной системы более высокого уровня выполнять свои функции. Ядро отделено от остальной части исполнительной системы; оно реализует системные механизмы и не участвует в принятии решений, связанных с системной политикой. Вне ядра исполнительная система представляет потоки и другие разделяемые ресурсы в виде объектов. Управление этими объектами требует определенных издержек. В ядре можно избежать таких издержек, поскольку оно реализует набор более простых объектов, называемых объектами ядра. Эти объекты позволяют ядру контролировать обработку данных CPU и поддерживают объекты исполнительной системы. Одна из групп объектов ядра, называемых управляющими (control objects), определяет семантику управления различными функциями ОС. В эту группу входят объекты АРС, DPC (deferred procedure call) и несколько объектов, используемых диспетчером ввода-вывода (например, объект прерывания). Другая группа объектов - объекты диспетчера (dispatcher objects) реализует средства синхронизации, позволяющие изменять планирование потоков. В группу таких объектов входят:

  • поток ядра (kernel thread),

  • мьютекс (mutex),

  • событие (event),

  • семафор (semaphore),

  • таймер (timer),

  • ожидаемый таймер (waitable timer)

  • и некоторые другие.

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

2. Этапы создания процесса. Этап 3: создание первичного потока, стека и контекста. Этап 4: уведомление подсистемы Windows о новом процессе.

Этап 3: создание первичного потока, его стека и контекста К началу третьего этапа объект «процесс» исполнительной системы полностью инициализирован. Однако у него еще нет ни одного потока, поэтому он не может ничего делать. Прежде чем создать поток, нужно создать стек и контекст, в котором он будет выполняться. Эта операция и является целью данного этапа. Далее создается первичный поток вызовом NtCreateThread. Параметр потока — это адрес РЕВ (данный параметр нельзя задать при вызове CreateProcess — только при вызове CreateThread). Этот параметр используется кодом инициализации, выполняемым в контексте нового потока. Однако поток по-прежнему ничего не делает — он создается в приостановленном состоянии и возобновляется лишь по завершении инициализации процесса. NtCreateThread вызывает PspCreateThread и выполняет следующие операции: 1. Увеличивается счетчик потоков в объекте «процесс». 2. Создается и инициализируется блок потока исполнительной системы (ETHREAD). 3. Генерируется идентификатор нового потока. 4. В адресном пространстве пользовательского режима формируется ТЕВ. 5. Стартовый адрес потока пользовательского режима сохраняется в блоке ETHREAD. 6. Для подготовки блока KTHREAD вызывается KelnitThread. 7. Вызываются общесистемные процедуры, зарегистрированные на уведомление о создании потока. 8. Маркер доступа потока настраивается как указатель на маркер доступа процесса. Затем вызывающая программа проверяется на предмет того, имеет ли она право создавать потоки. 9. Наконец, поток готов к выполнению.

Этап 4: уведомление подсистемы Windows о новом процессе Если заданы соответствующие правила, для нового процесса создастся маркер с ограниченными правами доступа. К этому моменту все необходимые объекты исполнительной системы созданы, и Kernel32.dll посылает подсистеме Windows сообщение, чтобы она подготовилась к выполнению нового процесса и потока. Сообщение включает следующую информацию: описатели процесса и потока; флаги создания; идентификатор родительского процесса; флаг, который указывает, относится ли данный процесс к Windows-приложениям. Получив такое сообщение, подсистема Windows выполняет следующие операции. 1. CreateProcess дублирует описатели процесса и потока. На этом этапе счетчик числа пользователей процесса увеличивается с 1 (начального значения, установленного в момент создания процесса) до 2. 2. Если класс приоритета процесса не указан, CreateProcess устанавливает его в соответствии с алгоритмом, описанным ранее. 3. Создается блок процесса Csrss. 4. Порт исключений нового процесса настраивается как общий порт функций для подсистемы Windows, которая может таким образом получать сообщения при возникновении в процессе исключений. 5. Если в данный момент процесс отлаживается, в качестве общего порта функций выбирается отладочный порт. 7. CreateProcess включает поток в список потоков процесса. 8. Увеличивается счетчик процессов в данном сеансе. 9. Уровень завершения процесса (process shutdown level) устанавливается как 0x280 10. Блок нового процесса включается в список общесистемных Windows-процессов. 11. Создается и инициализируется структура данных (W32PROCESS), индивидуальная для каждого процесса и используемая той частью подсистемы Windows, которая работает в режиме ядра. 12. Выводится курсор запуска в виде стрелки с песочными часами.

3. Планирование потоков. Вытесняющее планирование потоков на основе приоритета.

В Windows реализована подсистема вытесняющего планирования на основе уровней приоритета, в которой всегда выполняется поток с наибольшим приоритетом, готовый к выполнению. Однако выбор потока для выполнения может быть ограничен набором CPUs, на которых он может работать. Это явление называется привязкой к CPUs (processor affinity). По умолчанию поток выполняется на любом доступном CPU, но можно изменить привязку к CPUs через Windows-функции планирования, или заданием маски привязки в заголовке образа. Выполняется поток, пока не наступит очередь другого потока с тем же приоритетом (или более высоким, что возможно в многопроцессорной системе). Поскольку в Windows реализован вытесняющий планировщик, то происходит вот что. Как только другой поток с более высоким приоритетом готов к выполнению, текущий поток вытесняется, даже если его квант еще не истек. Фактически поток может быть выбран следующим для выполнения и вытеснен, не успев воспользоваться своим квантом!

4. Резервирование и передача страниц: описание, преимущества и недостатки. Возврат и освобождение страниц: описание, преимущества и недостатки.

Страницы в адресном пространстве процесса могут быть свободными (free), зарезервированными (reserved) или переданными (committed). Приложения могут резервировать (reserve) адресное пространство и передавать память (commit) зарезервированным страницам по мере необходимости. Резервировать страницы и передавать им память можно одним вызовом. Резервирование адресного пространства позволяет потоку резервировать диапазон виртуальных адресов для последующего использования. Попытка доступа к зарезервированной памяти влечет за собой нарушение доступа, так как ее страницы не спроецированы на физическую память. Для возврата страниц (decommitting) и/или освобождения виртуальной памяти предназначена функция VirtualFree или VirtualFreeEx. Различия между возвратом и освобождением страниц такие же, как между резервированием и передачей: возвращенная память все еще зарезервирована, тогда как освобожденная память действительно свободна и не является ни переданной, ни зарезервированной. Резервирование памяти — операция относительно быстрая и не требующая большого количества ресурсов, поскольку в данном случае не расходуется ни физическая память (драгоценный системный ресурс), ни квота процесса на ресурсы страничного файла (число страниц, передаваемых процессу из страничного файла). При этом нужно создать или обновить лишь сравнительно небольшие внутренние структуры данных, отражающие состояние адресного пространства процесса. Различия между возвратом и освобождением страниц такие же, как между резервированием и передачей: возвращенная память все еще зарезервирована, тогда как освобожденная память действительно свободна и не является ни переданной, ни зарезервированной.

5. Структура маркера. Список прав доступа. Список привилегий. Список управления избирательным доступом. Основной маркер. Олицетворяющий маркер.

Для идентификации контекста защиты процесса или потока SRM использует объект, называемый маркером (token), или маркером доступа (access token). В контекст защиты входит информация, описывающая привилегии, учетные записи и группы, сопоставленные с процессом или потоком. В процессе входа в систему (этот процесс рассматривается в конце главы) Winlogon создает начальный маркер, представляющий пользователя, который входит в систему, и сопоставляет его с начальным процессом (или процессами) — по умолчанию запускается Userinit.exe. Так как дочерние процессы по умолчанию наследуют копию маркера своего создателя, все процессы в сеансе данного пользователя выполняются с одним и тем же маркером. Вторым элементом маркера, определяющим, что может делать поток или процесс, которому назначен данный маркер, является список привилегий — прав, сопоставленных с маркером. Примером привилегии может служить право процесса или потока, сопоставленного с маркером, на выключение компьютера. (Подробнее привилегии будут рассмотрены позже.) Поля основной группы маркера по умолчанию и списка управления избирательным доступом (discretionary access-control list, DACL) представляют собой атрибуты защиты, применяемые Windows к объектам, которые создаются процессом или потоком с использованием маркера. Включая в маркеры информацию о защите, Windows упрощает процессам и потокам создание объектов со стандартными атрибутами защиты, так как в этом случае им не требуется запрашивать информацию о защите при создании каждого объекта. Маркер может быть основным (primary token) (идентифицирует контекст защиты процесса) и олицетворяющим (impersonation token) (применяется для временного заимствования потоком другого контекста защиты — обычно другого пользователя). Маркеры олицетворения сообщают уровень олицетворения, определяющий, какой тип олицетворения активен в маркере. Остальные поля маркера служат для информационных нужд.

6. Типы ввода-вывода. Синхронный и асинхронный ввод-вывод. Быстрый ввод-вывод. Ввод-вывод в проецируемый файл. Ввод-вывод по механизму scatter/gather. Пакеты запроса ввода-вывода

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

Асинхронный ввод-вывод позволяет приложению выдать запрос на ввод-вывод и продолжить выполнение, не дожидаясь передачи данных устройством. Этот тип ввода- вывода увеличивает эффективность работы приложения, позволяя заниматься другими задачами, пока выполняется операция ввода-вывода. Для использования асинхронного ввода-вывода вы должны указать при вызове CreateFile флаг FILE_FLAG_OVERLAPPED. Поток должен синхронизировать свое выполнение с завершением обработки запроса на ввод-вывод, отслеживая описатель синхронизирующего объекта (которым может быть событие, порт завершения ввода-вывода или сам объект «файл»), который по окончании ввода-вывода перейдет в свободное состояние.

Быстрый ввод-вывод (fast I/O) — специальный механизм, который позволяет подсистеме ввода-вывода напрямую, не генерируя IRP, обращаться к драйверу файловой системы или диспетчеру кэша. Драйвер регистрирует свои точки входа для быстрого ввода-вывода, записывая их адреса в структуру, на которую ссылается указатель.

Ввод-вывод в проецируемые файлы (mapped tile I/O) — важная функция подсистемы ввода-вывода, поддерживаемая ею совместно с диспетчером памяти. Термин «ввод-вывод в проецируемые файлы» относится к возможности интерпретировать файл на диске как часть виртуальной памяти процесса. Программа может обращаться к такому файлу как к большому массиву, не прибегая к буферизации или дисковому вводу-выводу.

Ввод-вывод по механизму «scatter/gather» Windows также поддерживает особый вид высокопроизводительного ввода-вывода с использованием механизма «scatter/gather»; он доступен через Windows-функции ReadFileScatter и WriteFileGather. Эти функции позволяют приложению в рамках одной операции считывать или записывать данные из нескольких буферов в виртуальной памяти в непрерывную область дискового файла, а не выдавать отдельный запрос ввода-вывода для каждого буфера. Чтобы задействовать такой ввод- вывод, вы должны открыть файл для некэшируемого асинхронного (перекрывающегося) ввода-вывода и выровнять пользовательские буферы по границам страниц.

Пакеты запроса ввода-вывода Пакет хранит информацию, нужную для обработки запроса на ввод-вывод. Когда поток вызывает сервис ввода-вывода, диспетчер ввода-вывода создает IRP для представления операции в процессе ее выполнения подсистемой ввода-вывода. По возможности диспетчер ввода-вывода выделяет память под IRP в одном из двух ассоциативных списков IRP, индивидуальных для каждого процессора и хранящихся в пуле неподкачиваемой памяти. Ассоциативный список малых IRP (small IRP look-aside list) хранит IRP с одним блоком стека (об этих блоках — чуть позже), а ассоциативный список больших IRP (large-IRP look-aside list) — IRP с несколькими блоками стека. После создания и инициализации TRP диспетчер ввода-вывода сохраняет в IRP указатель на объект «файл» вызывающего потока.

7. Управление составными томами. Типы составных томов. Перекрытые тома: описание, назначение, структура.

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

Управление составными томами

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

B Windows поддерживаются следующие типы составных томов: перекрытые; зеркальные; чередующиеся;RAID-5.

Перекрытый том — единый логический том, состоящий из нескольких (до 32) свободных разделов на одном или нескольких дисках. Перекрытый том удобен для объединения небольших областей свободного дискового пространства в единый том большего объема или для создания из нескольких малых дисков одного большого тома. Если перекрытый том отформатирован для NTFS, его можно расширять, добавляя другие свободные области или диски, и это не влияет на данные, уже хранящиеся на томе.

8. Цели разработки и особенности NTFS. Требования к надежной файловой системе. Восстанавливаемость. Защита. Избыточность данных и отказоустойчивость.

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

Восстанавливаемость B соответствии с требованиями к надежности хранения данных и доступа к ним NTFS обеспечивает восстановление файловой системы на основе концепции атомарной транзакции (atomic transaction). Атомарные транзакции — это метод обработки изменений в базе данных, при котором сбои в работе системы не нарушают корректности или целостности базы данных. Суть атомарных транзакций заключается в том, что некоторые операции над базой данных, называемые транзакциями, выполняются по принципу «все или ничего». NTFS использует атомарные транзакции для реализации возможности восстановления файловой системы. NTFS гарантирует, что транзакция будет либо полностью выполнена, либо отменена, если хотя бы одну из операций не удастся завершить из-за сбоя системы. Защита в NTFS построена на модели объектов Windows. Файлы и каталоги защищены от доступа пользователей, не имеющих соответствующих прав. Открытый файл реализуется в виде объекта «файл» с дескриптором защиты, хранящимся на диске как часть файла. Прежде чем процесс сможет открыть описатель какого-либо объекта, в том числе объекта «файл», система защиты Windows должна убедиться, что у этого процесса есть соответствующие полномочия. Дескриптор защиты в сочетании с требованием регистрации пользователя при входе в систему гарантирует, что ни один процесс не получит доступа к файлу без разрешения системного администратора или владельца файла.

Избыточность данных и отказоустойчивость Восстанавливаемость NTFS действительно гарантирует, что файловая система тома останется доступной, но не дает гарантии полного восстановления пользовательских файлов. Последнее возможно за счет поддержки избыточности данных. Избыточность данных для пользовательских файлов реализуется через многоуровневую модель драйверов Windows, которая поддерживает отказоустойчивые диски. При записи данных на диск NTFS взаимодействует с диспетчером томов, а тот — с драйвером жесткого диска. Диспетчер томов может зеркалировать, или дублировать, данные одного диска на другом и таким образом позволяет при необходимости использовать данные с избыточной копии. Поддержка таких функций обычно называется RAID уровня 1. Диспетчеры томов также могут записывать данные в чередующиеся области (stripes) на три и более дисков, используя один диск для хранения информации о четности. Если данные на одном диске потеряны или стали недоступными, драйвер может реконструировать содержимое диска.

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