Мегаобучалка Главная | О нас | Обратная связь


Устройства ввода-вывода



2016-09-17 924 Обсуждений (0)
Устройства ввода-вывода 0.00 из 5.00 0 оценок




Центральный процессор и память не единственные ресурсы, которыми должна управ­лять операционная система. С ней также активно взаимодействуют и устройства ввода- вывода информации. На рис. 1.6 видно, что устройства ввода-вывода обычно состоят из двух компонентов: самого устройства и его контроллера. Контроллер представляет собой микросхему или набор микросхем, которые управляют устройством на физи­ческом уровне. Он принимает от операционной системы команды, например считать данные с помощью устройства, а затем их выполняет.

Довольно часто непосредственное управление устройством очень сложно и требует высокого уровня детализации, поэтому задачей контроллера является предоставление операционной системе простого (но не упрощенного) интерфейса. Например, контрол­лер диска может получить команду прочитать сектор 11 206 с диска 2. Получив коман­ду, контроллер должен преобразовать этот простой порядковый номер сектора в номер цилиндра, сектора и головки. Операция преобразования может быть затруднена тем, что внешние цилиндры имеют больше секторов, чем внутренние, а номера «плохих» секторов отображаются на другие секторы. Затем контроллер должен определить, над каким цилиндром сейчас находится привод головок, и выдать команду, чтобы он пере­местился вперед или назад на требуемое количество цилиндров. Далее необходимо дождаться, пока нужный сектор не попадет под головку, а затем приступить к чтению и сохранению битов по мере их поступления из привода, удаляя заголовки и подсчи­тывая контрольную сумму. В завершение он должен собрать поступившие биты в слова и сохранить их в памяти. Для осуществления всей этой работы контроллеры часто содержат маленькие встроенные компьютеры, запрограммированные на выполнение подобных задач.

Другим компонентом является само устройство. Устройства имеют довольно про­стые интерфейсы, поскольку они, во-первых, обладают весьма скромными возмож­ностями, а во-вторых, должны отвечать общим стандартам. Соблюдение последнего условия необходимо для того, чтобы, к примеру, любой контроллер SATA-диска смог работать с любым SATA-диском. SATA означает Serial ATA (последовательный ATA), а ATA, в свою очередь, означает AT-подключение. Если вы не в курсе того, что именно означает AT, то эта аббревиатура была введена для второго поколения компьютеров IBM — Personal Computer Advanced Technology (персональный компьютер, изготов­ленный по передовым технологиям), построенных на основе очень мощного по тем временам процессора 80286, имевшего тактовую частоту 6 МГц и выпущенного компа­нией в 1984 году. Из этого факта можно сделать вывод, что компьютерная индустрия имеет привычку постоянно дополнять существующие акронимы новыми префиксами и суффиксами. Кроме того, можно прийти к выводу, что такие прилагательные, как «advanced» (передовая, передовой), должны использоваться весьма осмотрительно, чтобы спустя 30 лет это не выглядело глупо.

В наше время SATA является стандартным типом дисков на многих компьютерах. По­скольку интерфейс устройства скрыт его контроллером, все операционные системы видят только интерфейс контроллера, который может существенно отличаться от интерфейса самого устройства.

Так как все типы контроллеров отличаются друг от друга, для управления ими требу­ется различное программное обеспечение. Программа, предназначенная для общения с контроллером, выдачи ему команды и получения поступающих от него ответов, называется драйвером устройства. Каждый производитель контроллеров должен по­ставлять вместе с ними драйверы для каждой поддерживаемой операционной системы. Например, сканер может поступить в продажу с драйверами для операционных систем OS X, Windows 7, Windows 8 и Linux.

Для использования драйвер нужно поместить в операционную систему, предоставив ему тем самым возможность работать в режиме ядра. Вообще-то драйверы могут работать и не в режиме ядра, и поддержка такого режима предлагается в настоящее время в опера­ционных системах Linux и Windows. Подавляющее большинство драйверов по-прежнему запускается ниже границы ядра. В пользовательском пространстве драйверы запуска­ются только лишь в весьма немногих существующих системах, например в MINIX 3. Драйверам в пользовательском пространстве должно быть разрешено получать доступ к устройству неким контролируемым способом, что является весьма непростой задачей.

