0 Главная таблица файлбв $Mft Содержит полный список файлов тома NTFS
1 Копия главной таблицы файлов $MftMirr? Зеркальная копия первых трех записей MFT
2 Файл журнала $LogFile? Список транзакций, который используется для восстановления файловой системы после сбоев
3 Том $Volume Имя тома, версия NTFS и другая информация о томе
4 Таблица определения атрибутов $AttrDef? Таблица имен, номеров и описаний атрибутов
5 Индекс корневого каталога $. Корневой каталог
6 Битовая карта кластеров $Bitmap Разметка использованных кластеров тома
7 Загрузочный сектор раздела $Boot Адрес загрузочного сектора раздела
8 Файл плохих кластеров $BadClus? Файл, содержащий список всех обнаруженных на томе плохих кластеров
9 Таблица квот $Quota Квоты используемого пространства на диске для каждого пользователя
10 Таблица преобразования регистра символов $Upcase Используется для преобразования регистра символов для кодировки Unicode
11-15 Зарезервированы для будущего использования
Каждый атрибут файла NTFS состоит из полей: тип атрибута, длина атрибута, значение атрибута и, возможно, имя атрибута. Тип атрибута, длина и имя образуют заголовок атрибута. Имеется системный набор атрибутов, определяемых структурой тома NTFS. Системные атрибуты имеют фиксированные имена и коды их типа, а также определенный формат. Могут применяться также атрибуты, определяемые пользователями. Их имена, типы и форматы задаются исключительно пользователем. Атрибуты файлов упорядочены по убыванию кода атрибута, причем атрибут одного и того же типа может повторяться несколько раз. Существуют два способа хранения атрибутов файла - резидентное хранение в записях таблицы MFT и нерезидентное хранение вне ее, во внешних отрезках. Таким образом, резидентная часть файла состоит из резидентных атрибутов, а нерезидентная — из нерезидентных атрибутов. Сортировка может осуществляться только по резидентным атрибутам. Системный набор включает следующие атрибуты:
Attribute List (список атрибутов) — список атрибутов, из которых состоит файл; содержит ссылки на номер записи MFT, где расположен каждый атрибут; этот редко используемый атрибут нужен только в том случае, если атрибуты файла не умещаются в основной записи и занимают дополнительные записи MFT;
File Name (имя файла) — этот атрибут содержит длинное имя файла в формате Unicode, а также номер входа в таблице MFT для родительского каталога; если этот файл содержится в нескольких каталогах, то у него будет несколько атрибутов типа File Name; этот атрибут всегда должен быть резидентным;
MS-DOS Name (имя MS-DOS) — этот атрибут содержит имя файла в формате 8.3;
Version (версия) — атрибут содержит номер последней версии файла;
Security Descriptor (дескриптор безопасности) — этот атрибут содержит информацию о защите файла: список прав доступа ACL (права доступа к файлу рассматриваются ниже в разделе «Контроль доступа к файлам») и поле аудита, которое определяет, какого рода операции над этим файлом нужно регистрировать;
Volume Version (версия тома) — версия тома, используется только в системных файлах тома;
Volume Name (имя тома) — имя тома;
Data (данные) — содержит обычные данные файла;
MFT bitmap (битовая карта MFT) — этот атрибут содержит карту использования блоков на томе;
Index Root (корень индекса) — корень В-дерева, используемого для поиска файлов в каталоге;
Index Allocation (размещение индекса) — нерезидентные части индексного списка В-дерева;
Standard Information (стандартная информация) — этот атрибут хранит всю остальную стандартную информацию о файле, которую трудно связать с каким-либо из других атрибутов файла, например, время создания файла, время обновления и другие.
Типы файлов
Файлы NTFS в зависимости от способа размещения делятся на небольшие, большие, очень большие и сверхбольшие.
Небольшие файлы (small). Если файл имеет небольшой размер, то он может целиком располагаться внутри одной записи MFT, имеющей, например, размер 2 Кбайт. Небольшие файлы NTFS состоят по крайней мере из следующих атрибутов (рис. 7.20):
стандартная информация (SI — standard information);
имя файла (FN — file name);
данные (Data);
дескриптор безопасности (SD — security descriptor).
Из-за того что файл может иметь переменное количество атрибутов, а также из-за переменного размера атрибутов нельзя наверняка утверждать, что файл уместится внутри записи. Однако обычно файлы размером менее 1500 байт помещаются внутри записи MFT (размером 2 Кбайт).

Рис. 7.20. Небольшой файл NTFS
Большие файлы (large). Если данные файла не помещаются в одну запись MFT, то этот факт отражается в заголовке атрибута Data, который содержит признак того, что этот атрибут является нерезидентным, то есть находится в отрезках вне таблицы MFT. В этом случае атрибут Data содержит адресную информацию (LCN, VCN, k) каждого отрезка данных (рис. 7.21).

Рис. 7.21. Большой файл
Очень большие файлы (huge). Если файл настолько велик, что его атрибут данных, хранящий адреса нерезидентных отрезков данных, не помещается в одной записи, то этот атрибут помещается в другую запись MFT, а ссылка на такой атрибут помещается в основную запись файла (рис. 7.22). Эта ссылка содержится в атрибуте Attribute List. Сам атрибут данных по-прежнему содержит адреса нерезидентных отрезков данных.

Рис. 7.22. Очень большой файл
Сверхбольшие файлы (extremely huge). Для сверхбольших файлов атрибуте Attribute List можно указать несколько атрибутов, расположенных в дополнительных записях MFT (рис. 7.23). Кроме того, можно использовать двойную косвенную адресацию, когда нерезидентный атрибут будет ссылаться на другие нерезидентные атрибуты, поэтому в NTFS не может быть атрибутов слишком большой для системы длины.

