OC_11pdf.pdf.pptx
- Количество слайдов: 23
Ввод-вывод Принципы программного обеспечения ввода-вывода 1. Независимость от устройств. Этот принцип означает возможность написания программ, способных получать доступ к любому устройству ввода-вывода без предварительного указания конкретного устройства. 2. Единообразное именование. Имя файла или устройства должно представлять собой просто текстовую строку или целое число и никак не должно зависеть от физического устройства. Способы осуществления ввода-вывода Существует три различных способа осуществления операций ввода-вывода: 1. Программный ввод-вывод. Если, например, нужно распечатать на принтере строку символов, то операционная система сначала копирует эти данные в ядро. Затем ОС входит в цикл, на каждой итерации которого печатает на принтере один символ. После печати каждого символа процессор в цикле опрашивает готовность устройства. Такое поведение процессора называется опросом, или активным ожиданием. Программный ввод-вывод легко реализуется, но его недостаток состоит в том, что центральный процессор занят на все время операции ввода-вывода. 2. Ввод-вывод, управляемый прерываниями. Когда выполняется системный вызов печати строки, буфер копируется в пространство ядра, а первый символ строки копируется на принтер. После этого центральный процессор вызывает планировщик,
который запускает на выполнение какой-либо другой процесс. После того как принтер напечатает символ и будет готов принять следующий, принтер инициирует соответствующее прерывание. Оно перехватывается обработчиком прерывания и сигнализирует ОС, что вывод символа завершен. После этого ОС посылает на печать следующий символ, и т. д. Таким образом, во время печати символа на принтере процессор не занят опросом готовности устройства печати, а выполняет другую работу. 3. Ввод-вывод с использованием прямого доступа к памяти (DMA, Direct Memory Access). Очевидный недостаток ввода-вывода управляемого прерываниями, состоит в том, что прерывания происходят при печати каждого символа. Обработка этих прерываний занимает определенное время, поэтому такая схема не является эффективной. Решение проблемы заключается в использовании DMA. Контроллер DMA поставляет принтеру символы по одному, не занимая при этом центральный процессор. По существу, этот метод почти не отличается от программного ввода- вывода, с той лишь разницей, что всю работу вместо центрального процессора выполняет контроллер DMA. Наибольший выигрыш от использования DMA состоит в уменьшении количества прерываний с одного на каждый печатаемый символ до одного на весь печатаемый буфер.
Программные уровни ввода-вывода Программное обеспечение ввода-вывода обычно организовано в виде четырех уровней, показанных на рис. 14, где у каждого уровня есть свои функции и строго определенный интерфейс с соседними уровнями. Программное обеспечение ввода-вывода уровня пользователя Программное обеспечение ОС, независимое от устройств Драйверы устройств Обработчики прерываний Аппаратура Рис. 14. Программные уровни ввода-вывода Обработчики прерываний Когда происходит прерывание, начинает работу обработчик прерываний. По выполнении необходимой работы он может разблокировать драйвер, запустивший его. Ниже перечислены основные действия, выполняемые программным обеспечением после того, как произошло аппаратное прерывание: 1. сохранение всех регистров, не сохраненных аппаратурой; 2. установка контекста для процедуры обработки прерываний (выполнение этого действия может включать установку TLB и таблицы страниц); 3. установка указателя стека для процедуры обработки прерываний;
4. выдача подтверждения контроллеру прерываний (если же централизованного контроллера прерываний нет, то разрешение прерываний); 5. копирование содержимого регистров в таблицу процессов; 6. запуск процедуры обработки прерываний, которая извлекает информацию из регистров контроллера устройства, инициировавшего прерывание; 7. выбор процесса, которому следует передать управление; 8. установка контекста блока управления памятью для следующего работающего процесса; 9. загрузка регистров для нового процесса; 10. запуск на выполнение нового процесса. Драйверы устройств У каждого контроллера есть набор регистров, используемых, чтобы давать управляемому им устройству те или иные команды и считывать состояние этого устройства. Команды, выдаваемые устройству, зависят от конкретного типа этого устройства, поэтому для управления каждым устройством ввода-вывода требуется специальная программа. Эта программа, называемая драйвером устройства, обычно пишется производителем устройства, причем для каждой операционной системы требуются специальные драйверы. Каждый драйвер обычно поддерживает только один тип устройств или же класс близких по типам устройств. Чтобы получить доступ к регистрам контроллера, драйвер устройства должен быть частью ядра ОС. Драйверы обычно располагаются под остальной частью операционной системы.
ОС обычно классифицирует драйверы по нескольким категориям в соответствии с типами обслуживаемых ими устройств. К наиболее общим категориям относятся блочные устройства (например, диски, содержащие блоки данных), к которым возможна независимая адресация, и символьные устройства, такие как клавиатуры и принтеры, формирующие или принимающие поток символов. В ОС определены стандартные интерфейсы, поддерживаемые всеми драйверами. Эти интерфейсы включают в себя набор процедур, которые могут вызываться из остальной операционной системы для обращения к драйверу. Драйвер устройства должен выполнять несколько функций: 1. обработку абстрактных запросов чтения и записи, поступающих от независимого от этого устройства программного обеспечения, расположенного над ним; 2. проверку входных параметров; 3. преобразование абстрактных параметров в конкретные (например, дисковый драйвер может преобразовывать линейный номер блока в номера головки, дорожки и сектора); 4. проверку готовности и незанятости устройства; 5. собственно управление устройством — выдачу ему требуемой серии команд; 6. во многих случаях драйвер устройства должен ждать, пока контроллер устройства не выполнит для него определенную работу, поэтому он блокируется до тех пор, пока прерывание от устройства его не разблокирует; в других случаях операция завершается без задержек, и драйверу не нужно блокироваться; 7. по завершении выполнения операции драйвер должен проверить, выполнена ли эта операция без ошибок. Если все в порядке, то драйвер передает данные независимому от устройств программному обеспечению.
Независимое от устройств программное обеспечение ввода-вывода обеспечивает следующие функции: 1. единообразный интерфейс для драйверов устройств; 2. буферизацию; 3. сообщения об ошибках; 4. захват и освобождение выделенных устройств; 5. размер блока, не зависящий от устройства. Программное обеспечение ввода-вывода пространства пользователя состоит из библиотек, присоединенных к программам пользователя. Системные вызовы ввода обычно состоят из библиотечных процедур. Например, если программа на языке С содержит вызов write, то библиотечная процедура write будет скомпонована с программой и, соответственно, будет содержаться в исполняемом файле. Хотя многие такие процедуры мало что делают, кроме обращения к системному вызову с соответствующими параметрами, есть и ряд процедур ввода-вывода, выполняющих определенную работу. В частности, библиотечными процедурами выполняются операции форматного ввода и вывода (пример — функция printf языка С).
Физическая организация файловой системы Цели и задачи файловой системы Файл — это поименованная область внешней памяти, в которую можно записывать и из которой можно считывать данные. Основные цели использования файла: • долговременное и надежное хранение информации; • совместное использование информации. Файловая система (ФС) — это часть операционной системы, включающая в себя: • совокупность всех файлов на диске; • наборы структур данных, используемых для управления файлами; • комплекс системных программных средств, реализующих операции над файлами. ФС играет роль «промежуточного слоя» , устраняющего для пользователя/программиста все сложности физической организации долговременного хранилища данных и создающего для программ более простую логическую модель этого хранилища, а также предоставляющего им набор удобных в использовании команд для манипулирования файлами.
Задачи, решаемые файловой системой, зависят от способа организации вычислительного процесса в целом. Основные функции ФС в однопользовательских и однопрограммных ОС (типа MS-DOS): • именование файлов; • программный интерфейс для приложений; • отображение логической модели файловой системы на физическую организацию хранилища данных; • устойчивость файловой системы к сбоям питания, ошибкам аппаратных и программных средств. В однопользовательских мультипрограммных ОС также должны быть предусмотрены средства для блокировки файла и его частей, предотвращения гонок, исключения тупиков, согласования копий и т. п. В многопользовательских ОС появляется еще одна задача — защита файлов одного пользователя от несанкционированного доступа другого пользователя. Наконец, еще более сложными становятся функции ФС, которая работает в составе сетевой ОС. Принципы размещения файлов, каталогов и системной информации на реальном устройстве описываются физической организацией файловой системы. Разные ФС имеют разную физическую организацию.
Устройство диска Основным типом устройства для хранения файлов являются дисковые накопители. Эти устройства предназначены для считывания и записи данных на жесткие и гибкие магнитные диски. Жесткий диск состоит из одной или нескольких стеклянных или металлических пластин, каждая из которых покрыта с одной или с двух сторон магнитным материалом. На каждой стороне каждой пластины путем соответствующего намагничивания поверхности магнитного слоя размечены тонкие концентрические кольца — дорожки (tracks), на которых хранятся данные. Когда диск вращается, магнитная головка накопителя считывает двоичные данные с выбранной магнитной дорожки или записывает их на магнитную дорожку. Для этого головка может позиционироваться над заданной дорожкой. Обычно все головки закреплены на едином перемещающем механизме и двигаются синхронно. Поэтому, когда головка фиксируется на заданной дорожке одной поверхности, все остальные головки останавливаются над дорожками других пластин с такими же номерами. Совокупность дорожек одного и того же радиуса на всех поверхностях всех пластин дискового пакета называется цилиндром. Каждая дорожка разбивается на фрагменты, называемые секторами, или блоками, так что все дорожки имеют равное количество секторов, в которые можно максимально записать одно и то же количество байтов. Сектор имеет фиксированный для конкретной
ОС размер, выражающийся степенью числа 2; чаще всего размер сектора составляет 512 байт. Учитывая же, что дорожки разного радиуса имеют одинаковое количество секторов, плотность записи становится тем выше, чем ближе располагается дорожка к центру диска. Сектор — это наименьшая адресуемая единица обмена данными дискового устройства с оперативной памятью. Чтобы контроллер мог найти на диске нужный сектор, необходимо задать ему все составляющие адреса этого сектора: номер цилиндра, номер поверхности, номер дорожки и собственно номер сектора на этой дорожке. ОС при работе с диском использует, как правило, собственную единицу дискового пространства, называемую кластером (в UNIX кластер называется блоком). При создании файла место на диске ему выделяется кластерами. Дорожки и секторы создаются в результате выполнения процедуры физического, или низкоуровневого форматирования, предшествующей использованию диска. Для определения границ блоков на диск записывается идентификационная информация. Низкоуровневый формат диска не зависит от типа ОС, которая этот диск будет использовать. Разметку же диска под конкретный тип файловой системы выполняют процедуры высокоуровневого, или логического форматирования. При высокоуровневом форматировании определяется размер кластера, а на диск записывается информация, необходимая для работы файловой системы, в том числе сведения о доступном и неиспользуемом пространстве, о границах областей, отведенных под файлы и каталоги, о поврежденных областях. Кроме того, на диск записывается загрузчик операционной системы — небольшая программа, которая начинает процесс инициализации операционной системы после включения питания или перезагрузки компьютера.
Прежде чем форматировать диск под определенную файловую систему, его можно разбить на разделы. Раздел — это непрерывная часть физического диска, которую операционная система представляет пользователю как отдельное логическое устройство (часто используются также названия «логический диск» и «логический раздел» ). Логическое устройство функционирует так, как если бы это был отдельный физический диск. ОС разного типа обычно используют единое для всех них представление о разделах, но создают на его основе логические устройства, специфические для каждого типа ОС. Так же как файловая система, с которой работает одна ОС, в общем случае не может интерпретироваться ОС другого типа, одни и те же логические устройства часто не могут быть использованы операционными системами разного типа. При этом на каждом логическом устройстве может создаваться только одна файловая система, а на разных логических устройствах одного и того же физического диска могут располагаться файловые системы разного типа. Физическая организация и адресация файла Физическая организация файла — это способ размещения файла на диске. Основными критериями эффективности физической организации файлов являются: • скорость доступа к данным; • объем адресной информации файла; • степень фрагментации дискового пространства; • максимально возможный размер файла.
Непрерывное размещение — это простейший вариант физической организации, при котором файлу предоставляется последовательность кластеров диска, образующих непрерывный участок дисковой памяти. Достоинства этого метода: • высокая скорость доступа, так как затраты на поиск и считывание кластеров файла минимальны; • минимальный объем адресной информации; • неограниченный максимально возможный размер файла. Однако реализовать эту схему сложно из-за того, что размер файла, как правило, заранее неизвестен. Еще более серьезной проблемой является фрагментация: спустя некоторое время после создания такой файловой системы в результате выполнения многочисленных операций создания и удаления файлов пространство диска неминуемо превращается в «лоскутное одеяло» , включающее в себя большое количество свободных областей небольшого размера. Размещение файла в виде связанного списка кластеров, когда в начале каждого кластера содержится указатель на следующий кластер. В отличие от предыдущего способа, каждый кластер здесь может быть присоединен к цепочке кластеров какого-либо файла, а следовательно, фрагментация на уровне кластеров отсутствует. Файл же может менять свой размер во время своего существования, наращивая число кластеров.
Недостатки такого метода: • сложность реализации доступа к произвольному месту файла; • количество данных файла, содержащихся в одном кластере, не равно степени числа 2 (так как одно машинное слово уже израсходовано на номер следующего кластера), а многие программы читают данные кластерами, размер которых равен степени числа 2. Использование связанного списка индексов. Это — модификация предыдущего способа. Здесь файлу также выделяется память в виде связанного списка кластеров. При этом номер первого кластера запоминается в записи каталога, где хранятся характеристики данного файла, а остальная адресная информация отделена от кластеров файла. С каждым кластером диска связывается особый элемент — индекс, где все индексы располагаются в отдельной области диска: в ОС MS-DOS это таблица FAT (File Allocation Table), занимающая один отдельный кластер. Когда память свободна, все индексы имеют нулевое значение. Если же некоторый кластер N назначен некоторому файлу, то индекс этого кластера становится равным либо номеру М следующего кластера данного файла, либо принимает специальное значение, являющееся признаком, что данный кластер является для файла последним. Индекс же предыдущего кластера файла принимает значение N, указывая на вновь назначенный кластер. При такой физической организации сохраняются все достоинства предыдущего способа — минимальность адресной информации, отсутствие фрагментации и отсутствие проблем при изменении размера файла, но появляются и дополнительные преимущества: • высокая скорость доступа (для доступа к произвольному кластеру файла не требуется последовательно считывать его кластеры — достаточно прочитать только секторы
диска, содержащие таблицу индексов, отсчитать нужное количество кластеров файла по цепочке и определить номер нужного кластера); • данные файла заполняют кластер целиком, а значит, имеют объем, равный степени числа 2. Недостаток же этого метода только один: вся таблица FAT должна постоянно находиться в ОП или каждый раз целиком загружаться в ОП. Перечисление номеров кластеров, занимаемых файлом (метод i-узлов). Такой перечень и служит адресом файла. С каждым файлом связана структура данных «i-узел» , содержащая также атрибуты файла. Недостаток этого метода: длина адреса зависит от размера файла, и для большого файла может составить значительную величину. Достоинства: • высокая скорость доступа к произвольному кластеру файла, так как здесь применяется прямая адресация, которая исключает просмотр цепочки указателей при поиске адреса произвольного кластера файла; • отсутствует фрагментация на уровне кластеров; • каждый i-узел должен находиться в ОП только тогда, когда соответствующий ему файл открыт. Модифицированный подход к перечислению номеров кластеров используется в ОС UNIX в традиционных файловых системах s 5 и ufs и в ОС Linux в наиболее распространенных файловых системах ext 2 fs и ext 3 fs (последняя отличается от первой только наличием журналирования). Для сокращения объема адресной информации прямой способ адресации сочетается с косвенным.
В стандартной для UNIX ФС ufs используется следующая схема адресации кластеров файла (рис. 15). Для хранения адреса файла выделено 15 полей, каждое из которых состоит из 4 байтов. Если размер файла меньше или равен 12 кластерам, то номера этих кластеров непосредственно перечисляются в первых двенадцати полях адреса. Если размер файла превышает 12 кластеров, то следующее, 13 -е поле содержит адрес кластера, в котором могут быть расположены номера следующих кластеров файла. Если размер файла превышает 12 + 2048 = 2060 кластеров, то используется 14 -е поле, в котором находится номер кластера, содержащего 2048 номеров кластеров, каждый из которых хранит 2048 номеров кластеров данных файла, — т. е. здесь применяется уже двойная косвенная адресация. И наконец, если файл включает более 12 + 2048 • 2048 = 4 196 364 кластеров, то используется последнее, 15 -е поле для тройной косвенной адресации. Прямой УКАЗАТЕЛЬ (0) (1) (2) (3) Кластер файла Рис. 15. Схема адресации кластеров файла в файловой системе ufs Прямой УКАЗАТЕЛЬ (11) Указатель первого уровня косвенности Указатель второго уровня косвенности Указатель третьего уровня косвенности
Метод перечисления адресов кластеров файла задействован и в файловой системе NTFS, используемой в ОС семейства Microsoft Windows NT. Здесь он дополнен достаточно естественным приемом, сокращающим объем адресной информации: адресуются не кластеры файла, а непрерывные области, состоящие из смежных кластеров диска. Каждая такая область, называемая группой (в ext 2 fs), или экстентом (extent), описывается с помощью двух чисел — начального номера кластера и количества кластеров в отрезке. Так как для сокращения времени операции обмена ОС старается разместить файл в последовательных кластерах диска, то в большинстве случаев количество последовательных областей файла будет меньше количества кластеров файла, так что объем служебной адресной информации в NTFS сокращается по сравнению со схемой адресации файловых систем ufs/s 5. Логическая организация файловой системы ОС должна предоставлять пользователю удобства при работе с данными на дисках. Для этого ОС подменяет физическую структуру данных удобной для пользователя логической моделью. При этом логическая модель файловой системы материализуется в виде дерева каталогов, в символьных составных именах файлов и в командах работы с файлами.
Типы файлов Обычные файлы (или просто файлы), содержат информацию произвольного характера, которую заносит в них пользователь или которая образуется в результате работы системных и пользовательских программ. Каталоги — это особый тип файлов, которые содержат системную справочную информацию о наборе файлов, сгруппированных пользователями по какому-либо признаку. В каталог могут входить файлы любых типов, в том числе другие каталоги, за счет чего образуется древовидная структура, удобная для поиска. Каталоги устанавливают соответствие между именами файлов и их характеристиками, используемыми файловой системой для управления файлами. Специальные файлы — это файлы, ассоциированные с устройствами ввода-вывода и используемые для унификации механизма доступа к файлам и внешним устройствам. Специальные файлы позволяют пользователю выполнять операции ввода-вывода посредством обычных команд записи в файл или чтения из файла. Современные ФС поддерживают и другие типы файлов (символьные связи, именованные конвейеры, отображаемые в память файлы и др. ). Иерархическая структура файловой системы Большинство файловых систем имеет иерархическую структуру, в которой уровни создаются за счет того, что каталог более низкого уровня может входить в каталог более высокого уровня.
Граф, описывающий иерархию каталогов, может представлять собой дерево или сеть. Каталоги образуют дерево, если файлу разрешено входить только в один каталог, либо сеть, если файл может входить сразу в несколько каталогов. Например, в MSDOS и Windows каталоги образуют древовидную структуру, а в UNIX — сетевую. В древовидной структуре каждый файл является листом. Каталог самого верхнего уровня называется корневым каталогом, или корнем (root). При такой организации пользователь освобожден от запоминания имен всех файлов; ему достаточно примерно представлять, к какой группе может быть отнесен тот или иной файл, чтобы путем последовательного просмотра каталогов найти его. Иерархическая структура удобна и для многопользовательской работы: каждый пользователь со своими файлами локализуется в своем каталоге или поддереве каталогов, но вместе с тем, все файлы в системе логически связаны. Частным случаем иерархической структуры является одноуровневая организация, когда все файлы входят в один каталог. Имена файлов Все типы файлов имеют символьные имена. В иерархически организованных файловых системах обычно используются три типа имен файлов: простые и составные, где последние могут быть абсолютными и относительными. Простое, или короткое, символьное имя идентифицирует файл в пределах одного каталога. Простые имена присваивают файлам пользователи и программисты. В иерархических файловых системах разным файлам разрешено иметь одинаковые
простые символьные имена при условии, что они принадлежат разным каталогам, — т. е. здесь работает схема: «много файлов — одно простое имя» . Для однозначной идентификации файла в таких системах используется так называемое полное имя, которое представляет собой цепочку простых символьных имен всех каталогов, через которые проходит путь от корня до данного файла, плюс простое имя самого этого файла. В древовидной файловой системе между файлом и его полным именем имеется взаимно однозначное соответствие: «один файл — одно полное имя» . В файловых же системах, имеющих сетевую структуру, файл может входить в несколько каталогов, а значит иметь несколько полных имен; здесь справедливо соответствие: «один файл — много полных имен» . Однако в обоих этих случаях файл однозначно идентифицируется полным именем. Файл может быть также идентифицирован относительным именем, которое определяется через понятие «текущий каталог» . При этом файл идентифицируется цепочкой имен каталогов, через которые проходит маршрут от текущего каталога до данного файла. Хотя полное имя однозначно определяет файл, операционной системе проще работать с файлом, если между файлами и их именами имеется взаимно однозначное соответствие. С этой целью ОС также присваивает файлу уникальное имя, так что справедливо соотношение: «один файл — одно уникальное имя» . Уникальное имя существует наряду с одним или несколькими символьными именами, присваиваемыми файлу пользователями или приложениями, представляет собой числовой идентификатор и предназначено только для ОС. Пример — номер индексного дескриптора в системе UNIX.
Монтирование В вычислительной системе может иметься несколько дисковых устройств. При этом одно физическое устройство с помощью средств ОС может быть представлено как несколько логических устройств (в частности, путем разбиения дискового пространства на разделы). Как организовать хранение файлов в системе, имеющей несколько устройств внешней памяти? Для этого возможно два решения: 1. На каждом из устройств размещается автономная ФС, т. е. файлы, находящиеся на этом устройстве, описываются деревом каталогов, никак не связанным с деревьями каталогов на других устройствах. В таком случае для однозначной идентификации файла пользователь, наряду с составным символьным именем файла, должен указывать идентификатор логического устройства. Пример — ОС MS-DOS. 2. Пользователю предоставляется возможность объединять файловые системы, находящиеся на разных устройствах, в единую ФС, описываемую единым деревом каталогов. Такая операция называется монтированием.
Атрибуты файлов Файл — это не только данные, но и атрибуты — информация, описывающая свойства файла. Примеры возможных атрибутов файла: • тип файла (обычный файл, каталог, специальный файл и т. п. ); • владелец файла; • создатель файла; • пароль для доступа к файлу; • информация о разрешенных операциях доступа к файлу; • время создания, последнего доступа и последнего изменения; • текущий размер файла; • максимальный размер файла; • признак «только для чтения» ; • признак «скрытый файл» ; • признак «системный файл» ; • признак «архивный файл» ; • признак «двоичный/символьный» ; • признак «временный» (удаляемый после завершения процесса); • признак блокировки; • длина записи в файле; • указатель на ключевое поле в записи; • длина ключа.
Набор атрибутов файла определяется спецификой файловой системы. Пользователь может получать доступ к атрибутам, используя средства, предоставленные для этих целей файловой системой. Обычно разрешается читать значения любых атрибутов, а изменять—только некоторые из них. Значения атрибутов файлов могут непосредственно содержаться в каталогах, как это сделано в файловой системе MS-DOS. На рис. 16 а представлена структура записи в каталоге, содержащая простое символьное имя и атрибуты файла. Здесь буквами обозначены признаки файла: R — только для чтения, А — архивный, Н — скрытый, S — системный. Другим вариантом является размещение атрибутов в специальных таблицах, когда в каталогах содержатся только ссылки на эти таблицы. Такой подход реализован, например, в файловой системе ufs в ОС UNIX. В этой файловой системе структура каталога очень проста: запись о каждом файле содержит короткое символьное имя файла и указатель на индексный дескриптор файла (inode): так в ufs называется таблица, в которой сосредоточены значения атрибутов файла (рис. 16 б). В обоих вариантах каталоги обеспечивают связь между именами файлов и собственно файлами. Однако подход, при котором имя файла отделено от его атрибутов, делает систему более гибкой: например, файл может быть легко включен сразу в несколько каталогов. При этом записи о таком файле в разных каталогах могут содержать разные простые имена, но в поле ссылки будет указан один и тот же номер индексного дескриптора.
Имя файла Расширение Время Резерв RASH Дата № первого РАЗМЕР блока Атрибуты а) НОМЕР I-УЗЛА Имя файла б) Рис. 16. Структура записи в элементе каталога: а) в файловой системе MS-DOS; б) в файловой системе UNIX
OC_11pdf.pdf.pptx