Существует три способа установки драйвера в ядро. Первый состоит в том, чтобы заново скомпоновать ядро вместе с новым драйвером и затем перезагрузить систему. Многие устаревшие UNIX-системы именно так и работают. Второй способ: создать в специальном файле операционной системы запись, сообщающую ей о том, что тре­буется, и затем перезагрузить систему. Во время загрузки операционная система сама находит нужные ей драйверы и загружает их. Именно так и работает система Windows. При третьем способе — динамической загрузке драйверов — операционная система может принимать новые драйверы в процессе работы и оперативно устанавливать их, не требуя для этого перезагрузки. Этот способ ранее использовался довольно редко, но сейчас он получает все большее распространение. Внешние устройства, работающие по принципу «горячего подключения»[I], к которым относятся рассматриваемые далее устройства с интерфейсами USB и IEEE 1394, всегда нуждаются в динамически за­гружаемых драйверах.

В каждом контроллере для связи с ним имеется небольшое количество регистров. Например, простейший контроллер диска может иметь регистры для указания адреса на диске, адреса в памяти, счетчика секторов и направления передачи информации (чтение или запись). Чтобы активизировать контроллер, драйвер получает команду от операционной системы, затем переводит ее в соответствующие значения для записи в регистры устройства. Из совокупности всех регистров устройств формируется про­странство портов ввода-вывода, к которому мы еще вернемся в главе 5.

На некоторых компьютерах регистры устройств отображаются в адресное пространство операционной системы (на те адреса, которые она может использовать), поэтому со­стояния регистров можно считывать и записывать точно так же, как и обычные слова в оперативной памяти. На таких компьютерах не требуются какие-то специальные команды ввода-вывода, а пользовательские программы можно держать подальше от оборудования, помещая эти адреса за пределами досягаемости программ (например, за счет использования базовых регистров и регистров границ области памяти). На других компьютерах регистры устройств помещаются в специальное пространство портов ввода-вывода (I/O port space), в котором каждый регистр имеет адрес порта. На та­ких машинах в режиме ядра доступны специальные команды ввода-вывода (обычно обозначаемые IN и OUT), позволяющие драйверам читать и записывать данные в реги­стры. Первая схема исключает необходимость в специальных командах ввода-вывода, но задействует часть адресного пространства. Вторая схема не использует адресное пространство, но требует наличия специальных команд. Обе схемы используются до­вольно широко.

Ввод и вывод данных можно делать тремя различными способами. В простейшем из них пользовательская программа производит системный вызов, который транслируется ядром в процедуру вызова соответствующего драйвера. После этого драйвер присту­пает к процессу ввода-вывода. В это время он выполняет очень короткий цикл, посто­янно опрашивая устройство и отслеживая завершение операции (обычно занятость устройства определяется состоянием специального бита). По завершении операции ввода-вывода драйвер помещает данные (если таковые имеются) туда, куда требуется, и возвращает управление. Затем операционная система возвращает управление вы­зывающей программе. Этот способ называется активным ожиданием или ожиданием готовности, а его недостаток заключается в том, что он загружает процессор опросом устройства об окончании работы.

Второй способ заключается в том, что драйвер запускает устройство и просит его вы­дать прерывание по окончании выполнения команды (завершении ввода или вывода данных). Сразу после этого драйвер возвращает управление. Затем операционная система блокирует вызывающую программу, если это необходимо, и переходит к вы­полнению других задач. Когда контроллер обнаруживает окончание передачи данных, он генерирует прерывание, чтобы просигнализировать о завершении операции.

Прерывания играют очень важную роль в работе операционной системы, поэтому рас­смотрим их более подробно. На рис. 1.11, а показан процесс ввода-вывода. На первом этапе драйвер передает команду контроллеру, записывая информацию в его регистры. Затем контроллер запускает само устройство. На втором этапе, когда контроллер за­вершает чтение или запись заданного ему количества байтов, он выставляет сигнал для микросхемы контроллера прерываний, используя для этого определенные линии шины. На третьем этапе, если контроллер прерываний готов принять прерывание (а он может быть и не готов к этому, если обрабатывает прерывание с более высоким уровнем приоритета), он выставляет сигнал на контакте микросхемы центрального процессора, информируя его о завершении операции. На четвертом этапе контроллер прерываний выставляет номер устройства на шину, чтобы процессор мог его считать и узнать, какое устройство только что завершило работу (поскольку одновременно могут работать сразу несколько устройств).