Рис. 7.23. Сверхбольшой файл
41.типа тож, самое что и 36
42. Отказоустойчивость файловых систем
Восстанавливаемость файловой системы — свойство, которое гарантирует, что в случае отказа питания или краха системы, когда все данные в оперативной памяти теряются, все начатые файловые операции будут либо успешно завершены, либо отменены безо всяких отрицательных последствий для работоспособности файловой системы.
Некорректность файловой системы может возникать не только в результате насильственного прерывания операций ввода-вывода, выполняемых непосредственно с диском, но и в результате нарушения работы дискового кэша. Кэширование данных с диска предполагает, что в течение некоторого времени результаты операций ввода-вывода никак не сказываются на содержимом диска — все изменения происходят с копиями блоков диска, временно хранящихся в буферах оперативной памяти. В этих буферах оседают данные из пользовательских файлов и служебная информация файловой системы, такая как каталоги, индексные дескрипторы, списки свободных, занятых и поврежденных блоков и т. п.
Для согласования содержимого кэша и диска время от времени выполняется запись всех модифицированных блоков, находящихся в кэше, на диск. Выталкивание блоков на диск может выполняться либо по инициативе менеджера дискового кэша, либо по инициативе приложения. Менеджер дискового кэша вытесняет блоки из кэша в следующих случаях:
если необходимо освободить место в кэше для новых данных;
если к менеджеру поступил запрос от какого-либо приложения или модуля ОС на запись указанных в запросе блоков на диск;
при выполнении регулярного, периодического сброса всех модифицированных блоков кэша на диск.
В распоряжение приложений обычно предоставляются средства, с помощью которых они могут запросить у подсистемы ввода-вывода операцию сквозной записи - данные немедленно и практически одновременно записываются и на диск, и в кэш.
Протоколирование транзакций
Транзакции — неделимые работы, определённые в системе, которые не могут быть выполнены частично. Они либо выполняются полностью, либо вообще не выполняются.
В файловых системах такими транзакциями являются операции ввода-вывода, изменяющие содержимое файлов, каталогов или других системных структур файловой системы.
Операции, которые не изменяют состояния файловой системы, нет необходимости рассматривать как транзакции (чтение файла, поиск файла на диске, просмотр атрибутов файла).
Для восстановления файловой системы используется упреждающее протоколирование транзакций.
1Перед изменением какого-либо блока данных на диске или в дисковом кэше производится запись в журнал транзакций (log file), где отмечается:
какая транзакция делает изменения
какой файл и блок изменяются
каковы старое и новое значения изменяемого блока.
2После успешной регистрации всех подопераций в журнале делаются изменения в исходных блоках.
3Если транзакция прерывается, то информация журнала регистрации используется для отката.
4Если транзакция фиксируется, то:
делается запись в журнал регистрации
новые значения измененных данных сохраняются в журнале еще некоторое время, чтобы сделать возможным повторение транзакции, если это потребуется.
43. Процедура самовосстановления NTFS.
NTFS - отказоустойчивая система, которая вполне может привести себя в корректное состояние при практически любых реальных сбоях. Любая современная файловая система основана на таком понятии, как транзакция - действие, совершаемое целиком и корректно или не совершаемое вообще. У NTFS просто не бывает промежуточных (ошибочных или некорректных) состояний - квант изменения данных не может быть поделен на до и после сбоя, принося разрушения и путаницу - он либо совершен, либо отменен.
Транзакция
Откат и повторение
Три прохода:
Проход анализа
Проход повторения
Проход отмены
Контрольные точки
Каждая операция ввода-вывода, которая изменяет файл на томе NTFS, рассматривается файловой системой как транзакция и может выполняться как неделимый блок.
При модификации файла пользователем сервис файла регистрации фиксирует информацию по повторению транзакции (которая сообщает о путях повторения транзакции) или откату транзакции (которая сообщает об отмене транзакции, которая не была завершена или имела ошибку).
При сбое системы NTFS выполняет три прохода: проход анализа, повторный проход и проход отмены. Во время повторного прохода выполняются все этапы транзакции от последней контрольной точки. Проход отмены осуществляет возврат любых незавершенных транзакций.
Ленивая передача подобна ленивой (обратной) записи. Вместо того, чтобы отметить транзакцию как успешно завершившуюся, информация заносится в кэш и записывается в файл регистрации как фоновый процесс. Если происходит сбой до того, как информация о транзакции была зарегистрирована, NTFS произведет повторную проверку транзакции для определения успешности.
Пример 1: осуществляется запись данных на диск. Вдруг выясняется, что в то место, куда мы только что решили записать очередную порцию данных, писать не удалось - физическое повреждение поверхности. Поведение NTFS в этом случае довольно логично: транзакция записи откатывается целиком - система осознает, что запись не произведена. Место помечается как сбойное, а данные записываются в другое место - начинается новая транзакция.
Пример 2: более сложный случай - идет запись данных на диск. Вдруг, бах - отключается питание и система перезагружается. На какой фазе остановилась запись, где есть данные, а где чушь? На помощь приходит другой механизм системы - журнал транзакций. Дело в том, что система, осознав свое желание писать на диск, пометила в метафайле $LogFile? это свое состояние. При перезагрузке это файл изучается на предмет наличия незавершенных транзакций, которые были прерваны аварией и результат которых непредсказуем - все эти транзакции отменяются: место, в которое осуществлялась запись, помечается снова как свободное, индексы и элементы MFT приводятся в с состояние, в котором они были до сбоя, и система в целом остается стабильна. Ну а если ошибка произошла при записи в журнал? Тоже ничего страшного: транзакция либо еще и не начиналась (идет только попытка записать намерения её произвести), либо уже закончилась - то есть идет попытка записать, что транзакция на самом деле уже выполнена. В последнем случае при следующей загрузке система сама вполне разберется, что на самом деле всё и так записано корректно, и не обратит внимания на "незаконченную" транзакцию.
44. Избыточные дисковые подсистемы RAID.
RAID - дисковый массив независимых дисков. Служат для повышения надёжности хранения данных и/или для повышения скорости чтения/записи информации (RAID 0).
Беркли представил следующие уровни RAID, которые были приняты как стандарт де-факто:
RAID 0 представлен как неотказоустойчивый дисковый массив.
RAID 1 определён как зеркальный дисковый массив.
RAID 2 зарезервирован для массивов, которые применяют код Хемминга.
RAID 3, 4, 5 используют чётность для защиты данных от одиночных неисправностей.
RAID 6 используют чётность для защиты данных от двойных неисправностей
Уровни RAID
RAID 0 («Striping») — дисковый массив из двух или более HDD с отсутствием избыточности. Информация разбивается на блоки данных и записывается на оба/несколько диска поочередно. За счёт этого существенно повышается производительность (в зависимости от количества дисков зависит кратность увеличения производительности), но страдает надёжность всего массива.
RAID 0 может быть реализован как программно так и аппаратно.

