Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Энциклопедия PC

.pdf
Скачиваний:
30
Добавлен:
13.03.2015
Размер:
8.94 Mб
Скачать

3.7. Взаимодействиепрограммспериферийнымиустройствами 97

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

Программно-управляемый обмен подразумевает последовательность следующих шагов.

1.Операцию чтения регистра состояния устройства для анализа его готовности.

2.Ожидание готовности (зацикливание предыдущего шага).

3.Собственно обмен байтом или словом данных.

Такой обмен сильно загружает процессор, особенно если программа формирует и управляющие сигналы обмена. Так, например, работает драйвер параллельного порта в стандартном режиме, когда строб данных формируется двумя инструкциями OUT. В результате предел пропускной способности такого порта, в зависимости от производительности процессора, может быть порядка 150 Кбайт/с. Если процессор разгрузить от анализа готовности и формирования строба, как, например, в ЕРРрежиме параллельного порта (см. п. 9.4.3), то производительность порта можно повысить на порядок. Однако такой режим обмена программно-управляемым называть уже некорректно — это уже режим программного ввода-вывода с аппаратным контролем потока, где темп обмена определяет подключенное устройство.

Режим программного обмена РЮ (Programmed Input/Output), пересылающий блок байтов, слов или двойных слов между памятью и портом ввода-вывода, построен на инструкциях блочной пересылки REP INS/OUTS. Для этих инструкций задается начальный адрес памяти, длина блока, адрес порта и направление измененияадресапамяти(инкрементилидекремент). Инструкцииблочнойпересылки(и обмен РЮ) появились с процессорами 80286. Пересылки выполняются быстро, скорость передачи определяется производительностью (частотой) процессора и шины. Обмен в режиме РЮ успешно применяется и для обмена с устройствами АТА (IDE), причем в машинах AT он выполняется быстрее, чем по стандартному каналу DMA. Поскольку полную скорость РЮ периферийные устройства воспринять обычно не могут, контроллер интерфейса, аппаратно вводя такты ожидания, «притормаживает» обмен до разумных скоростей, определяемых режимом обмена. Для устройств АТА определены 5 режимов, называемых РЮ Mode (см. п. 13.1.6), со скоростями обмена от 3,3 (РЮ Mode 0) до 22,2 Мбайт/с (РЮ Mode 4). В режимах О, 1 и 2 синхронизация с устройством не предусматривается

— считается, что оно должно успевать. В режимах с большими номерами используется сигнал готовности от устройства, по которому могут быть введены дополнительные такты ожидания. Для устройств АТА режим РЮ задается при инициализации контроллера интерфейса АТА и согласуется с возможностями устройств.

Обмен по прямому доступу к памяти (DMA) почти не загружает процессор — выполняемыеиминструкцииввода-выводаотносятсялишьканализусостоя-

98 Глава3. АрхитектураIBM PC-совместимогокомпьютера

ния и инициализации канала DMA, но не к самой передаче данных. Время отклика на одиночный запрос, когда контроллер «заряжен» на обмен, не превышает сотен наносекунд. Однако скорость стандартного канала DMA ограничена значением2 или4 Мбайтавсекунду, взависимости отразрядности канала.

Обмен в режиме прямого управления шиной (bus mastering) выполняется по инициативе и под управлением относительно интеллектуального контроллера, здесь центральный процессор загружается в наименьшей степени (занимается только шина). Производительность в режимах прямого управления шиной обычно выше, чем у стандартных каналов DMA. Контроллер с прямым управлением может для подключаемого периферийного устройства эмулировать обмен в режиме DMA, но более эффективном, чем стандартные каналы, что и делается в современных контроллерах АТА (IDE). Прогрессивные режимы DMA обеспечивают более высокие скорости обмена — широко используется Ultra DMA/66 и внедряется UltraDMA/100. Эти режимы поддерживают скорость обмена до 66 и даже 100 Мбайт/с.

3.7.2. Синхронизацияпрограммиустройств

