- •1. Основные компоненты ос Unix.
- •2. Состав и функции ядра Unix.
- •3. Структура файловой системы Unix. /5. Понятие I-узлов в файловой системе ос Unix.
- •4. Разновидности файлов ос Unix.
- •5. Понятие I-узлов в файловой системе ос Unix.
- •6. Понятие pipe (программный канал) в ос Unix, разновидности каналов.
- •7. Отображение виртуальной памяти и внешних устройств в Unix.
- •8. Идентификация пользователей в ос Unix.
- •9. Защита файлов в ос Unix.
- •10. Драйверы устройств в ос Unix.
- •Устройство как специальный файл
- •Внешний и внутренний интерфейсы устройств
- •11. Команды Shell.
- •12. Создание и редактирование файлов в Unix.
- •13. Иерархия файлов и каталогов в ос Unix.
- •14. Виды файловых систем ос Unix.
- •15. Установка системы Linux.
- •17. Атрибуты файлов ос Unix.
- •18. Форматы хранения данных в Linux.
- •19. Права доступа на файлы, утилиты для назначения прав, индивидуальные настройки пользователя.
- •20. Среда пользователя, пользователи и группы (создание и управление).
- •21. Обновление и компиляция ядра.
- •22. Работа с процессами: запуск, остановка, состояние, взаимодействие процессов,
- •23. Средства обработки текста в Linux. Другие стандартные приложения.
- •24. Принципы программирования в Linux, основные средства.
- •26. Язык Perl. Механизм выполнения программы, написанной на Perl.
- •28. Технологии распределенных вычислений. Технология corba.
- •29. Управление пакетами. Менеджер пакетов rpm.
- •30. Сервисы Linux: web-сервер Apache, ftp, firewall, proxy-сервер, электронная почта.
10. Драйверы устройств в ос Unix.
Управление внешними устройствами - это одна из важнейших функций любой операционной системы. Система должна обеспечивать эффективный и удобный доступ к периферийным устройствам, а также обеспечивать возможность унифицированной разработки программного обеспечения для вновь подключаемых внешних устройств. Рассмотрим, как эта проблема решается в ОС UNIX.
Устройство как специальный файл
Для доступа к внешним устройствам в ОС UNIX используется универсальная абстракция файла. Помимо настоящих файлов, которые реально занимают память на магнитных дисках, файловая система содержит так называемые специальные файлы, для которых, как и для настоящих файлов, отводятся отдельные i-узлы, но которым на самом деле соответствуют внешние устройства. Это решение позволяет естественным образом работать в одном и том же интерфейсе с любым файлом или внешним устройством.
Драйверы устройств. Любому программисту должно быть ясно, что простое объявление внешнего устройства специальным файлом не даст возможности работать с этим устройством, если не создан и соответствующим образом не подключен к системе специальный программный код, соответствующий специфике данного устройства.
Для профессионалов в области операционных систем драйверы ОС UNIX, в сущности, не представляют ничего нового. В любой системе драйвер устройства - это многовходовой программный модуль со своими статическими данными, который умеет инициировать работу с устройством, выполнять заказываемые пользователем обмены (на ввод или вывод данных), терминировать работу с устройством и обрабатывать прерывания от устройства.
Символьные драйверы являются простейшими в ОС UNIX и предназначаются для обслуживания устройств, которые реально ориентированы на прием или выдачу произвольных последовательностей байтов. Такие драйверы используют минимальный набор стандартных функций ядра UNIX, которые главным образом заключаются в возможности взять данные из виртуального пространства пользовательского процесса и/или поместить данные в такое виртуальное пространство.
Блочные драйверы - более сложные. Они работают с использованием возможностей системной буферизации блочных обменов ядра ОС UNIX. В число функций такого драйвера входит включение соответствующего блока данных в систему буферов ядра ОС UNIX и/или взятие содержимого буферной области в случае необходимости.
Наиболее сложной организацией отличаются потоковые драйверы. Фактически, такой драйвер представляет собой конвейер модулей, обеспечивающий многоступенчатую обработку запросов пользователя. Потоковые драйверы в среде ОС UNIX в основном предназначены для реализации доступа к сетевым устройствам, которые должны работать в соответствии с многоуровневыми сетевыми протоколами.
Блочные драйверы предназначаются для обслуживания внешних устройств с блочной структурой (магнитных дисков, лент и т.д.) и отличаются от прочих тем, что они разрабатываются и выполняются с использованием системной буферизации. Другими словами, такие драйверы всегда работают через системный буферный пул.
Символьные драйверы главным образом предназначены для обслуживания устройств, обмены с которыми выполняются посимвольно, либо строками символов переменного размера. Типичным примером символьного устройства является простой принтер, принимающий один символ за один обмен. Символьные драйверы не используют системную буферизацию. Они напрямую копируют данные из памяти пользовательского процесса при выполнении операций записи или в память пользовательского процесса при выполнении операций чтения, используя собственные буфера.
Потоковые драйверы
Основным назначением механизма потоков (streams) является повышение уровня модульности и гибкости драйверов со сложной внутренней логикой. Спецификой таких драйверов является то, что большая часть программного кода не зависит от особенностей аппаратного устройства. Более того, часто оказывается выгодно по-разному комбинировать части программного кода.
Все это привело к появлению потоковой архитектуры драйверов, которые представляют собой двунаправленный конвейер обрабатывающих модулей. В начале конвейера (ближе всего к пользовательскому процессу) находится заголовок потока, к которому прежде всего поступают обращения по инициативе пользователя. В конце конвейера (ближе всего к устройству) находится обычный драйвер устройства. В промежутке может располагаться произвольное число обрабатывающих модулей, каждый из которых оформляется в соответствии с обязательным потоковым интерфейсом.