RAID 1 (Mirroring — «зеркало»). Он имеет защиту от выхода из строя одного из двух жёстких дисков, обеспечивает приемлемую скорость записи и выигрыш по скорости чтения за счёт распараллеливания запросов. Недостаток заключается в том, что приходится выплачивать стоимость двух жёстких дисков, получая полезный объем одного жёсткого диска.

RAID 5 Cамый популярный из уровней, в первую очередь благодаря своей экономичности. Жертвуя ради избыточности ёмкостью всего одного диска из массива, мы получаем защиту от выхода из строя любого из винчестеров тома. На запись информации на том RAID 5 тратятся дополнительные ресурсы, так как требуются дополнительные вычисления, зато при чтении (по сравнению с отдельным винчестером) имеется выигрыш, потому что потоки данных с нескольких накопителей массива распараллеливаются.
Недостатки RAID 5 проявляются при выходе из строя одного из дисков — весь том переходит в критический режим, все операции записи и чтения сопровождаются дополнительными манипуляциями, резко падает производительность, диски начинают греться. Если срочно не принять меры — можно потерять весь том. Если во время восстановления массива, вызванного выходом из строя одного диска, выйдет из строя второй диск - данные в массиве разрушаются.

Комбинированные уровни Помимо базовых уровней RAID 0 — RAID 5, описанных в стандарте, существуют комбинированные уровни RAID 1+0, RAID 3+0, RAID 5+0, RAID 1+5, которые различные производители интерпретируют каждый по-своему.
Суть таких комбинаций вкратце заключается в следующем. RAID 1+0 — это сочетание единички и нолика (см. выше). RAID 5+0 — это объединение по «0» томов 5-го уровня. RAID 1+5 — «зеркало» «пятерок». И так далее.
Таким образом, комбинированные уровни наследуют преимущества (и недостатки) своих «родителей». Так, появление «нолика» в уровне RAID 5+0 нисколько не добавляет ему надёжности, но зато положительно отражается на производительности. Уровень RAID 1+5, наверное, очень надёжный, но не самый быстрый и, к тому же, крайне неэкономичный (полезная ёмкость тома равна 40% суммы емкостей дисков)..
RAID 6 Похож на RAID 5 но имеет более высокую степень надежности — под контрольные суммы выделяется емкость 2-х дисков, рассчитываются 2 суммы по разным алгоритмам. Требует более серьезный процессор контроллера — сложная математика. Обеспечивает работоспособность после «смерти» 2-х дисков.
45.Прерывания (понятие, классификация, обработка прерываний)
Прерывания - преднамеренное завершение текущей задачи и переход к следующей. Выполнение текущей программы прерывается и управление передаётся обработчику прерываний.
(по лекциям) По отношенияю к корпусу МП прерывания подразделяются на:
внешние
аппаратные (маскируемые) - поступают через контролер прерываний немаскируемые - поступают на вход NMI. У МП 2 входа для получения сигналов
внутренние
программные - программа сама вызывает обработчик прерываний - вызов в коде исключения (исключительные ситуации процессора) - в реальном режиме 2 исключения: деление на ноль и пошаговый (?) режим (флаг трассировки и выполнение прерываени после команды)
Организация прерываний: векторный способ, опрашиваемый способ.
Схема аппаратных прерываний

Номер прерывания в реальном режиме - номер ячейки в таблице прерываний. Сам вектор - адрес точки входа в обработчик прерываний. В реальном ержиме таблица прерываний - в младших адресах ОП, представляет собой последовательность адресов в виде сегмент-смещение, 4 байта на каждый вектор, 256 прерываний, с 0-ого по 255-ое. Зная номер вектора прерывания, можно в различных режимах вычислить смещение в IDTR. Чем меньше номер линнии запроса прерывания, тем выше приоритет. В регистре флагов можно разрешить или запретить аппаратные прерывания (флаг IF)
Внутренняя структура контролера прерываний

INTA - выход МП INTR - вход МП
1) - поступившие запросы зарегистрированы. 2) - в регистре 0 - пропускает, 1- запрещает проход сигнала 3) - МП в состоянииобрботки 4) - МП смотрит на IF (запрещены или нет аппаратные прерывания), сбрасывает бит в регистре обслуживания, обработка, все остальные аппаратные прерывания запрещены.
Защищённый режим: 1) - обыченые прерывания 2) - исключения: отказы - обращение по несуществующему адресу и т. п. (выполняются до выполния инструкции) ловушки - при переполнении, ошибках и т. п. (выполняются после выполнения интсрукций) аварийное завершение - происходят, когда невозможно определить программу, вызвавшую ошибку.
В IDTR - три типа дескрипторов - прерывания, ловушки, задачи.
Программные прерывания
можно вызвать любой обработчичк прерываний - команда int. при системном вызове: 1) - переход в привелегированный режим 2) - нужна высокая скорость обработки 3) - стандарный интерфейс вызова процедур 4) - расширить номенклатуру системных вызовов 5) - обеспечение контроля ОС за выполнением прерывания
В большинстве ОС обработка прерываний происходит централизовано. При любом системном вызове вызывается единственный обработчик - int 2eh (для Intel) int 2eh - вызывает диспетчер устройств, который определяет, что делать дальше.
Q48. Система обработки прерываний от клавиатуры