Мы рассмотрели способы передачи самого потока данных, а теперь обсудим вопросы его инициализации и синхронизации. Инициатором обмена может выступать как программа, так и периферийное устройство. Программа ожидает какого-либо события в устройстве (например, установки бита готовности), периодически читая его регистр состояния. Такой способ называется обменом по опросу готовности. Время реакции на события может быть сведено до долей микросекунды, когда программа активно занимается опросом устройства в монопольном режиме. Однако при этом во время ожидания события процессор загружен в общем-то бесполезной работой. Другой подход — использование аппаратных прерываний, вырабатываемых устройством по событиям, требующим взаимодействия с программой. Программные обработчики аппаратных прерываний обычно инициализируют любой из вышеперечисленных способов блочного обмена или выполняют одиночную операцию пересылки. Время реакции на запрос прерывания зависит от множества факторов, в том числе и от режима работы процессора. В защищенном режиме прерывание приводит к автоматическому сохранению контекста процессора в стеке и переключению задач. Эти действия связаны с интенсивным обменом с памятью, так что время отклика на прерывание может достигать десятков микросекунд. А если в переключении задействована и виртуальная память, то счет пойдет на десятки и сотни миллисекунд. В реальном режиме процессора ответ на прерывание может быть получен за единицы (и даже доли) микросекунд.

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

3.7. Взаимодействиепрограммспериферийнымиустройствами 99

меньшим, чем период прерываний от таймера. Так, например, работает утилита фоновой печати PRINT. Она не использует аппаратное прерывание от LPT-nop-та (хотя могла бы), а работает потаймеру.

Активное использование прерываний характерно лишь для многозадачных операционных систем.

3.7.3. Буферизацияданныхвустройствах

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

8 Блочные устройства, например, дисковые накопители. Обмен с ними возможен только блоками фиксированного размера — секторами. При обмене с физическим диском (например, через контроллер НГМД) нельзя останавливаться посредипередачиблока.

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

я Регистро-ориентированные устройства, которые, как правило, не являются источниками или приемниками большого объема данных. Программам обычно требуется знать текущее состояние данных устройств или (и) формировать текущие управляющие воздействия. Пример регистро-ориенти- рованного устройства — джойстик: программа в определенные моменты опрашивает текущее состояние кнопок и координатных датчиков. Регист-ро- ориентированными, как правило, являются различные устройства сопряжения с технологическим оборудованием, компьютеризированные измерительныекомплексыит. п.

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

Для того чтобы обеспечить некоторую свободу программ, обслуживающих

.стройства, относительно процессов формирования (потребления) данных устгюйствами, применяют различные способы буферизации данных внутри устройств J- 'H их контроллеров. Буфер представляет собой набор внутренних ячеек памя- -~л с определенными правилами доступа как со стороны устройства, так и со стогемы компьютерного «центра». Размер буфера и дисциплина его обслуживания вбираются, исходя из технических (скорость и объем информации, допустимые задержки) иэкономических(цена) соображений.

.Дляблочныхустройств обычноприменяютбуфер, минимальныйразмерко- -:оого равен размеру блока. Так, первые устройства IDE/ATA имели буфер ':: 1 бант— наодинсектордиска. Буферпоначалубылоднопортовым: причте- *жм с диска встроенный контроллер сначала заполнял буфер данными сектора, * - _-ь:<опослеэтогоданныеизбуферамоглибытьсчитанывпамятькомпьюте-

100 Глава3. АрхитектураIBM PC-совместимогокомпьютера

pa. Позже размер буфера увеличили до объема нескольких секторов и стали применять двухпортовый буфер, который допускает практически одновременное обращение с двух сторон (портов) — со стороны устройства (обмен с носителем) и со стороны интерфейса (обмен по шине АТА). При считывании последовательности секторовкактолькоочереднойсекторцеликомпопадаетвбуферисхемыконтроля сообщают об отсутствии ошибок, контроллер диска может выдавать данные этого сектора на внешний интерфейс, а сам тем временем продолжать считывание последующих секторов в оставшуюся часть буфера. Более хитрый контроллер может использовать кольцевой буфер, продолжая считывание секторов с носителя в освободившееся (считанное по внешнему интерфейсу) начало буфера. Однопортовый буфер большого размера оказывается неэффективным, посколькупридлинныхоперациях онвноситбольшуюзадержкудоставкиданных. Двухпортовость позволяет уменьшить задержку, а кольцевая организация делает буферпрактическибезразмерным(приусловиисвоевременногоосвобождения).

