Как компьютер может перезагрузить себя? После того, как он выключен, как он говорит себе, чтобы вернуться снова? Какое программное обеспечение может это сделать?
Как компьютер может перезагрузить себя? После того, как он выключен, как он говорит себе, чтобы вернуться снова? Какое программное обеспечение может это сделать?
Ответы:
tl; dr: состояния питания вашего компьютера контролируются реализацией ACPI (расширенная конфигурация и интерфейс питания). В конце процесса выключения ваша операционная система устанавливает команду ACPI, указывающую, что компьютер должен перезагрузиться. В ответ материнская плата сбрасывает все компоненты, используя их соответствующие команды или строки сброса, а затем следует процессу начальной загрузки. Материнская плата фактически никогда не выключается, она только сбрасывает различные компоненты, а затем ведет себя так, как будто кнопка питания только что нажата.
Долго и бессвязно, но (на мой взгляд) более интересный ответ:
В былые времена (ну, ладно, для студента колледжа, как я, 90-е годы были давным-давно), у нас были материнские платы AT (Advanced Technology) с мощностью ATуправление. Система питания AT была очень, очень простой. Кнопка питания на вашем компьютере была аппаратным переключателем (вероятно, в задней части корпуса), и ваш вход 120 В переменного тока прошел прямо через него. Он физически включал и выключал электропитание вашего блока питания, и когда этот переключатель находился в положении «Выкл.», Все в вашем компьютере было полностью разряжено (это делало батарею CMOS очень важной, потому что без нее не было бы блока питания для хранения оборудования часы тикают). Поскольку выключатель питания был физическим механизмом, не было программного способа включения и выключения питания. Windows будет показывать знаменитое сообщение «Теперь можно безопасно выключить компьютер», потому что, хотя все было припарковано и готово к отключению, ОС не смогла фактически щелкнуть выключателем питания. Эта конфигурация иногда упоминалась какжесткая сила , потому что это все оборудование.
В настоящее время все по-другому, из-за чудес материнских плат ATX и мощности ATX (это расширенная технология eXtended, если вы отслеживаете). Наряду с рядом других достижений (mini-DIN PS / 2, кто-нибудь?) ATX принес мягкую мощь . Мягкое питание означает, что питание компьютера может контролироваться программным обеспечением. Это принесло несколько изменений импорта:
Таким образом, ваш выключатель питания больше не «включает» компьютер. Вместо этого он подключен к основным контроллерам вашей материнской платы, которые обнаруживают, что кнопка была нажата, и выполняют ряд шагов для подготовки системы, в том числе загораются PS_ON, чтобы было доступно питание. Кнопка питания - не единственный способ запуска процесса запуска, устройства на вашей шине расширения также могут это делать. Это важно, потому что ваши сетевые адаптеры Ethernet фактически остаются включенными, когда ваш компьютер выключен, и ищут очень специфический пакет, часто называемый «Волшебный пакет». Если они обнаружат этот пакет, адресованный их MAC-адресу, они запустят процесс запуска. Вот как работает «Wake-on-LAN» (WoL). Часы также могут инициировать загрузку (большинство BIOS позволяют вам устанавливать время загрузки компьютера каждый день),
Что ж, я объясняю, что такое Soft Power, потому что я думаю, что это интересно (всегда ключевая причина, по которой я объясняю вещи), и потому, что это позволяет вам понять, как питание и состояние работы / выключения вашего компьютера контролируются программным обеспечением. В большинстве современных компьютеров эта программная система представляет собой реализацию расширенного интерфейса конфигурации и питания или ACPI . ACPI - это стандартизированная унифицированная система, позволяющая программному обеспечению контролировать систему питания вашего компьютера. Возможно, вы слышали о состояниях питания ACPI, Основным механизмом управления питанием являются эти «состояния питания», ваша операционная система переключается между режимами питания, готовясь к переключению (процессы выключения / гибернации, которые происходят до фактического отключения питания), а затем выдает материнской плате команду на переключение состояний питания. , Состояния власти выглядят так:
Вы заметите, что перезагрузка не является одним из этих состояний. Так что же на самом деле происходит, когда ваш компьютер, когда он перезагружается? Ответ может быть удивительным, потому что с точки зрения управления питанием это почти ничего . Есть команда сброса ACPI, Когда вы говорите операционной системе, что она перезагружается, она следует своему обычному процессу выключения (останавливает все ваши процессы, выполняет небольшое обслуживание, отключает ваши файловые системы и т. Д.), А затем в качестве последнего шага вместо того, чтобы переводить компьютер в состояние питания. G2 (как если бы вы просто сказали отключить) устанавливает команду Reset. Обычно это называется «регистр сброса», потому что, как и большинство интерфейсов ACPI, это просто адрес, на который следует записать определенное значение для запроса сброса. Я процитирую спецификацию 2.0 о том, что она делает:
Необязательный механизм сброса ACPI определяет стандартный механизм, обеспечивающий полный сброс системы. При реализации этот механизм должен сбрасывать всю систему. Это включает в себя процессоры, логику ядра, все шины и все периферийные устройства. С точки зрения OSPM утверждение механизма сброса является логическим эквивалентом выключения и включения питания машины. Получив контроль после сброса, OSPM будет выполнять действия аналогично холодной загрузке.
Итак, когда регистр сброса установлен, несколько вещей происходит последовательно.
Конечный эффект этих двух шагов (которые на самом деле разбиваются на гораздо больше шагов) состоит в том, что все выглядит так же, как только что загруженный компьютер, но питание фактически было включено все время. Это означает, что для выключения и запуска требуется меньше времени (поскольку вам не нужно ждать, пока блок питания не будет готов), и, что немаловажно, запуск инициализации начнется после завершения работы операционной системы. Это означает, что не нужно использовать другой триггер запуска (WoL и т. Д.), И вы можете использовать перезагрузку как эффективный способ удаленного сброса системы, когда у вас нет способа инициировать загрузку.
Это был длинный ответ. Но, надеюсь, теперь вы знаете больше об управлении питанием компьютера. Я определенно узнал некоторые вещи, исследуя это.
Вот отправная точка:
Чипсы обычно не выключаются, а затем включаются. Вместо этого есть строка сброса, которая переводит процессор в так называемое состояние сброса, когда обычно вся память очищается и процессор выглядит так, будто он только что включен. Пока этот вывод удерживается высоким (или низким, в зависимости от процессора), процессор сбрасывается. После того, как пин отпущен, он продолжит загрузку в обычном режиме, как если бы он был включен в первый раз. Дело в том, что нет отключения электричества.
Итак, как это масштабируется для более крупных систем, таких как современные ПК? Ну, современные компьютеры сделаны из компьютеров, которые иногда сделаны из самих компьютеров. Поэтому, когда вы устанавливаете компьютер для сброса, «компьютеры», которые делают компьютер, начнут сохранять свои состояния (если сброс управляется), или просто будут вытянуты контакты сброса.
Некоторые процессоры и микроконтроллеры (миниатюрные автономные компьютеры, обычно на 20 лет отстающие от современных настольных компьютеров) могут перезагружаться, используя внутренние коммутаторы. Как я уже сказал, как только сигнал, который генерирует сброс, исчезнет, компьютер запустится. Таким образом, предпосылка в вопросе не совсем верна. Компьютер не знает, когда включить. В курсе, когда он должен быть выключен или сброшен, а когда пропавший сигнал удерживает сигнал, он включится.
Такое поведение может выглядеть странно на современном компьютере, который можно настроить на включение в определенное время или по сети и т. Д. Как я уже сказал, компьютеры сделаны из компьютеров. Таким образом, хотя основной процессор может быть выключен, внутри может быть множество других микросхем и микроконтроллеров. Наиболее очевидный случай - это часы реального времени, которые часто работают от батареи. Затем он может включить другие микросхемы, которые включат другие микросхемы, и цепная реакция продолжается до тех пор, пока не включится весь компьютер. На современных компьютерах есть линия питания под названием +5 В постоянного тока. Он обеспечивает мощность около 50 мВт для различных устройств, которые включены, когда компьютер выключен.
Немного мелочей: контакт сброса на процессоре Intel 386 EX - это номер 110.
На Intel i7-900 это номер земли AL39.
Я надеюсь, что кто-то сможет дать ответ, который объяснит, как все работает с точки зрения высокого уровня, поскольку это довольно сложная система.
Этот пост описывает, как Linux запускает перезагрузку.
Выдержка:
У Linux есть множество различных способов сброса x86. Некоторые из них являются только 32-разрядными, и поэтому я просто буду их игнорировать, потому что, честно говоря, именно то, что вы делаете со своей жизнью. Кроме того, они ужасны. Итак, это оставляет нас с пятью из них.
kbd - перезагрузка через контроллер клавиатуры. В исходном IBM PC линия сброса ЦП была привязана к контроллеру клавиатуры. Запись соответствующего магического значения пульсирует в линии, и машина сбрасывается. Это все очень просто, за исключением того факта, что современные машины не имеют контроллеров клавиатуры (они на самом деле являются частью встроенного контроллера), и даже более современные машины даже не претендуют на наличие контроллера клавиатуры. Теперь встроенные контроллеры работают с программным обеспечением. И, как мы все знаем, программное обеспечение ужасно. Но, что еще хуже, программное обеспечение на встроенном контроллере было написано авторами BIOS. Совершенно очевидно, что любое притворство, что это когда-либо работает, является своего рода вымыслом. Некоторые машины очень требовательны к аппаратному обеспечению, находящемуся в точном состоянии, которое Windows будет программировать. Некоторые машины работают 9 раз из 10, а затем блокируются из-за нечетной проблемы с синхронизацией. А другие просто не работают вообще. Ура!
тройной - попытка сгенерировать тройную ошибку. Это делается путем загрузки пустой таблицы дескрипторов прерываний и последующего вызова int (3). Прерывание завершается неудачно (нет IDT), происходит сбой обработчика ошибок (нет IDT), и ЦП входит в состояние, которое теоретически должно вызвать сброс. За исключением того, что, кажется, нет требования, чтобы это произошло, и это просто не работает на куче машин.
pci - на самом деле не pci. Традиционный доступ к конфигурации PCI осуществляется путем записи 32-битного значения в порт io 0xcf8 для идентификации шины, устройства, функции и регистра конфигурации. Порт 0xcfc содержит соответствующий регистр. Но если вы напишите соответствующую пару магических значений в 0xcf9, машина перезагрузится. Зрелищный! И никак не стандартизированы (конечно, не являются частью спецификации PCI), поэтому разные чипсеты могут иметь разные требования. Booo.
efi - сервисы EFI обеспечивают точку входа для перезагрузки компьютера. Обычно это даже работает! Пока сервисы времени исполнения EFI работают вообще, что может растянуться.
acpi - последние версии спецификации ACPI позволяют указывать адрес (обычно память или пространство системного ввода-вывода) и значение для записи в него. Идея состоит в том, что запись значения в адрес сбрасывает систему. Оказывается, что это часто не удается. Также невозможно представить метод перезагрузки PCI через ACPI, потому что метод перезагрузки PCI требует пары значений, а ACPI дает только одно.
Он отображает местоположение ввода / вывода, которое понижает уровень строки данных, что говорит ЦПУ о том, что он должен прекратить все, что он делает, и запустить код из определенного места в BIOS.
Конечно, в прежние времена до управления питанием компьютеры могли перезагружаться. (Кто-нибудь помнит, когда зависшая программа означала, что вам пришлось использовать Ctrl + Alt + Delete для перезагрузки компьютера?)
На моем старом 486 команда на языке ассемблера JMP FFFF:0000
(т. Е. Установка указателя инструкций процессора на указанный адрес) приводила к перезагрузке всего компьютера. Другими словами, FFFF: 0000 обращается к расположению в BIOS, в котором есть инструкции о том, что должен делать компьютер при первом запуске. Я подозреваю, что кнопка сброса, описанная в ответе AndrejaKo, или кнопки сброса в дни, предшествующие управлению питанием, также принудительно указывали бы на указатель инструкций по тому же адресу.
Поиск Google для JMP FFFF: 0000 показывает много интересных страниц об этом.
Есть также вещь, названная сторожевым псом. Это устройство служит выключателем мертвеца. Компьютер должен сигнализировать сторожу каждую минуту, что он все еще жив. Когда компьютер выходит из строя, например, запустив бесконечный цикл, он не сможет сообщить сторожевому устройству, что он все еще работает, как предполагалось, и в этом случае сторожевой таймер выполнит аппаратный сброс. Это было продемонстрировано в популярном сериале терминатора, где робот был выбит из-за скачка напряжения. это сбрасывало бы себя через 2 минуты.
Вернувшись на старую IBM PC-1, клавиатурный контроллер, как ни странно, справился с перезагрузкой. IBM встроила небольшой микропроцессор для управления клавиатурой, и у него было несколько свободных линий ввода / вывода, поэтому они использовали одну из линий для управления линией сброса основного ЦП. Команда, отправленная на контроллер клавиатуры, приведет к перезагрузке ЦП, как если бы питание было только что включено.
Я предполагаю, что эта традиция продолжалась и в эпоху "АТ", и сегодня в ACPI могут остаться ее следы.
Добавлено: Там интересная деталь о вышеупомянутой схеме сброса. Во время ранней последовательности загрузки код искал определенный шаблон в ОЗУ, который мог быть установлен ранее исполняемым кодом. Если этот код присутствовал, некоторые из процедур POST (самопроверка при включении питания) были пропущены. Шаблон будет присутствовать только на «теплом» ботинке.