(по лекциям) На клавиатуре нажимается какая-то клавиша сигнал поступает в контролер клавиатуры. Тот распознаёт. что за клавиша нажата на клавиатуре - сопоставляет нажатой клавише определённый скэн-код, после чего выдаёт подтверждение 60h PICу, который выдаёт сигнал МП, который оповещается, что на клавиатуре нажата некая клавиша. После МП выдаётся сигнал OSL, который забирает скэн-код нажатой клавиши и помещает его в кольцевой буфер клавиатуры, где сопоставляется скэн-код с кодом аскии. Притом указатель на "голову" буфера указывает на самый старый введённый пользоватлем символ, который будет читаться при обращении к кольцевому буферу клавиатуры. "Хвост" указывает на первую свободную ячейку, в которую будет произвиодиться запись следующего введённого символа.
50. Реестр Windows 2000
Системный реестр Windows представляет собой централизованную базу данных параметров настройки системы и работающих в ней приложений. Реестр пришел на смену всевозможным INI-файлам – файлам конфигурации Windows, для снятия неудобств и ограничений, связанных с их использованием.
Практически любой процесс, работающий в ОС Windows, использует системный реестр в своих целях. Реестр можно представить как банк данных, в котором хранится всевозможная информация, необходимая для программ, служб, драйверов. Высокоуровневые службы, обеспечивающие работоспособность ОС, используют реестр с самого начала загрузки Windows и до завершения работы. Системный реестр также используется и драйверами устройств для загрузки и инициализации.
Реестр становится необходимым уже на самых ранних этапах загрузки ОС.
Основу реестра Windows составляют корневые разделы. Каждый корневой раздел содержит вложенные подразделы и параметры – элементы данных реестра.
Все имена корневых разделов начинаются со строки HKEY, что указывает разработчикам ПО на то, что это – дескриптор, который можно использоваться программой. Дескриптор – это значение, используемое для уникального описания ресурса, к которому программа может получить доступ.
Данные реестра, как уже было сказано, хранятся в виде параметров, расположенных в соответствующих разделах реестра. Каждый параметр характеризуется: именем, типом данных и значением. Различают следующие основные типы данных в реестре Windows 2000: Тип данных Описание
REG_BINARY Необработанные двоичные данные. Большинство сведений об аппаратных компонентах хранится в виде двоичных данных и выводится в редакторе реестра в шестнадцатеричном формате.
REG_DWORD Данные представлены в виде значения, длина которого составляет 4 байта (32-разрядное целое). Этот тип данных используется для хранения параметров драйверов устройств и служб. Значение отображается в окне редактора реестра в двоичном, шестнадцатеричном или десятичном формате.
REG_EXPAND_SZ Строка данных переменной длины. Этот тип данных включает переменные, обрабатываемые при использовании данных программой или службой.
REG_MULTI_SZ Многострочный текст. Этот тип, как правило, имеют списки и другие записи в формате, удобном для чтения. Записи разделяются пробелами, запятыми или другими символами.
REG_SZ Текстовая строка фиксированной длины.
Поддеревья реестра
Реестр Windows содержит два поддерева: HKEY_LOCAL_MACHINE (хранящее параметры настройки компьютера и общие параметры настройки ПО и ОС) и HKEY_CURRENT_USER (хранящее параметры настройки ПО и ОС текущего пользователя). Однако, чтобы облегчить поиск сведений в реестре, программы редактирования реестра выводят пять поддеревьев, которые перечислены ниже.
Поддерево реестра Описание
HKEY_LOCAL_MACHINE Содержит информацию о конфигурации оборудования компьютера, ОС и ПО. Параметры конфигурации ПО являются общими для всех пользователей компьютера
HKEY_CLASSES_ROOT Содержит информацию о конфигурации COM-компонентов и OLE-объектов. Является ссылкой на разделы HKEY_LOCAL_MACHINE\SOFTWARE\Classes и HKEY_CURRENT_USER\SOFTWARE\Classes . Если какое-либо значение существует в обоих разделах, то значение из поддерева HKEY_CURRENT_USER перекрывает значение из поддерева HKEY_LOCAL_MACHINE
HKEY_CURRENT_USER Содержит информацию о конфигурации ОС и ПО для пользователя, работающего в системе в данный момент. Является ссылкой на раздел HKEY_USERS\ идентификаторбезопасностипользователя
HKEY_USERS Содержит информацию о конфигурации ОС и ПО для пользователей, работающих в системе в данный момент, а также информацию о конфигурации для профиля пользователя по умолчанию
HKEY_CURRENT_CONFIG Содержит информацию о текущей аппаратной конфигурации компьютера. Является ссылкой на раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current
Кусты и файлы реестра
Системный реестр Windows подразделяется на составные части, которые называются кустами или ульями (hives). Куст представляет собой файл, который содержит корневой раздел, его подразделы и параметры. В Windows 2000 файлы всех кустов реестра, кроме HKEY_CURRENT_USER, находятся в папке Systemroot\System32\Config. Вспомогательные файлы куста HKEY_CURRENT_USER хранятся в папке Systemroot\Profiles\Username. Расширения имен этих файлов (или их отсутствие) указывают на тип содержащихся в них данных.
Каждый куст реестра Windows 2000 ассоциирован с соответствующим файлом. Кусту могут соответствовать и дополнительные файлы. В следующей таблице перечислены стандартные кусты реестра Windows 2000 и поддерживающие их файлы. Ветвь реестра Имена файлов HKEY_LOCAL_MACHINE\SAM Sam, Sam. log, Sam. sav
HKEY_LOCAL_MACHINE\Security Security, Security. log, Security. sav
HKEY_LOCAL_MACHINE\Software Software, Software. log, Software. sav
HKEY_LOCAL_MACHINE\System System, System. alt, System. log, System. sav
HKEY_CURRENT_CONFIG System, System. alt, System. log, System. sav
HKEY_USERS\.Default Default Default. log Default. sav
Файлы, не ассоциированные с разделами Userdiff, Userdiff. log
HKEY_CURRENT_USER Ntuser. dat, Ntuser. dat. log
В файле Ntuser. dat хранятся пользовательские профили. Файл Ntuser. dat. log отслеживает изменения, которые вносились в файл Ntuser. dat.
Файлы Ntuser и Userdiff были впервые введены в Windows NT 4.0 и выполняют следующие функции: Ntuser. dat – в файле хранится профиль пользователя; файлы Userdiff служат для обновления существующих профилей пользователя, использовавшихся в более ранних версиях Windows NT, таким образом, чтобы эти профили могли применяться в Windows NT 4.0 и последующих версиях Windows.
С кустами ассоциируются файлы четырех типов. Тип файла Описание
Без расширения Содержит копию куста
Alt Содержит копию жизненно важного куста HKEY_LOCAL_MACHINE\System. Только раздел
System имеет соответствующий файл с расширением alt
Log Содержит журнал транзакций, в котором регистрируются все изменения, внесенные в разделы и значимые элементы куста.
Sav Содержит копии файлов куста в том виде, который они имели на момент завершения текстовой фазы процесса установки.
51. Структура Windows 2000.
Упрощенная версия архитектуры Windows Server 2003.