Адаптеры локальных сетей тяготеют к блочным устройствам — они передают данные целыми пакетами, которые должны приниматься и посылаться с определенной скоростью (10, 100 или 1000 Мбит/с для трех поколений Ethernet). Для них объем и организация буфера зависят от скорости среды передачи и производительности интерфейса (шины расширения), к которой они подключены. Максимальный размер пакета (кадра) для Ethernet — около 1,5 Кбайт (для технологий TokenRing и FDDI гораздо больше). Сетевые карты Ethernet на 10 Мбит для шин ISA/EISA имели буфер по крайней мере на один кадр, а полнодуплексные — на два. Значительно более эффективными были карты с большим объемом буфера (так, карты ЗС509В были гораздо «шустрее», чем ЗС509). Эти буферы могли также бытьоднопортовымиилидвухпортовымисовсемивышеописаннымисвойствами. Однопортовые буферы приводят к задержкам передачи на время приема целого кадра, что сказывается на увеличении времени отклика сети. Для 100-мегабитных (Fast Ethernet) карт PCI с прямым управлением шиной оказалось возможным использование всего пары 64-байтных буферов (по одному на прием и передачу, для полного дуплекса). Каждый буфер поделен пополам, и половинки чередуются (ping-pong buffer): при приеме пакета из сети сначала заполняется первая половина, затем вторая. Как только первая половина заполнится, карта запрашивает управление шиной и, как только его получает, выгружает (сама) данные из этой половинки в память. Как только заполнится вторая половина, карта переключится на заполнение первой (уже свободной) и даст следующий запрос на управление для выгрузки второй половины. По мере приема кадра эта «игра в пинг-понг» продолжается; передача кадра выглядит аналогично. Такое упрощение организации (это технически проще обеспечения двух-портотвого доступа к локальной памяти) стало возможным благодаря высокой пропускной способностишиныигарантированному временипредоставлениядоступакшине (см. п. 12.5.3). Однако для карт Gigabit Ethernet этот вариант уже не проходит, и нанихустанавливаютбуферынаполныйкадр.

Дляпотоковыхустройствчастоприменяютбуферсдисциплинойобслуживания FIFO (First In — First Out, первым вошел — первым вышел). Размер такого

3.7. Взаимодействиепрограммспериферийнымиустройствами 101

буфера, какправило, невелик(например, 16 байт). Буферставитсямежду«центром» и устройством, с одной стороны он наполняется, с противоположной — опорожняется. Опорожняющая сторона может извлекать данные из буфера, лишь когда наполняющая сторона их туда положит. Попытка извлечения данных из пустого буфера является ошибкой опустошения (underflow), попытка помещения в заполненный — ошибкой переполнения (overflow). Логика буфера следит за степенью наполненности буфера и сообщает «центру» о критических ситуациях. Когда «центр» (программа, исполняемая процессором) выводит данные через FIFO, логика следит за снижением наполненности буфера ниже порога опустошения и в случае такового сигнализирует (обычно прерыванием) о необходимости вывода следующей порции данных. Логика также препятствует переполнению, отвергая попытки записи лишних данных и немедленно сообщая об ошибке (обычно через соответствующий программно-читаемый бит состояния). При вводе данных через буфер FIFO его логика следит за наличием свободного места в буфере и при превышении порога заполнения также сигнализирует прерыванием. Аналогично, она не позволяет считать данные из пустого буфера и сообщает об этом соответствующим битом. Также логика буфера должна позволять его очищать по инициативе процессора, сообщать о количестве (или хотя бы о наличии) данных в буфере по запросу процессора. Управляемость порогов позволяет программе в зависимости от внешнего темпа обмена данными, возможностей и текущей загруженности компьютера выбрать оптимальный режим обмена, позволяющий и не «суетиться по мелочам», и не допускать переполнений/опустошений буфера. У двунаправленных устройств, как правило, имеется пара FIFO-буферов (для полного дуплекса), для симплексных устройств достаточно одного. Например, в контроллере НГМД (хотя этои блочное устройство, но медленное) имеется один переключаемый буфер (см. п. 7.2.3). Буферы FIFO применяются в СОМ-портах, LPT-портах и ряде других потоковых узлов компьютера. Без FIFO-буферов, например, невозможен фоновый обмен данными с модемами на скоростях выше 19,2 Кбит/с. Буферная память принтеров также является буфером FIFO, правда,,не очень гибким и «общительным» (о степени своейнаполненностипостандартномуинтерфейсуоннесообщает).

