* 1. Устройства ввода вывода. Устройства ввода-вывода Блочные устройства Символьные устройства 1. Устройства ввода вывода. Блочные устройства К блочным относятся такие устройства, которые хранят информацию в блоках фиксированной длины, у каждого из которых есть свой собственный адрес. Обычно размеры блоков варьируются от 512 до 32 768 байт. Вся передача данных ведется пакетами из одного или нескольких целых (последовательных) блоков. Важным свойством блочного устройства является то, что оно способно читать или записывать каждый блок независимо от всех других блоков. 2. Устройства ввода вывода. Символьные устройства Символьные устройства выдают или воспринимают поток символов, не относящийся ни к какой блочной структуре. Они не являются адресуемыми и не имеют никакой операции позиционирования. 1. Устройства ввода вывода. Иные устройства Часы не являются блочно адресуемыми. Они также не генерируют и не воспринимают символьные строки. Все, чем они занимаются — вызывают прерывания через четко определенные интервалы времени. Мониторы, имеющие отображение в памяти, также не вписываются в эту модель. 1. Устройства ввода вывода. Устройства ввода-вывода охватывают огромный диапазон скоростей 1. Устройства ввода вывода. Устройства ввода-вывода обычно состоят из механической и электронной составляющей. 1. Устройства ввода вывода. Интерфейс между контроллером и устройством зачастую относится к интерфейсу очень низкого уровня. Например, какой-нибудь жесткий диск может быть отформатирован на 10 000 секторов на дорожку, с размером сектора 512 байт. Но на самом деле с привода поступает последовательный поток битов, начинающийся с заголовка сектора (преамбулы), затем следуют 4096 бит, имеющиеся в секторе, и в завершение следует контрольная сумма, также называемая кодом коррекции ошибок (ЕСС, Еггогг Correcting Code). Заголовок сектора записывается на диск во время форматирования и содержит номера цилиндра и сектора, размер сектора, и тому подобные данные, а также информацию о синхронизации. Задача контроллера состоит в преобразовании последовательного потока битов в блок байтов и осуществлении коррекции ошибок в случае необходимости. Блок байтов обычно проходит первоначальную побитовую сборку в буфере, входящем в состав контроллера. После проверки контрольной суммы блока и объявления его не содержащим ошибок он может быть скопирован в оперативную память. 2. Организация ввода-вывода в операционных системах. Как центральный процессор обменивается данными с регистрами управления и буферами данных устройств ввода-вывода? 2. Организация ввода-вывода в операционных системах. 1 способ. Каждому регистру управления назначается номер порта ввода-вывода, являющийся 8- или 16разрядным целым числом. Набор всех портов вводавывода формирует пространство портов ввода-вывода, которое защищено от доступа со стороны обычных пользовательских программ (доступ к нему имеет только операционная система). 2. Организация ввода-вывода в операционных системах. 2 способ. Каждому регистру управления выделен уникальный адрес в памяти, который не распределяется в оперативной памяти. Эта система называется отображаемым на адресное пространство памяти вводом-выводом. Обычно выделяемые адреса находятся в верхней части адресного пространства. 2. Организация ввода-вывода в операционных системах. 3 способ. Гибридный вариант, в котором имеются буферы данных ввода-вывода, отображаемые на пространство памяти, и отдельные порты ввода-вывода для регистров управления. Такая архитектура используется в семействе машин Pentium, у которых по аналогии с IBM PC адресное пространство оперативной памяти от 640 К до 1 М зарезервировано для буферов данных различных устройств, вдобавок к портам ввода-вывода, имеющим номера от 0 до 64 К. 2. Организация ввода-вывода в операционных системах. Центральному процессору необходимо обращаться к контроллерам устройств, чтобы осуществлять с ними обмен данными. 1. Центральный процессор может запрашивать данные у контроллера ввода-вывода побайтно, но при этом будет нерационально расходоваться его рабочее время, 2. Чаще используется другая схема, которая называется прямым доступом к памяти — DMA (Direct Memory Access). 2. Организация ввода-вывода в операционных системах. 1. Центральный процессор может запрашивать данные у контроллера ввода-вывода побайтно 1. Сначала контроллер диска последовательно, побитно, считывает блок (один или несколько секторов) с диска, пока весь блок не окажется во внутреннем буфере контроллера. 2. Затем он вычисляет контрольную сумму, чтобы убедиться в отсутствии ошибок чтения. 3. Затем контроллер инициирует прерывание. 4. Когда операционная система приступает к работе, она может в цикле побайтно или пословно считать дисковый блок из буфера контроллера, считывая при каждом проходе цикла один байт или слово из регистра контроллера устройства и сохраняя его в оперативной памяти. 2. Организация ввода-вывода в операционных системах. 2. DMA (Direct Memory Access). 2. Организация ввода-вывода в операционных системах. 2. DMA (Direct Memory Access). 1. Сначала центральный процессор программирует DMA-контроллер, устанавливая значения его регистров таким образом, чтобы он знал, что и куда нужно передать (шаг 1). Он также выдает команду контроллеру диска на чтение данных с диска во внутренний буфер контроллера и на проверку контрольной суммы. После того как в буфере контроллера окажутся достоверные данные, к работе может приступать DMA. 2. DMA-контроллер инициирует передачу данных, выдавая по шине контроллеру диска запрос на чтение (шаг 2). 3. Запись в память — это еще один стандартный цикл шины (шаг 3). 4. Когда запись завершается, контроллер диска также по шине посылает подтверждающий сигнал DMA-контроллеру (шаг 4). 2. Организация ввода-вывода в операционных системах. 2. DMA (Direct Memory Access). 5. Затем DMA-контроллер дает приращение используемому адресу памяти и уменьшает значение счетчика байтов. Если счетчик байтов все еще больше нуля, то шаги со 2-го по 4-й повторяются до тех пор, пока значение счетчика не станет равно нулю. 6. Когда значение счетчика станет равно нулю, DMA-контроллер выставляет прерывание, чтобы центральный процессор узнал о завершении передачи данных. 7. Когда к работе приступает операционная система, ей уже не нужно копировать дисковый блок в память, потому что он уже там. 2. Организация ввода-вывода в операционных системах. Структура прерываний 3. Принципы создания программного обеспечения ввода-вывода в ОС. 1. Ключевая концепция разработки программного обеспечения ввода-вывода - независимость от конкретных устройств. Например, программа, считывающая входной файл, должна иметь возможность читать его с жесткого диска, компакт-диска, DVD или флэш-накопителя USB без изменения программы под каждое конкретное устройство. 3. Принципы создания программного обеспечения ввода-вывода в ОС. 2. С независимостью от конкретного устройства тесно связана и задача однообразного именования. Имя файла или устройства должно быть просто строкой или целым числом и никоим образом не зависеть от устройства. 3. Принципы создания программного обеспечения ввода-вывода в ОС. 3. Важным аспектом программного обеспечения ввода-вывода является обработка ошибок. Обработка ошибок должна осуществляться как можно ближе к аппаратуре. Если контроллер обнаружил ошибку чтения, он должен попытаться, если это возможно, исправить ее самостоятельно. Если он не в состоянии с ней справиться, то ее должен обработать драйвер устройства, возможно, путем повторной попытки чтения блока. 3. Принципы создания программного обеспечения ввода-вывода в ОС. 4. Еще один ключевой вопрос — способ применяемый для передачи данных: синхронный (блокирующий) или асинхронный (управляемый с помощью прерываний). 5. Следующей задачей программного обеспечения ввода-вывода является буферизация. 6. Понятие устройств совместного использования и выделенных устройств. 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 1. Программный ввод-вывод Например, пользовательскому процессу нужно распечатать на принтере строку, состоящую из восьми символов: «ABCDEFGH». 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 1. Программный ввод-вывод 1. Сначала данные копируются в ядро. 2. Затем операционная система входит в цикл, выводя на печать по одному символу. 3. Основное проявление программного ввода-вывода, ярко проиллюстрированное в этом листинге, состоит в том, что после вывода символа центральный процессор постоянно опрашивает устройство на готовность приема следующего символа. Такое поведение часто называют опросом или активным ожиданием. copy_from_user(buffer, p, count); for (i = 0; i < count; i++) { while (*printer_status_reg != READY); *printer_data_register = p[i]; } return to userO; /* p - буфер ядра */ /* цикл для каждого символа */ /* цикл до готовности */ /* вывод одного символа */ 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 2. Ввод-вывод, управляемый прерываниями Разрешить центральному процессору заниматься чемнибудь другим на время ожидания готовности принтера позволяет использование прерываний. Когда системный вызов на распечатку строки уже сделан, то буфер копируется в пространство ядра, и первый символ копируется в принтер, как только он пожелает его принять. В этот момент центральный процессор обращается к планировщику, и запускается какой-нибудь другой процесс. Процесс, запросивший распечатку строки, блокируется до тех пор, пока не будет распечатана вся строка. 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 2. Ввод-вывод, управляемый прерываниями copy from user(buffer, p,count); enable interrupts(); while(*printer_status_reg != READY); *printer_data_register=p[0]; scheduler(); 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 2. Ввод-вывод, управляемый прерываниями Когда принтер напечатал символ и готов принять следующий, он инициирует прерывание. Это прерывание вызывает остановку текущего процесса и сохранение его состояния. Затем запускается процедура обработки прерывания от принтера. Если распечатаны все символы, обработчик прерывания предпринимает действие по разблокировке процесса пользователя. В противном случае он печатает следующий символ, подтверждает прерывание и возвращается к процессу, выполнение которого было приостановлено прерыванием от принтера. 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 2. Ввод-вывод, управляемый прерываниями if (count==0) { unblock user (); } else { *printer_data_register=p[i]; count=count-1; i=i+1; } acknowledge_interrupt (); return_from_interrupt (); 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 3. Ввод-вывод с использованием DMA Очевидным недостатком ввода-вывода, управляемого с помощью прерываний, является то, что прерывания выдаются на каждый символ. На прерывания требуется некоторое время, поэтому данная схема приводит к пустой трате определенного количества времени центрального процессора. Решение проблемы заключается в использовании DMA. Идея состоит в использовании контроллера DMA для посимвольной передачи строки принтеру без участия центрального процессора. По сути DMA-метод является тем же вводом-выводом, управляемым с помощью прерываний, только вместо центрального процессора всю работу делает контроллер DMA. 3. Принципы создания программного обеспечения ввода-вывода в ОС. Три фундаментально различных способа осуществления операций ввода-вывода. 3. Ввод-вывод с использованием DMA Большим преимуществом DMA является сокращение количества прерываний с одного на каждый символ до одного на каждый распечатываемый буфер. При большом количестве символов и медленной обработке прерываний это может стать существенным улучшением. С другой стороны, контроллер DMA обычно работает намного медленнее, чем центральный процессор. Если DMAконтроллер не способен управлять устройством на полной скорости или центральному процессору нечего делать в ожидании прерывания от DMA, то, может быть, больше подойдет ввод-вывод, управляемый с помощью прерываний, или даже программный ввод-вывод. Но в большинстве случаев DMA себя вполне оправдывает. 4. Драйверы устройств. Уровни программного обеспечения ввода-вывода. 4. Драйверы устройств. Для управления каждым подключенным к компьютеру устройством ввода-вывода требуется специальная программа, учитывающая его особенности. Эта программа называется драйвером устройства. Обычно она создается производителем устройства и поставляется вместе с этим устройством. Поскольку для каждой операционной системы нужны свои собственные драйверы, производитель устройства обычно поставляет драйверы для нескольких наиболее популярных операционных систем. 4. Драйверы устройств. 4. Драйверы устройств. Функции драйвера 1. Восприятие абстрактных запросов на чтение и запись от независимого от конкретных устройств программного обеспечения, находящегося выше них по уровню, и отслеживание порядка их выполнения. 2. Драйвер должен при необходимости инициализировать устройство. 3. Управление энергопотреблением устройства и регистрация событий. 4. Драйверы устройств. Работа драйвера Типичный драйвер начинает свою работу с проверки приемлемости входных параметров. • Если они не приемлемы, возвращается сообщение об ошибке. • Если с параметрами все в порядке, может понадобиться перевод абстрактных понятий в конкретные. Для драйвера диска это может означать преобразование обычного номера блока в номера головки, дорожки, сектора и цилиндра, относящихся к геометрии диска. 4. Драйверы устройств. Работа драйвера Затем драйвер может проверить, используется ли устройство в данный момент. • Если оно используется, запрос будет поставлен в очередь для последующей обработки. • Если устройство простаивает, проверяется состояние аппаратуры, чтобы определить, может ли запрос быть обработан. Перед началом передачи данных может понадобиться включить устройство или запустить его двигатель. Как только устройство включится и будет готово к работе, им можно будет управлять. 4. Драйверы устройств. Работа драйвера Управление устройством означает выдачу в его адрес последовательности команд. Именно драйвер определяет последовательность команд в зависимости от того, что должно быть сделано. • После того как драйвер поймет, какие команды он собирается выдать, он начнет записывать их в регистры контроллера устройства. • После записи каждой команды в контроллер может потребоваться проверка, принял ли контроллер команду и готов ли он к приему следующей команды. • Эта последовательность повторяется до тех пор, пока не будут выданы все команды. 4. Драйверы устройств. Работа драйвера После того как команды были выданы, может сложиться одна из двух ситуаций. • В большинстве случаев драйвер должен ждать, пока контроллер не сделает в его интересах какую-нибудь работу, поэтому он самоблокируется до тех пор, пока не поступит прерывание на его разблокировку. • В других случаях операция завершается без задержки, и драйверу не нужно блокироваться (прокрутка экрана в символьном режиме). 4. Драйверы устройств. Работа драйвера По завершении операции драйвер должен провести проверку на отсутствие ошибок. • Если все в порядке, у драйвера могут быть данные (например, только что считанный блок) для передачи программному обеспечению, не зависящему от применяемого устройства. • Если в очереди были какие-нибудь другие запросы, то теперь один из них может быть выбран и запущен на выполнение. • Если запросов в очереди не было, драйвер блокируется в ожидании следующего запроса. 4. Драйверы устройств. Драйверы должны быть реентерабельными, то есть работающий драйвер еще до завершения первого вызова должен ожидать повторного вызова. • При обработке сетевым драйвером входящего пакета может прибыть еще один пакет. • Неожиданное добавление новых устройств может заставить ядро перераспределить ресурсы (например, линии запроса прерываний), забирая у драйвера старые и предоставляя вместо них новые.