- •Введение
- •Понятие операционной системы. Типы операционных систем
- •Функции операционной системы
- •Структура операционной системы. Ос ms dos
- •Файлы и каталоги на дисках
- •Драйверы устройств
- •Базовая система ввода-вывода (bios)
- •Загрузчик операционной системы
- •Ядро ms dos
- •Командный процессор dos
- •Внешние команды dos
- •Файловая структура диска
- •Стартовый сектор
- •Каталоги
- •Область данных
- •Операционные системы Windows
- •Выбор платформы Windows
- •Термины
- •Архитектура Windows Режимы выполнения программного кода
- •Многозадачность
- •Управление памятью в Windows
- •Выполнение приложений
- •Интерфейс прикладного программирования Win32
- •Реестр Windows
- •Операционная система unix
- •Ядро и процессы unix
- •Диспетчер unix
- •Процессы unix
- •Дескриптор и контекст процесса
- •Иерархия процессов
- •Идентификаторы процесса
- •Группы процессов
- •Взаимодействие процессов
- •Процессы-«демоны»
- •Межпроцессные коммуникации unix
- •Сигналы
- •Сигналы unix по мере возрастания их значений:
- •Семафоры
- •Программные каналы (Pipes)
- •Очереди сообщений
- •Разделяемая память
- •Многопользовательская защита в unix
- •Идентификаторы пользователя и группы
- •Код защиты файла
- •Привилегированный пользователь
- •Эффективные и реальные идентификаторы
- •Свопинг и пейджинг в unix
- •Буфер кеш-памяти
- •Управление вводом/выводом
- •Специальные файлы
- •Взаимодействие драйверов с программной и аппаратной средой
- •Файловая система unix
- •Основные системные каталоги
- •Корневой каталог /
- •Каталог /var
- •Каталог /etc
- •Каталог /usr
- •Каталог /home (/export/home)
- •Каталог/opt (/opti, /opt2, ... /optn)
- •Команды управления swap
- •Команда mkfile
- •Специальные файлы
- •Класс устройства
- •Тип и номер
- •Связь физической и логической структур
- •Создание и монтирование файловой системы
- •Дисковые устройства в unix
- •Внутренняя структура файловой системы Распределение дискового пространства
- •Индексные дескрипторы
- •Системные вызовы unix для работы с файлами
- •Стандартные библиотечные функции ввода/вывода
- •Поточные функции ввода/вывода
- •Литература
- •Оглавление
Взаимодействие драйверов с программной и аппаратной средой
Как уже отмечалось, в системе UNIX имеется два класса устройств - блочные устройства и устройства посимвольного ввода/вывода. Файловая структура может быть создана только на блок-ориентированных устройствах.
Блочные устройства представлены как запоминающие устройства с произвольным доступом, а к устройствам посимвольного ввода/вывода относятся все другие устройства, в том числе терминалы и сетевое оборудование. Пользователь взаимодействует с устройствами через посредничество файловой системы и драйверов. Каждое устройство имеет имя в каталоге /dev, и пользователь обращается к нему, как к файлу. Специальный файл устройства отличается от других файлов типом файла, хранящимся в его индексе: либо "блочный", либо "символьный специальный", в зависимости от устройства, которое этот файл представляет. Если устройство имеет и блочный, и символьный интерфейс, его представляют два файла: специальный файл устройства ввода/вывода блоками и специальный файл устройства посимвольного ввода/вывода. Системные функции обработки обычных файлов, такие, как open, close, read и write можно применять и для устройств. Однако системную функцию ioctl управляющую устройствами посимвольного ввода/вывода, нельзя применять по отношению к файлам обычного типа (и наоборот, системная функция fcntl обеспечивает контроль над действиями, производимыми на уровне дескриптора файла, но не на уровне устройства. В других реализациях функция ioctl применима для файлов всех типов.). Тем не менее, драйверам устройств нет необходимости поддерживать полный набор системных функций.
Байт-ориентированный интерфейс менее структурирован, поэтому программирование драйверов ввода/вывода для таких внешних устройств значительно проще.
Интерфейс системы с блок-ориентированными устройствами в большей степени определяется набором специальных функций и буферизацией блоков устройства. Поэтому их драйверы должны удовлетворять многим требованиям и системным соглашениям.
Управление внешними устройствами осуществляется с помощью специальной системной функции ioctl, которая является специфической функцией и имеет общую точку входа для всех связанных с типом устройства команд, позволяя процессам задавать аппаратные параметры, ассоциированные с устройством, и программные параметры, ассоциированные с драйвером. Специальные действия, выполняемые функцией ioctl, для разных устройств различны и определяются типом драйвера. Программы, использующие вызов ioctl, должны знать, с файлом какого типа они работают, т. к. они являются аппаратно - зависимыми. Исключение из общего правила сделано для системы, которая не видит различий между файлами разных типов.
Синтаксис командной строки, содержащей вызов системной функции:
ioctl(fd,command,arg);
где fd - дескриптор файла, возвращаемый предварительно вызванной функцией open; command - действие (команда), которое необходимо выполнить драйверу; arg - параметр команды (может быть указателем на структуру). Команды специфичны для различных драйверов; следовательно, каждый драйвер интерпретирует команды в соответствии со своими внутренними спецификациями. От команды, в свою очередь, зависит формат структуры данных, описываемой передаваемым параметром. Драйверы могут считывать структуру данных arg из пространства задачи в соответствии с предопределенным форматом или записывать установки устройства в пространство задачи по адресу указанной структуры.
Например, наличие интерфейса, предоставляемого пользователям функцией ioctl, даст им возможность: 1) устанавливать для терминала скорость передачи информации в бодах, 2) перематывать магнитную ленту и 3) выполнять сетевые операции, задавая номера виртуальных каналов и сетевые адреса.
Доступ системы к драйверу соответствующего устройства осуществляется через две системные таблицы cdevsw и bdevsw содержащие указатели на подпрограммы драйверов. Сdevsw - для байт-ориентированных и bdevsw –для блок - ориентированных устройств.