Буферы современных устройств внешней памяти имеют более сложную организацию, обеспечивающую кэширование данных; однако и они используют вышеописанные принципы организации. Однопортовые буферы большого объема, какужеговорилось, могутвноситьзаметнуюзадержку. Дляпотоковыхприменений (например, для воспроизведения мультимедийных файлов) эта задержка обычно не очень существенна и на производительность не влияет. Однако для приложений «петлеобразного» характера, когда буфер оказывается в цепочке за- прос-ответ, его задержка может приводить к снижению производительности. Так, например, передача данных по сети обычно представляет собой последовательность кадров данных, на каждый из которых передающая сторона ожидает кадр подтверждения. Если каждый кадр будет «просиживать» в буфере, естественно, производительность снизится. От этой беды спасает метод «скользящего окна», при котором передающая сторона допускает некоторое отставание приема подтверждений. Примерно та же идея используется и в синхронном режиме передачи нашинеSCSI (см. п. 13.2.1).

102 Глава3. АрхитектураIBM PC-совместимогокомпьютера

3.8. Распределениесистемных ресурсов

Для того чтобы программы могли взаимодействовать со своими устройствами, не мешая другим (и не получая от них помех), все системные ресурсы — адреса памяти и ввода-вывода, запросы прерываний и каналы DMA — должны быть бесконфликтнораспределенымеждусистемнымиустройствами1.

Для адресов памяти и портов ввода-вывода бесконфликтность означает, что диапазоны соответствующих адресов всех имеющихся устройств не должны перекрываться. Это в первую очередь касается адресов, по которым выполняется чтение. Если устройства, конфликтующие по чтению, находятся на одной физической шине, то результат чтения будет неопределенным из-за электрического конфликта. Если конфликтующие устройства находятся на разных шинах, то будут прочитаны данные только одного устройства, но какого именно — зависит от настройки мостов, соединяющих шины. Конфликт по адресам для записи часто сознательно используют для одновременной передачи информации в несколько устройств (например, в PnP ISA, см. п. 12.4.1). Информация при этом не искажается. Однако незапланированные конфликты по записи могут приводить к неожиданным побочным эффектам в работе устройств, не ожидающих данной записи. Для самого главного ведущего устройства — центрального процессора — безразлично, к какой из шин подключено устройство: он только задает адрес и тип операции. Операции записи обычно выполняются широковещательно — распространяются по всем шинам. Операции чтения маршрутизируются — фактическичтениепоконкретномуадресупамятиилипортаобычновыполняетсятолько с одной из шин.

Длялинийзапросовпрерыванийбесконфликтностьтрактуетсянесколькосложнее. В классической системе ISA одну линию запроса может использовать только одно устройство, все остальные варианты — конфликтные. В системах РпР ISA (имеющих PnP BIOS, более гибко программируемый контроллер прерываний и устройства ISA PnP) при корректных настройках устройства РпР аппа-ратно могут использовать разделяемые (общие для нескольких устройств) линии прерываний (см. п. 3.4.3). На обычные карты (устройства) ISA эта возможность, как правило, не распространяется. Однако и для устройств РпР возможны конфликты программ, работающих с этими устройствами, если в них не заложена возможность разделяемости прерываний. В системах с PCI разделяемость прерываний аппаратно предусмотрена, но, опять-таки, возможны программные конфликты (и некорректно спроектированные карты). В комбинированных системах ISA/PCI (таких сейчас большинство) доступные линии запросов прерываний делятся между старыми (legacy) устройствами ISA и устройствами РпР ISA и PCI, во второй группе разделяемые прерывания в принципе допустимы (но при «правильном» ПО).

