Э. Таненбаум - Архитектура компьютера (1127755), страница 137
Текст из файла (страница 137)
Главная файловая таблица является файлом и может быть помещена в любое место в пределах тома. Это устраняет проблему, возникающую при обнаружении испорченных дисковых блоков среди индексных дескрипторов. Главная файловая таблица показана на рис. 6.28. Она начинается с заголовка, в котором дается информация о томе (указатели на корневой каталог, файл загрузки, список лнц, пользующихся свободным доступом и т.
д.). Затем идет по одному элементу на каждый файл или каталог (1 Кбайт за исключением тех случаев, когда размер кластера составляет 2 Кбайт и более). Каждый элемент содержит все метаданные (административную информацию) о файле или каталоге. Допускается несколько форматов, один из которых показан на рис. 6.28. 542 Глава 6. Уровень операционной системы Имя Имя для файла МЗ-008 Безопасность Данные Стандартная информация Элемент таблицы МРТдля одного файла Главная Файловая таблица (МРТ) Рно. 8.28.
Главная файловая таблица е системе ййлботтз ХР Поле стандартной информации содержит информацию меток времени, необходимых стандартах РО81Х, числе связей, битах «только чтение», битах архивирования и т. д, Это поле имеет фиксированную длину и является обязательным. Имя файла может иметь любую длину в пределах 255 Цп1сог(е-символов. Чтобы такие файлы стали доступными для устаревших 16-разрядных программ, они могут снабжаться дополнительным именем М8-1)05, состоящим максимум из 8 символов, за которыми следует точка и расширение из 3 символов. Если реальное имя файла соответствует правилу именования М8-ОО8 (8 + 3), второе имя в стиле М5-ВОЗ не используется.
Далее следует поле безопасности. Во всех версиях, вплоть до Ъ'(проц з ТчТ 4.0, в поле безопасности содержался дескриптор безопасности. Начиная с %~1пдоъъ 2000, вся информация о безопасности помещается в один файл, а поле безопасности просто указывает на соответствующую часть этого файла. Для файлов небольшого размера сами данные этих файлов могут содержаться в записи главной файловой таблицы, что упрощает их вызов — для этого не требуется обращаться к диску. Данная концепция получила название непосредственный файл 11481 Для файлов большого размера это поле содержит указатели на кластеры с данными или (что более распространено) на блоки последовательных кластеров, так что номер кластера и его длина могут представлять произвольное количество данных.
Если элемент главной файловой таблицы недостаточно велик для хранения нужной информации, с ним можно связать один или несколько дополнительных элементов (записей). Максимальный размер файла составляет 2м байт. Поясним, что собой представляет файл такого размера.
Представим, что файл записан в двоичной системе, а каждый 0 или 1 занимает 1 мм пространства. Величина 2зт мм соответствует значению 15 световых лет. Этого хватило бы для того, чтобы выйти за пределы Солнечной системы, достичь Альфа Центавры и вернуться обратно. Файловая система 1чТР8 имеет много других интересных особенностей, в частности, она поддерживает компрессию данных и механизм отказоустойчивости на основе атомарных транзакций. Дополнительную информацию можно найти в 11771. Примеры операционных систем 543 Примеры управления процессами Системы %'пк1оцз ХР и 1Л~ПХ позволяют разделить работу на несколько процессов, выполняющихся параллельно и взаимодействующих друг с другом, как в примере с производителем и потребителем, который мы обсуждали ранее.
В этом подразделе мы поговорим о том, как происходит управление процессами в обеих системах. Обе системы поддерживают параллелизм в пределах одного процесса с использованием программных потоков, и об этом мы тоже расскажем. Управление процессами в 0Р!!Х В любой момент процесс в Пй11Х может создать субпроцесс, являющийся его точной копией. Для этого выполняется системный вызов 1ог1. Исходный процесс называется родительским, а новый — дочерним. Два процесса, полученные в результате вызова ~от~, абсолютно идентичны и даже разделяют одни и те же файловые дескрипторы.
Однако каждый из этих двух процессов выполняет свою работу независимо от другого. Часто дочерний процесс определенным образом дезориентирует дескрипторы файлов, а затем выполняет системный вызов ехес, который заменяет программу и данные программой и данными из выполняемого файла, определенного в качестве параметра вызова ехес. Например, если пользователь вводит команду худ то интерпретатор команд (оболочка) выполняет операцию ~ос~, порождая таким образом дочерний процесс. А этот процесс выполняет вызов ехес, чтобы запустить программу хух Эти два процесса работают параллельно (с системным вызовом ехес или без него), но иногда родительский процесс должен по каким-либо причинам ждать, чтобы дочерний процесс завершил свою работу, и только после этого продолжает выполнение тех илн иных действий.
В этом случае родительский процесс выполняет системный вызов иа11 или иааСрЫ, в результате чего он временно приостанавливается и ждет, пока дочерний процесс не выполнит системный вызов ех1С. Процессы могут выполнять вызов 1огЕ сколь угодно часто, в результате чего получается целое дерево процессов. Посмотрите на рис. 6.29. Здесь процесс А выполнил вызов ~ос~ дважды и породил два новых процесса, В и С. Затем процесс В тоже выполнил вызов 1огЕ дважды, а процесс С вЂ” один раз. Таким образом, получилось дерево из шести процессов. .~ — — Исходный процесс — Процессы, порожденные процессом Я ~ — — Процессы, порожденные дочерними процессами процесса Я Рис. 6.29. Дерево процессов в системе 0МХ Процессы в П1ч1Х могут взаимодействовать друг с другом через специальную информационную структуру, которая называется каналом.
Канал представляет 544 Глава 6. Уровень операционной системы собой вид буфера, в который один процесс записывает поток данных, а другой процесс извлекает оттуда эти данные. Байты всегда возвращаются из канала в том порядке, в котором они были записаны. Случайный доступ невозможен. Каналы не сохраняют ~ренин между фрагментами данных, поэтому если один процесс записал в канал 4 фрагмента по 128 байт, а другой процесс считывает данные по 512 байт, то второй процесс получит все данные сразу без указания на то, что они были записаны за несколько приемов.
В Бузгеш 'ч' и 8о1аг1з применяется другой метод взаимодействия процессов. Здесь используются так называемые очереди сообщений. Процесс может создать новую очередь сообщений или открыть уже существующую с помошью вызова взддет. Для отправки сообщений используется вызов вздзпо, а для получения — вздгесч. Сообщения, отправленные таким способом, отличаются от данных, помещаемых в канал. Во-первых, границы сообщений сохраняются, в то же время канал просто передает поток данных.
Во-вторых, сообщения имеют приоритеты, поэтому срочные сообщения идут перед всеми остальными. В-третьих, сообщения типизированы, и вызов вздгесч позволяет определять их тип, если это необходимо. Два и более процесса могут разделять общую область своих адресных пространств. (ЛЧ1Х управляет этой разделенной памятью путем отображения одних и тех же страниц на виртуальное адресное пространство всех разделенных процессов. В результате запись в общую область, произведенная одним из процессов, будет видна всем остальным процессам. Этот механизм обеспечивает очень высокую пропускную способность при взаимодействии процессов.
Еще одна особенность Бузгеш Ч и Бо1аг(з — наличие семафоров. Принципы их работы мы уже описывали, когда говорили о производителе и потребителе. Системы ()М1Х могут поддерживать несколько программных потоков управления в пределах одного процесса. Эти потоки управления обычно называют просто программными потоками. Они похожи на процессы, которые делят общее адресное пространство и все объекты, связанные с этим адресным пространством (дескрипторы файлов, переменные окружения и т. д.). Однако каждый поток имеет собственный счетчик команд, собственные регистры и собственный стек.
Если один из программных потоков приостанавливается (например, пока не завершится процесс ввода-вывода), другие программные потоки в том же процессе могут продолжать работу. Два программных потока в одном процессе, которые действуют как процесс-производитель и процесс-потребитель,напоминают два однопоточных процесса, которые разделяют сегмент памяти, содержащий буфер, хотя не идентичны нм. Во втором случае каждый процесс имеет собственные дескрипторы файлов и т, д., тогда как в первом случае все эти элементы общие. В примере взаимодействия производителя и потребителя мы видели, как работают потоки в )ача. Иногда для поддержки каждого из программных потоков исполняющая система Дача использует программный поток операционной системы, однако это не обязательно.
В каких случаях могут понадобиться программные потоки? Рассмотрим веб-сервер. Такой сервер может хранить в основной памяти кэш часто используемых веб-страниц. Если нужная страница находится в кэш-памяти, то она выдается немедленно. Если нет, то она вызывается с диска. К сожалению, на это требуется довольно длительное время (обычно 20 миллисекунд), на это время Примеры операционных систем 545 процесс блокируется и не может обслуживать вновь поступающие запросы, даже если запрашиваемые веб-страницы находятся в кэш-памяти.