Устройство ввода-вывода имеет следующую архитектуру.


CPU
I/O Bus
  I/O Controler
    I/O Interface  
I/O Port
I/O Port
I/O Device


Каждое подключенное к шине устройство имеет свой уникальный адрес – порт. Для IBM PC совместимых компьютеров предполагается 65535 8-битных портов. Два 8-битных порта могут расцениваться как один 16-битный, пара которых, в свою очередь образуют 32-битный порт. 4 инструкции ассемблера процессора позволяют ему писать и читать из порта ввода-вывода in, ins, out, outs. Это “тяжелые” инструкции. Каждая содержит около десятка простых. Для передачи различных переменных используются дополнительные функции. Например для инструкции in существуют:

Inl – для переменных long

Ind – для переменных double и т.д.

Для нахождения требуемого порта нужны два номера.

Номер драйвера ядра, обслуживающего устройство

Номер порта ввода-вывода устройства

При запуске, ядро определяет подключенные устройства, выставляя им уникальный номер от 1 до 255. Это номер пула драйверов для обслуживания устройства. Мажор.

Порты ввода - вывода могут также быть отображены в адреса физического адресного пространства. (в область оперативной памяти). Процессор тогда способен связаться с устройством ввода - вывода, издавая команды ассемблера, которые работают непосредственно на памяти (например, mov, or, and, и так далее). Современные аппаратные устройства более подходят для отображенного ввода - вывода, так как это быстрее и может быть объединено с прямым доступом в память.

Для доступа к устройству процессор использует 4 потока, определяемые 8-битными номерами порта

Control register – процессор направляет управляющие команды, изменяя состояние утсройства

Status register – процессор считывает результаты команд и состояние устройства

Input register – процессор считывает данные из порта ввода-вывода

Output register – процессор записывает данные в порт ввода-вывода.

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

Например, для IDE жестких дисков использует пул 16 адресов 0xf000 –0xf00f. Это ресурсный узел. При этом определяется, что первые 8 адресов 0xf000 – 0xf007 используются для доступа к master-дискам а 8 адресов 0xf008-0xf00f для slave-дисков. Эти пулы также делятся 0xf000- 0xf003 – для доступа блочных устройств(кешируемых), 0xf004-0xf007 для доступа символьных устройств (не кешируемых). (остальное разбиение касается primary партиций. Их может быть не более 4.)

Ядро сопровождает этот пул с помощью драйвера жесткого диска. Этот драйвер имеет номер в таблице ресурсов ядра и называется мажором. Адрес, точно указывающий на устройство называется минором.



Дата добавления: 2017-06-13; просмотров: 1657;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.