Для каналов DMA бесконфликтным, как правило, является лишь монопольное использование канала одним устройством (хотя бывают и редкие исключения). На старыхустройствах каналывыбирались двумяджамперами— одиндля

Напомним, чтосистемныминазываютсятеустройства, которыесамизанимаюткакие-либоизперечисленных ресурсов.

3.8. Распределениесистемныхресурсов 103

линии DRQx, другой для DACKx#. Естественно, они должны устанавливаться согласовано, наодинитотженомерканала.

Системные устройства могут быть встроены в системную плату, а также устанавливаться в слоты шин расширения. Системные ресурсы должны распределяться между всеми этими устройствами. В распределении всегда имеется относительно неизменная часть (устройства системной платы, установленные ее изготовителем) и переменная часть, определяемая составом карт, установленных пользователем. Настройками CMOS Setup могут быть заданы ресурсы устройств системной платы, а часть из них может быть даже отключена, если вместо них используются адаптеры, установленные в слоты расширения. Правда, бывают случаи, когда штатное отключение (параметрами CMOS Setup) не помогает: отключают, обычно, неисправную периферию, но «сгореть» она может и вместе со своим «выключателем». В этом случае приходится неисправную периферийную микросхему отключать физически (отпаивать; для CMOS-микросхем по крайней мере отпаять вывод питания +5 В).

Ресурсы устанавливаемых карт задаются либо вручную, либо автоматически, в зависимости от возможностей шин, карт расширения и BIOS. Цель полной автоматизации — достичь идеала PnP (Plug-and-Play, включай и играй), когда от пользователя требуется лишь механически установить новое устройство, а дальше все распределения и установки драйверов выполняются без его участия. Однако естьидругаярасшифровкаPnP — Plug-and-Pray, включайи... молись, имеющаяпод собойвполнереальнуюоснову.

НаиболеераспространеннымидляподключениякартрасширенияPC являются шины ISA и PCI. В сравнительно молодую шину PCI изначально были заложены возможности автоматического конфигурирования устройств, и она поддерживает PnP в полном объеме (см. п. 12.5). Шина ISA не имела механизмов автоматического конфигурирования и распределения ресурсов, так что все заботы по конфигурированию устанавливаемых адаптеров и разрешению конфликтов ложились на пользователя. Задача конфигурирования осложнялась и из-за отсутствия общего механизма автоматической передачи установленных параметров прикладному и системному программному обеспечению. После конфигурирования адаптеров, выполняемого обычно переключением джамперов (хорошо, если есть документациясихописанием), установленныепараметрызаносились в какие-либо конфигурационные файлы, специфичные для каждого программного продукта. При необходимости смены конфигурации (она обычно появляется только в процессе использования устройств или при добавлении новых) всю кропотливую работу по конфигурированию приходилось проводить повторно. При этом, естественно, возможны ошибки. Неподготовленному пользователю эта работа может показатьсянепосильной, ионзоветнапомощьпрофессионала.

Некоторое облегчение конфигурирования принесло применение в адаптерах энергонезависимой памяти (NVRAM, EEPROM), хранящей конфигурации настроек, в том числе и использования системных ресурсов. Конфигурирование этих адаптеров выполняется программно специальной утилитой, а не с помощью джамперов. Отсюда и два их названия: Software Configured (программноконфигурируемые) или Jumperless (свободные от джамперов). Сейчас большинство карт ISA поддерживают спецификацию PnP ISA (см. п. 12.4.1), благодаря

104 Глава3. АрхитектураIBM PC-совместимогокомпьютера

чему во многих случаях с пользователя действительно снимаются заботы по конфигурированию.

