- •Введение
- •Понятие операционной системы. Типы операционных систем
- •Функции операционной системы
- •Структура операционной системы. Ос ms dos
- •Файлы и каталоги на дисках
- •Драйверы устройств
- •Базовая система ввода-вывода (bios)
- •Загрузчик операционной системы
- •Ядро ms dos
- •Командный процессор dos
- •Внешние команды dos
- •Файловая структура диска
- •Стартовый сектор
- •Каталоги
- •Область данных
- •Операционные системы Windows
- •Выбор платформы Windows
- •Термины
- •Архитектура Windows Режимы выполнения программного кода
- •Многозадачность
- •Управление памятью в Windows
- •Выполнение приложений
- •Интерфейс прикладного программирования Win32
- •Реестр Windows
- •Операционная система unix
- •Ядро и процессы unix
- •Диспетчер unix
- •Процессы unix
- •Дескриптор и контекст процесса
- •Иерархия процессов
- •Идентификаторы процесса
- •Группы процессов
- •Взаимодействие процессов
- •Процессы-«демоны»
- •Межпроцессные коммуникации unix
- •Сигналы
- •Сигналы unix по мере возрастания их значений:
- •Семафоры
- •Программные каналы (Pipes)
- •Очереди сообщений
- •Разделяемая память
- •Многопользовательская защита в unix
- •Идентификаторы пользователя и группы
- •Код защиты файла
- •Привилегированный пользователь
- •Эффективные и реальные идентификаторы
- •Свопинг и пейджинг в unix
- •Буфер кеш-памяти
- •Управление вводом/выводом
- •Специальные файлы
- •Взаимодействие драйверов с программной и аппаратной средой
- •Файловая система unix
- •Основные системные каталоги
- •Корневой каталог /
- •Каталог /var
- •Каталог /etc
- •Каталог /usr
- •Каталог /home (/export/home)
- •Каталог/opt (/opti, /opt2, ... /optn)
- •Команды управления swap
- •Команда mkfile
- •Специальные файлы
- •Класс устройства
- •Тип и номер
- •Связь физической и логической структур
- •Создание и монтирование файловой системы
- •Дисковые устройства в unix
- •Внутренняя структура файловой системы Распределение дискового пространства
- •Индексные дескрипторы
- •Системные вызовы unix для работы с файлами
- •Стандартные библиотечные функции ввода/вывода
- •Поточные функции ввода/вывода
- •Литература
- •Оглавление
-
Индексные дескрипторы
Логическое представление файла отличается от его физического представления. Логическое представление - это то, что вы видите, когда распечатываете файл. Вы получаете поток символов, которые представляют содержимое файла. Физическое представление - это истинная организация файла на диске. Файл, размер которого превышает один блок, обыкновенно разбросан по диску. Когда осуществляется доступ к файлу, система UNIX находит отдельные блоки в правильном порядке и организует логическое представление информации в файле.
При такой организации файлов в UNIX должен существовать список, который бы показывал, как конвертировать физическое представление файла в логическое. Это и есть список индексных дескрипторов, или, как их еще называют, i-узлов (i-nodes).
Каждый файл определяется индексным дескриптором, который содержит всю необходимую информацию о данном файле. Сюда записываются режим, тип файла, его длина в байтах, идентификаторы владельца и группы, дата последней модификации. Длина индексного дескриптора составляет 64 байта, и структуру его можно найти в файле /usr/include/sys/inode.h.
Наиболее важная часть i-узла (индексного дескриптора) есть список адресов на диске. Это 13 номеров блоков на диске, хранящихся в индексном дескрипторе. Первые 10 номеров задают первые 10 блоков файла. Длина блока, которую использует файловая система, может быть различна, но обыкновенно составляет 1024 байта в блоке. Если данные файла умещаются в первых 10 блоках или даже не занимают их все, то лишь несколько элементов списка содержат дисковые адреса. Так, если файлу достаточно четырех блоков, то первые 4 элемента списка включают соответствующие адреса, а остальные 9 заполнены нулями. В том случае, когда длина данных превышает 10 блоков (10240 байт), первые 10 элементов списка ссылаются на блоки файла, а 11-й - на блок, где размещается список следующих 256 номеров блоков. Этот блок называют косвенным. Это удобно для файлов, чей размер не превышает 10 + 256 (272384 байта). Если файл не умещается даже в 266 блоков, 12-й блок содержит адрес блока, включающего адреса 256 номеров блоков, каждый из которых, в свою очередь, содержит 256 номеров блоков, которые используются для нахождения содержания файла. Тринадцатый блок используется подобным же способом, только уже на следующем уровне. Таким образом, в 12-м блоке содержится адрес двойного косвенного блока, а в 13-м блоке - адрес тройного косвенного блока.
Таким образом, теоретически максимальный размер одного файла в UNIX составляет 16842762 блока, или 17246988288 байта! Однако, файловая система UNIX налагает ограничения на пользователей и предлагает создавать файлы размером не более 1 или 2 Мбайт, чтобы случайно не создать файл, который займет все блоки на диске.
Способ, по которому файловая система переводит имена файлов в индексные дескрипторы, достаточно прост. Каталог, в сущности, представляет собою файл, содержащий таблицу с информацией. Для каждого файла в каталоге существует строка в таблице, которая содержит имя файла и номер индексного дескриптора, который ассоциируется с файлом. Когда вводится команда cat proba.txt, чтобы получить содержимое файла на дисплее, файловая система начинает прежде всего искать в таблице текущего каталога строку с именем proba.txt, находит номер i-узла (индексного дескриптора), связанного с этим файлом, и после этого начинает извлекать блоки, которые содержат информацию, записанную в файл.
При оценке эффективности файловой системы UNIX следует помнить, что после открытия файла соответствующий индексный дескриптор считывается в память и, таким образом, системе становятся доступны все номера блоков данного файла.
Таким образом, кеширование диска и хранение в памяти копии индексных дескрипторов активных файлов существенно повышают эффективность файловой системы. Однако есть одно существенное обстоятельство, которое крайне нежелательно для файловых систем UNIX, - это внезапное отключение питания. Если система работает без UPS (бесперебойный источник питания), это может привести к нежелательным последствиям, например к потере блоков, к некорректным индексным дескрипторам, каталогам и т. д.
Чтобы смягчить последствия потери связи системы с диском, UNIX выполняет регулярное выталкивание резидентных структур данных на диск. Все монтированные файловые системы периодическим образом обновляются. Кроме того, некоторые файловые системы ведут специальный журнал и обладают способностью к самовосстановлению.