Базовые понятия операционных систем

Для операционных систем существует набор базовых понятий, например процессы, память и файлы, которые являются самыми важ­ными для понимания общей идеи построения и функционирования ОС.

Ключевое понятие ОС – процесс. Процессом называют програм­му в момент ее выполнения. С каждым процессом связывается его адресное пространство – список адресов в памяти от некоторого ми­нимума до некоторого максимума. По этим адресам процесс может занести информацию и прочесть ее. Адресное пространство содер­жит саму программу, данные к ней и ее стек. Со всяким процессом связывается некий набор регистров, включая счетчик команд, ука­затель стека и другие аппаратные регистры, а также вся информа­ция, необходимая для запуска программы. Чтобы лучше разобраться в понятии процесса, проведем аналогию с системой, работающей в режиме разделения времени. Предположим, ОС решает остановить работу одного процесса и запустить другой, потому что первый израсходовал отведенную для него часть рабочего времени ЦП. Позже остановленный процесс должен быть запущен заново из того же со­стояния, в каком его остановили. Следовательно, всю информацию о процессе нужно где-либо сохранить. Так, процесс может иметь не­сколько одновременно открытых для чтения файлов. Связанный с каждым файлом указатель дает текущую позицию, т.е. номер байта или записи, которые будут прочитаны после повторного запуска про­цесса. При временном прекращении действия процесса все указате­ли нужно сохранить так, чтобы команда чтения, выполненная после возобновления процесса, прочла правильные данные. Во многих ОС вся информация о каждом процессе хранится в таблице операцион­ной системы. Эта таблица называется таблицей процессов и представ­ляет собой связанный список структур, по одной на каждый суще­ствующий в данный момент процесс.

В каждом компьютере есть оперативная память, используемая для хранения исполняемых программ. В простых ОС в конкретный момент времени в памяти может находиться только одна програм­ма. Более сложные системы позволяют одновременно хранить в па­мяти несколько программ. Для того чтобы они не мешали друг дру­гу, необходим защитный механизм. Этот механизм управляется операционной системой.

Другой важный, связанный с памятью вопрос — управление ад­ресным пространством процессов. Обычно под каждый процесс отво­дится некоторое множество адресов, которые он может использовать. В простейшем случае, когда максимальная величина адресного про­странства для процесса меньше оперативной памяти, процесс запол­няет свое адресное пространство, и памяти хватает на то, чтобы со­держать его целиком. Однако, что произойдет, если адресное пространство процесса окажется больше, чем ОЗУ компьютера, а процесс захочет использовать его целиком? В этом случае использу­ется метод, называемый виртуальной памятью, при котором ОС хра­нит часть адресов в оперативной памяти, а часть на диске и меняет их местами при необходимости. Управление памятьюважная фун­кция операционной системы.

Файловая системаеще одно базовое понятие, поддерживаемое виртуально всеми ОС. Как было установлено, основной функцией операционной системы является маскирование особенностей рабо­ты дисков и других устройств и предоставление пользователю понятной и удобной абстрактной модели независимых от устройств фай­лов. Системные вызовы необходимы для создании, удалении, чтения или записи файлов. Перед тем как прочитать файл, его нужно разместить на диске и открыть, а после прочтения его нужно закрыть. Все эти функции осуществляют системные вызовы.

При создании места для хранения файлов ОС использует поня­тие каталогакак способ объединения файлов в группы. Например, студент может иметь по одному каталогу для каждого изучаемого им курса, каталог для электронной почты и каталог для своей домаш­ней web-страницы. Для создания и удаления каталога также необ­ходимы системные вызовы. Они же обеспечивают перемещение су­ществующего файла в каталог и удаление файла из каталога. Содержимое каталога могут составлять файлы или другие каталоги. Эта модель создает структуру — файловую систему.

Иерархии процессов и файлов организованы в виде деревьев. Иерархия процессов обычно не очень глубока, в ней ред­ко бывает больше трех уровней, тогда как файловая структура дос­таточно часто имеет четыре, пять и даже больше уровней в глубину. Иерархия процессов обычно живет, как правило, несколько минут, иерархия каталогов может существовать годами.

Каждый файл в иерархии каталогов можно определить, задав его ими пути, называемое также полным именем файла. Путь начинает­ся из вершины структуры каталогов, называемой корневым катало­гом. Такое абсолютное имя пути состоит из списка каталогов, кото­рые нужно пройти от корневого каталога к файлу, с разделением отдельных компонентов. Отдельные компоненты в ОС UNIX разде­ляются косой чертой /, а в MS-DOS и Windows – обратной косой чертой \.