При конфигурировании устройств возможны разные неожиданные эффекты. Например, возможен конфликт, если контроллер гибких дисков и контроллер АТА расположены на разных платах, а тем более на разных шинах, разделенных буферами. Дело в том, что бит смены носителя НГМД исторически находится по адресу дополнительного регистра состояния АТА (см. п. 13.1.2) и результат считывания по этому адресу зависит от многих факторов. Это, наверное, единственный случай, когда устройство должно передавать на шину не целый байт, и причины этого чисто исторические: в PC/AT контроллер НГМД был на одной плате с первой моделью контроллера НЖМД, и эта завязка не создавала неудобств. А дальше эти контроллеры обрели относительную самостоятельность, но для программной совместимости регистровую модель сохранили для обоих устройств. Все остальные конфликты в этом плане более тривиальны, хотя неприятностеймогутдоставитьнемало.

Кроме «явно полезных» устройств конфигурированию подлежат и мосты PCI, соединяющие все шины современных ПК. При конфигурировании мостов им указывается распределение системных ресурсов по шинам, которые они связывают. Таким образом задаются пути транслирования управляющих сигналов по шинам и управление буферами данных, обеспечивая для каждого адреса памяти или ввода-вывода единственную шину назначения, по крайней мере для операций чтения (операции записи в принципе могут быть и широковещательными). Подобная «маршрутизация» необходима и для сигналов запросов прерывания (каналы DMA к шине PCI отношения не имеют). Конфигурирование мостов, как правило, происходит незаметно для пользователя, хотя некоторыми параметрами (выделением определенных ресурсов) можно управлять с помощью

CMOS Setup.

3.9. Функционированиекомпьютера

Теперь, имея представление об архитектуре IBM PC-совместимого компьютера, рассмотрим, что в нем происходит во время работы — с момента включения до выключенияпитания.

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

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

3.9. Функционированиекомпьютера 105

щиеся на системной плате или подключаемые к шинам расширения. После окончания сигнала процессор по определенному адресу выбирает из памяти и исполняет первую инструкцию — управление передается на точку входа в программу инициализации компьютера (POST). Первым делом необходимо выполнить инициализацию процессора — установить желаемый режим и значения некоторых регистров. Далее выполняется проверка работоспособности и инициализация подсистем компьютера. Эта «раскрутка» выполняется в несколько этапов, постепенно вовлекая в работу протестированные подсистемы. Поначалу программа может смело пользоваться только регистрами процессора и постоянной памятью, и то неплохо бы ее проверить (например, подсчитать контрольную сумму). Если ПЗУ исправно, можно двигаться дальше, в противном случае лучше остановиться. Пока неизвестна работоспособность ОЗУ, оперативной памятью пользоваться нельзя, и, следовательно, недоступны вызовы процедур и обработка прерываний (вызвать-то процедуру можно, а вот возврат не гарантируется, поскольку адрес возврата берется из стека, то есть из ОЗУ). Далее инициализируется ОЗУ (программируются регистры чипсета, заведующие настройкой параметров контроллера памяти и регенерацией) и выполняется тестирование небольшого блока в его начале. Если тест прошел успешно, то для дальнейшей работы можно уже пользоваться и вызовами, и прерываниями (не забыв проинициализировать таблицу прерываний) и использовать память для хранения переменных — в таком окружении работать гораздо удобнее. Теперь можно проинициализировать и протестировать дисплейный адаптер, и дальнейшая раскрутка пойдет уже с «ожившим» экраном. Далее тестируют ОЗУ в полном объеме, определяют наличие контроллеров и адаптеров, инициализируют их и тестируют. Теперь BIOS знает реальную конфигурацию компьютера и готова к загрузке операционной системы. Векторы прерываний, за которые отвечает BIOS, проинициализированы — ими можно пользоваться. В этот момент можно войти в меню встроенной утилиты конфигурирования — CMOS Setup, с помощью которой можно изменять настройки различных подсистем компьютера. После окончания работы этой утилиты тест POST приходится выполнять снова — конфигурация может стать уже иной. Программа POST завершается вызовом процедуры начальной загрузки. Подробнее о работе и диагностическихсообщенияхPOST можноузнатьвп. 15.2.

