Физическая организация NTFS
NTFS появилась позже FAT и HPFS (для OS/2). Отличительные черты этой системы:
· Поддержка больших дисков и файлов (объемом до 2 64 байт)
· Восстанавливаемость после сбоев и отказов программ и аппаратуры управления дисками
· Высокая скорость операций
· Относительно низкий уровень фрагментизации
· Гибкая структура атрибутов файлов, возможность добавлять новые типы атрибутов
· Поддержка длинных символьных имен
· Контроль доступа к файлам и каталогам
Базовой единицей распределения дискового пространства является отрезок - непрерывная последовательность логических (физических) кластеров (LCN) тома. Так как файл может состоять из нескольких отрезков, для него определено понятие виртуального кластера (VCN) – относительного порядкового номера кластера внутри файла.
На томе (логическом диске) размещаются только файлы или части файлов. Каталоги представляют такие же файлы (в том числе и корневой). В начале тома размещается загрузочный сектор, затем главная таблица файлов (Master File Table – MFT). MFT – это файл, содержащий по одной или больше записей (размером, обычно, 2 К) для каждого файла тома. В нулевой записи – сведения о самом файле MFT. В последующих 15 записях - сведения о стандартных служебных файлах. Далее идут сведения о всех создаваемых на томе файлах.
В качестве системных файлов, кроме самой MFT, выступают:
· Копия первых трех записей MFT
· Файл журнала транзакций, используемый для восстановления файловой системы после сбоя
· Файл с именем тома, версией NTFS, другой информацией о томе
· Файл с таблицей определения атрибутов. Для каждого атрибута хранится имя типа, номер, описание.
· Файл корневого каталога
· Файл с битовой картой логических кластеров тома (по 1 биту на кластер, для определения занят он или свободен)
· Файл с адресом загрузочного сектора тома
· Файл со списком плохих кластеров тома
· Файл с таблицей квот – количества дискового пространства, выделяемого каждому пользователю.
· Файл с таблицей преобразования регистра символов для кодировки Unicode
Четыре записи (11-15) в MFT зарезервированы для последующих модификаций NTFS.
Каждый файл том идентифицируется номером, совпадающим с порядковым номером записи о нем в MFT. Каждый файл состоит из группы атрибутов, причем и имя файла и данные файла и стандартная информация о нем рассматриваются как атрибуты. Таким образом, любой файл состоит только из набора атрибутов.
Каждый атрибут содержит заголовок (состоящий из типа, длины и имени) и значения. Некоторые атрибуты являются системными, они определены изначально, пользователь может добавить свои атрибуты. В системный набор атрибутов входят:
· Attribute List – список атрибутов (используется редко, если список атрибутов не помещается в первую запись MFT для файла
· File Name – имя файла – содержит длинное имя файла в Unicode и номер записи в таблице MFT для родительского каталога. Если файл зафиксирован в нескольких каталогах, то у него будет несколько атрибутов типа Eile Name, по одному для каждого каталога
· MS-DOS Name – имя файла в формате MS-DOS (8+3)
· Version – номер последней версии файла
· Security Description – атрибут хранит информацию о защите файла - список прав доступа ACL и поле аудита – указания, какие операции с файлом нужно регистрировать
· Volume Version – версия тома (только для системных файлов)
· Volume Name – имя тома (только для системных файлов)
· MFT bitmap – карта использования кластеров тома (только для системного файла)
· Index Root – Корень двоичного дерева для поиска файлов в каталоге (только для каталогов)
· Index Allocation – размещение продолжений каталога, когда он не помещается в одну запись (т.е. для больших каталогов)
· Standard Information – стандартная информация о файле – в частности, время создания, последней модификации файла и т.д.
Если данные файла занимают мало места (в пределах 1500 байт) то весь он помещается в запись MFT вместе с остальными атрибутами. Такие файлы называются резидентными, а запись в MFT состоит из 4-х атрибутов:
1. SI – стандартной информации
2. FN – имени файла
3. Data – собственно данных файла
4. SD – дескриптора безопасности
Если он длиннее, то запись содержит средства поиска отрезков, составляющих файл. Однако атрибуты SI, FN и SD содержатся всегда. Большой файл вместо данных содержит списки отрезков, где расположены данные, очень большие данные вместо атрибута данные содержит номер записи MFT, где содержатся списки отрезков файла, а сверхбольшие файлы вместо атрибута данных содержат список записей MFT, в которых хранятся списки отрезков с данными файла.
Каждый каталог NTFS состоит из резидентной части, хранящейся в записи MFT, и возможно (для длинных каталогов) дополнительных отрезков вне MFT. При этом в резидентной части оставляются только имена файлов, завершающих каждый отрезок каталога, но дополняют ссылкой на начало такого отрезка. Отметим, что атрибуты SI, FN и SD также хранятся в резидентной части каталога.
Управление процессами
Процесс – программа в стадии выполнения при условии, что в процесс включены необходимые данные операционной среды и переменные окружения (динамический объект).
Процесс – единица работы, связанная с обработкой заявки на ресурсы ВС.
Состоит из кода и данных, полученных в результате обработки программы пользователя.
Потоки
Процесс может состоять из нескольких потоков. Хотя бы один поток будет в процессе всегда. В таком случае «поток»=«процесс».
Все потоки процесса разделяют его адресное пространство и множество переменных среды.
Процесс представляет собой изолированное пространство + ряд ресурсов ВС, которые даны ему в соответствии с правами. Изолированность позволяет сохранить целостность самих процессов и ОС в целом. Это не позволяет процессам непосредственно обращаться друг к другу – это происходит через ядро. Используются средства IPC.
Подсистема управления процессами занимается:
· Планирование взаимодействия процессов
· Порождение/уничтожение процессов
· Обеспечение необходимыми ресурсами
Жизненный цикл процесса:
· Готовность – пассивное состояние – процесс имеет все необходимые ресурсы, но нет процессорного времени.
· Выполнение – активное состояние процесса, когда процессорный ресурс предоставлен процессу.
· Ожидание – пассивное состояние – процесс не имеет любого другого ресурса, кроме процессора.
Очереди: готовности (по приоритетам – prio 0 .. prio n) и ожидания (по типу ресурсов – res0 ... res m)
8->3 если есть место в ОЗУ, если нет, то 8->5
4, 6 – ожидание
1, 2 – выполнение
3, 5, 7 - готовность
Образ процесса – совокупность его кодов и данных и ресурсов.
Управление процессом в режиме задач возможно, если мы сами создаем процесс с помощью специальных системных вызовов (напр. fork()). Момент возвращения из ядра определяется только ОС.
1 <-> 2 может быть много переходов, это связано с внутренними прерываниями и событиями.
4 – ждем предоставления ресурса.
5 – swapping – если нужно освободить ОЗУ.
7 – если есть место в ОЗУ. Процесс возвращен из привилегированного режима в непривилегированный режим. Ядро резервирует его и переключается на другой процесс такая ситуация возможна при прерывании.
Жизненный цикл процесса в UNIX-подобных ОС: создание нового процесса (fork(), выделение ресурсов) -> готовность в ОЗУ (завершение fork(), exec()) -> выполнение в режиме ядра (runnable) -> завершение процесса (exit(), defunct zombie) -> полный возврат ресурсов. Если ресурсы заняты, то после fork() переход в готовность вне ОЗУ.
Контекст и дескриптор
Для возобновления выполнения процесса необходимо сохранить информацию о состоянии ОС:
Контекст – информация, которая отражает состояние операционной среды, та информация, которая необходима для выполнения процесса:
· Состояние регистров (программный счетчик, регистра указатель стека и т.д.)
· Режим работы процессора
· Указатели на открытые файлы
· Информация о незавершенных операциях ввода/вывода
· Коды ошибок, выполняемых системных вызовов
Дескриптор процесса – информация, необходимая для планирования:
· Идентификатор процесса
· Состояние процесса
· Данные о степени его привилегированности
· Место нахождения сегмента кода
· Права доступа
· Информация о соседних дескрипторах в очереди
В дескрипторе хранится более оперативная информация, которая должна быть доступна извне => дескриптор всегда в ОЗУ, в отличие от контекста, который может быть вынесен в область swapping’a.
Очереди процессов представляются как списки дескрипторов, т.е. дескриптор содержит ссылку на соседей в очереди дескрипторах. Управление очередями = управление списками.
Программный код может выполняться, если создан процесс.
Создать процесс – значит создать информационную структуру (контекст/дескриптор).
Необходимо:
1) Создать структуру данных, описывающих данный процесс.
2) Включить дескриптор в очередь готовых процессов.
3) Загрузить кодовый сегмент в ОЗУ или область swapping’a.