Процессы и потоки

Основным понятием, связанным с операционными системами, является процессабстрактное понятие, описывающее работу про­граммы.

Процессы

Все современные компьютеры могут выполнять одновременно несколько операций. Так, одновременно с запушенной пользователем программой может выполняться чтение с диска и вывод текста на экран монитора или на принтер. В многозадачной системе про­цессор переключается между программами, предоставляя каждой от десятков до сотен миллисекунд. При этом в каждый конкретный мо­мент времени процессор занят только одной программой, но за се­кунду он успевает поработать с несколькими программами, создавая у пользователей иллюзию параллельной работы со всеми програм­мами. Иногда в этом случае говорят о псевдопараллелизме, в отличие от настоящего параллелизма в многопроцессорных системах, содержа­щих несколько процессоров, разделяющих общую память между со­бой. Производители операционных систем разработали концептуаль­ную модель последовательных процессов, упрощающую наблюдение за работой параллельно идущих процессов.

Рассмотрим содержание и применение этой модели.

В модели процесса все функционирующее на компьютере ПО организовано в виде набора последовательных процессов, или просто процессов. Процессом является выполняемая программа вместе с те­кущими значениями счетчика команд, регистров и переменных. С позиций этой абстрактной модели у каждого процесса есть соб­ственный центральный виртуальный процессор. На самом деле цен­тральный процессор переключается с процесса на процесс, но для лучшего понимания системы проще рассматривать набор процессов. идущих параллельно, чем представлять процессор, переключающими, от программы к программе. Это переключение и называется много­задачностью или мультипрограммированием.

Операционной системе нужен способ создания и прерывания процессов но мере необходимости. Обычно при загрузке ОС создаются несколько процессов. Некоторые из них обеспечивают к действие с пользователем и выполняют заданную работу. Остальные процессы являются фоновыми. Они не связаны с конкретными пользователями, но выполняют особые функции. Например, один фоновый процесс может обеспечивать ввод/вывод на печать, другой может обрабатывать запросы к web страницам.

Потоки

В обычных ОС процесс определяется соответствующим адресным пространством и одиночным управляющим потоком. Но часто встре­чаются ситуации, когда в одном адресном пространстве предпочти­тельно иметь несколько квазипараллсльных управляющих процессов. Например, в рамках одного процесса редактора MS Word запускаются несколько потоков: редактор текста, форматирование текста, проверка орфографии, фоновая печать и др.

Почему же потоки так необходимы? Основной причиной явля­ется выполнение большинством приложений большого количества действий, некоторые из них могут время от времени блокироваться. Программу можно существенно упростить, если разбить при­ложение на несколько последовательных потоков, запушенных в ква­зипараллельном режиме.

При использовании потоков имеется также возможность совме­стного применения параллельными объектами одного адресного про­странства и всех содержащихся в нем данных. Для некоторых при­ложений эта возможность является существенной. В таких случаях схема параллельных процессов с разными адресными пространства­ми не подходит.

В пользу потоков работает еще один аргумент — легкость их со­здания и уничтожения, так как с потоком не связаны никакие ре­сурсы. В большинстве систем на создание потока уходит примерно в 100 раз меньше времени, чем на создание процесса. Это свойство особенно полезно при необходимости динамического и быстрого изменении числа потоков.

При запуске многопоточного процесса в системе с одним про­цессором потоки работают поочередно. Процессор быстро переклю­чается между потоками, создавая впечатление параллельной работы потоков, даже не на очень быстром процессоре. Например, в случае трех потоков в одном процессе все потоки будут работать параллель­но. Каждому потоку будет соответствовать виртуальный процессор с быстродействием, равным одной трети быстродействия реального процессора.

Третьим аргументом является производительность. Концепция потоков не дает увеличения производительности, если они ограни­чены возможностями процессора. Но когда имеется одновременная потребность в выполнении большого объема вычислений и опера­ций ввода-вывода, наличие потоков позволяет совмещать эти про­цедуры во времени, увеличивая, тем самым, общую скорость работы приложения.

Концепция потоков полезна также в системах с несколькими процессорами, где возможен настоящий параллелизм.

 

