Что такое cpu инициализация памяти

Как процессор инициализируется тактами?

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

Я не понимаю этого. Может ли кто-нибудь помочь мне понять это?

Что происходит между включением питания и инициализацией процессора?

Последовательность питания оборудования: предварительная загрузка

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

Первая задача состоит в том, чтобы блок питания мог установить свое номинальное состояние. После того как первичный источник питания установится, на платформе обычно требуется ряд уровней производного напряжения. Например, на эталонной платформе Intel Architecture основным источником питания является 12-вольтовый источник, но платформе и процессору требуются шины напряжения 1,5, 3,3, 5 и 12 вольт. Напряжения должны быть предоставлены в определенном порядке, процесс, известный как силовая последовательность. Питание определяется последовательностью управления аналоговыми переключателями, обычно полевыми транзисторами. Последовательность часто управляется комплексным программным логическим устройством (CPLD).

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

Только после того, как все эти шаги были выполнены, CPLD последовательности питания может де-утверждать линию сброса к процессору, как проиллюстрировано на рисунке 1. В зависимости от интеграции функций кремния, некоторые из этой логики могут быть на кристалле и управляться Прошивка микроконтроллера, которая запускается до основного процессора.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Как только строка сброса процессора была отменена, процессор начинает извлекать инструкции.

Что такое сигнал часов?

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

В компьютере все время измеряется в единицах тактовых циклов.

Источник

Что такое cpu инициализация памяти

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

8. Инициализация микропроцессора

Аппаратный сброс (hardware reset) выполняется процессором при включении питания и по сигналу RESET#. По низкому уровню сигнала RESET# процессор прекращает выполнение инструкций и перестает управлять системной шиной. В момент окончания сигнала аппаратного сброса процессор воспринимает уровни сигналов на определенных линиях шины управления. Таким образом устанавливаются: коэффициент умножения тактовой частоты, режим работы кэша (write-back / write-through), роль процессора в многопроцессорных системах, способ подачи сигналов прерываний (для процессоров, имеющих АРIC) и некоторые другие параметры. Эти уровни задаются чипсетом системной платы в соответствии с ролью процессора и установками переключателей (перемычек) или CMOS Setup.

Для МП 80386 при частоте 16 МГц на самотестирование уходит около 2 19 тактов или приблизительно 33 мс.

Процессоры Pentium+ имеют дополнительный вход INIT#, по которому выполняются примерно те же действия, но не очищается внутренняя кэш-память, не изменяется состояние FPU и регистров MSR. Этот сигнал может использоваться для перевода процессора в реальный режим (в стиле 80286) с сохранением данных в кэше. Такой же «мягкий» сброс возможен и по сообщению, получаемому процессором по шине APIC.

Подготовка к работе в реальном режиме

Перед тем как запускать программы в реальном режиме, следует инициализировать некоторые структуры. Для того, чтобы можно было выполнять команды с обращением к стеку, надо загрузить регистр сегмента стека SS. Он должен указывать на область оперативной памяти.

Сигнал RESET# автоматически устанавливает на адресных линиях А20-31 высокий уровень. Это позволяет инициализировать систему с помощью ПЗУ, расположенного в конце адресного пространства. Автоматическая установка адресных линий вместе с начальным значением CS:IP приводит к выполнению команды с физическим адресом FFFFFFF0h. С помощью внутрисегментных (ближних) форм команд передачи управления можно осуществить переход на другие адреса, принадлежащие верхним 64Кбайт адресного пространства. Первая же межсегментная команда JMP или CALL снимает высокий уровень с линий А31-20, после чего МП продолжает выполнять команды в нижнем мегабайте физической памяти.

Подготовка к работе в защищенном режиме

Переключение процессора в защищенный режим из реального осуществляется загрузкой в системный регистр CR0 слова с установленным битом РЕ (Protect Enable).

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