Как только центральный процессор решит принять прерывание, содержимое счетчи­ка команд и слова состояния программы помещаются, как правило, в текущий стек и процессор переключается в режим ядра. Номер устройства может быть использован как индекс части памяти, используемой для поиска адреса обработчика прерываний данного устройства. Эта часть памяти называется вектором прерываний. Когда об­работчик прерываний (являющийся частью драйвера устройства, выдающего запрос на прерывание) начинает свою работу, он извлекает помещенные в стек содержимое счетчика команд и слова состояния программы и сохраняет их, а затем опрашивает устройство для определения его состояния. После завершения обработки прерывания обработчик возвращает управление ранее работавшей пользовательской программе — на первую же еще не выполненную команду. Все эти этапы показаны на рис. 1.11, б.

При третьем способе ввода-вывода используется специальный контроллер прямого доступа к памяти (Direct Memory Access (DMA)), который может управлять потоком битов между оперативной памятью и некоторыми контроллерами без постоянного вмешательства центрального процессора. Центральный процессор осуществляет настройку контроллера DMA, сообщая ему, сколько байтов следует передать, какое устройство и адреса памяти задействовать и в каком направлении передать данные, а затем дает ему возможность действовать самостоятельно. Когда контроллер DMA завершает работу, он выдает запрос на прерывание, который обрабатывается в ранее рассмотренном порядке. Более подробно контроллер DMA и аппаратура ввода-вывода будут рассмотрены в главе 5.

Прерывания часто происходят в очень неподходящие моменты, например во время работы обработчика другого прерывания. Поэтому центральный процессор обладает возможностью запрещать прерывания с последующим их разрешением. Пока прерыва­ния запрещены, любые устройства, закончившие свою работу, продолжают выставлять свои запросы на прерывание, но работа процессора не прекращается, пока прерывания снова не станут разрешены. Если за время запрещения прерываний завершится работа сразу нескольких устройств, контроллер решает, какое из них должно быть обработано первым, полагаясь обычно на статические приоритеты, назначенные каждому устрой­ству. Побеждает устройство, имеющее наивысший приоритет, которое и обслуживается в первую очередь. Все остальные устройства должны ожидать своей очереди.

Шины

Структура, показанная на рис. 1.6, на протяжении многих лет использовалась в ми­ни-компьютерах, а также в первой модели IBM PC. Но по мере увеличения скорости работы процессоров и памяти возможности единой шины (и, конечно, шины IBM PC) по обеспечению всех процессов обмена данными достигли своего предела. Нужно было что-то делать. В результате появились дополнительные шины как для более быстро­действующих устройств ввода-вывода, так и для обмена данными между процессором и памятью. Вследствие этой эволюции массовая х86-система на данный момент имеет вид, показанный на рис. 1.12.

У этой системы имеется множество шин (например, шина кэш-памяти, шина памяти, а также шины PCIe, PCI, USB, SATA и DMI), каждая из которых имеет свою скорость передачи данных и свое предназначение. Операционная система для осуществления функций настройки и управления должна знать обо всех этих шинах. Основной ши­ной является PCI (Peripheral Component Interconnect — интерфейс периферийных устройств).

Шина PCIe была придумана Intel в качестве преемницы более старой шины PCI, которая в свою очередь пришла на замену исходной шине ISA (Industry Standard Architecture — стандартная промышленная архитектура). Благодаря возможности передавать данные со скоростью в десятки гигабит в секунду шина PCIe работает намного быстрее своих предшественниц. Она сильно отличается от них и по своей природе. Вплоть до ее создания в 2004 году большинство шин были параллельными и совместно используемыми. Архитектура шин совместного использования означает, что для передачи данных разными устройствами используются одни и те же проводни­ки. Таким образом, когда данные для передачи имеются сразу у нескольких устройств, для определения устройства, которому будет позволено использовать шину, требуется арбитр. В отличие от этого шина PCIe использует выделенные непосредственные со­единения типа «точка — точка». Архитектура параллельной шины, подобная той, что используется в PCI, предполагает отправку каждого слова данных по нескольким про­водникам. Например, в обычных шинах PCI одно 32-разрядное число отправляется по 32 параллельным проводникам. В отличие от этого в PCIe используется архитектура последовательной шины, и все биты сообщения отправляются по одному соединению, известному как дорожка (lane), что очень похоже на отправку сетевого пакета. Это существенно упрощает задачу, поскольку обеспечивать абсолютно одновременное прибытие всех 32 битов в пункт назначения уже не нужно. Но параллелизм все же используется, поскольку параллельно могут действовать сразу несколько дорожек. На­пример, для параллельной передачи 32 сообщений могут использоваться 32 дорожки. Из-за быстрого роста скоростей передачи данных таких периферийных устройств, как сетевые карты и графические адаптеры, стандарт PCIe обновляется каждые 3-5 лет. Например, 16 дорожек PCIe 2.0 предлагали скорость 64 Гбит/с. Обновление до PCIe 3.0 удвоит эту скорость, а обновление до PCIe 4.0 — удвоит еще раз.

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

