
Операционные системы ЭВМ
..pdf90
представление о том, что они собой представляют и как работают, приведем следующий пример (взятый из UNIX).
1.Create. Создать каталог. Только что созданный каталог пуст и не содержит других элементов, кроме (.) и (..), автоматически помещаемых в каталог операционной системой.
2.Delete. Удалить каталог. Может быть удален только пустой каталог. Элементы (.) и (..) файлами не являются и удалены быть не могут.
3.Opendir. Открыть каталог. После этой операции каталог может быть прочитан. Например, для распечатки всех файлов, содержащихся в каталоге, программа, создающая листинг, открывает каталог, чтобы прочитать имена всех содержащихся в нем файлов. Прежде, чем каталог может быть прочитан, его следует открыть, подобно открытию и чтению файла.
4.Closediг. Закрыть каталог. Когда каталог прочитан, его следует закрыть, чтобы освободить место во внутренней таблице.
5.Readdiг. Прочитать следующий элемент открытого каталога. В прежние времена было возможно читать каталоги с помощью обычного системного вызова read, но такой подход был небезопасен, так как требовал от программиста умения работать с внутренней структурой каталогов. Поэтому был создан отдельный системный вызов readdir, всегда возвращающий одну запись каталога стандартного формата независимо от используемой структуры каталогов.
6.Rename. Переименование каталога. Во многих отношениях каталоги аналогичны файлам и могут переименовываться так же, как и файлы.
7.Link. Связывание представляет собой технику, позволяющую файлу появляться сразу в нескольких каталогах. Этот системный вызов принимает в качестве входных параметров имя файла и имя пути и создает связь между ними. Таким образом, один и тот же файл может появляться сразу в нескольких каталогах. Подобная связь, увеличивающая на единицу счетчик i-узла файла (для учета количества каталогов со ссылками на этот файл), иногда называется жесткой связью.
8.Unlink. Удаление ссылки на файл из каталога. Если файл присутствует только в одном каталоге, то данный системный вызов удалит его из файловой системы. Если существует несколько ссылок на этот файл, то будет удалена только указанная ссылка, а остальные останутся. Этот системный вызов применяется для удаления файла в операционной системе UNIX.
91
Приведенный выше список содержит наиболее важные системные вызовы, но существует также множество других, например, для управления защитой информации.
7.3.Реализация файловой системы
Рассмотрим структуру файловой системы с точки зрения разработчика. Файловые системы хранятся на дисках. Большинство дисков делятся на несколько разделов с независимой файловой системой на каждом разделе. Сектор 0 диска называется главной загрузочной записью (MBR, Master Boot Record) и
используется для загрузки компьютера. В конце главной загрузочной записи содержится таблица разделов. В ней хранятся начальные и конечные адреса (номера блоков) каждого раздела. Один из разделов помечен как активный. При загрузке компьютера BIOS считывает и исполняет MBR-запись, после чего загрузчик в MBRзаписи определяет активный раздел диска, считывает его первый блок, называемый загрузочным, и исполняет его. Программа, находящаяся в загрузочном блоке, загружает ОС, содержащуюся в этом разделе. Загрузочные блоки есть во всех разделах, даже в тех, где нет загружаемой ОС. Это сделано для того, чтобы в случае необходимости любой раздел мог быть сделан активным.
Наиболее важным моментом в реализации хранения файлов является учет соответствия блоков диска файлам. Для определения того, какой блок какому файлу принадлежит, в различных ОС применяются различные методы.
Простейшей схемой выделения файлам определенных блоков на диске является система, в которой файлы представляют собой непрерывные наборы соседних блоков диска. Тогда на диске, состоящем из блоков 1 Кбайт, файл размером 50 Кбайт будет занимать 50 последовательных блоков.
У такой системы есть два важных преимущества. Во-первых, ее легко реализовать. А во-вторых, производительность у нее очень высокая.
Однако у этой системы есть и серьезный недостаток – со временем диск становится фрагментированным. Поэтому чаще всего такая схема используется на
CD-ROM.
Второй метод размещения файлов состоит в представлении каждого файла в виде связанного списка из блоков диска. Первое слово каждого блока используется как указатель на следующий блок. В остальной части блока хранятся данные. Такой метод позволяет использовать каждый блок диска. Нет потерь дискового
92
пространства на фрагментацию. Кроме того, в каталоге нужно хранить только адрес первого блока файла.
С другой стороны, произвольный доступ к такому файлу будет довольно медленным. Чтобы получить доступ к блоку n, ОС должна сначала прочитать первые n – 1 блоков по очереди.
Кроме того, размер блока уменьшается на несколько байтов, требуемых для хранения указателя, что приводит к тому, что размер блока не будет являться степенью двух, что может потребовать объединять два соседних блока диска.
Оба недостатка такой схемы организации файлов могут быть устранены, если указатели на следующие блоки хранить не прямо в блоках, а в отдельной таблице. Цепочка блоков файла завершается специальным маркером (например, –1), не являющимся допустимым номером блока. Такая таблица, загружаемая в оперативную память, называется FAT-таблицей (File Allocation Table – таблица размещения файлов).
Эта схема позволяет использовать для данных весь блок. Кроме того, случайный доступ при этом становится намного проще. Основной недостаток этого метода в том, что вся таблица должна постоянно находиться в памяти.
Последний метод отслеживания принадлежности блока диска файлам состоит в связывании с каждым файлом структуры данных, называемой i-узлом (index node
– индекс-узел), содержащей атрибуты файла и адреса блоков файла. Большое преимущество такой схемы заключается в том, что каждый конкретный i-узел должен находиться в памяти только тогда, когда соответствующий ему файл открыт. Чтобы избежать ситуации, когда не хватит количества адресов блоков, выделенных файлу, последний адрес блока указывает не на блок, принадлежащий файлу, а на блок диска, в котором хранится следующий i-узел, содержащий дополнительные дисковые адреса.
Часто разным пользователям бывает нужно совместно использовать одни и те же файлы. Чтобы это реализовать, совместно используемый файл одновременно должен присутствовать в каталогах, принадлежащих разным пользователям. Такое соединение между каталогом одного пользователя и совместно используемым файлом в каталоге другого называется связью.
Несколько слов об организации дискового пространства. Почти все файловые системы хранят файлы блоками фиксированного размера. Первая проблема связана с выбором размера блока. С одной стороны, если выбрать блоки большого размера,
93
то в случае использования маленьких файлов будет оставаться большой незанятый объем в каждом блоке. И наоборот, если выбрать маленькие блоки, то при работе с большими файлами будет много мелких блоков, что приведет к снижению производительности. В связи с этим очень сложно выбрать золотую середину между скоростью чтения/записи данных и эффективностью использования дискового пространства.
В операционных системах на базе UNIX выбраны блоки 1 Кбайт, а в Windows блок может быть любой степенью числа два в зависимости от размера диска.
После того, как выбран размер блоков, следует определить, как учитывать свободные и занятые блоки. Это можно осуществлять двумя способами. Первый вариант подразумевает использование списков блоков. В таком списке один блок содержит 32-битную запись номера одного свободного блока. Другой метод состоит
вхранении этой информации в виде битового массива (бит-карты). При этом на каждый блок приходится по одному биту вместо 32. Свободные блоки обозначаются
вмассиве единицами, а занятые – нулями.
Переходя к вопросу надежности файловой системы, нельзя не сказать об архивации данных. Для создания резервной копии диска существует две стратегии: физическая архивация и логическая. Физическая архивация состоит в поблочном копировании всего диска с блока 0 по последний блок.
Логическая архивация сканирует один или несколько указанных каталогов со всеми их подкаталогами и копирует все содержащиеся в них файлы и каталоги полностью либо только изменившиеся с указанной даты.
Вторым аспектом, относящимся к проблеме надежности, является непротиворечивость файловой системы. Файловые системы обычно читают блоки данных, модифицируют их и записывают обратно. Если в системе произойдет сбой прежде, чем все модифицированные блоки будут записаны на диск, файловая система может оказаться в противоречивом состоянии.
Существует специальная обслуживающая программа, занимающаяся проверкой непротиворечивости. При этом есть два типа такой проверки: блоков и файлов. При проверке непротиворечивости блоков программа создает две таблицы, каждая из которых содержит счетчик для каждого блока, изначально установленный на 0. Счетчики в первой таблице учитывают, сколько раз каждый блок присутствует в файле. Счетчики во второй таблице записывают, сколько раз каждый блок учитывается в списке свободных блоков.
94
Проверка файлов на непротиворечивость осуществляется аналогично, только счетчики подсчитывают количество файлов.
Поговорим теперь о производительности файловой системы. Доступ к диску производится значительно медленнее, чем к оперативной памяти. Если требуется прочитать или записать всего одно слово, то память оказывается примерно в миллион раз быстрее жесткого диска. Поэтому во многих файловых системах применяются различные методы оптимизации, увеличивающие производительность.
Одним из таких методов является кэширование. Для минимизации количества обращений к диску применяется блочный кэш или буферный кэш. Кэшем называется набор блоков, логически принадлежащих диску, но хранящихся в оперативной памяти по соображениям производительности.
Существуют различные алгоритмы управления кэшем. Обычная практика заключается в перехвате всех запросов чтения к диску и проверке наличия требующихся блоков в кэше. Если блок присутствует в кэше, то запрос чтения блока может быть удовлетворен без обращения к диску. В противном случае блок сначала считывается с диска в кэш, а оттуда копируется по нужному адресу памяти. Последующие обращения к тому же блоку могут удовлетворяться из кэша.
Второй метод увеличения производительности файловой системы называется опережающее чтение диска. Он состоит в попытке получить блоки диска в кэш прежде, чем они потребуются. Многие файлы считываются последовательно. Когда файловая система получает запрос на чтение блока k файла, она выполняет его, но после этого сразу проверяет, есть ли в кэше блок k+1. Если этого блока в кэше нет, файловая система читает его в надежде, что к тому моменту, когда он понадобится, этот блок уже будет считан в кэш. В крайнем случае, он уже будет на пути туда.
И, наконец, третий способ увеличения производительности файловой системы – это снижение времени перемещения блока головок. Достигается это помещением блоков, к которым велика вероятность доступа в течение короткого интервала времени, близко друг к другу, желательно на одном цилиндре. Когда записывается выходной файл, файловая система должна зарезервировать место для чтения таких блоков за одну операцию. Это сделать значительно проще, если свободные блоки учитываются в битовом массиве, а весь битовый массив помещается в оперативной памяти.
95
7.4.Примеры файловых систем
Рассмотрим основные варианты файловых систем. В качестве первого примера рассмотрим файловую систему, применяемую на CD-ROM (CDFS). Эти системы самые простые, так как запись на CD-ROM может осуществляться только один раз и на них не бывает свободных блоков.
Файловая система для CD-ROM описывается Международным стандартом ISO 9660, хотя имеются и дополнительные расширения этого стандарта.
Данные на CD-ROM организованы в виде спирали. Биты вдоль спирали разделены на логические блоки по 2352 байта. Часть этих байтов расходуется на служебную информацию, в результате полезная нагрузка в каждом блоке составляет 2048 байт. У музыкальных дисков позиция блока может указываться в минутах и секундах. При этом каждая секунда содержит 75 блоков.
Каждый CD-ROM начинается с 16 блоков, чья функция не определяется стандартом. Следом располагается один блок, содержащий основной описатель тома, в котором хранится некоторая общая информация о CD-ROM – идентификаторы системы, тома, издателя, лица, подготовившего данные, размер логического блока (2048, 4096, 8192 и т.д.), описатель корневого каталога и др. Заполнять этот блок можно только символами верхнего регистра, цифрами и ограниченным количеством знаков препинания.
Все записи каталога, кроме первых двух, располагаются в алфавитном порядке. Первая запись представляет собой описатель самого каталога. Вторая запись является ссылкой на родительский каталог. Эти записи аналогичны каталоговым записям (.) и (..) в UNIX.
Количество каталоговых записей не ограничено. Однако глубина вложенности каталогов не может быть более восьми. В дальнейшем был предложен ряд расширений для стандарта ISO 9660. По этим расширениям длина имен файлов увеличилась до 64 символов, стало возможным использовать набор символов Unicode, глубина вложенности каталогов стала неограниченной и появилась возможность добавлять в имена каталогов расширения.
Перейдем теперь к файловым системам собственно персональных компьютеров. Одной из первых файловых систем была CP/M (Control Program for Microcomputers). Она была предшественницей MS-DOS и доминировала на рынке в 80-х годах XX века.
96
Вфайловой системе CP/М всего один каталог, содержащий записи фиксированного размера (32 байт). При этом в CP/M поддерживалась поочередная работа разных пользователей, то есть каждый пользователь видел только свои файлы.
Преемником файловой системы CP/M стала MS-DOS. Файловая система MSDOS во многом напоминает файловую систему CP/M. В первой версии MS-DOS также был всего один каталог. Однако с версии MS-DOS 2.0 появилась иерархическая система каталогов. В системе MS-DOS пользователи могли видеть все файлы всех пользователей. Имена файлов в файловой системе MS-DOS могли быть только в формате 8.3, то есть 8 символов имени + 3 символа расширения.
Взависимости от количества блоков на диске в системе MS-DOS применяется три версии файловой системы FAT: FAT-12, FAT-16 и FAT-32. В действительности FAT-32 является неверным названием, так как используются только 28 младших битов дискового адреса. Ее следовало бы назвать FAT-28, но степени двух звучат гораздо приятнее.
Во всех файловых системах FAT размер блока диска в байтах может быть установлен равным некоторому числу, кратному 512 (возможно, различному для каждого раздела диска), с наборами разрешенных размеров блоков (называемых корпорацией Microsoft размерами кластеров), различными для каждого варианта FAT. В первой версии системы MS-DOS использовалась FAT-12 с 512-байтовыми блоками, что позволяло создавать дисковые разделы размером до 212 х 512 байт (на самом деле только 4086 х 512 байт, так как 10 дисковых адресов использовались как специальные маркеры – конец файла, дефектный блок и т. д.). При этом максимальный размер дискового раздела мог составлять 2 Мбайт, а в оперативной памяти FAT-таблица занимала 4096 элементов по два байта каждый. Кроме того, обработка 12-разрядных адресов была довольно медленной.
Такая система неплохо работала на гибких дисках, но с появлением жестких дисков появились проблемы. Корпорация Microsoft попыталась решить проблему, разрешив использовать дисковые блоки (кластеры) размером 1, 2 и 4 Кбайт. Это позволило сохранить структуру и размер таблицы FAT-12 и увеличить размер дискового раздела до 16 Мбайт.
Так как система MS-DOS поддерживала до четырех дисковых разделов на диске, новая файловая система FAT-12 могла работать с дисками емкостью до
64 Мбайт. Для поддержки винчестеров большего размера нужно было
97
предпринимать что-то еще. В результате была разработана файловая система FAT16, с 16-разрядными дисковыми указателями. Дополнительно было разрешено использовать кластеры размеров 8, 16 и 32 Кбайт. (32 768 – это максимальное число, представляющее собой степень двух, которое может быть представлено 16 двоичными разрядами.) Теперь таблица FAT-l6 постоянно занимала 128 Кбайт оперативной памяти, но с ростом размеров памяти компьютеров она получила широкое применение и быстро вытеснила файловую систему FAT-12. Максимальный размер дискового раздела, поддерживаемый системой FAT-16, равен 2 Гбайт (64 К элементов по 32 Кбайт каждый), а максимальный размер диска – 8 Гбайт, то есть четыре раздела по 2 Гбайт каждый.
С выходом второй версии операционной системы Windows 95 была представлена файловая система FAT-32 со своими 28-разрядными адресами. При этом версия системы MS-DOS, лежащая в основе Windows 95, была адаптирована для поддержки FAT-32. Теоретически в этой системе разделы могли быть по 228x215 байт, но фактически размер разделов ограничен 2 Тбайт (2048 Гбайт), так как внутренне система учитывает размеры разделов в 512-байтовых секторах с помощью 32-разрядных чисел, а 232 х 29 байт равно 2 Тбайт.
Помимо поддержки дисков большего размера, файловая система FAT-32 обладает двумя другими преимуществами перед системой FAT-16. Во-первых, 8- гигабайтный диск, использующий FAT-32, может состоять из всего одного раздела. При использовании FAT-16 он должен был содержать четыре раздела, что представлялось пользователям системы Windows как логические устройства C:, D:, Е: и F:. Какой файл на каком устройстве располагать, решать пользователю.
Другое преимущество FAT-32 перед FAT-16 заключается в том, что для дискового раздела заданного размера могут использоваться блоки меньшего размера. Например, для 2-гигабайтного дискового раздела система FAT-16 должна пользоваться 32-килобайтными блоками, в противном случае при наличии всего 64 К доступных дисковых адресов она не смогла бы покрыть весь раздел. В то же время система FAT-32 для такого же дискового раздела может использовать, например, блоки размером 4 Кбайт. Преимущество блоков меньшего размера заключается в том, что длина большинства файлов была менее 32 Кбайт. При размере блока в 32 Кбайт даже 10-байтовый файл будет занимать на диске 32 Кбайт. Если средний размер файлов, скажем, равен 8 Кбайт, тогда при использовании 32килобайтных блоков около 3/4 дискового пространства будет теряться, то есть
98
эффективность использования диска будет низкой. При 8-килобайтных файлах и 4- килобайтных блоках потерь дискового пространства не будет, но платой за это будет то, что для хранения таблицы FAT потребуется значительно больше оперативной памяти. При 4-килобайтных блоках 2-гигабайтный раздел будет состоять из 512 K блоков, поэтому таблица FAT должна состоять из 512 K элементов (занимая 2 Мбайт ОЗУ).
Файловая система MS-DOS использует FAT для учета свободных блоков. Любой незанятый блок помечается специальным кодом. Когда системе MS-DOS требуется новый блок на диске, она ищет этот код в таблице FAT. Таким образом, битовый массив или список свободных блоков не нужны.
Операционные системы Windows 95, 98, Me функционировали на основе тех же самых файловых систем FAT. В Windows 95 была файловая система FAT-12 (в первой версии) и FAT-16, а в Windows 98 и Windows Me – FAT-32. Во второй версии Windows 95 были разрешены длинные имена, причем была разработана система обратной совместимости от длинных имен к формату 8.3, чтобы названия файлов, созданных в более поздних версиях ОС могли быть прочитаны в более ранних. При этом берутся первые шесть символов, преобразуются в верхний регистр, отсекаются все пробелы и лишние точки, а в конце добавляется суффикс ~1. Если такое имя уже есть, то – ~2 и т.д.
Более современная операционная система Windows NT и ее преемники
Windows 2000/XP/Vista/7/8 и серверные ОС Windows Server 2003/2008 работают на файловой системе NTFS (New Technology File System). В ней используются 64разрядные дисковые адреса.
Файл в системе NTFS – это не просто линейная последовательность байтов как в системах FAT-32 и UNIX. Вместо этого файл состоит из множества атрибутов, каждый из которых представляется в виде потока байтов. Большинство файлов имеет несколько коротких потоков, таких как имя файла и его 64-битовый идентификатор, плюс один длинный (неименованный) поток с данными. Однако длинных потоков с данными может быть несколько. У каждого потока своя длина. Каждый поток может блокироваться независимо от остальных потоков.
Файловые системы UNIX и Windows NT будут рассмотрены в соответствующих разделах данного учебного пособия (11.7 и 12.8 соответственно).
99
8. МУЛЬТИМЕДИЙНЫЕ ОПЕРАЦИОННЫЕ СИСТЕМЫ 8.1.Введение в мультимедиа
Для начала необходимо определиться с терминами. Мультимедиа – в общеупотребительном смысле это документ, содержащий средства информации, протяженные во времени, то есть проигрываемые в течение определенного интервала времени. Другой неоднозначный термин – это видео, часто под ним понимается продукт, включающий как изображение, так и звук.
Основными характеристики мультимедиа являются:
1.Мультимедиа использует предельно высокие скорости передачи данных.
2.Для мультимедиа требуется воспроизведение в режиме реального
времени.
Существуют различные системы передачи видеосигнала – NTSC (Северная и Южная Америка, Япония), PAL (Западная Европа), SECAM (Франция, Восточная Европа, страны бывшего СССР). Технически лучшей системой является PAL. Параметры реального времени, требуемые для приемлемого воспроизведения мультимедиа, часто называют параметрами качества обслуживания. К ним относятся:
1.Средняя доступная пропускная способность.
2.Максимальная пропускная способность.
3.Минимальная и максимальная задержка, которая определяет джиттер – неравномерность времени доставки.
4.Вероятность потери бита.
8.2.Мультимедийные файлы
В большинстве систем обычный файл состоит из линейной последовательности байтов без какой-либо структуры, о которой бы знала ОС. В мультимедиа ситуация гораздо более сложная. Во-первых, видео- и аудиоданные полностью различны. Они вводятся совершенно разными устройствами, у них различная внутренняя структура (видео передается с частотой 25 – 30 кадров в секунду, тогда как аудио обычно хранится в виде 44100 Гц), и воспроизводятся они также различными устройствами.
Во-вторых, в большинстве фильмов содержится несколько звуковых дорожек (для разных языков) и несколько видов субтитров.