Регистр сегмента стека (SS) можно загружать и в защищенном режиме, и в реальном режимах. Если SS загрузить в реальном режиме, он и после переключения в защищенный режим продолжает указывать на тот же самый линейный базовый адрес.

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

Регистр GDTR должен указывать на достоверную таблицу GDT перед тем, как содержимое какого-либо регистра изменяется в защищенном режиме. Таблицы GDT и LDT следует размещать в оперативной памяти, потому что МП модифицирует бит доступа в дескрипторах. Инициализацию GDT и GDTR можно провести в реальном режиме.

Переключение процессора из защищенного режима в реальный возможно не только через аппаратный сброс, как это было у 80286, но и с помощью сброса бита РЕ в CR0. до этого переключения также необходимо загрузить в сегментные регистры селекторы дескрипторов, описывающие свойства сегментов стандартного реального режима. Однако вместо этого можно создать и так называемый «нереальный» режим, отличающийся от реального возможностью доступа к сегментам большого (до 4 Гбайт) размера. Правда, у процессоров 80286 и 80386 лимит кодового сегмента принудительно ограничивается размером 64 Кбайт, но у более новых процессоров большой размер допустим для всех сегментов. «Нереальный режим» часто используется менеджерами памяти для DOS и игровыми программами, требующими большого объема памяти.

Источник

Вся правда об ОСРВ. Статья #30. Инициализация и процедуры запуска Nucleus SE

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

У любой операционной системы есть определенный механизм запуска. Принцип работы этого механизма у каждой системы свой. Обычно говорят, что система загружается (англ. boot), это сокращение от «bootstrap», которое отсылает к выражению «pull oneself over a fence by one’s bootstraps» (перебраться через ограду, потянув себя за ремешки на обуви), что примерно описывает, как система самостоятельно переходит из состояния, в котором память заполнена пустотой (прим. переводчика: если совсем точно, то мусором) к стабильному выполнению программ. Традиционно в память загружается небольшая часть программы, она может храниться в ПЗУ. В прошлом она могла вводиться при помощи переключателей на передней панели компьютера. Этот начальный загрузчик считывал более сложную программу загрузки, которая уже загружала операционную систему. Сегодня настольный компьютер загружается следующим образом: код в BIOS ищет устройства (жесткие диски, CD-ROM, USB-флешки), с которых можно загрузиться, после чего загружается операционная система.

ОС для встраиваемых систем также может инициализироваться подобным образом. И в самом деле, встраиваемые операционные системы, разработанные на основе настольных операционных систем, так и загружаются. Но в большинстве «классических» ОСРВ используется гораздо более простой (а, следовательно, более быстрый) способ.

Операционная система – часть программного обеспечения. Если это программное обеспечение уже находится в памяти (например, в том или ином виде ПЗУ), то требуется всего лишь сделать так, чтобы последовательность команд ЦП после сброса заканчивалась выполнением кода инициализации ОС. Именно так работают большинство ОСРВ, в том числе и Nucleus SE (примечание переводчика: и к нашей ОСРВ МАКС это тоже относится).

Большинство средств разработки встраиваемого программного обеспечения включают в себя необходимый код запуска для обработки сброса ЦП и передачи управления во входную точку (Entry Point) в функции main(). Распространяемый код Nucleus SE не имеет дела с этим процессом, так как он должен быть максимально портируемым. Вместо этого, он содержит функцию main(), которая берет контроль над ЦП и инициализирует и запускает ОС. Эта функция будет подробно рассмотрена ниже.

Инициализация памяти

Объявления всех статических переменных в коде Nucleus SE начинаются с префикса ROM или RAM, чтобы показать, где их следует размещать. Эти две директивы #define определены в файле nuse_types.h и должны быть сконфигурированы с учетом особенностей используемого набора инструментов для разработки (компилятор и компоновщик). Обычно ROM должен иметь тип const (прим. переводчика: из моего опыта, const – не всегда достаточно, лучше – static const), а RAM – пустое значение.

