Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОперационныеСистемы, общие понятия.docx
Скачиваний:
140
Добавлен:
08.02.2015
Размер:
366.4 Кб
Скачать

Структурная организация системы управления вводом/выводом ос unix. (12-2)

Система ввода/вывода ОС UNIX – это часть ядра, выполняющая функции диспетчера устройств ввода/вывода.

Программная часть диспетчера включает:

  • управляющую компоненту

  • систему буферизации

  • набор драйверов.

В качестве структурных компонент используются:

  • дескрипторы специальных файлов

  • таблица связи между драйверами байт-ориентированных устройств и ядром системы

  • таблица связи между драйверами блок-ориентированных устройств и ядром системы

  • таблица буферов блоков

  • таблиц прерываний.

Взаимодействие этих структур можно отобразить в виде следующей схемы:

Индексные дескрипторы специальных файлов содержат информацию:

  • имя специального файла (на этот файл нельзя сделать ни жесткую ни символьную ссылку)

  • тип устройства

  • номере типа устройства (старший номер)

  • номере устройства (младший номер)

  • атрибуты, которые содержат дескрипторы обычных файлов (не все): размер, идентификаторы владельца, группы; тип файла, размер, метод доступа, дата и время создания, количество ссылок на файл, дата и время последней модификации.

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

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

Таблица связи блок-ориентированных устройств, кроме того, связана с таблицей буферов блоков, указывающей буфера ввода/вывода, образующие кэш-память.

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

  • верхняя часть драйвера работает в режиме вызывающего процесса и служит интерфейсом составной системы UNIX;

  • нижняя часть работает в контексте ядра ОС и непосредственно взаимодействует с устройством.

Таблица прерываний обычно располагается в начальной области памяти по фиксированным адресам. При возникновении прерываний от ввода/вывода управление передается программе обработки прерываний драйвера, адрес которой выбирается из таблицы прерываний.

Реализация системы управления вводом/выводом ос unix. (14-2)

(Здесь также рассказать про блок- и байт-ориентированные устройства)

Пример реализации ввода информации с блок-ориентированного устройства (hd0).

fd=open(“/dev/hd0”, 0);

read(fd,buf,n);

Системный вызов read инициирует обращение к специальному файлу /dev/hd0 и через дескриптор fd, определяет тип и номер устройства, с которого необходимо прочитать информацию.

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

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

Далее программа драйвера переписывает информацию из кэш-памяти в область основной памяти, указанную драйвером ввода (buf).

После окончания операции ввода управление, обычно, передается диспетчеру процессов ядра ОС UNIX.