Как компьютер может перезагрузить себя? После того, как он выключен, как он говорит себе, чтобы вернуться снова? Какое программное обеспечение может это сделать?
7 ответов
tl; dr: состояния питания на вашем компьютере контролируются реализацией ACPI (расширенная конфигурация и интерфейс питания). В конце процесса завершения работы ваша операционная система устанавливает команду ACPI, указывающую, что компьютер должен перезагрузиться. В ответ материнская плата сбрасывает все компоненты, используя соответствующие команды или строки сброса, а затем выполняет процесс начальной загрузки. Материнская плата фактически никогда не выключается, она только сбрасывает различные компоненты, а затем ведет себя так, как будто кнопка питания только что была нажата.
Долго и бессвязно, но (на мой взгляд) более интересный ответ:
Soft Power и как это работает
В былые времена (ну, ладно, для студента колледжа, как я, 90-е годы были давным-давно), у нас были материнские платы AT (Advanced Technology) с управлением питанием AT . Система питания AT была очень, очень простой. Кнопка питания на вашем компьютере была аппаратным переключателем (вероятно, в задней части корпуса), и ваш вход 120 В переменного тока прошел прямо через него. Он физически включал и выключал электропитание вашего источника питания, и когда этот переключатель находился в положении «Выкл.», Все в вашем компьютере было полностью разряжено (это делало батарею CMOS очень важной, потому что без нее не было бы источника питания для хранения оборудования часы тикают). Поскольку выключатель питания был физическим механизмом, не было программного способа включения и выключения питания. Windows будет показывать знаменитое сообщение "Теперь можно безопасно выключить компьютер", потому что, хотя все было припарковано и готово к отключению, ОС не смогла фактически щелкнуть выключателем питания. Эта конфигурация иногда упоминалась как жесткая сила, потому что это все оборудование.
В настоящее время все по-другому из-за чудес материнских плат ATX и мощности ATX (это расширенная технология eXtended, если вы следите). Наряду с рядом других достижений (mini-DIN PS/2, кто-нибудь?) ATX принес мягкую мощь. Мягкое питание означает, что питание компьютера может контролироваться программным обеспечением. Это принесло несколько изменений импорта:
- Питание в режиме ожидания: возможно, вы видели разъем "5v SB" или "5v standby", помеченный на выводах блока питания. Резервный источник питания - это линия 5 В к материнской плате, которая всегда включена, даже когда компьютер выключен. Вот почему при обслуживании современных компьютеров важно отключать или выключать жесткий выключатель блока питания (если он есть), потому что даже когда он выключен, вы можете потенциально замкнуть 5В SB и повредить материнскую плату. Вот почему батареи CMOS на самом деле уже не так важны - 5В SB используется для замены батареи CMOS всякий раз, когда источник питания питается от сети, поэтому батарея CMOS используется только при полном отключении компьютера от сети. Линия 5В SB позволяет компонентам вашего компьютера (особенно BIOS и сетевым адаптерам) поддерживать простое программное обеспечение, даже когда компьютер выключен.
- Интеллектуальное управление питанием. Если вы посмотрите на распиновку разъема материнской платы (P1) блока питания, вы заметите два контакта, обычно помеченные PS_ON и PS_RDY. Они означают "блок питания включен" и "блок питания готов". Если вы любите экспериментировать, возьмите блок питания не в компьютере, подключите его и осторожно замкните линию заземления (один из черных проводов) к линии PS_ON (зеленый провод). Блок питания заметно включится, вентилятор начнет вращаться. Компоненты материнской платы, работающие от +5В SB, фактически включают и выключают питание, подключая питание к выводу PS_ON. Поскольку в источнике питания есть некоторые конденсаторы и другие компоненты, для зарядки которых требуется некоторое время, напряжения на основных выходах источника питания могут быть нестабильными сразу после включения блока питания. Это то, для чего предназначен вывод PS_RDY, он включается, когда внутренняя логика блока питания определяет, что блок питания "готов" и будет обеспечивать стабильное питание. Материнская плата ждет, пока PS_RDY включен, чтобы продолжить загрузку.
Таким образом, ваш выключатель питания больше не "включает" компьютер. Вместо этого он подключен к базовым контроллерам вашей материнской платы, которые обнаруживают, что кнопка была нажата, и выполняют ряд шагов для подготовки системы, в том числе загораются PS_ON, чтобы было доступно питание. Кнопка питания - не единственный способ запуска процесса запуска, устройства на вашей шине расширения также могут это сделать. Это важно, потому что ваши сетевые адаптеры Ethernet фактически остаются включенными, когда ваш компьютер выключен, и ищут очень специфический пакет, часто называемый "Волшебный пакет". Если они обнаружат этот пакет, адресованный их MAC-адресу, они запустят процесс запуска. Вот как работает «Wake-on-LAN» (WoL). Часы также могут инициировать загрузку (большинство BIOS позволяют устанавливать время, в течение которого компьютер должен загружаться каждый день), а устройства USB и FireWire могут запускать загрузку, хотя я не знаю ни о какой реализации этого.
Понимание управления питанием
Ну, я объясняю, что такое Soft Power, потому что я думаю, что это интересно (всегда ключевая причина, по которой я это объясняю), и потому, что это позволяет вам понять, как программное обеспечение управляет питанием и состоянием / выключением компьютера. В большинстве современных компьютеров эта программная система представляет собой реализацию расширенного интерфейса конфигурации и питания или ACPI. ACPI - это стандартизированная, унифицированная система, позволяющая программному обеспечению контролировать систему питания вашего компьютера. Возможно, вы слышали о состояниях питания ACPI. Основным механизмом управления питанием являются эти "состояния питания", ваша операционная система переключается через режимы питания, подготавливаясь к переключению (процессы выключения / гибернации, которые происходят до фактического отключения питания), а затем приказывая материнской плате переключать состояния питания. , Состояния власти выглядят так:
- G0: Работает (ваш компьютер включен)
- G1: Спящий режим (состояние ожидания вашего компьютера, разделенное на S подсостояний)
- S1: питание ЦП и ОЗУ остается включенным, но ЦП не выполняет инструкции. Периферийные устройства отключены.
- S2: процессор выключен, оперативная память поддерживается
- S3: Все компоненты отключены, кроме оперативной памяти и устройств, которые будут вызывать возобновление (клавиатура). Когда вы говорите своей ОС "Спать", она останавливает процессы и затем входит в этот режим.
- S4: Спящий режим. Абсолютно все выключено. Когда вы передаете свою операционную систему Hibernate, она останавливает процессы, сохраняет содержимое оперативной памяти на диск и затем переходит в этот режим.
- G2: Soft Off. это ваш компьютер в выключенном состоянии. Питание отключено для всех устройств, кроме устройств, которые могут запускать загрузку.
- G3: Механическое выключение.
Как происходит сброс?
Вы заметите, что перезагрузка не является одним из этих состояний. Так что же на самом деле происходит, когда ваш компьютер, когда он перезагружается? Ответ может быть удивительным, потому что с точки зрения управления питанием это почти ничего. Есть команда сброса ACPI. Когда вы говорите операционной системе, что она перезагружается, она следует своему обычному процессу выключения (останавливает все ваши процессы, выполняет небольшое обслуживание, отключает ваши файловые системы и т.д.), А затем в качестве последнего шага, вместо того, чтобы перевести компьютер в состояние питания G2 (как если бы вы просто сказали отключить) устанавливает команду Reset. Обычно это называется "регистр сброса", потому что, как и большинство интерфейсов ACPI, это просто адрес, на который должно быть записано конкретное значение для запроса сброса. Я процитирую спецификацию 2.0 о том, что она делает:
Необязательный механизм сброса ACPI определяет стандартный механизм, обеспечивающий полный сброс системы. При реализации этот механизм должен сбрасывать всю систему. Это включает в себя процессоры, логику ядра, все шины и все периферийные устройства. С точки зрения OSPM утверждение механизма сброса является логическим эквивалентом выключения и включения питания машины. Получив контроль после сброса, OSPM будет выполнять действия аналогично холодной загрузке.
Итак, когда регистр сброса установлен, несколько вещей происходит последовательно.
- Вся логика сброшена. Это означает отправку соответствующих команд сброса на различные биты аппаратного обеспечения, включая ЦП, контроллер памяти, периферийные контроллеры и т.д. В большинстве случаев это просто означает включение физического провода RST, как показано выше на AndrejaKo.
- Затем компьютер загружается. Это часть «выполнить действия, аналогичные действиям с холодной загрузкой». Материнская плата выполняет те же действия, что и если бы блок питания был готов после нажатия кнопки питания.
Конечный эффект этих двух шагов (которые на самом деле делятся на гораздо больше шагов) заключается в том, что все выглядит так же, как только что загруженный компьютер, но питание фактически было включено все время. Это означает меньше времени, необходимого для выключения и запуска (так как вам не нужно ждать, пока блок питания не будет готов), и, что важно, позволяет инициировать загрузку после завершения работы операционной системы. Это означает, что не нужно использовать другой триггер запуска (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 (самопроверка при включении питания) были пропущены. Шаблон будет присутствовать только на "теплом" ботинке.