Все переменные ROM инициализируются статически, что логично. Переменные RAM не инициализируются статически (так как это работает только с определенными наборами инструментов, которые настроены на автоматическое копирование из ПЗУ в ОЗУ); явный код инициализации включен в приложение и будет подробно описан ниже.

Nucleus SE не хранит «константных» данных в ОЗУ, которая обычно в дефиците у небольших систем. Вместо использования сложных структур данных для описания объектов ядра используются наборы таблиц (массивов), которые без проблем размещаются в ПЗУ или ОЗУ, в зависимости от необходимости.

Функция main()

Ниже приведен полный код функции main() Nucleus SE:

Последовательность операций довольно проста:

Функция NUSE_Init()

Эта функция инициализирует все переменные ядра и структуры данных Nucleus SE.

Инициализация задач

Если планировщик Run to Completion не был сконфигурирован, инициализируется контекстный блок для задачи NUSE_Task_Context[task][]. Большинству элементов не присваиваются значения, так как они представляют общие машинные регистры, которые должны иметь промежуточное значение при запуске задачи. В примере (Freescale ColdFire) реализации Nucleus SE (но и у других процессоров механизм будет аналогичным) последние три записи заданы явным образом:

Если активирована приостановка задачи (т.е. служебный вызов API NUSE_Task_Sleep()), счетчику таймаута задачи (NUSE_Task_Timeout_Counter[task]) присваивается нулевое значение.

Если активировано состояние ожидания задачи (task suspend), статус задачи (NUSE_Task_Status[task]) инициализируется. Это начальное значение задается пользователем (в NUSE_Task_Initial_State[task]), если активирована поддержка начального состояния задачи. В противном случае состоянию присваивается NUSE_READY.

Если активирован счетчик планировок, счетчику задачи (NUSE_Task_Schedule_Count[task]) присваивается нулевое значение.

Инициализация пулов разделов

Ниже приведен полный код функции NUSE_Init_Partition_Pool():

«Использованному» счетчику пула разделов (NUSE_Partition_Pool__Partition_Used[pool]) присваивается нулевое значение.

Если активирована блокировка задач, счетчику заблокированных задач пулов разделов (NUSE_Partition_Pool_Blocking_Count[pool]) присваивается нулевое значение.

Инициализация почтовых ящиков

Ниже приведен полный код NUSE_Init_Mailbox():

Хранилищу данных почтовых ящиков (NUSE_Mailbox_Data[mailbox]) присваивается нулевое значение, и состояние (NUSE_Mailbox_Status[mailbox]) становится «неиспользуемым» (т.е. нулевым).

Если активирована блокировка задач, счетчику заблокированных задач почтовых ящиков (NUSE_Mailbox_Blocking_Count[mailbox]) присваивается нулевое значение.

Инициализация очередей

Ниже приведен полный код функции NUSE_Init_Queue():

Указателям на начало и конец очереди (на самом деле, это индексы NUSE_Queue_Head[queue] и NUSE_Queue_Tail[queue]) присваиваются значения, указывающие на начало области данных очередей (т.е. они принимают нулевое значение). Счетчику элементов в очереди (NUSE_Queue_Items[queue]) также присваивается нулевое значение.

Если активирована блокировка задач, счетчику заблокированных задач очередей (NUSE_Queue_Blocking_Count[queue]) присваивается нулевое значение.

Инициализация каналов

Ниже приведен полный код функции NUSE_Init_Pipe():

Указателям на начало и конец канала (на самом деле, это индексы – NUSE_Pipe_Head[pipe] и NUSE_Pipe_Tail[pipe]) присваивается значение, указывающее на начало области данных канала (т.е. они принимают нулевое значение). Счетчику элементов в канале (NUSE_Pipe_Items[pipe]) также присваивается нулевое значение.

