Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lections_v2.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

Многослойная модель системы ввода-вывода.

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

Этот принцип для различных устройств реализуется по-разному.

В схеме: подсистема управления дисками, графическая (мониторы, принтеры), управление сетевыми адаптерами.

В каждой из этих подсистем существует несколько слоев, нижний – драйверы устройств (аппаратные драйверы).

Задачи подсистем ввода-вывода:

  1. Организация параллельной работы устройств ввода-вывода и процессора.

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

  3. Разделение устройств и данных между процессами. ОС должна обеспечивать контроль доступа теми же способами, какими она обеспечивает доступ процессов к ресурсам ОС. При этом ОС должна обеспечивать доступ не только к устройству в целом, но и к отдельным порциям данных, хранимых или отображаемых устройством (например, диск).

Важные моменты в параллельности:

  1. Связывание программной и аппаратной составляющих компьютера.

  2. Согласование скоростей и кэширования данных.

  3. Разделение устройств и данных между процессами.

  4. Обеспечение удобного логического интерфейса между устройствами и остальной частью ОС.

  5. Поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера.

  6. Динамическая загрузка и выгрузка драйверов.

  7. Поддержка нескольких ФС.

  8. Поддержка синхронного и асинхронного ввода-вывода.

Пространство имен устройств.

Старший и младший номера.

Идентификатор и обращение к устройству определяются пространством имен устройств. В Юникс существует три пространства имен устройств:

  1. Аппаратное пространство – идентифицирует устройство по контроллеру, к которому оно присоединено, а также логическому номеру контроллера.

  2. Ядро применяет для именования устройств их нумерацию.

  3. Полные имена файлов – для пользователей. Простое и понятное пространство имен.

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

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

Например, диск: имеет 1 старший номер, разделы диска имеют разные ФС, им присвоены разные младшие номера. В результате каждый раздел диска имеет старший номер и младший номер.

В разных ОС для хранения номера устройства отводится разное количество байтов. В POSIX1 определен тип для хранения номеров dev_t.

В <sys/types.h> определен ряд зависимых от реализации типов данных, которые называются элементарными системными типами данных. Они объявляются с использованием директивы type_dev.

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

Блочное устройство определяется как bdevsw, символьное – cdevsw.

struct cdevsw

{

int (*d_open)();

int (*d_close)();

int (*d_read)();

int (*d_write)();

int (*d_ioctl)();

}

struct bdevsw

{

int (*d_open)();

int (*d_close)();

int (*d_strategy)();

int (*d_print)();

int (*d_size)();

}

Di_addr[] -> di_addr[1](di_major)

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]