Концепция потоков добавляет к модели процесса возможность одновременного выполнения в одной и той же среде процесса не­скольких достаточно независимых программ. Несколько потоков, работающих параллельно в одном процессе, аналогичны нескольким процессам, идущим параллельно на одном компьютере. В первом случае потоки разделяют адресное пространство, открытые файлы и другие ресурсы. Во втором — процессы совместно пользуются физи­ческой памятью, дисками, принтерами и другими ресурсами. Пото­ки обладают некоторыми свойствами процессов, поэтому их иногда называют упрощенными процессами. Термин многопоточность также используется для описания использования нескольких потоков в од­ном процессе.

Концепция потоков полезна также в системах с несколькими процессорами, где возможен настоящий параллелизм.

Управление памятью

Память представляет собой важный ресурс, требующий тщатель­ного управления, поскольку программы увеличиваются в размерах быстрее, чем память.

Память в компьютере имеет иерархическую структуру. Неболь­шая ее часть представляет собой очень быструю энергозависимую (теряющую информацию при выключении питания) кэш-память. Компьютеры обладают также десятками мегабайт энергозависимой оперативной памяти ОЗУ (RAM, Random Access Memory — память с произвольным доступом) и десятками или сотнями гигабайт медлен­ного энергонезависимого пространства на жестком диске. Одной из задач ОС является координация использования всех этих составля­ющих памяти.

Часть операционной системы, отвечающая за управление памя­тью, называется модулем управления памятью или менеджером памяти. Менеджер следит за тем, какая часть памяти используется в данный момент, выделяет память процессам и по их завершении освобождает ресурсы, управляет обменом данных между ОЗУ и диском.

Системы управления памятью делят на два класса. К первому классу относятся системы, перемещающие процессы между оперативной памятью и диском во время их выполнения, т.е. осуществля­ющие подкачку процессов целиком (swapping) или постранично (paging). Ко второму – те, которые этого не делают. Второй класс систем проще. Поскольку ПО растет еще быстрее, чем память, то, вероятно, потребность в эффективном управлении памятью бу­дет существовать всегда. В 80-е гг. использовали системы разделения времени для работы десятков пользователей на машинах VAX с объе­мом памяти 4 Мбайт. Сейчас рекомендуется для индивидуальной работы в системе Windows 2000 устанавливать на компьютер не ме­нее 64 Мбайт оперативной памяти, для Windows XP – 128 Мбайт. Дальнейшее развитие в сторону мультимедийных систем накладывает еще большие требования на размер оперативной памяти.

Самая простая схема управления памятью – однозадачная систе­ма без подкачки на диск — заключается в том, что в каждый момент времени работает только одна программа, и память разделяется меж­ду программами и операционной системой. Когда система органи­зована таким образом, в каждый конкретный момент времени мо­жет работать только один процесс. Как только пользователь набирает команду, ОС копирует запрашиваемую программу с диска в память и выполняет ее, а после окончания процесса выводит на экран сим­вол приглашения и ждет новой команды. Получив команду, она за­гружает новую программу в память, записывая ее поверх предыду­щей. Так работают компьютеры с операционной системой MS-DOS.

Большинство современных систем позволяет одновременный запуск нескольких процессов. Для таких систем используются два основных способа управления памятью, зависящие частично от доступного аппаратного обеспечения.

Самая простая стратегия, называемая свопингом (swapping) или подкачкой, состоит в том, что каждый процесс полностью переносится в память, работает некоторое время и затем целиком возвращается на диск.

Другая стратегия называемая виртуальная память, позволяет программам работать даже тогда, когда они только частично находятся в памяти. Основная идея виртуальной памяти заключается в том, что общий размер программы, данных и стека может превысить доступное количество оперативной памяти. ОС хранит части програм­мы, выполняющейся в настоящий момент в оперативной памяти, остальные – на диске. Например, программа размером 16 Мбайт сможет работать на машине с 4 Мбайт памяти, если тщательно продумать, какие 4 Мбайт должны храниться в памяти и каждый момент времени. При этом части программы, находящиеся на диске и в па­мяти, будут меняться местами по мере необходимости.

Виртуальная память может также работать в многозадачной системе при одновременно находящихся в памяти частях многих программ. Когда программа ждет перемещения в память очередной её части, она находится в состоянии ввода-вывода и не может работать, поэтому ЦП может быть отдан другому процессу.

Ввод-вывод