Если активирована блокировка задач, счетчику заблокированных задач канала (NUSE_Pipe_Blocking_Count[pipe]) присваивается нулевое значение.

Инициализация семафоров

Ниже приведен полный код функции NUSE_Init_Semaphore():

Счетчик семафоров (NUSE_Semaphore_Counter[semaphore]) инициализируется значением, заданным пользователем (NUSE_Semaphore_Initial_Value[semaphore]).

Если активирована блокировка задач, счетчику заблокированных задач семафора (NUSE_Semaphore_Blocking_Count[semaphore]) присваивается нулевое значение.

Инициализация групп событий

Ниже приведен полный код функции NUSE_Init_Event_Group():

Флаги группы событий сбрасываются, т.е. NUSE_Event_Group_Data[group] присваивается нулевое значение.

Если активирована блокировка задач, счетчику заблокированных задач группы флагов событий (NUSE_Event_Group_Blocking_Count[group]) присваивается нулевое значение.

Инициализация таймеров

Ниже приведен полный код NUSE_Init_Timer();

Состояние таймера (NUSE_Timer_Status[timer]) устанавливается в значение «неиспользуемое», т.е. FALSE.

Значение обратного отсчета (NUSE_Timer_Value[timer]) инициализируется значением, заданным пользователем (NUSE_Timer_Initial_Time[timer]).

Счетчику завершений (NUSE_Timer_Expirations_Counter[timer]) присваивается нулевое значение.

Инициализация кода приложения

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

У вызовов API есть ограничение: все действия, которые обычно приводят к активации планировщика, запрещены (например, приостановка/блокировка задач). Глобальной переменной NUSE_Task_State было присвоено значение NUSE_STARTUP_CONTEXT, чтобы отметить это ограничение.

Запуск планировщика

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

В следующей статье будет рассматриваться диагностика и проверка ошибок.

Источник

Объясните, что такое инициализация?

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Пример из компьютеров: если стирается флеш-БИОС, машина умирает.
Чтобы такого не происходило (а особенно это неприятно, если микросхема на пайке, а не на кровати), сейчас делают нестираемую часть прошивки, в которой записана процедура восстановления БИОС с внешнего носителя (например, у Асусов сделано так).

Caша писал:
И еще – что такое флэш-память?Я знаю такие:
EEPROM – 24C04,93C46 и т.п.
EPROM(ПЗУ) – 27C512,27C040 и т.п.
Что из этого флэш?Что такое ROM и RAM?В общем я запутался в трех соснах.

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

Память с прожигаемыми перемычками существует в основном в виде программируемых логических матриц (ПЛМ), сложных дешифраторов.

Память с УФ стиранием программируется нулями, а единицы записываются сразу во все ячейки, при освещении УФ лампой.

В EEPROM и нули, и единицы записываются электрически.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Все начинают вспоминать про микросхемы мол это микропроцессор, а на транзисторах или лампах это процессоры.

На самом деле дело в программах. Если процессор «заточен» выполнять микропрограммы, то это микропроцессор. А структурно процессор и микропроцессор одинаковы и технологически тоже.JulyP

Все начинают вспоминать про микросхемы мол это микропроцессор, а на транзисторах или лампах это процессоры.

На самом деле дело в программах. Если процессор «заточен» выполнять микропрограммы, то это микропроцессор. А структурно процессор и микропроцессор одинаковы и технологически тоже.

Странное утверждение.
Особенно про технологию.

Если структурно одинаковы, то почему микропрограмма только у микропроцессора?
Были микропроцессоры и с внешним микрокодом.

Впрочем, сам спор довольно схоластичен.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

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

Исходя из вышеописанного нельзя называть перепрошивку внешней памяти инициализацией. Может просто называть перепрошивкой?Caша

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

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

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

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

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

Источник

О работе ПК ч.3: От включения до полной загрузки Windows 10

