Вордовские лекции (1115151), страница 9
Текст из файла (страница 9)
Группа цилиндров:
-
копия суперблока;
-
информация о свободных блоках и индексных дескрипторах;
-
массив индексных дескрипторов (ИД);
-
блоки файлов.
Стратегии размещения:
-
новый каталог помещается в группу цилиндров, число свободных индексных дескрипторов в которой больше среднего значения во всей файловой системе в данный момент времени, а также имеющей минимальное число дескрипторов каталогов в себе;
-
для обеспечения равномерности использования блоков данных файл разбивается на несколько частей, при этом первая часть файла располагается в той же группе цилиндров, что и его дескриптор, при размещении последующих частей используется группа цилиндров, в которой число свободных блоков превышает среднее значение. Длина первой части выбирается таким образом, чтобы она адресовалось непосредственно индексным дескриптором (т.е. не «косвенно»), остальные части разбиваются фиксированным образом, например по 1 мегабайту;
-
последовательные блоки файлов размещаются исходя из оптимизации физического доступа (см. ниже)
Dt – технологический промежуток времени, который затрачивает система на передачу и прием устройством МД команды на чтение очередного блока. За это время диск проворачивается и головки обмена «пропускают» начало очередного блока, поэтому если мы будем читать следующий блок, то головка будет вынуждена ожидать полного поворота диска на начало блока. В связи с этим эффективнее читать не последовательные блоки (в этом случае нужно ожидать полного поворота диска), а блоки, размещенные на диске через один, два... (смещение определяется поворотом диска за время Dt).
Внутренняя организация блоков
Обмен происходит блоками. Блоки могут быть достаточно большого размера (до 64 Кб). В системе может быть принято разбиение блока на равные фрагменты (на 2, 4, 8). То есть все пространство разделяется на «маленькие блоки» - фрагменты. Фрагменты группируются по 2, 4 или 8 в блоки (т.е. если фрагмент содержит 512 байт, то блок может быть размера 1024, 2048, 4096). Блоки выровнены по кратности.
Блоки | 0 | 1 | … | N | |||||||||
Фрагменты | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | … | ||||
Маска | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
При этом блоком в этой системе может называться только «выровненный» до размера кратности набор фрагментов. Т.е. при кратности 4 (см. рисунок выше), фрагменты 0 – 3 – входят в один блок, а фрагменты 1 – 4 нет.
Для хранения информации о свободных фрагментах используется битовая маска: каждому фрагменту на диске соответствует ровно 1 бит в этой маске (этот механизм упрощает алгоритм поиска свободных фрагментов и уменьшает «фрагментацию» свободного пространства).
Формат индексного дескриптора аналогичен, используемому в s5fs - в нём в качестве элементов по-прежнему используются блоки, а не фрагменты, но при размещении информации в файлах используется следующее простое правило: все блоки указанные в индексном дескрипторе, кроме последнего, должны использоваться только целиком; блок может использоваться для нескольких файлов только при хранении их последних байт, не занимающих всех фрагментов полного блока (cм. рисунок ниже). Т.о. для хранения информации об использовании последнего блока недостаточно только размера файла, хранимого в дескрипторе System 5, необходимо также хранить информацию, об используемых фрагментах в этом блоке.
Выделение пространства для файла происходит только в момент когда процесс выполняет системный вызов write (см. рисунок ниже). Операционная система при этом руководствуется следующим алгоритмом:
-
Если в уже выделенном файлу блоке есть достаточно места, то новые данные помещаются в это свободное пространство.
-
Если последний блок файла использует все фрагменты (т.е. это полный блок) и свободного в нём места не достаточно для записи новых данных, то частью новых данных заполняется всё свободное место. Если остаток данных превышает по размеру один полный блок, то новый выделяется полный блок и записываются данные в этот полный блок. Процесс повторяется до тех пор, пока остаток не окажется меньше чем полный блок. В этом случае ищется блок с необходимыми по размеру фрагментами или выделятся новый полный блок. Остаток данных записывается в этот блок.
-
Файл содержит один или более фрагмент (они естественным образом содержатся в одном блоке) и последний фрагмент недостаточен для записи новых данных. Если размер новых данных в сумме с размером данных, хранимых в неполном блоке, превышает размер полного блока, то выделяется новый полный блок. Содержимое старого неполного блока копируется в начало выделенного блока и остаток заполняется новыми данными. Процесс далее повторяется, как указано в пункте 2 выше. В противном случае (если размер новых данных в сумме с размером данных, хранимых в неполном блоке, не превышает размер полного блока) ищется блок с необходимыми по размеру фрагментами или выделятся новый полный блок. Остаток данных записывается в этот блок.
Структура каталога
Поддержка длинных имен файлов.
Любая запись содержит:
-
номер индексного дескриптора;
-
длина записи в каталоге;
-
длина имени файла;
-
имя файла (дополненное до кратности слова).
При удалении имени файла принадлежащая ему запись присоединяется к предыдущей (при этом увеличивается значение поля «длина записи»), при этом если освобождается последняя запись в выделенном фрагменте, то он помечается как свободный и удаляется из ИД директории.
Символические ссылки
Стандартная файловая система, позволяла использовать только жёсткие ссылки, при этом в каталоге помещалась ссылка на файл. Допускалось иметь несколько записей в каталоге, ссылающихся на один и тот же ИД. Это вносило ограничение на создание ссылок между разными файловыми системами. В s5fs был добавлен файл нового типа – символическая ссылка, при этом его содержимым был путь (относительный или абсолютный) к файлу, на который эта ссылка установлена. Для обычных программ это изменение незаметно – интерпретацией символических ссылок по-прежнему занимается операционная система.
Другие изменения
В s5fs были добавлены ещё некоторые механизмы, такие как блокировка файлов, поддержка переименования файлов (системный вызов rename), поддержка квотирования дискового пространства.
6ОС Unix: процессы, взаимодействие процессов
6.1Базовые свойства процессов
6.1.1Определение процесса. Контекст
В любой системе, оперирующей понятием процесс, существует системно-ориентированное определение процесса (определение, учитывающее конкретные особенности данной ОС).
С точки зрения Unix системно-ориентированное определение процесса:
Рассмотрим данные определения процесса Unix.
Первое определение процесса Unix.
Процесс в ОС Unix – объект (не надо путать с объектом ООП!!!), зарегистрированный в таблице процессов Unix.
Таблица процессов
Каждый процесс характеризуется уникальным именем – идентификатором процесса (PID). PID – целое число от 0 до некоторого предельного значения, определяющего максимальное число процессов, существующих в системе одновременно.
Будем использовать термины 0й процесс, 1й процесс, 125й процесс, это означает, что речь идет о процессах с PID = 0, 1, 125. 0й процесс в системе ассоциируется с работой ядра Unix. С точки зрения организации данных PID – номер строки в таблице, в которой размещена запись о процессе.
Контекст процесса
С
одержимое записи таблицы процессов позволяет получить контекст процесса (часть данных контекста размещается непосредственно в записи таблицы процессов, на оставшуюся часть контекста имеются прямые или косвенные ссылки, также размещенные в записи таблицы процессов).
С точки зрения логической структуры контекст процесса Unix состоит из:
-
пользовательской составляющей или тела процесса (иногда используется пользовательский контекст)
-
аппаратной составляющей (иногда используется аппаратный контекст)
-
системной составляющей ОС Unix (иногда – системный контекст)
Иногда два последних компонента объединяют, в этом случае используется термин общесистемная составляющая контекста.
Тело процесса состоит из сегмента кода и сегмента данных.
Сегмент кода содержит машинные команды и неизменяемые константы соответствующей процессу программы.
Сегмент данных – содержит данные, динамически изменяемые в ходе выполнения кода процесса. Сегмент данных содержит область статических переменных, область разделяемой с другими процессами памяти, а также область стека (обычно эта область служит основой для организации автоматических переменных, передачи параметров в функции, организацию динамической памяти).
Некоторые современные ОС имеют возможность разделения единого сегмента кода между разными процессами. Тем самым достигается экономия памяти в случаях одновременного выполнения идентичных процессов.
Например, при функционировании терминального класса одновременно могут быть сформированы несколько копий текстового редактора. В этом случае сегмент кода у всех процессов, соответствующих редакторам, будет единый, а сегменты данных будут у каждого процесса свои.
С
ледует отметить, что при использовании динамически загружаемых библиотек возможно разделение сегмента кода на неизменную часть, которая может разделяться между процессами и часть, соответствующую изменяемому в динамике коду подгружаемых программ.
Аппаратная составляющая содержит все регистры и аппаратные таблицы ЦП, используемые активным или исполняемым процессом (счетчик команд, регистр состояния процессора, аппарат виртуальной памяти, регистры общего назначения и т. д.).
Обращаем внимание, что аппаратная составляющая имеет смысл только для процессов, находящихся в состоянии выполнения. Для процессов, находящихся в других состояниях содержимое составляющей не определено.
Системная составляющая.
В системной составляющей контекста процесса содержатся различные атрибуты процесса, такие как:
-
идентификатор родительского процесса;
-
текущее состояние процесса;
-
приоритет процесса;
-
реальный идентификатор пользователя-владельца (идентификатор пользователя, сформировавшего процесс);
-
эффективный идентификатор пользователя-владельца (идентификатор пользователя, по которому определяются права доступа процесса к файловой системе);
-
реальный идентификатор группы, к которой принадлежит владелец (идентификатор группы к которой принадлежит пользователь, сформировавший процесс);
-
эффективный идентификатор группы, к которой принадлежит владелец (идентификатор группы «эффективного» пользователя, по которому определяются права доступа процесса к файловой системе);
-
список областей памяти;
-
таблица открытых файлов процесса;
-
информация о том, какая реакция установлена на тот или иной сигнал (аппарат сигналов позволяет передавать воздействия от ядра системы процессу и от процесса к процессу);
-
информация о сигналах, ожидающих доставки в данный процесс;
-
сохраненные значения аппаратной составляющей (когда выполнение процесса приостановлено).
Некоторые пояснения.