
- •Лекция 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
Доступ к драйверу символьного устройства.
Драйвер – часть ядра, предназначенная для управления устройством. Символьные драйверы предназначены для устройств, ориентированных на передачу и прием информации.
Доступ к драйверу блочного устройства.
Блочные драйверы являются более сложными, работают с использованием буферизации блочных обменов ядра. В число функций такого драйвера входит включение соответствующего блока данных.
В Юникс блочные устройства вообще не доступны пользовательским программам. Все операции с ними осуществляются посредством ФС, что упрощает логику используемых операций, так ка драйверу не надо заботиться об обмене данными с пользовательским адресным пространством.
В отличие от обычных операций чтения/записи в которых допустим обмен пакетами данных произвольного размера, блочный драйвер передает данные блоками, размер которых кратен 512 байтам. Если все-таки понадобился доступ к диску, драйвер создаёт две минорные записи устройства: блочную и символьную и все-таки предоставляет обычные символьные операции чтения/записи.
Также в системе могут быть потоковые драйверы. В ОС Юникс они предназначены для доступа к сетевым устройствам.
Существует два способа включить драйвер в состав ядра:
Включить драйвер на стадии генерации системы. Тогда драйвер статически объявляется частью ядра системы.
Позволяет обойтись минимальным номером статических объявлений на стадии генерации ядра, фактически фиксируются только необходимые элементы статической таблицы. Драйвера загружаются динамически в ядро в любой момент.
После загрузки все драйверы (и статические, и динамические) работают единообразно.
Дополнительная информация о драйверах.
Драйвер не всегда управляет физическим устройством. Он может использоваться в качестве интерфейса доступа, предоставляет дополнительные функции. Такие драйверы служат для предоставления услуг ядра другим процессам и не имеют доступа к аппаратным составляющим компьютера. Они называются программными или драйверами псевдоустройств.
Лекция 15. 19.05.2014
Драйвера псевдоустройств (продолжение).
Главным примером псевдоустройств являются псевдотерминалы.
/dev/kmem – виртуальные адреса. Обеспечивает доступ к виртуальной памяти ядра. Зная виртуальный адрес, процесс может считывать хранящуюся в нем информацию. С помощью этого драйвера может быть реализована версия утилиты ps.
/dev/ksyms – драйвер обеспечивает доступ к разделу исполняемого файла ядра, содержащего таблицу символов. Совместно с драйвером kmem обеспечивает удобный интерфейс для анализа внутренних структур ядра.
/dev/mem – обеспечивает доступ к физической памяти компьютера.
/dev/null – является нулевым устройством. При записи в это устройство данные просто удаляются, а при чтении процессу возвращается 0 байтов. Пример использования есть в лабораторной.
/dev/zero – обеспечивает заполнение нулями указанного буфера. Данный драйвер часто используется для инициализации области памяти.
Важным достоинством драйверов псевдоустройств является тот факт, что они позволяют сторонним производителям добавлять в ядро Юникс сторонние средства. Драйверы Юникс поддерживают общецелевую точку входа ioctl(), которая может быть вызвана с очень большим количеством специфичных для определенного драйвера команд.
Пример псевдоустройств связан с так называемым клонированием устройств. В системе устройства идентифицируются с помощью старшего и младшего номеров, при это старший номер определяет тип устройства, младший – конкретное устройство. Примером является жесткий диск. Сам диск будет иметь один старший номер, а разделы диска будут иметь разные младшие номера. Во многих случаях пользователь открывает один из экземпляров устройства, но не хочет оперировать конкретным младшим номером. Типичным примером являются псевдоустройства. Типичным примером псевдоустройства является псевдотерминал.
Пользователя может не интересовать младший номер, потому что все устройства одного типа функционируют одинаково. В качестве примера можно привести сетевые протоколы, которые реализуются в виде драйвера. При подсоединении будет выбран младший номер, подойдет любой свободный.
Мы рассмотрели два типа устройств: блочные и символьные. В тех иллюстрациях, которые были приведены, были перечислены драйверы соответствующих устройств. В системах есть еще третий тип устройств: прозрачные (row) драйверы/устройства. У драйвера будет точка входа open, close, могут быть read/write, обязательно будет ioctl(). Обработчики прерываний входят в состав драйверов.