Мы продолжаем разбираться как работает ПК на примере клавиатуры и Windows 10. В этой статье поговорим о том как происходит единение софта и железа.

Старт системы

Полностью компьютер выключен когда он отключен от питания и конденсаторы на материнской плате разрядились. До эры смартфонов мобильные телефоны часто глючили и если перезагрузка не лечила проблему, то приходилось доставать батарею и ждать 10 секунд, потому что сбрасывалось программное состояние ОС, в то время как чипы на материнской плате и контроллеры устройств оставались активными сохраняя состояние, драйвера ОС к ним просто реконнектились. 10 секунд — время на разрядку конденсаторов, состояние чипов сбрасывается только при полном отключении.
Если же ПК подключен к розетке или батарее, то он находится в режиме Stand-By, это значит что по шине питания подаётся маленькое напряжения (5В) от которого запитываются некоторые чипы на материнке. Как минимум это системный контроллер, по сути это мини-компьютер запускающий большой компьютер. Получив уведомление о нажатии кнопки Power он просит блок питания/батарею подать больше напряжения и после инициализирует весь чип-сет, в том числе и процессор. Инициализация включает в себя перекачку кода и данных прошивки материнки (BIOS/UEFI) в оперативную память и настройку CPU на её исполнение.
Думать что кнопка Power это рубильник который подаёт электричество на CPU и тот начинает исполнять с заранее известного адреса прошивку BIOS неправильно. Возможно старые компьютеры так и работали. Кнопка включения находится на своей плате, вместе со светодиодами состояний и к материнке она подключается через специальный разъём. На картинке ниже видны контакты для кнопки Power, Reset, а также светодиодов с состоянием Power и чтения жёсткого диска. Нажатие кнопки включения переводится в сигнал на контакты материнки, откуда он достигает системный контроллер.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Контакты на материнке для подключения кнопки включения, светодиодов состояния Power, жёсткого диска и динамиков.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Плата ноутбука с кнопкой включения и светодиодом состояния

Прикладная иллюстрация как блок питания получает сигнал от материнки на включение. Если вы задумаете установить мощную видеокарту (Nvidia 2070 S) на офисный ПК, то просто вставить её недостаточно, потому как она требует питание в 600W, в то время как такой ПК имеет блок на

500W. Первое что придёт в голову – купить новый блок питания на 650W с отдельной линией для видеокарты. Но и здесь будут разочарования, потому как разъёмы материнки будут не совпадать с разъёмами БП, а если его отдельно воткнуть в розетку и подключить к видюхе тоже ничего не будет – в блоке питания вентилятор не крутится и изображения нет. Так происходит, потому что БП должен получить сигнал от материнки на полное включение. Очевидное решение – новая материнка с совместимыми разъёмами, однако она стоит

$300. Есть решение проще, хоть оно и вызывает опасения пожаробезопасности. Берём скрепку, разгибаем и вставляем в зелёный (PS_ON) и один из чёрных пинов (COM). Теперь всё должно работать.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Поиск загрузчика ОС