Существуют четыре типа пользовательских процессов:
1Фиксированные процессы поддержки системы - например процесс обработки входа в систему и диспетчер сеансов
2Процессы сервисов - носители Windows-сервисов, например, Task Scheduler
3Пользовательские приложения - бывают шести типов: 64-разрядные, 32-разрадные, 16-разрядные для Win 3.1, 16-разрядные для DOS, 32-разрядные для POSIX и 32-разрядные для OS/2
4Подсистемы Окружения - реализованы как часть поддержки среды ОС, предоставляемой пользователям и программистам.
В Windows пользовательские приложения не могут вызывать родные сервисы ОС напрямую, вместо этого они работают с одной или несколькими DLL подсистемами. Назначение DLL - трансляция.
Компоненты ядра
Исполнительная система Windows - содержит базовые сервисы ОС, обеспечивающие управление памятью, процессами и потоками, защиту, ввод/вывод и взаимодействие между процессами.
Ядро - содержит низкоуровневые функции ОС (планирование потоков, диспетчеризацию прерываний и исключений, а также синхронизацию процессов.
Драйверы устройств - драйверы аппаратных устройств, транслирующих пользовательские вызовы функций в/в в запросы, специфичные для конкретного устройства, сетевые драйверы и драйверы файловых систем.
Уровень абстрагирования от оборудования (HAL) - изолирует ядро, драйверы и исполнительную систему от специфики конкретного оборудования.
Подсистема поддержки окон и графики - реализует функции GUI.
52. Уровень аппаратных абстракций HAL.
Одной из важнейших особенностей архитектуры Windows является переносимость между различными аппаратными платформами. Ключевой компонент, обеспечивающий такую переносимость, — уровень абстрагирования от оборудования (hardware abstraction layer, HAL).
HAL — это загружаемый модуль режима ядра (Hal. dll), предоставляющий низкоуровневый интерфейс с аппаратной платформой, на которой выполняется Windows. Он скрывает от операционной системы специфику конкретной аппаратной платформы, в том числе ее интерфейсов ввода-вывода, контроллеров прерываний и механизмов взаимодействия между процессорами, т. е. все функции, зависимые от архитектуры и от конкретной машины.
Когда внутренним компонентам Windows и драйверам устройств нужна платформенно-зависимая информация, они обращаются не к самому оборудованию, а к подпрограммам HAL, что и обеспечивает переносимость этой операционной системы.
53.Ядро Windows 2000
Ядро состоит из набора функций в Ntoskrnl. exe, предоставляющих фундаментальные механизмы (в том числе планирования потоков и синхронизации), которые используются компонентами исполнительной системы и низкоуровневыми аппаратно-зависимыми средствами поддержки (диспетчеризации прерываний и исключений), различными в каждой процессорной архитектуре. Код ядра написан в основном на С, а ассемблер использовали лишь для решения специфических задач, трудно реализуемых на С.
Объекты ядра
Ядро состоит из низкоуровневых, четко определенных и хорошо предсказуемых примитивов и механизмов операционной системы, позволяющих компонентам исполнительной системы более высокого уровня выполнять свои функции. Ядро отделено от остальной части исполнительной системы; оно реализует системные механизмы и не участвует в принятии решений, связанных с системной политикой. Практически все такие решения, кроме планирования и диспетчеризации потоков, принимаются исполнительной системой.
Одна из групп объектов ядра, называемых управляющими (control objects), определяет семантику управления различными функциями операционной системы. В эту группу входят объекты АРС, DPC (deferred procedure call) и несколько объектов, используемых диспетчером ввода-вывода (например, объект прерывания).
Объекты позволяют ядру контролировать обработку данных процессором и поддерживают объекты исполнительной системы. Большинство объектов уровня исполнительной системы инкапсулирует один или более объектов ядра, включая в себя их атрибуты, определенные ядром.
Другая группа объектов под названием объекты диспетчера (dispatcher objects) реализует средства синхронизации, позволяющие изменять планирование потоков. В группу таких объектов входят поток ядра (kernel thread), мьютекс (mutex), событие (event), семафор (semaphore), таймер (timer), ожидаемый таймер (waitable timer) и некоторые другие. С помощью функций ядра исполнительная система создает объекты ядра, манипулирует ими и конструирует более сложные объекты, предоставляемые в пользовательском.
54. Исполняющая система Windows 2000.
В состав исполнительной системы входят следующие элементы:
Справочный монитор защиты (Security Reference Monitor, SRM). Гарантирует выполнение политики защиты на локальном компьютере. Оберегает ресурсы ОС, обеспечивая защиту объектов и аудит доступа к ним.
Диспетчер процессов (Process Manager). Создает и завершает процессы и потоки. Кроме того, приостанавливает и возобновляет исполнение потоков, хранит и выдает информацию о процессах и потоках NT.
Диспетчер межпроцессного взаимодействия (Interprocess Communication Manager, IPC Manager). Обеспечивает взаимодействие между подсистемами режима пользователя и исполнительной подсистемы.
Диспетчер виртуальной памяти (Virtual memory manager, VMM). Реализует виртуальную память - схему управления памятью, которая предоставляет каждому процессу большое собственное адресное пространство и защищает это пространство от других процессов.
Ядро (Kernel). Реагирует на прерывания и исключения, выполняет межпроцессорную синхронизацию и предоставляет набор элементарных объектов и интерфейсов, используемый остальными частями исполнительной системы для реализации объектов более высокого уровня.
Подсистема ввода/вывода (I/O Subsystem). Состоит из группы компонентов, отвечающих за выполнение ввода/вывода на разнообразные устройства.
Диспетчер объектов (Object manager). Создает, поддерживает и уничтожает объекты исполнительной системы Windows - абстрактные типы данных, представляющие системные ресурсы.
Диспетчер электропитания (Advanced Configuration and Power Interface Manager, ACPI-manager). Управляет электропитанием устройств, координирует запросы устройств, связанные с изменением режима электропитания.
Диспетчер Plug and Play (PnP-manager). Обеспечивает распознавание PnP-устройств после процесса загрузки ОС, управляет их драйверами, предоставляет интерфейс средствам пользовательского режима для поиска устройств, их установки и удаления, а также остановки и возобновления их работы.
Диспетчер окон и интерфейс графических устройств (Graphic Device Interface, GDI). Управляет отображением окон, обеспечивает прием ввода от клавиатуры и мыши, распределяя информацию приложениям.
Компоненты исполнительной системы реализованы как независимые от аппаратной платформы модули. Это обеспечивается наличием уровня абстрагирования от оборудования и делает ОС максимально переносимой.
55.Процессы и потоки Windows 2000.
МЕГА ЖЕСТЬ(много) :Е
Хотя на первый взгляд кажется, что программа и процесс — понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. На самом высоком уровне абстракции процесс в Windows включает следующее:
закрытое виртуальное адресное пространство — диапазон адресов виртуальной памяти, которым может пользоваться процесс;
исполняемую программу — начальный код и данные, проецируемые на виртуальное адресное пространство процесса;
список открытых описателей (handles) различных системных ресурсов — семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;
контекст защиты (security context), называемый маркером доступа (access token) и идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;
уникальный идентификатор процесса (во внутрисистемной терминологии называемый идентификатором клиента); •минимум один поток.
Поток (thread) — некая сущность внутри процесса, получающая процессорное время для выполнения. Без потока программа процесса не может выполняться. Поток включает следующие наиболее важные элементы:
содержимое набора регистров процессора, отражающих состояние процессора;
два стека, один из которых используется потоком при выполнении в режиме ядра, а другой — в пользовательском режиме;
закрытую область памяти, называемую локальной памятью потока (thread-local storage, TLS) и используемую подсистемами, библиотеками исполняющих систем (run-time libraries) и DLL;
уникальный идентификатор потока (во внутрисистемной терминологии также называемый идентификатором клиента: идентификаторы процессов и потоков генерируются из одного пространства имен и никогда не перекрываются);
иногда потоки обладают своим контекстом защиты, который обычно используется многопоточными серверными приложениями, подменяющими контекст защиты обслуживаемых клиентов.
Переменные регистры, стеки и локальные области памяти называются контекстом потока.
Хотя у потоков свой контекст выполнения, каждый поток внутри одного процесса делит его виртуальное адресное пространство (а также остальные ресурсы, принадлежащие процессу). Это означает, что все потоки в процессе могут записывать и считывать содержимое памяти любого из потоков данного процесса. Однако потоки не могут случайно сослаться на адресное пространство другого процесса. Исключение возможно в ситуации, когда тот предоставляет часть своего адресного пространства как раздел общей памяти (shared memory section), в Windows API называемый объектом «проекция файла» (file mapping object).
Процесс и его ресурсы

Кроме закрытого адресного пространства и одного или нескольких потоков у каждого процесса имеются идентификация защиты и список открытых описателей таких объектов, как файлы и разделы общей памяти, или синхронизирующих объектов вроде мьютексов, событий и семафоров.
Каждый процесс обладает контекстом защиты, который хранится в объекте — маркере доступа. Маркер доступа содержит идентификацию защиты и определяет полномочия данного процесса.
Дескрипторы виртуальных адресов (virtual address descriptors, VAD) — это структуры данных, используемые диспетчером памяти для учета виртуальных адресов, задействованных процессом.
Процессы потоки задания

Каждый процесс в Windows представлен блоком процесса, создаваемым исполнительной системой (EPROCESS).
Планирование потоков
Вытесняющее планирование на основе уровней приоритета
Выбор потока может быть ограничен привязкой к процессору
Выбранный поток работает в течении кванта времени. Квант зависит от:
Конфигурационных параметров
Статуса процесса
Использования объекта задание
Код отвечающий за планирование рассредоточен по ядру
Совокупность процедур, выполняющих эти обязанности называется диспетчером ядра
Код Windows, отвечающий за планирование, реализован в ядре. Поскольку этот код рассредоточен по ядру, единого модуля или процедуры с названием «планировщик» нет. Совокупность процедур, выполняющих эти обязанности, называется диспетчерам ядра (kernel's dispatcher). Диспетчеризация потоков может быть вызвана любым из следующих событий:
Поток готов к выполнению — например, он только что создан или вышел из состояния ожидания.
Поток выходит из состояния Running (выполняется), так как его квант истек или поток завершается либо переходит в состояние ожидания.
Приоритет потока изменяется в результате вызова системного сервиса или самой Windows.
Изменяется привязка к процессорам, из-за чего поток больше не может работать на процессоре, на котором он выполнялся.
Планирование в Windows осуществляется на уровне потоков.
Поскольку решения, принимаемые в ходе планирования, касаются исключительно потоков, система не обращает внимания на то, какому процессу принадлежит тот или иной поток. Так, если у процесса А есть 10, у процесса В — 2 готовых к выполнению потока, и все 12 имеют одинаковый приоритет, каждый из потоков теоретически получит 1/12 процессорного времени, потому что Windows не станет поровну делить процессорное время между двумя процессами.
Уровни приоритета

Чтобы понять алгоритмы планирования потоков, необходимо сначала разобраться в уровнях приоритета, используемых Windows.
Уровни приоритета назначаются с учетом двух разных точек зрения - Windows API и ядра Windows.
Windows API сначала упорядочивает процессы по классам приоритета, назначенным при их создании [Real-time (реального времени), High (высокий), Above Normal (выше обычного), Normal (обычный), Below Normal (ниже обычного) и Idle (простаивающий)], а затем — по относительному приоритету индивидуальных потоков в рамках этих процессов [Time-critical (критичный по времени), Highest (наивысший), Above-normal (выше обычного), Normal (обычный), Below-normal (ниже обычного), Lowest (наименьший) и Idle (простаивающий)].
Базовый приоритет каждого потока в Windows API устанавливается, исходя из класса приоритета его процесса и относительного приоритета самого потока. Если у процесса только одно значение приоритета (базовое), то у каждого потока их два: текущее и базовое. Решения, связанные с планированием, принимаются на основе текущего приоритета. В определенных обстоятельствах система может на короткое время повышать приоритеты потоков в динамическом диапазоне (1-15). Windows никогда не изменяет приоритеты потоков в диапазоне реального времени (16-31), поэтому у таких потоков базовый приоритет идентичен текущему.
Обычно базовый приоритет процесса (а значит, и базовый приоритет первичного потока) по умолчанию равен значению из середины диапазонов приоритетов процессов (24, 13, 10, 8, 6 или 4). Однако базовый приоритет некоторых системных процессов (например, диспетчера сеансов, контроллера сервисов и сервера локальной аутентификации) несколько превышает значение по умолчанию для класса Normal (8). Более высокий базовый приоритет по умолчанию обеспечивает запуск потоков этих процессов с приоритетом выше 8.
Приоритеты реального времени
Можно повысить или понизить приоритет потока любого приложения в динамическом диапазоне; однако, чтобы задать значение из диапазона реального времени, должна быть привилегия Increase Scheduling Priority. Многие важные системные потоки режима ядра выполняются в диапазоне приоритетов реального времени. Поэтому, если потоки слишком долго выполняются с приоритетом этого диапазона, они могут блокировать критичные системные функции (например в диспетчере памяти, диспетчере кэша или драйверах устройств).
Состояния потоков

Прежде чем перейти к алгоритмам планирования потоков, надо разобраться, в каких состояниях могут находиться потоки в процессе выполнения в Windows 2000 и Windows XP:
Ready (готов) Поток в состоянии готовности ожидает выполнения. Выбирая следующий поток для выполнения, диспетчер принимает во внимание только пул потоков, готовых к выполнению.
Standby (простаивает) Поток в этом состоянии уже выбран следующим для выполнения на конкретном процессоре. В подходящий момент диспетчер переключает контекст на этот поток. В состоянии Standby может находиться только один поток для каждого процессора в системе. Поток может быть вытеснен даже в этом состоянии (если, например, до начала выполнения потока, который пока находится в состоянии Standby, к выполнению будет готов поток с более высоким приоритетом).
Running (выполняется) Поток переходит в это состояние и начинает выполняться сразу после того, как диспетчер переключает на него контекст. Выполнение потока прекращается, как только он завершается, вытесняется потоком с более высоким приоритетом, переключает контекст на другой поток, самостоятельно переходит в состояние ожидания или истекает выделенный ему квант процессорного времени (и другой поток с тем же приоритетом готов к выполнению).
Waiting (ожидает) Поток входит в состояние Waiting несколькими способами. Он может самостоятельно начать ожидание на синхронизирующем объекте или его вынуждает к этому подсистема окружения. По окончании ожидания поток — в зависимости от приоритета — либо немедленно начинает выполняться, либо переходит в состояние Ready.
Transition (переходное состояние) Поток переходит в это состояние, если он готов к выполнению, но его стек ядра выгружен из памяти. Как только этот стек загружается в память, поток переходит в состояние Ready.
Terminated (завершен) Заканчивая выполнение, поток переходит в состояние Terminated. После этого блок потока исполнительной системы (структура данных в пуле неподкачиваемой памяти, описывающая данный поток) может быть удален, а может быть и не удален — это уже определяется диспетчером объектов.
Initialized (инициализирован) В это состояние поток входит в процессе своего создания.
59. Обработка прерываний в Windows 2000.
Драйверам устройств необходим способ сообщения NT, что они хотят, чтобы исполнялась определенная функция, когда процессор получает прерывание, относящееся к их устройствам. Для этого драйверы устройств с помощью Диспетчера ввода/ вывода регистрируют функцию обработки прерывания (Interrupt Service Routine, ISR) посредством вызова функции loConnectlnterrupt. Параметры, передаваемые в loConnectlnterrupt описывают все свойства ISR драйвера, включая ее адрес, прерывание, к которому подключена ISR и то, могут ли другие устройства совместно использовать это же прерывание.
Функция loConnectlnterrupt инициализирует объект-прерывание (Interrupt Object), для того чтобы хранить информацию о прерывании и подключенной ISR. loConnectlnterrupt программирует также аппаратуру прерываний для того, чтобы указывать код, который loConnectlnterrupt поместила в объект-прерывание. Таким образом, когда CPU получит прерывание, управление немедленно перейдет к коду в объекте-прерывание. Этот код вызовет вспомогательную функцию обслуживания прерывания, KilnterruptDispatch, которая повысит уровень IRQL процессора, вызовет соответствующую ISR, и понизит IRQL до предыдущего значения. KilnterruptDispatch также получает спин-блокировку, индивидуальную для прерывания, и удерживает ее, пока выполняется ISR (см. раздел «Механизмы синхронизации»). Спин-блокировка гарантирует, что ISR не будет одновременно исполняться более чем на одном процессоре, а это может привести к печальным последствиям.
В NT, ISR обычно не делает ничего, кроме чтения минимального количества информации из прерывающего устройства и подтверждения устройству того факта, что драйвер «увидел» прерывание. В других операционных системах ISR часто выполняют дополнительные обязанности, такие, как полная обработка прерывания путем чтения больших буферов данных, или записи больших буферов данных в устройство. Однако, одна из задач NT - минимизировать время, проводимое на повышенных уровнях IRQL, поэтому NT откладывает большую часть обслуживания прерывания до момента уменьшения уровня IRQL. Процедуры ISR запрашивают отложенный вызов процедур (Deferred Procedure Call, DPC) для информирования Диспетчера ВВОДА/ВЫВОДА о том, что у них имеется работа для исполнения на нижнем уровне IRQL. DPC - еще одна функция в драйвере, которую вызовет Диспетчер ввода/вывода после завершения ISR; DPC осуществляет почти все взаимодействие с устройством.
Рис. 14 описывает типичный ход обслуживания прерывания NT. Контроллер устройства генерирует сигнал прерывания на шине процессора, который обрабатывает контроллер прерываний процессора. Этот сигнал служит причиной для CPU для выполнения кода в объекте-прерывании, зарегистрированном для прерывания. Этот код, в свою очередь, вызывает вспомогательную функцию Kilnterrupt Dispatch. KilnterruptDispatch вызывает ISR драйвера, которая запрашивает DPC.
NT также имеет механизм обработки прерываний, не зарегистрированных драйверами устройств. В процессе инициализации системы NT программирует контроллер прерываний так, чтобы указывать на функции ISR по умолчанию. Функции ISR по умолчанию осуществляют специальную обработку, когда система генерирует ожидаемые прерывания. Например, ISR ошибки отсутствия страницы должна выполнить обработку в ситуации, при которой программа ссылается на виртуальную память, которая не имеет выделенного пространства в физической памяти компьютера. Такая ситуация может возникнуть когда программы взаимодействуют с файловой системой для получения данных из файла подкачки или исполняемого файла, или когда программы ссылаются на недействительный адрес. NT программирует незарегистрированные прерывания так, чтобы они указывали на обработчики ISR, которые распознают, что система сгенерировала неразрешенное прерывание. Почти все эти ISR высвечивают синий экран смерти (BSOD - blue screen of death) для уведомления системного администратора о том, что произошло неразрешенное прерывание.

Объекты Windows 2000
Информация про nt 4.0, но думаю, разницы нету большой
Диспетчер Объектов (object manager), который является вероятно наименее известной из подсистем Исполнительной Системы NT, является также одним из наиболее важных. Главная роль операционной системы - это управление физическими и логическими ресурсами компьютера. Другие подсистемы Исполнительной Системы используют Диспетчер Объектов, чтобы определять и управлять объектами, которые представляют ресурсы. Диспетчером объектов нельзя манипулировать из пользовательского режима напрямую, а его пространство имен является невидимым. Диспетчер Объектов исполняет обязанности: Поддержание единого пространства имен для всех именованных объектов системы. Отвечает за создание, удаление и управление именованными и неименованными объектами ОС, представляющими системные ресурсы.
Обязанности по управлению объектами включают в себя идентификацию и подсчет ссылок. Когда прикладная программа открывает ресурс, Диспетчер Объектов или определяет местонахождение связанного с ресурсом объекта, или создает новый объект. Вместо возвращения прикладной программе, которая открыла ресурс, указателя на объект, Диспетчер Объектов возвращает непрозрачный (не имеющий смысла) идентификатор, называемый дескриптором. Значение дескриптора уникально в рамках прикладной программы, которая открыла ресурс, но не уникально между различными прикладными программами.
Таблица 2. Типы объектов и подсистемы исполнительной системы, которые ими управляют Тип Объекта Какой ресурс представляет Подсистема
Тип Объекта (Object type) Объект типа объекта Диспетчер объектов
Директория (Directory) Пространство имен объектов Диспетчер объектов
Символическая Связь (SymbolicLink?) Пространство имен объектов Диспетчер объектов
Событие (Event) Примитив синхронизации Исполнительный модуль
Пара Событий (Event-Pair) Примитив синхронизации Исполнительный модуль
Мутант (Mutant) Примитив синхронизации Исполнительный модуль
Таймер (Timer) Таймерное предупреждение Исполнительный модуль
Семафор (Semaphore) Примитив синхронизации Исполнительный модуль
Станция Windows (Windows Station) Интерактивный вход в систему Поддержка среды Win32
Рабочий Стол (Desktop) Рабочий Стол Windows Поддержка среды Win32
Файл (File) Отслеживание открытых файлов Диспетчер ввода/вывода
Завершение ввода/вывода (I/O Completion) Отслеживание завершения ввода/вывода Диспетчер ввода/вывода
Адаптер (Adapter) Ресурс прямого Доступа к Памяти (DMA) Диспетчер ввода/вывода
Контроллер (Controller) Контроллер DMA Диспетчер ввода/вывода
Устройство (Device) Логическое или физическое устройство Диспетчер ввода/вывода
Драйвер (Driver) Драйвер устройства Диспетчер ввода/вывода
Ключ (Key) Вход в реестре Диспетчер конфигурации
Порт (Port) Канал связи Средство LPC
Секция (Section) Отображение в памяти Диспетчер памяти
Процесс (Process) Активный процесс Диспетчер процессов
Поток (Thread) Активный поток Диспетчер процессов
Маркер (Token) Профиль безопасности про - цесса Диспетчер процессов
Профиль (Profile) Измерение производительности Ядро
Прикладная программа использует дескриптор, чтобы идентифицировать ресурс в последующих операциях. Когда прикладная программа закончила работу с объектом, она закрывает дескриптор. Диспетчер Объектов использует подсчет ссылок, чтобы проследить сколько элементов системы, включая прикладные программы и подсистемы Исполнительной Системы, обращаются к объекту, который представляет ресурс. Когда счетчик ссылок обнуляется, объект больше не используется как представление ресурса, и Диспетчер Объектов удаляет объект (но не обязательно ресурс). Для обеспечения идентификации объектов, Диспетчер Объектов реализует пространство имен NT. Все разделяемые ресурсы в NT имеют имена, располагающиеся в этом пространстве имен. Например, когда программа открывает файл, Диспетчер Объектов анализирует имя файла для выявления драйвера файловой системы (FSD) для диска, который содержит файл. Точно так же, когда прикладная программа открывает ключ Реестра, Диспетчер Объектов по имени ключа Реестра определяет, что должен быть вызван Диспетчер Конфигурации.
Рассмотрим следующий пример: Прикладная программа вызывает функцию Win32 - CreateFile() с именем файла «c:\mydir\file. txt». При этом происходят следующие действия:
1 Вызов системного сервиса NtCreateFile(). В качестве имени ему будет передано «\??\c:\mydir\file. txt». Такой формат имени является «родным» для NT, точнее - это формат имени в пространстве имен Диспетчера Объектов.
2 Диспетчер Объектов начнет последовательно разбирать переданное имя. Первым будет разобран элемент «\??». Корень пространства имен содержит объект с таким именем. Тип объекта - «Directory». В этой директории будет произведен поиск объекта с именем «с:». Это - «SymbolicLink» - ссылка на имя «\Device\Harddisk0\ Partition 1». Дальнейшему разбору будет подвергнуто имя «\Device\Harddisk0\Partitionl\ mydir\file. txt». Разбор будет закончен при достижении объекта, не являющегося директорией или символической связью. Таким объектом будет «Partition 1», имеющий тип «Device». Этому объекту для дальнейшей обработки будет передано имя «\mydir\file. txt».
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