Одной из важнейших функций ОС является управление устрой­ствами ввода-вывода компьютера. Операционная система дает этим устройствам команды, перехватывает прерывания и обрабатывает ошибки. Она должна обеспечить простой и удобный интерфейс меж­ду устройствами и остальной частью системы. Интерфейс должен быть одинаковым для всех устройств с целью достижения независи­мости от применяемой аппаратуры. Программное обеспечение вво­да-вывода составляет существенную часть операционной системы.

Устройства ввода-вывода можно разделить на две категории: блочные устройства и символьные устройства. Блочные устройства хранят информацию в виде блоков фиксированного размера, причем у каждого блока имеется свой адрес. Размеры блоков колеблются от 521 до 32 768 байт. Важное свойство блочного устройства состоит в том, что каждый его блок может быть прочитан независимо от ос­тальных блоков. Наиболее распространенными блочными устрой­ствами являются диски.

Другой тип устройств ввода-вывода – символьные устройства. Символьное устройство принимает или предоставляет поток симво­лов без какой-либо блочной структуры. Оно не является адресуемым и не выполняет операцию поиска. Принтеры, сетевые адаптеры, мыши и большинство других устройств, не похожих на диски, мож­но считать символьными устройствами.

Такая классификация является условной. Некоторые устройства не попадают ни в одну из категорий. Например, часы не являются блок-адресуемыми. Они не формируют и не принимают символьных потоков. Вся их работа заключается в инициировании прерываний в строго определенные моменты времени. И все же модель блочных и символьных устройств является настолько обшей, что может служить основой для достижения независимости программного обеспечения ОС от устройств ввода-вывода. Например, файловая система имеет дело с абстрактными блочными устройствами, а зависимую от уст­ройств часть оставляет программному обеспечению низкого уровня.

Устройства ввода-вывода обычно состоят из механической и электронной частей. Механический компонент находится в самом устройстве. Электронный компонент устройства называется контрол­лером или адаптером. В современных компьютерах контроллеры встраиваются в материнскую плату или располагаются на самом ус­тройстве ввода-вывода. Многие контроллеры способны управлять несколькими идентичными устройствами.

Часто интерфейс между устройством и контроллером является интерфейсом низкого уровня. С диска в контроллер поступает по­следовательный поток битов, начинающийся с заголовка сектора (преамбулы), за которым следует 4096 бит в секторе, и контрольная сумма, называемая кодом исправления ошибок ЕСС (Error Correcting Code). Заголовок сектора записывается на диск во время формати­рования. Он содержит номера цилиндра и сектора, размер сектора, коды синхронизации и другую служебную информацию.

Работа контроллера заключается в конвертировании последова­тельного потока битов в блок байтов и коррекцию ошибок. Обычно байтовый блок накапливается в буфере контроллера. Затем проверя­ется контрольная сумма блока, и если она совпадает с указанной в заголовке сектора, то блок считается принятым без ошибок. После этого блок копируется в оперативную память.

Контроллер монитора (видеоадаптер) работает на таком же низ­ком уровне. Он считывает из памяти байты, содержащие символы, которые следует отобразить, и формирует сигналы, используемые для модуляции луча электронной трубки, заставляющие ее выводить изображение на экран. Видеоадаптер формирует сигналы, управляющие горизонтальным и вертикальным возвратом луча. Операцион­ная система только инициализирует контроллер, задавая небольшое количество параметров, таких, как количество пикселов в строке и число строк на экране, а всю работу по управлению передвижения­ми луча по экрану выполняет контроллер.

Ключевая концепция разработки ПО ввода-вывода формулиру­ется как независимость от устройств. Эта концепция означает воз­можность написания программ, способных получать доступ к лю­бому устройству ввода-вывода без предварительного указания конкретного устройства. Например, программа, читающая данные из входного файла, должна одинаково успешно работать с файлом на дискете, жестком диске или компакт-диске. При этом не должны требоваться какие-либо изменения в программе. В качестве выход­ного устройства также может быть указан экран, файл на любом дис­ке или принтер. Все проблемы, связанные с отличиями этих уст­ройств, снимает операционная система.

Тесно связан с концепцией независимости от устройств прин­цип единообразного именования. Имя файла или устройства должно быть просто текстовой строкой или целым числом. Оно никак не должно зависеть от физического устройства.