Для процессоров, начиная с шестого поколения, у POST есть дополнительная забота — загрузить «заплатки» микропрограмм самого процессора (update microcode, см. п. 5.4.2). Эти заплатки позволяют исправлять некоторые ошибки, выявленные в процессорах определенных моделей и партий выпуска. Без них основные функции процессор, конечно, выполнять будет, но в современных сложных операционных системах и приложениях, как говорится, возможны варианты. Информация о том, какие заплатки требуются конкретному процессору, и сами заплатки хранятся в ROM BIOS. Если BIOS про установленный процессор (какой именно процессор установлен, POST может определить программно, см. п. 5.5.2) ничего не «знает», то и заплатки не загрузит. По этой причине может потребоваться обновление версии BIOS, которое на современных системных платах выполняется довольно просто (если производитель своевременно выкладывает образ BIOS на своем Web-сайте).

В процессе выполнения программа POST отыскивает модули расширений ROM BIOS — сначалавизвестномместе(поадресуCOOOOh) ищетсяROM BIOS

106 Глава3. АрхитектураIBM PC-совместимогокомпьютера

графической карты, а позже ищутся модули для карт расширения (в зоне С8000F4000h). Найденные модули инициализируются, при этом могут переопределяться векторы прерываний, по которым вызываются некоторые сервисы BIOS.

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

3.9.2. ЗагрузкаОСиприкладныхпрограмм

Последним шагом теста POST является выполнение процедуры начальной загрузки (bootstrap loader), которая вызывается как программное прерывание BIOS Int 19h (см. п. 15.3). Ее задача довольно скромная — с выбранного устройства загрузить в память один блок (сектор) данных и, если он похож на загрузчик, передать ему управление. Напомним, что «передать управление» означает выполнить инструкцию перехода на адрес точки входа в программу, загруженную в оперативную память. На этом деятельность POST заканчивается, и компьютер отдается во власть загружаемому ПО.

Процедура определяет первое готовое устройство из списка разрешенных и доступных загрузочных устройств. Загрузочным устройством может быть НГМД, жесткий диск, диск LS-120, CD-ROM, сетевой адаптер. Список устройств, разрешенных для загрузки, а также порядок их опроса задается параметрами CMOS Setup. При традиционном порядке опроса — А:, С: — сначала анализируется готовность НГМД попыткой прочитать загрузочную запись дискеты — первый сектор нулевой дорожки. Если дискета отсутствует (при этом дисковод не может прочитать никаких данных), то процедура переходит к попытке чтения главной загрузочной записи жесткого диска С:. Если сектор с дискеты прочитать удалось, то по определенному признаку в его содержимом процедура определяет, имеется ли в нем загрузчик ОС. Если загрузчик имеется, то ему передается управление для выполнения процесса загрузки операционной системы. Если в считанном секторе загрузчик не обнаружен, то компьютер останавливается с сообщением Non-system disk or disk error (Несистемный диск или ошибка чтения), после которого остается лишь установить системную дискету или, наоборот, извлечь дискету и сделать «комбинацию трех пальцев» — нажать Ctrl+Alt+Del. Это приведет к повторному запуску теста POST, но в сокращенном варианте, который завершится вызовом прерывания Int 19h — следующей попыткой загрузки. Такой способ перезапуска (перезагрузки) называется «теплым» (warm). Повторный запуск POST можно выполнить и «холодным» (cold) способом, нажав кнопку Reset, но при этом POST будет выполняться полностью, как после включения питания, что несколько дольше.

Загрузка с жесткого диска (в нашем случае если не обнаружена готовность НГМД) тоже начинается с попытки чтения первого сектора нулевой головки нулевого цилиндра, но здесь ищется главный загрузчик MBR (Master Boot Record) стаблицейразделов диска(см. п. 7.5.1). Этотзагрузчикдолженнайтиопи-