Последним шагом программы POST является выполнение процедуры начальной загрузки (bootstrap loader), которая вызывается как программное прерывание Int 19h BIOS (см. 5.2). Ее задача довольно скромная — с выбранного устройства загрузить в память один блок (сектор) данных, и если он похож на загрузчик — передать ему управление. Напомним, что «передать управление» означает выполнить инструкцию перехода на адрес точки входа в программу, загруженную в оперативную память. На этом деятельность POST заканчивается, и компьютер отдается во власть загружаемому ПО.
Процедура определяет первое готовое устройство из списка разрешенных и доступных загрузочных устройств. Загрузочным устройством может быть НГМД, жесткий диск, диск LS-120, CD/DVD, флэш-память, сетевой адаптер. Список устройств, разрешенных для загрузки, а также порядок их опроса задаются параметрами CMOS Setup. При традиционном порядке опроса (А, С) сначала анализируется готовность НГМД попыткой прочитать загрузочную запись дискеты — первый сектор нулевой дорожки. Если дискета отсутствует (при этом дисковод не может прочитать никаких данных), то процедура переходит к попытке чтения главной загрузочной записи жесткого диска С. Если сектор с дискеты прочитать удалось, то по определенному признаку в его содержимом процедура определяет, имеется ли в нем загрузчик ОС. Если загрузчик имеется, то ему передается управление для загрузки операционной системы. Если в считанном секторе загрузчик не обнаружен, то компьютер останавливается с сообщением Non-system disk or disk error (несистемный диск или ошибка чтения), после которого остается лишь установить системную дискету или, наоборот, извлечь дискету и сделать «комбинацию из трех пальцев» — нажать клавиши Ctrl+Alt+Del. Это приведет к повторному запуску теста POST, но в сокращенном варианте, который завершится вызовом прерывания Int 19h — следующей попыткой загрузки. Такой способ перезапуска (перезагрузки) называется «теплым» (warm). Повторный запуск POST можно выполнить и «холодным» (cold) способом, нажав кнопку Reset, но при этом POST будет выполняться полностью, как после включения питания, что несколько дольше.
Загрузка с жесткого диска (в нашем случае — если не обнаружена готовность НГМД) тоже начинается с попытки чтения первого сектора нулевой головки нулевого цилиндра, но здесь ищется главный загрузчик, или главная загрузочная запись (Master Boot Record, MBR), с таблицей разделов диска (см. 9.6). Этот загрузчик должен найти описатель активного раздела, загрузить в память его первый сектор и, убедившись в том, что в нем находится загрузчик ОС, передать ему управление. Загрузчик ОС и должен загрузить операционную систему из выбранного (активного) раздела в память и передать ей управление. Главный загрузчик может являться и средством для выбора загружаемой ОС (boot manager) по желанию пользователя (из меню). На пути этого двухступенчатого загрузчика могут встречаться различные препятствия: не окажется MBR на штатном месте, не найдется описатель активного раздела, не найдется загрузчик в том секторе, который посчитали первым сектором активного раздела. Неприятности могут быть и у самого загрузчика ОС — он может не найти файлов, требуемых для загрузки ОС (это относится и к загрузчику дискеты). Наконец, может оказаться физически невозможным чтение какого-либо из требуемых секторов. Все эти препятствия отражаются соответствующими консольными сообщениями и приводят к остановке компьютера, после которой его можно перезапустить только «теплым» или «холодным» способом. Подробнее процедура загрузки описана в 5.2. Главный з&грузчик универсален для всех операционных систем. Загрузчики активных разделов, как и загрузчик на дискете, ориентированы на загрузку только своих операционных систем. Если загрузчику не удается найти и загрузить файлы ОС, он, скорее всего, остановит компьютер с сообщением вида Missing Operation System (отсутствует операционная система). Раньше был шанс встретить машину, которая при невозможности загрузки ОС запускает интерпретатор языка BASIC, «зашитый» в ее ПЗУ. И сейчас некоторые компьютеры при невозможности загрузки ОС «жалуются» на отсутствие интерпретатора BASIC, но и его присутствие дело бы не улучшило. Заметим также, что загрузчики проверяют то, что они загружают, весьма условно, так что возможна нештатная ситуация, когда под видом очередного фрагмента загрузчика или файлов ОС загружаются бессмысленные (в данном контексте) данные и этому загруженному «мусору» передается управление. В этом случае компьютер, скорее всего, «зависнет» безо всяких сообщений (а может и вывести на консоль абракадабру), и остается лишь попытаться его перезагрузить — возможно, с другого устройства. Такое поведение компьютера может быть признаком неисправного ОЗУ, дисковода и его контроллера, а также шин, их соединяющих.
Конечно, чаще всего загрузчику все же удается загрузить файлы операционной системы и передать управление по известному ему адресу памяти (иначе число компьютеров и их пользователей не росло бы так стремительно). Компьютер, у которого не загружается ОС, для рядового пользователя является лишь аппаратом, нуждающимся в ремонте. Для «продвинутого» пользователя — это поле деятельности, направленной на «оживление», то есть обеспечение возможности загрузки ОС. Если на «умершем» компьютере ранее занимались созидательной деятельностью (более серьезной, чем строительство городов в «борьбе империй»), то придется приложить усилия также и для сохранения информационного хозяйства, «нажитого непосильным трудом». Как именно хранится информация на дисках и каким образом она становится доступной, рассказывается в главе 9.
Как уже отмечалось, последовательность опроса устройств, с которых делается попытка загрузки операционной системы, задается параметрами CMOS Setup. «Классической» является последовательность А, С, и в старых компьютерах не было способа ее изменения. Позже появилась возможность ее изменения на обратную (С, А), а затем в нее стали включать и CD-ROM, и новые устройства LSI20, и флэш-память, и даже обнаруженные устройства удаленной загрузки (Remote Program Loader, RPL), позволяющие загружать ОС по сети. Если первое по порядку загрузочное устройство не готово (не установлен сменный диск, на жестком диске нет активного раздела), то процедура обращается к следующему по списку устройству. Таким образом, современные компьютеры могут загружаться не только с первого жесткого диска (С), но и с другого, если на нем имеется активный раздел. Правда, активизировать раздел с помощью утилиты FDISK, как это обычно и делается, можно только на первом физическом жестком диске (таково ее ограничение), так что для этого приходится временно переставлять устройства. Механизм упорядочивания начальной загрузки подробнее рассмотрен в 5.2.
Для регулярной работы попытка загрузки с гибкого диска вредна по ряду причин, самой безобидной из которых является то, что на опрос готовности накопителя затрачивается излишнеевремя. Хуже то, что случайно оставленная в накопителе дискета может содержать вирус в загрузочном секторе, и попытка загрузки с такой дискеты, даже если на ней нет операционной системы, передаст управление коду этого вируса. При незагруженной операционной системе вирусу аккуратно залезть в файловую систему затруднительно, но поселиться в загрузочном секторе жесткого диска (ищется легко — «первое место в первом ряду») он не поленится. Дальнейшее развитие событий зависит от злобности вируса и опытности пользователя (пока операционную систему не загрузили, этот вирус из загрузчика не вылезет). Запрет попытки загрузки с дискеты служит и средством защиты от несанкционированного доступа к данным. Если загрузка операционной системы закрыта паролем, а разрешена загрузка с дискеты, то, загрузив операционную систему, взломщик получит программный доступ к жесткому диску — по крайней мере, на физическом уровне. При заданной последовательности С, А загрузчик активного раздела жесткого диска не допустит передачи управления загрузчику с дискеты. Конечно, если изменение последовательности производится в целях защиты от несанкционированного доступа, вход в CMOS Setup также нужно закрыть паролем.
Загруженная операционная система выполняет инициализацию подведомственных ей программных и аппаратных средств. Она добавляет новые сервисы, вызываемые, как правило, тоже через программные прерывания, и расширяет некоторые сервисы BIOS. Под управлением операционной системы загружаются и исполняются пользовательские приложения и разные вспомогательные процессы и утилиты. Операционная система ведает распределением всех ресурсов компьютера — памяти (как оперативной, так и пространства на устройствах хранения данных), процессорного времени (в многозадачных системах), периферийных и коммуникационных устройств. Она же предоставляет пользователям интерфейс, с помощью которого пользователи запускают приложения, настраивают параметры ОС и выполняют иные действия.
Приложения и утилиты располагаются в виде файлов на устройствах внешней памяти — локальных и сетевых дисках или иных устройствах хранения. Пользователь запускает интересующие его приложения, указывая имя требуемой программы (или командного файла) с клавиатуры в ответ на приглашение (prompt) ОС или же «щелкая» на представляющем его значке. В однозадачных системах (типа MS-DOS) приложения запускаются поочередно: следующее приложение может запускаться только после завершения работы предыдущего. Правда, можно запускать еще так называемые резидентные программы — после запуска часть их программного кода и требуемая область данных «поселяются» в оперативной памяти, и ОС выдает приглашение для ввода очередной команды пользователя. Резидентные программы часто обозначают как TSR (Terminate and State Resident — завершить, оставив резидентно) по названию соответствующего сервиса DOS. Резидентными могут быть, например, программа фоновой печати, перекодировщик клавиатуры, калькулятор, отладчик, антивирусная программа и др. Резидентные программы «съедают» некоторый объем оперативной памяти, и программам, загружаемым после них, может не хватить свободной оперативной памяти. В ряде случаев резидентные программы удается разместить вне дефицитной стандартной памяти (см. 4.2). Управление резидентным программам передается по каким-либо событиям: аппаратным прерываниям (от устройств или таймера), вызовам определенных сервисов DOS или BIOS. Процессы в однозадачных системах могут быть и вложенными — одно приложение, не будучи завершенным, может загрузить дочернее приложение и передать ему управление. В свою очередь, и дочернее приложение может быть родительским процессом для следующего вложенного. По завершении дочернего процесса управление возвращается родительскому процессу, так что активным все-таки является лишь один процесс. Возможности порождения процессов ограничиваются и малым объемом стандартной памяти, предоставляемой в распоряжение программам.
В многозадачных системах (Windows, Unix, Linux) одновременно могут запускаться множество программ (процессов), и они могут работать псевдопарал-лельно (см. 7.1). Если процессоров (физических или логических, см. 7.5) несколько и используется ОС с мультипроцессорной поддержкой, то процессы будут работать действительно параллельно. Многозадачные системы работают в защищенном режиме процессора и используют виртуальную память, что позволяет всем запущенным процессам расходовать даже больше оперативной памяти, чем реально установлено. Конечно же, в этих системах можно запускать и резидентные программы (процессы), а также порождать дочерние процессы.
Как пользователь взаимодействует со своей программой, мы здесь рассматривать не будем — на эту тему про каждую «фирменную» программу написано множество книг, а что требуют «самодельные» программы, зачастую знает (и то не всегда точно) только создатель. Программы могут обращаться к файлам данных и параметров: считывать файлы, выполнять какую-то обработку, записывать результаты. Для того чтобы не потерять измененные данные, программу следует корректно завершать (закрывать) предусмотренными в ней средствами. Принудительное завершение программы средствами ОС может вести к потере несохраненных данных.
По окончании работы современные ОС тоже требуют корректного закрытия (shutdown) — завершения работы приложений и сохранения информации, необходимой пользователю и операционной системе, на энергонезависимых носителях (на диске). Только после этого компьютер можно выключать или выполнять «теплый» или «холодный» перезапуск. «Комбинация из трех пальцев» (Ctrl+Alt+Del) для старых ОС (типа MS-DOS), как правило, безусловно приводит к «теплому» перезапуску компьютера с потерей всех несохраненных данных. Правда, программы могут перехватить обработчик прерывания Int 19h и предложить пользователю подтвердить свои намерения. В ОС защищенного режима неуместный перезапуск чреват неприятностями, и комбинация Ctrl+Alt Del обычно вызывает запрос о намерениях пользователя с предупреждением о возможных последствиях. Сервер ОС NetWare вообще игнорирует эту комбинацию. Если выключить или сбросить (в смысле нажать кнопку Reset) компьютер до завершения работы ОС, могут появиться проблемы при последующей загрузке: потеря несохраненных пользовательских данных или системных настроек, потеря фрагментов дисковой памяти (кластеров) и даже разрушение ОС, требующее ее переустановки. Компьютеры в конструктиве АТХ (и ВТХ), а также портативные умеют сами выключать питание по завершении работы ОС, что упрощает правила поведения пользователя.
В старых ОС (MS DOS) «комбинация из трех пальцев» (Ctrl+Alt+Del) может приводить к малоприятным «чудесам», если используются контроллеры дисков или сетевые карты с прямым управлением шиной PCI или ISA. «Чудеса» обусловлены тем, что при «теплом» перезапуске не вырабатывается сигнал аппаратного сброса устройств, и мастер шины будет продолжать обмен данными между своим устройством и областью памяти, на которую он был предварительно «нацелен». Однако при перезагрузке в этой области могут оказаться уже совершенно не те данные. Если мастер выполняет запись в память (чтение диска или прием кадра из сети), неожиданные данные могут затереть область памяти, отведенную для других целей. Последствия могут быть различными — некорректная работа какой-либо загруженной программы, «зависание» и т. п. Если мастер выполняет чтение памяти (запись на диск или передачу кадра в сеть), то он может послать не те данные. В случае записи на диск последствия могут быть катастрофическими, если, например, на диск вместо таблицы размещения файлов запишется случайная информация. Передача ложных данных в сеть тоже нежелательна.
«Засыпание» и «пробуждение» компьютера
В работе персонального компьютера после загрузки ОС и запуска приложений часто возникают довольно длительные паузы (когда пользователь отвлекается на свои дела). В это время вхолостую расходуются электроэнергия (выделяется тепло), а также жизненные ресурсы некоторых устройств (например, зря выгорает люминофор монитора). Чтобы сократить эти напрасные потери, уже давно в компьютер ввели средства управления энергопотреблением (power management), а затем и улучшили их, обеспечив расширенное управление энергопотреблением АРМ (Advanced Power Management). Цель АРМ — переводить в «спящее» состояние (sleep) устройства, не требующиеся для работы в данный момент, и «будить» их (wake up) по первому требованию, по возможности незаметно для приложений и пользователей. Менеджер АРМ представляет собой часть системного ПО (BIOS и ОС), для работы ему требуется поддержка со стороны устройств. В спячку разные устройст ваможно вводить по-разному: у монитора можно погасить лучи и даже остановить генераторы развертки, у винчестера — остановить шпиндель, у процессора — остановить внутреннее тактирование или понизить эффективную тактовую частоту, память можно перевести в режим саморегенерации. С самого начала подобие спячки применяют для НГМД — мотор останавливается, если в течение 2 с нет обращений к дискете. Заснувшее устройство должно реагировать на свои интерфейсные сигналы, чтобы проснуться по сигналу от АРМ или по команде обычного обращения. В спящий режим устройства могут переходить по таймерам, отсчитывающим время от последнего обращения, прекращения активности пользователя (отсутствия сигналов от устройств ввода), а также по команде пользователя. Пробуждение системы выполняется по какому-либо внешнему событию — нажатию клавиши на клавиатуре (или специальной кнопки на системном блоке), движению мыши, специальному обращению по локальной сети (wake on LAN) или телефонному вызову модема. Конечно же, пробуждение устройства занимает некоторое время, требующееся на разгон двигателя, нагрев трубки монитора и тому подобные операции, и первое обращение к заснувшему устройству выполняется относительно долго. Иногда это просто раздражает темпераментного пользователя, а в ряде случаев может приводить к неприятным последствиям. Например, при записи компакт-дисков (CD-R и CD-RW), которую в произвольный момент прерывать нельзя (испортится болванка), засыпание источника данных (винчестера или привода CD-ROM) неуместно. Пользователи, не желающие возиться с настройкой АРМ (установкой параметров CMOS Setup и ОС), часто просто запрещают работу АРМ, в результате их компьютер всегда готов к работе, но, возможно, потребляет больше энергии, чем необходимо. Вопрос энергосбережения стоит особо остро для мобильных (блокнотных) ПК при питании от аккумуляторов. Помимо энергопотребления, АРМ снижает шум работающего компьютера: шумят вентиляторы блока питания, процессора и видеокарт; шумят винчестеры и приводы CD и DVD, особенно высокоскоростные. Если охлаждаемые устройства переходят в энергосберегающий режим, то можно снизить и скорость вращения вентиляторов, а следовательно, и их шум. Современные винчестеры позволяют регулировать уровень шума: появляется выбор между быстрой, но шумной работой и тихой, но менее производительной.
В плане управления потреблением различают следующие состояния устройств (в порядке «углубления сна»):
♦ On — активная (нормальная) работа, полное потребление, максимальная производительность;
♦ Standby — отключение питания некоторых узлов, с возможностью быстрого (порядка секунды) перехода в активное состояние;
♦ Suspend — более глубокое отключение (например, строчной развертки и на кала трубки монитора), выход из которого (resume) требует единиц — десят ков секунд;
♦ Off — отключение питания всех узлов, кроме цепей, обеспечивающих после дующее включение по команде.
Для ряда устройств (в том числе процессоров) применяют и иные названия состояния, например sleep (сон) и deep sleep (глубокий сон). Для других устройств применимо понятие уровня активности (АРМ level), который выражается численно: 0 — минимальное потребление, 255 — максимальная активность. Кроме того, имеется состояние механического отключения, когда устройство обесточено механическим выключателем и никакой менеджер АРМ его уже не включит.
Конечно, самый тихий и холодный компьютер — выключенный, но его «пробуждение» (включение) требует загрузки ОС и приложений, которые, по мере технического прогресса, требуют все больше времени на разгрузку. В принципе, можно процесс загрузки обойти, для чего достаточно сохранить все содержимое ОЗУ, а также содержимое всех регистров процессора и внутренних регистров (буферов памяти) всех устройств, например, на жестком диске. После этого можно обесточить компьютер, а по включении быстро восстановить запомненное состояние и продолжить работу с точки останова. Такой способ «усыпления» называется «зимней спячкой» {hibernate), при этом сохранение и восстановление состояния компьютера занимает всего десятки секунд. Приложения, работа которых была приостановлена, продолжают работу с того места, в котором были остановлены. В принципе, пользоваться таким способом выключения компьютера можно сколь угодно большое число раз, но на практике периодически приходится перезагружать ОС и приложения «по-честному». К этому вынуждают и сбои работы ОС и приложений, и накапливающиеся «отходы» памяти, которые не всегда могут быть использованы до перезагрузки. Для подстраховки перед усыплением компьютера рекомендуется все-таки явно сохранять пользовательские файлы на диске — риск невозможности восстановления состояния после включения хоть и невелик, но есть. Менее радикальный способ «усыпления», называемый Standby, сводится к остановке винчестеров, выключению дисплея, максимальному торможению процессора и всех остальных устройств. При этом состояние подсистем компьютера сохраняется, но на своих местах (данные остаются в памяти, регистрах процессора и всех устройств). Переход в нормальный режим происходит гораздо быстрее (время уходит только на раскрутку диска и на прогрев монитора, и то если он традиционный электронно-лучевой). Однако в таком состоянии компьютер все-таки потребляет заметную мощность, вентилятор настольного ПК продолжает работать. Надежность сохранения состояния получается ниже: провал (скачок) питания, толчки, способные нарушить контакт в модулях памяти или карт расширения, и прочие возмущения могут привести к потере состояния (впрочем, как и в нормальном рабочем режиме).
Идею быстрого доступа к ПК продвигают Microsoft и Intel, выступая с инициативами OnNow PC (можно перевести как «PC всегда готов») и Instantly Available PC. Эти идеи отражены в спецификациях РС99 и РС2001, и для управления питанием требуется спецификация ACPI (Advanced Configuration and Power Interface — расширенный интерфейс конфигурирования и питания). Спецификация ACPI представляет собой описание довольно сложной комбинации функций, часть из которых раньше возлагалась на относительно независимые системы РпР (в части конфигурирования) и АРМ. Этот интерфейс должен по возможности разумно управлять питанием различных подсистем. Если раньше управляли лишь потреблением монитора, винчестера и процессора (приостанавливая синхронизацию), то теперь могут «останавливаться» и оперативная память, и любые отдельные подсистемы, не используемые в данный момент времени. Система и устройства в «спящем» состоянии должны казаться выключенными — не шуметь, не мигать индикаторами, но иметь индикатор режима. Включение-выключение питания должно быть программно-управляемым. Система должна уметь «засыпать» (sleep state) и программно отключаться (soft off)- «Просыпаться» она должна по нажатию кнопки, внешнему сигналу от периферийного устройства (в том числе и на шине USB) или по заранее спланированному расписанию. Эта возможность может потребоваться, например, для автоматического запуска в ночное время утилит обслуживания дисков (дефрагментации), загрузки почты и т. п. Система должна иметь таблицу, описывающую методы управления всеми устройствами и шинами. В рамках ACPI требуется и контроль терморежима с управлением вентиляторами. Управление засыпанием и пробуждением может выполняться как от специальных кнопок на системном блоке, так и от специальных клавиш на клавиатуре. Кнопка-выключатель питания, используемая в современных системных блоках (АТХ) вместо механического выключателя, через CMOS Setup может быть запрограммирована на управление «спячкой».
Система управления потреблением настраивается параметрами CMOS Setup (раздел Power Management), а также средствами современных ОС, включая Windows 9х/200х/ХР. Основной аппаратной базой управления являются системная плата и BIOS, поддерживающие спецификацию ACPI (а прежде АРМ). Возможность программного включения обеспечивает «дежурный» (standby) источник блока питания АТХ; также важна поддержка АРМ и ACPI периферийными устройствами. Для быстрого запуска со стороны BIOS предусматривается сокращение времени выполнения начального теста POST — подробное тестирование может выполняться лишь при обнаружении проблем во время предыдущей загрузки. Время от включения до начала загрузки ОС стремятся сократить до нескольких секунд; правда, процесс может затянуться медленно запускаемыми дисками или необходимостью инициализации всего объема ОЗУ при обнаружении и коррекции ошибок (ЕСС). В BIOS должна быть возможность отключить визуализацию теста POST — тогда после включения ПК, если все в порядке, пользователь сразу увидит любимую заставку загружаемой им ОС.