Другим важным аспектом ПО ввода-вывода является обработка ошибок. Ошибки должны обрабатываться как можно ближе к аппа­ратуре. Если контроллер обнаружил ошибку чтения, он должен по возможности исправить эту ошибку сам. Если он не может это сде­лать, то ошибку должен обработать драйвер устройства. Многие ошибки бывают временными, например ошибки чтения, вызванные пылинками на читающих головках. Такие ошибки исчезают при по­вторном чтении блока. Только если нижний уровень не может сам справиться с проблемой, о ней следует информировать верхний уро­вень. Во многих случаях восстановление может осуществляться на нижнем уровне, так, что верхние уровни даже не будут знать о на­личии ошибок.

И последним понятием, которое связано с вводом-выводом, яв­ляется понятие выделенных устройств и устройств коллективного ис­пользования. С некоторыми устройствами, такими как диски, может одновременно работать большое количество пользователей. При этом не должно возникать проблем при одновременном открытии на од­ном и том же диске нескольких файлов. Другие устройства, такие как накопители на магнитной ленте, предоставляются в монопольное пользование. Пока не завершит свою работу один пользователь на­копитель не может быть предоставлен другому пользователю. ОС должна уметь управлять как устройствами общего доступа, так и выделенными устройствами.

Существуют три различных способа осуществления операций ввода-вывода. Простейший вид ввода-вывода состоит в том, что всю работу выполняет центральный процессор. Этот метод называется программным вводом-выводом. ЦП вводит или выводит каждый байт или слово, находясь в цикле ожидания готовности устройства вво­да-вывода. Второй способ представляет собой управляемый прерыва­ниями ввод-вывод, при котором ЦП начинает передачу ввода-выво­да для символа или слова, после чего переключается на другой процесс, пока прерывание от устройства не сообщит ему об оконча­нии операции ввода-вывода и готовности принять следующие символы. Третий способ заключается в исполь­зовании прямого доступа к памяти (DMA – Direct Memory Access), при котором отдельная микросхема управляет переносом целого бло­ка данных и инициирует прерывание только после окончания опе­рации переноса блока.

Драйверы устройств

У контроллера каждого устройства есть набор регистров, исполь­зуемых для того, чтобы давать управляемому устройству команды и считывать состояние устройства. Число таких регистром и выдаваемые команды зависят от конкретною устройства. Например, про­грамма управления мышью должна получать от мыши информацию о том, насколько далеко она продвинулась по горизонтали и верти­кали, а также о нажатых кнопках мыши. Программа управления дис­ком должна знать о секторах, дорожках, цилиндрах, головках, их перемещении и времени установки, двигателях и тому подобных ве­щах, необходимых для правильной работы диска. Очевидно, что эти программы управления будут сильно различаться. Такая программа управления каждым устройством ввода-вывода, подключенным к компьютеру, называется драйвером устройства. Она обычно пишется производителем и распространяется вместе с устройством. Посколь­ку для каждой ОС требуются специальные драйверы, производители устройств обычно поставляют драйверы для нескольких наиболее популярных операционных систем.

Каждый драйвер устройства поддерживает один тип устройства или, максимум, класс близких устройств. Например, драйвер дисков может поддерживать различные диски, отличающиеся размерами и скоростями. Однако мышь и джойстик отличаются настолько силь­но, что обычно требуют использования различных драйверов.

Чтобы получить доступ к аппаратной части устройства, т.е. к регистрам контроллера, драйвер устройства должен быть частью ядра операционной системы. Драйверы устройств обычно рас­полагаются под ядром ОС.

Драйвер устройства выполняет несколько функций:

1) обработку абстрактных запросов чтения и записи независи­мого от устройств и расположенного над ними программного обес­печения:

2) инициализацию устройства;

3) управление энергопотреблением устройства и регистрацией событий;

4) проверку входных параметров. Если они не удовлетворяют оп­ределенным критериям, драйвер возвращает ошибку. В противном случае драйвер преобразует абстрактные термины в конкретные. На­пример, дисковый драйвер может преобразовывать линейный номер блока в номера головки, дорожки и секторы;

5) проверку использования устройства в данный момент. Если ус­тройство занято, запрос может быть поставлен в очередь. Если уст­ройство свободно, проверяется его состояние. Возможно, требуется включить устройство или запустить двигатель, прежде чем начнется перенос данных. Как только устройство готово, может начинаться собственно управление устройством.

