Из вышесказанного следует, что в состав современных ЭВМ входят многочисленные и разнообразные по выполняемым функциям, принципам действия и характеристикам периферийные устройства (ПУ), которые по назначению можно разделить на две группы:
• внешние запоминающие устройства, предназначенные для хранения больших объемов информации;
• устройства ввода-вывода, обеспечивающие связь машины с внешней средой путем ввода информации в ЭВМ и вывода ее из ЭВМ, ее регистрации и отображения.
Необходимость обеспечения автоматического распознавания и реакции ядра ЭВМ на многообразие ситуаций, возникающих в ПУ (готовность устройства, различные неисправности и т.п.), привела к использованию унифицированных форматов данных при обмене информацией между ПУ и ЭВМ. Преобразование унифицированных форматов данных в индивидуальные, приспособленные для отдельных ПУ, производится в самих ПУ.
Особую важность приобретает выполнение функций управления и контроля ПУ. Эти функции возлагают на общие для групп периферийного оборудования унифицированные устройства - контроллеры.
Рассмотрим функции, выполняемые контроллерами ПУ, на примере контроллера НЖМД с широко распространенным интерфейсом IDE. Отличительная особенность этого интерфейса - реализация функций контроллера в накопителе. При этом плата, которая является промежуточной между системной шиной ПК и НЖМД, представляет собой довольно простое устройство, содержащее дешифратор базовых адресов контроллера и формирователи сигналов интерфейса.
Контроллер жесткого диска позволяет:
• поддерживать формат данных на диске, совместимый с форматом данных ЭВМ;
• поддерживать не только стандартные, но также и задаваемые пользователем типы НЖМД;
• генерировать прерывание IRQ14;
• осуществлять поиск требуемых цилиндров (если головки находятся не на требуемом цилиндре, то инициируется его поиск, а затем выполняется чтение или запись информации);
• производить автоматическое переключение головок накопителя (при обнаружении конца дорожки во время мультисекторной передачи адаптер выбирает следующую дорожку, а при обнаружении конца цилиндра – следующий цилиндр, после чего продолжается выполнение команды);
• обнаруживать ошибки в считываемой информации и корректировать пакеты ошибок;
• управлять последовательностью размещения секторов на дорожке (чередованием);
• производить обмен данными с ЦП и ОЗУ в режиме программного ввода-вывода;
• производить внутреннюю диагностику аппаратуры адаптера.
Получив команды и данные от ЦП через программно-доступные регистры, адаптер НЖМД начинает выполнять операцию. Передача в ОЗУ компьютера считываемых данных, а также прием из ОЗУ записываемых данных происходят через буферную память адаптера НЖМД, необходимую для согласования временных параметров обмена данными между НЖМД и системной шиной, а также для коррекции информации (при записи информации на диск формируется циклический избыточный код контроля ошибок, который приписывается в конец каждого поля идентификатора сектора и каждого поля данных).
Рассмотрим состав и назначение регистров контроллера НЖМД.
Регистр данных 1F0h используется при выполнении операции чтения или записи сектора в программном режиме ввода-вывода. Этот регистр недоступен, пока не начнется операция чтения или записи.
Регистр ошибок 1F1h доступен только на чтение. Он определяет состояние контроллера после выполнения операции. Состояние этого регистра действительно в следующих случаях:
• после выполнения команды, если установлен бит “Error” в регистре состояния;
• после выполнения команды “Диагностика” или после выполнения внутренней диагностики контроллера по системному сбросу.
Коды регистра ошибок в диагностическом режиме:
• 01h - нет ошибки;
• 02h - ошибка адаптера;
• 03h - ошибка буфера сектора;
• 04h - ошибка аппаратуры вычисления контрольных кодов;
• 05h - ошибка процессора.
Значения битов регистра ошибок после выполнения команды (устанавливаются в 1 при наличии соответствующей ошибки):
• бит 0 - не найден адресный маркер сектора;
• бит 1 - при выполнении команды “Рекалибровка” не найдена нулевая дорожка;
• бит 2 - аварийное прекращение выполнения команды;
• бит 3 не используется;
• бит 4 - сектор с заданными координатами (цилиндр, головка, сектор) не найден;
• бит 5 не используется;
• бит 6 - наличие некорректируемой ошибки данных;
• бит 7 - в идентификаторе сектора обнаружена метка дефектного сектора.
В регистр стартового цилиндра 1F1h (доступный только для записи) заносится уменьшенный в 4 раза по отношению к действительному номер цилиндра, начиная с которого адаптер осуществляет запись данных.
В регистр счетчика секторов 1F2h заносится количество секторов, которое должно быть считано или записано. Значение этого регистра уменьшается на 1 при обработке каждого сектора. При мультисекторном считывании сектора должны располагаться на диске последовательно друг за другом (т.е. область данных должна быть непрерывной). Этот регистр доступен для считывания - в случае возникновения ошибки при выполнении операции чтения или записи в этом регистре будет находиться число необработанных секторов.
В регистр номера сектора 1F3h загружается стартовый номер сектора при операциях чтения-записи. После обработки каждого сектора в этот регистр заносится номер следующего сектора, подлежащего обработке. Регистр доступен для чтения/записи. После выполнения команды он содержит номер последнего обработанного сектора.
Регистры младшего (1F4h) и старшего (1F5h) байтов номера цилиндра определяют стартовый цилиндр для выполнения команды. Регистр доступен для чтения/записи. После выполнения команды он содержит текущий адрес цилиндра.
Регистр выбора НЖМД и номера головки 1F6h, доступный для чтения/записи, определяет номер головки, выбранный НЖМД (1 или 2), и размер сектора.
Регистр состояния 1F7h, доступный только для чтения, отображает состояние адаптера и НЖМД. Значения битов регистра состояния (возникновение определенного состояния индицируется установкой соответствующего бита в 1):
• бит 0 - при выполнении команды произошла ошибка (этот бит сбрасывается при поступлении следующей команды);
• бит 1 - сигнал “Index” активен;
• бит 2 - индицирует, что при считывании с диска имела место ошибка, но данные были успешно скорректированы;
• бит 3 - имеется запрос на обмен данными с буфером в ОЗУ;
• бит 4 - индицирует, что головки чтения-записи завершили поиск заданного сектора;
• бит 5 - неисправность накопителя;
• бит 6 - НГМД готов к выполнению операций чтения, записи или поиска;
• бит 7 - НГМД “занят”, ему нельзя передавать команды или данные, нельзя считывать содержимое регистров (во избежание получения ложных данных).
Регистр команд 1F7h используется для загрузки выполняемой команды (загрузка команды должна производиться только после того, как подготовлены и записаны в регистры 1F1h-1F6h все необходимые для ее выполнения данные). Регистр управления 3F6h доступен только для записи. Значения битов этого регистра следующие:
• бит 0 не используется;
• бит 1 - разрешение прерывания (0 - разрешено, 1 - запрещено);
• бит 2 - сброс адаптера (сброс происходит при установке этого бита в 1);
• бит 3 - разрешение использования бита 3 для выбора головки (0 - запрет, 1 - разрешение);
• биты 4-7 не используются.