Есть два вида прошивки материнки – BIOS (Basic Input Output System) на старых машинах и UEFI (Unified Extensible Firmware Interface) на новых. Windows 10 поддерживает обе и абстрагирует различия между ними. UEFI правильней называть ОС чем прошивкой, потому как он предлагает больше возможностей, к примеру богатый графический интерфейс вместо текстового, наличие мышки, больший объём доступной памяти, улучшенная модель безопасности и валидации файлов ОС, взаимодействие с железом через API, вместо прерываний как в BIOS.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Пример экрана монитора BIOS.

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

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Настройки BIOS (системное время, например), хранятся на другом чипе который как правило находится возле круглой батарейки, которая на самом деле является литиевым аккумулятором, подзаряжающимся во время работы ПК. Называется он CMOS, что означает Complementary Metal Oxide Semiconductor, а по-русски просто — КМОП, что есть комплементарная структура металл-оксид-полупроводник.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Если всё прошло успешно, BIOS начинает процесс поиска загрузчика ОС. Для этого он начинает просматривать все подключенные к материнской плате жёсткие диски. Данные на физических дисках адресуются в единицах называемых сектор, обычно он 512 байт, однако современный стандарт – 4096 байт. Установщик Windows в самый первый сектор на диске записывает специальный программный код и данные о разделах. Этот сектор называется Master Boot Record. Диск разбивается на разделы (partitions), отформатированный своей файловой системой. Максимум 4 раздела, каждый из который может быть расширенным (extended partition), такой можно рекурсивно делить на 4 раздела и теоретически их число не ограничено. Как только BIOS находит Master Boot Record он считывает оттуда код и передаёт ему управление. Этот код поочередно просматривает данные о разделах и находит тот который помечен как активный, в нём находится код загрузчика Windows (Это не раздел с C:\Windows\System32!), этот раздел называется system partition. Как правило он занимает 100Мб и скрыт от пользователя. В первом секторе этого раздела хранится загрузочный код, которому передаётся управление. Это volume boot sector, код в нём ищет файл Bootmgr, с которого и начинается процесс загрузки Windows. Файл Bootmgr создан через соединение в один файлов Startup.com и Bootmgr.exe.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Запуск на UEFI

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Пример экрана загрузки UEFI

BIOS существует больше 30 лет и в попытках исправить его недостатки компания Intel в 1998 году создала стандарт Intel Boot Initiative, позже переименованный в EFI и в 2005 году пожертвованный организации EFI Forum. Недостатки BIOS:
• Работает только в 16-битном режиме
• Может адресовать только 1Mb оперативной памяти
• Часто имеет проблемы совместимости
• MBR ограничен только четырьмя главными разделами диска
• Диск с ОС не может быть больше чем 2.2Tb.
• Имеет очень ограниченные возможности для валидации загрузчика ОС.
На смену BIOS пришёл UEFI, по сути это миниатюрная ОС которая может работать и в 32-bit и в 64-bit. Для совместимости есть опция Compatibility Support Module, которая включается в настройках и эмулирует работу BIOS.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Инициализация ядра

Запуск подсистем – SMSS, CSRSS, WinInit

SMSS.exe отличается от пользовательских процессов, это нативный процесс и это даёт ему дополнительные полномочия. SMSS.exe работает с ядром в обход Windows API, он использует то что называется Native API. Windows API – обёртка вокруг Native API. SMSS.exe первым делом запускает подсистему Windows (CSRSS.exe – Client Server Runtime Sub System) и заканчивает инициализацию реестра.

Процесс и потоки SMSS.exe помечены как критические, это значит что если они неожиданно завершаться, к примеру из-за ошибки, это приведёт к падению системы. Для общения с подсистемами, к примеру вызову API создающему новую сессию, SMSS создаёт ALPC-порт с именем SmApiPort. Загружаются из реестра переменные среды окружения, запускаются программы такие как Check Disk (autochk.exe, эти программы записаны в реестре HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute). SMSS.exe запускается для каждой пользовательской сессии. Глобальные переменные (очередь сообщений например) у каждой сессии своя за счёт механизма виртуальной памяти. В Windows есть контексты потока, процесса и сессии. Каждый SMSS.exe запускает свой экземпляр подсистемы, на данный момент это только CSRSS.exe (Windows), в прошлом поддерживались операционные системы OS/2 (os2ss.exe) и POSIX (psxss.exe), но эта идея была неудачной. Самый первый SMSS.exe засыпает в ожидании процесса WinInit.exe. Остальные экземпляры вместо этого создают процесс WinLogon который показывает UI для входа.

Дерево процессов выглядит следующим образом, на нём можно увидеть кто и кого создал (показаны не все процессы, может немного отличаться от последний версий Windows).

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Где здесь клавиатура?