Управление устройством подразумевает выдачу ему серии ко­манд. Именно в драйвере и определяется последовательность команд в зависимости от того, что должно быть сделано. Определившись с командами, драйвер начинает записывать их в регистры контролле­ра устройства. Некоторые контроллеры способны принимать связные списки команд, находящихся в памяти. Они сами считывают и вы­полняют их без дальнейшей помощи операционной системы.

После того как драйвер передал все команды контроллеру, ситу­ация может развиваться по двум сценариям. Во многих случаях драй­вер устройства должен ждать, пока контроллер не выполнит для него определенную работу, поэтому он блокируется до тех пор, пока пре­рывание от устройства его не разблокирует. В других случаях операция завершается без задержек и драйверу не нужно блокироваться.

По завершении выполнения операции драйвер должен прове­рить, завершилась ли операция без ошибок. Если все и порядке, драйверу, возможно, придется передать данные (например, прочитан­ный блок) независимому от устройств программному обеспечению. Затем драйвер возвращает некоторую информацию вызывающей про­грамме, о завершении операции. Если в очереди находились другие запросы, один из них теперь может быть выбран и запущен, в про­тивном случае драйвер блокируется в ожидании следующего за­проса.

Как сделать так, чтобы все устройства ввода-вывода и драйверы выглядели примерно одинаково? Если диски, принтеры, клавиату­ры и т. д. требуют различных интерфейсов, то при появлении ново­го устройства будет требоваться переделка операционной системы, что очень неудобно. Этот вопрос связан с интерфейсом между драй­верами устройств и операционной системой. Функции драйверов, доступные системе, отличаются от драйвера к драйверу. Это означа­ет, что функции ядра, необходимые для драйвера, тоже различают­ся, поэтому взаимодействие с каждым новым драйвером требует больших усилий программистов.

Существует принципиально другой подход, при котором у всех драйверов один и тот же интерфейс. При этом значительно легче установить новый драйвер, при условии, что он соответствует стан­дартному интерфейсу. Программисты, занимающиеся разработкой драйверов, знают, какие функции они должны реализовать и к ка­ким функциям ядра они могут обращаться.

Файловые системы

Всем компьютерным приложениям нужно хранить и получать информацию. Наиболее удобной для доступа к долговременным ус­тройствам хранения информации оказалась система, при которой пользователь назначает для той или иной совокупности данных не­которое имя. Определенный участок диска, занятый информацией, имеющей собственное имя, называется файлом.Часть ОС, работаю­щая с файлами и обеспечивающая хранение данных на дисках и до­ступ к ним, называется файловой системой (ФС).

С точки зрения пользователя наиболее важным аспектом фай­ловой системы является ее внешнее представление, т.е. именование и защита файлов, операции с файлами и т.д. Компьютеру безразлич­но, какое имя имеет любая программа или документ, так как он по­лучает от ОС инструкцию подобно такой: «прочитай столько-то байт с такого-то места на диске». При этом пользователь не обязан знать, в каком физическом порядке и где именно находятся его данные. Ему достаточно потребовать от ОС прочитать документ или загрузить не­обходимую программу.

Одной из важнейших характеристик ОС, помимо управления памятью, ресурсами компьютера и задачами, является поддержка файловой системы – основного хранилища системной и пользова­тельской информации.

Файлы относятся к абстрактному механизму. Они предоставля­ют способ сохранить информацию на диске и считывать ее снова по мере необходимости. Пользователю не нужны такие подробности, как способ и место хранения информации, детали работы дисков. Важной характеристикой любого механизма абстракции являются принципы именования управляемых объектов, поэтому вкратце рас­смотрим правила именования файлов.

Точные правила именования файлов варьируются от системы к системе, но все современные операционные системы поддерживают использование в качестве имен файлов 8-символьные текстовые стро­ки. Многие файловые системы поддерживают имена файлов длиной до 255 сим­волов.

В некоторых ФС различаются прописные и строчные символы, в других, таких как MS-DOS, нет. Операционные системы Windows 95 и Windows 98 используют файловую систему MS-DOS и наследуют многие ее свойства, включая именование файлов. Операционные системы Windows NT и Windows 2000 также поддерживают файловую систему MS-DOS и наследуют ее свойства. Однако у них имеется своя файловая система NTFS, обладающая отличными свойствами.