В данной конфигурации центральный процессор общается с памятью через быструю шину DDR3, со внешним графическим устройством — через шину PCIe, а со все­ми остальными устройствами — через концентратор по шине DMI (Direct Media Interface — интерфейс непосредственной передачи данных). Концентратор в свою очередь соединяет все другие устройства, используя для обмена данными с USB- устройствами универсальную последовательную шину, для обмена данными с жестки­ми дисками и DVD-приводами — шину SATA и для передачи Ethernet-кадров — шину PCIe. Об устаревших PCI-устройствах, использующих традиционную шину PCI, здесь уже упоминалось.

Шина USB (Universal Serial Bus — универсальная последовательная шина) была разрабо­тана для подключения к компьютеру всех низкоскоростных устройств ввода-вывода вро­де клавиатуры и мыши. Но как-то неестественно было бы называть устройства USB 3.0 со скоростью передачи данных 5 Гбит/с «медленными» тому поколению, становление которого пришлось на те времена, когда основной для первых машин IBM PC считалась шина ISA со скоростью передачи данных в 8 Мбит/с. В USB используется небольшой разъем, имеющий (в зависимости от версии) от 4 до 11 контактов, часть из которых под­водят к USB-устройствам питание или подключены к заземлению.

USB является централизованной шиной, в которой главное (корневое) устройство опрашивает устройства ввода-вывода каждую миллисекунду, чтобы узнать, есть ли у них данные для передачи. Стандарт USB 1.0 мог обеспечить совокупную скорость передачи данных 12 Мбит/с, в USB 2.0 скорость была поднята до 480 Мбит/с, а пико­вая скорость в USB 3.0 составила никак не меньше 5 Гбит/с. Любое USB-устройство может быть подключено к компьютеру и приступить к работе немедленно, не требуя его перезагрузки, которая нужна была некоторым устройствам до появления USB, что приводило в ужас целое поколение разочарованных пользователей.

SCSI (Small Computer System Interface — интерфейс малых вычислительных систем) является высокоскоростной шиной, предназначенной для высокопроизводительных дисков, сканеров и других устройств, нуждающихся в значительной пропускной спо­собности. В наши дни эти шины встречаются в основном в серверах и рабочих станци­ях. Скорость передачи данных может достигать 640 Мбайт/с.

Для работы в окружении, показанном на рис. 1.12, операционная система должна знать о том, какие периферийные устройства подключены к компьютеру, и сконфи­гурировать эти устройства. Это требование заставило корпорации Intel и Microsoft разработать для PC-совместимых компьютеров систему, называемую plug and play (подключи и работай). Она основана на аналогичной концепции, первоначально реа­лизованной в Apple Macintosh. До появления plug and play каждая плата ввода-вывода имела фиксированный уровень запроса на прерывание и постоянные адреса для своих регистров ввода-вывода. Например, клавиатура использовала прерывание 1 и адреса ввода-вывода от 0x60 до 0x64; контроллер гибкого диска использовал прерывание 6 и адреса ввода-вывода от 0x3F0 до 0x3F7; принтер использовал прерывание 7 и адреса ввода-вывода от 0x378 до 0x37A и т. д.