Во время запуска ядро Windows считывает из реестра информацию о контроллере системной шины, как правило это шина PCI (реже MSI), к ней подключены контроллеры портов ввода-вывода, в том числе и USB, PS/2. Информация о нём записывается во время установки Windows. Система загружает для него драйвер и рекурсивно обходит все порты так же загружая для каждого из них свой драйвер. Драйвера могут комбинироваться в узлы (driver node), к примеру драйвер клавиатуры, будет соединён с драйвером порта PS2. А вот порт USB сложнее — сначала драйвер порта, потом драйвер для работы с протоколом HID и только потом клавиатура.

Каждый порт контроллируется своим чипом, который мониторит подключение, принимает/отправляет сигналы между CPU и устройством. Если чип-сет Южный мост не встроен в CPU, как это часто делают в ноутбуках, а существует отдельным чипом на материнке, то правильней говорить: сигнал между Южным мостом и контроллером порта. Чип контроллирующий порт имеет выделенную линию с контроллером прерываний (PIC или APIC), по которой он может попросить обратить на себя внимание CPU, к примеру считать данные от клавиатуры (порт PS/2, с USB другая история). Поскольку ОС загрузила для порта драйвер, она может отдавать ему команды, читать и отправлять данные. В нашем примере был загружен драйвер из C:\Windows\System32\i8042prt.sys. Давайте вспомним предыдущую статью. В старых компьютерах с PIC на чипе Intel 8259 было 15 линий прерываний, где клавиатура была подключена к ножке IRQ1, таймер IRQ0, а мышка к IRQ12, который на самом деле был пятой ножкой второго чипа 8259, который мультиплексировал свои прерывания через ножку IRQ2 первого контроллера. В современных PIC могут быть 255 контактов для сигналов прерываний. Во время загрузки ОС программирует APIC/PIC возвращать определённое число когда скажем пришло прерывание от порта клавиатуры или USB и по этому номеру CPU находит в таблице векторов прерываний функцию которую надо выполнить. Номер прерываний определяют HAL и Plug’n’Play Manager. Контроллер прерываний ищет сигнал на своих ножках в определённом порядке, к примеру в бесконечном цикле проверяет напряжение на ножках от 1 до MAX_PIN. Этот порядок определяет приоритет, к примеру клавиатура будет замечена раньше мышки, а таймер раньше клавиатуры. Чтобы не зависеть от особенностей работы контроллеров прерываний Windows абстрагирует концепцию IRQ (Interrupt Request) в IRQL (Interrupt Request Level). Будь у контроллера прерываний хоть 15 хоть 255 линий они все будут отображены на 32 IRQL для x86 и 15 IRQL для x64 и IA64.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памятиЧто такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Механизм IRQL реализовывается на уровне софта в Hardware Abstraction Layer (HAL.dll), а не железа. В Windows системах есть драйвер шины (bus driver), который определяет наличие устройств подключенных к шинам – PCI, USB и др. и номера прерываний которые могут быть назначены каждому устройству. Драйвер шины сообщает эту информацию Plug and play manager, который уже решает какие номера прерываний назначить каждому устройству. Далее арбитр прерываний внутри PnP Mgr (PnP interrupt arbiter) устанавливает связи между IRQ и IRQL.

Так вот, драйвер клавиатуры (kbdclass.sys) получает данные от порта (USB, PS2) через прерывание и записывает их через WriteFile, компонент внутри ядра Windows просыпается, считывает их используя API ReadFile и добавляет в очередь сообщений с клавиатуры. API для работы с файлом могут использоваться для чтения данных с драйверов. С этого момента начинается обработка данных стеком ввода Windows, об этом в следующей статье.