Во многих ОС имя файла может состоять из двух частей, разде­ленных точкой, например progr.exe. Часть имени файла после точки называется расширением файла и обычно означает тип файла. Так, в MS-DOS имя файла может содержать от 1 до 8 символов плюс через точку расширение от 0 до 3 символов. В некоторых ОС, например в UNIX, расширения файлов являются просто соглашениями, и ОС не заставляет пользователя их строго придерживаться. Так, файл file.txt может быть текстовым файлом, но это скорее памятка пользовате­лю, а не руководство к действию для операционной системы. Сис­тема Windows, напротив, знает о расширениях файлов и назначает каждому расширению определенное значение. Пользователи или процессы могут регистрировать расширения в ОС, указывая програм­му, создающую данное расширение. При двойном щелчке мышью на имени файла запускается программа, назначенная этому расшире­нию, с именем файла в качестве параметра. Например, двойной щел­чок мышью на имени file.doc запускает MS Word, который открыва­ет файл file.doc.

Обычно пользователям бывает необходимо логически группиро­вать свои файлы, поэтому требуется некий гибкий способ, позволя­ющий объединять файлы в группы. Для этого используется иерархическое дерево каталогов. При таком подходе каждый пользователь может сам создать себе столько каталогов и подкаталогов, сколько ему нужно, группируя свои файлы естествен­ным образом. В корневом каталоге могут быть также созданы ката­логи и подкаталоги, принадлежащие различным пользователям. Воз­можность создавать произвольное количество подкаталогов является мощным структурирующим инструментом, позволяющим пользова­телям организовать свою работу. По этой причине почти все совре­менные файловые системы организованы подобным образом.

При организации ФС в виде дерева каталогов требуется некото­рый способ указания файла. Для этого обычно используются два различных метода. В первом случае каждому файлу дается абсолютное имя пути, состоящее из имен всех каталогов от корневого до того, в котором содержится файл, и имени самого файла. Например, путь \user\abc\myfile.doc означает, что корневой каталог содержит каталог user, который, в свою очередь, содержит подкаталог abc, где находит­ся файл myfile.doc. Абсолютные имена путей всегда начинаются от корневого каталога и являются уникальными. Если первым симво­лом имени пути является разделитель, это означает, что путь абсолютный. Применяется и относительное имя пути. Оно используется вместе с понятием текущего каталога. Пользователь может назначить один из каталогов текущим рабочим каталогом. В этом случае все имена путей, не начинающиеся с символа разделителя, считаются относительными и отсчитываются относительно текущего каталога. Например, если текущим каталогом является \user\abc, тогда к фай­лу с абсолютным путем \user\abc\myfile.doc можно обратиться про­сто как к myfile.doc.

Итак, любая файловая система предназначена для храпения ин­формации о физическом размещении частей файла. В ФС существует минимальная единица информации – кластер, размер которого является нижним пределом размера записываемой на носитель инфор­мации в рамках ФС. Не следует путать понятие кластера с понятием сектора, который является минимальной единицей информации со стороны аппаратного обеспечения. От ФС требуется четкое выпол­нение следующих действий:

¾ определение физического расположения частей файла;

¾ определение наличия свободного моста и выделение его для вновь создаваемых файлов.

Скорость выполнения этих операции напрямую зависит от са­мой ФС. Разные файловые системы используют различные механиз­мы для реализации указанных задач и имеют своп преимущества и недостатки. ФС типа FAT (File Allocation Table)представляют собой образ носителя в миниатюре, где детализация ведется до кластерно­го уровня. Поэтому операция поиска физических координат файла при его большой фрагментации будет затруднительна. ФС FAT16 за­нимает объем 128 Кб. И это позволяет легко кэшировать ее инфор­мацию. Для FAT32 эта величина для больших дисков составит ~ 1 Мб, что еще более затрудняет поиск физических координат фрагментированного файла. Еще хуже обстоит дело с поиском свободного ме­ста для больших файлов. Приходится просматривать практически всю таблицу. Быстродействие падает. NTFS (New Technology File System) использует более компактную форму записи, что ускоряет поиск фай­ла. Операции с выделением места проходят быстрее. Ключевое пре­имущество NTFS – возможность ограничения доступа к файлам и папкам.

Важный параметр – размер кластера. Больший размер кластера гарантирует более высокую производительность за счет уменьшения самойФС. Для NTFS увеличение кластера – болезненная процеду­ра из-за невозможности выполнить дефрагментацию, поскольку большинство таких программ не работает с кластерами, отличными от штатных 4 Кб.