До поры до времени все это неплохо работало. Проблемы начинались, когда поль­зователь покупал звуковую карту и внутренний модем и обнаруживалось, что оба устройства использовали, скажем, прерывание 4. Возникал конфликт, не позволяющий им работать вместе. Решением стало появление на каждой плате ввода-вывода DIP- переключателей, или перемычек (jumpers). Однако приходилось инструктировать пользователя о необходимости выбрать уровень запроса на прерывание и адреса вво­да-вывода для данного устройства, которые не конфликтовали бы со всеми другими прерываниями и адресами, задействованными на его системе. Иногда выполнить эти требования без ошибок оказывались способны подростки, которые посвятили свою жизнь решению головоломок компьютерного оборудования. Но, к сожалению, кроме них это практически никому не удавалось, что приводило к полному хаосу.

Технология plug and play заставляет систему автоматически собирать информацию об устройствах ввода-вывода, централизованно присваивая уровни запросов на пре­рывания и адреса ввода-вывода, а затем сообщать каждой карте, какие значения ей присвоены. Эта работа тесно связана с загрузкой компьютера, и нам стоит взглянуть на этот процесс, поскольку в нем не все так просто, как кажется на первый взгляд.

 

Загрузка компьютера

В кратком изложении загрузка компьютера происходит следующим образом. У каж­дого персонального компьютера есть материнская плата (которую теперь в США в результате распространения политкорректности на компьютерную индустрию на­зывают родительской платой)[II]. На материнской плате находится программа, которая называется базовой системой ввода-вывода — BIOS (Basic Input Output System). BIOS содержит низкоуровневое программное обеспечение ввода-вывода, включая процедуры считывания состояния клавиатуры, вывода информации на экран и осуществления, ко всему прочему, дискового ввода-вывода. В наши дни эта программа хранится в энерго­независимой флеш-памяти с произвольным доступом, которая может быть обновлена операционной системой в случае обнаружения в BIOS различных ошибок.

При начальной загрузке компьютера BIOS начинает работать первой. Сначала она про­веряет объем установленной на компьютере оперативной памяти и наличие клавиатуры, а также установку и нормальную реакцию других основных устройств. Все начинается со сканирования шин PCIe и PCI с целью определения всех подключенных к ним устройств. Некоторые из этих устройств унаследованы из прошлого (то есть разработаны еще до создания технологии plug and play). Они имеют фиксированные уровни прерыва­ний и адреса ввода-вывода (возможно, установленные с помощью переключателей или перемычек на карте ввода-вывода, но не подлежащие изменению со стороны операцион­ной системы). Эти устройства регистрируются. Устройства, отвечающие стандарту plug and play, также регистрируются. Если присутствующие устройства отличаются от тех, которые были зарегистрированы в системе при ее последней загрузке, то производится конфигурирование новых устройств.

Затем ВIОS определяет устройство, с которого будет вестись загрузка, по очереди проверив устройства из списка, сохраненного в СМОS-памяти. Пользователь может внести в этот список изменения, войдя сразу после начальной загрузки в программу конфигурации ВЮ8. Обычно делается попытка загрузки с компакт-диска (иногда с флеш-накопителя и8В), если, конечно, таковой присутствует в системе. В случае неудачи система загружается с жесткого диска. С загрузочного устройства в память считывается первый сектор, а затем выполняется записанная в нем программа. Обычно эта программа проверяет таблицу разделов, которая находится в конце загрузочного сектора, чтобы определить, какой из разделов имеет статус активного. Затем из этого раздела считывается вторичный загрузчик, который в свою очередь считывает из ак­тивного раздела и запускает операционную систему.

После этого операционная система запрашивает ВIОS, чтобы получить информацию о конфигурации компьютера. Она проверяет наличие драйвера для каждого устройства. Если драйвер отсутствует, операционная система просит установить компакт-диск с драйвером (поставляемый производителем устройства) или загружает драйвер из Интернета. Как только в ее распоряжении окажутся все драйверы устройств, операци­онная система загружает их в ядро. Затем она инициализирует свои таблицы, создает все необходимые ей фоновые процессы и запускает программу входа в систему или графический интерфейс пользователя.


[I] То есть устройства, которые могут быть подключены к компьютеру или отключены от него без необходимости останавливать работу операционной системы и отключать компьютер от источника питания. — Примеч. ред.

[II] Также ее вполне корректно называть системной платой (system board или main board). — Примеч. ред.



2016-09-17 924 Обсуждений (0)
Устройства ввода-вывода 0.00 из 5.00 0 оценок









Обсуждение в статье: Устройства ввода-вывода

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (924)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.012 сек.)