Если у вас есть ПК с PS2 портом и вы умеете пользоваться WinDbg в режиме ядра, то можете легко найти обработчик прерываний клавиатуры напечатав команду !idt, которая выведет на экран всю таблицу векторов прерываний. Прерывание вклинивается в ход выполнения программы, слово вектор здесь подразумевает направление, направление исполнения программы. WinDbg был сделан специально для отладки Windows, самая последняя версия называется WinDbgX. Он имеет текстовый интерфейс, который отпугивает людей привыкших к Visual Studio, однако предоставляет гораздо больше возможностей, в частности исполнение скриптов. Прерывание фиолетового порта PS2 выделено красным. Функция которая его обрабатывает называется I8042KeyboardInterruptService, которая находится в файле i8042prt.sys.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Сейчас возникает вопрос, откуда у обработчика прерываний аргумент? Кто его передаёт? Ведь CPU ничего не знает о нём. Если поставите в неё breakpoint, то удивитесь ещё больше увидев несколько функций выше по стеку:

0: kd> kC
# Call Site
00 i8042prt!I8042KeyboardInterruptService
01 nt!KiCallInterruptServiceRoutine
02 nt!KiInterruptSubDispatch
03 nt!KiInterruptDispatch
04 nt!KiIdleLoop

Пару слов о USB

Ознакомление с работой порта USB потребовало бы отдельной статьи описывающей его работу и плюс описание обработки данных HID на Windows. Это очень сильно усложнило бы материал, к тому же уже есть хорошие статьи по теме, поэтому PS2 идеальный пример из-за своей простоты.

USB создавался как универсальный порт для всех устройств, будь то клавиатура, фотоаппарат, сканнер, игровой руль с педалями, принтер и пр. Вдобавок он поддерживает вложенность портов – USB материнки => монитор с USB => клавиатура с USB к которой подключена мышка, флешка и USB-hub к которому подключен жёсткий диск. Взглянув на контакты USB 2.0 вы увидите что они не заточены под передачу каких-то определённых данных, как у PS2. Их всего четыре – витая пара для передачи битов данных, плюс и минус питания.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Провода кабеля USB 2.0

USB 3.0 быстрее за счёт дополнительных пяти контактов. Как видите там нету линии CLOCK для синхронизации, поэтому логика передачи данных сложнее. Слева USB 2.0 и справа USB 3.0 для сравнения.

Что такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памятиЧто такое cpu инициализация памяти. Смотреть фото Что такое cpu инициализация памяти. Смотреть картинку Что такое cpu инициализация памяти. Картинка про Что такое cpu инициализация памяти. Фото Что такое cpu инициализация памяти

Все данные передаются через протокол HID (Human Interface Device), который описывает форматы, порядок взаимодействия и передачи данных и всё остальное. Стандарт USB 2.0 занимает 650 страниц, документ HID Class Specification, описывающий работу устройств (мыши, клавиатуры и пр) – 97 страниц, их рекомендуется изучить если вы работаете с USB.

Первым делом подключенное устройство должно рассказать о себе, для этого оно отправляет несколько структур данных, в которых указывается ID устройства и ID производителя по которым Plug’n’Play manager может найти в реестре информацию, загрузить и соединить драйвера. USB устройства пассивны, т.е. хост должен сам с определённым интервалом проверять наличие данных. Частота опроса и размер пакета данных задаются в одном из дескрипторов устройства USB. Максимальный размер пакета – 64 байта, что для информации о нажатых клавишах более чем достаточно.

В Windows есть встроенная поддержка HID, она не такая простая как связь драйвера порта PS2 с драйвером клавиатуры, потому что драйвер HID должен уметь обрабатывать все поддерживаемые протоколом сценарии. Вне зависимости от провайдера данных — порты PS2, USB или Remote Desktop или виртуальная машина – на самом верху driver node будет находится Kbdclass, от которого ядро ОС и будет получать информацию. Уведомление о подсоединении клавиатуры будет обрабатываться через Plug’n’Play Manager, так что для ядра Windows не имеет значение какой порт или источник данных от устройства используется.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *