- •Лекция 1. 7.02.2014
- •Монтирование файловой системы.
- •Лекция 2. 10.02.2014
- •Лекция 3. 17.02.2014
- •Открытые файлы.
- •Лекция 4. 24.02.2014
- •Лекция 5. 3.03.2014 Файлы.
- •Регистрация и дерегистрация фс
- •Лекция 6. 17.03.2014
- •Организация виртуальной файловой системы (vfs)
- •Функции для работы с элементами фс proc.
- •Лекция 7. 24.03.2014
- •Файловая система specfs.
- •Терминалы.
- •Терминальный ввод-вывод.
- •Лекция 8. 31.03.2014
- •Типы флагов структуры termios.
- •Принятые соглашения и стандарты.
- •Простые способы открытия псевдотерминалов.
- •Лекция 9. 7.04.2014
- •Лекция 10. 14.04.2014
- •Реализация доступа к устройствам.
- •Структура контроллера внешнего устройства.
- •Южный и северный мосты.
- •Последовательные и параллельные интерфейсы.
- •Лекция 11. 21.04.2014
- •Управление вводом-выводом.
- •Прерывания.
- •Лекция 12. 28.04.2014 Контроллер прерывания.
- •Лекции 13-14. 5.05.2014, 12.05.2014
- •Проблемы прямого доступа к памяти.
- •Управление устройствами.
- •Многослойная модель системы ввода-вывода.
- •Пространство имен устройств.
- •Доступ к драйверу символьного устройства.
- •Доступ к драйверу блочного устройства.
- •Дополнительная информация о драйверах.
- •Лекция 15. 19.05.2014
- •Типичные точки входа в драйвер устройства.
- •Файлы устройств.
- •Буферизация ввода-вывода.
- •Схемы обменной буферизации
- •Обслуживание прерываний.
- •Лекция 16. 26.05.14
- •Лекция 17. 02.06.14
Многослойная модель системы ввода-вывода.
Имеется горизонтальное и вертикальное деление. Это объясняется тем, что задачи невозможно решить единообразно для разных устройств и задач.
Этот принцип для различных устройств реализуется по-разному.
В схеме: подсистема управления дисками, графическая (мониторы, принтеры), управление сетевыми адаптерами.
В каждой из этих подсистем существует несколько слоев, нижний – драйверы устройств (аппаратные драйверы).
Задачи подсистем ввода-вывода:
Организация параллельной работы устройств ввода-вывода и процессора.
Согласование скоростей обмена и кеширование данных. Для этого используется буферизация, которая позволяется также сократить количество реальных операций ввода-вывода.
Разделение устройств и данных между процессами. ОС должна обеспечивать контроль доступа теми же способами, какими она обеспечивает доступ процессов к ресурсам ОС. При этом ОС должна обеспечивать доступ не только к устройству в целом, но и к отдельным порциям данных, хранимых или отображаемых устройством (например, диск).
Важные моменты в параллельности:
Связывание программной и аппаратной составляющих компьютера.
Согласование скоростей и кэширования данных.
Разделение устройств и данных между процессами.
Обеспечение удобного логического интерфейса между устройствами и остальной частью ОС.
Поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера.
Динамическая загрузка и выгрузка драйверов.
Поддержка нескольких ФС.
Поддержка синхронного и асинхронного ввода-вывода.
Пространство имен устройств.
Старший и младший номера.
Идентификатор и обращение к устройству определяются пространством имен устройств. В Юникс существует три пространства имен устройств:
Аппаратное пространство – идентифицирует устройство по контроллеру, к которому оно присоединено, а также логическому номеру контроллера.
Ядро применяет для именования устройств их нумерацию.
Полные имена файлов – для пользователей. Простое и понятное пространство имен.
Ядро идентифицирует каждое устройство по типу (блочное, символьное), а также по паре номеров, которые называются старший и младший номер устройства.
Старший номер идентифицирует тип устройства (мышь, клавиатура), его драйвер. Младший номер идентифицирует определенный экземпляр устройства.
Например, диск: имеет 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)
Эти структуры переназначены для записи в системные таблицы, которые представляют собой массивы этих структур.
