В ядре Linux 2.6 конфигурация по умолчанию представляет собой вытесняющее ядро. Вытесняющее ядро означает, что само ядро может быть прервано высокоприоритетной задачей, такой, как аппаратное прерывание, и управление будет передано высокоприоритетной задаче. Ядро должно сохранять достаточно состояний, чтобы продолжать выполнение после обработки высокоприоритетной задачи.
Это обсуждение началось с перехода в функцию start_kernel () (init/main. с), которая является первой вызываемой архитектурно-зависимой частью кода.
Во время перехода в start_kernel () мы выполняем процесс 0, также известный как root thread (корневой процесс). Процесс 0 порождает процесс 1, известный как процесс инициализации. Процесс 0 становится ожидающим потоком процессора. Когда вызывается /sbin/init, у нас есть только два запущенных процесса:
init/main.с
396 asmlinkage void init start_kernel(void)
397 {
398 char * command_line;
399 extern char saved_command_line[];
LILO, GRUB и Yaboot поддерживают диск начальной загрузки (initrd), работающий как корневая файловая система до того, как настоящая файловая система загружается и инициализируется. Завершением загрузки настоящей файловой системы мы считаем ее монтирование к корню.
Обратите внимание, что код для PowerPC и х86 объединяется вместе в функции start_kernel () в init/main. с. Эта функция, расположенная в архитектурно-независимой части код, вызывает архитектурно-зависимые функции для завершения инициализации памяти.
Первой вызываемой инструкцией в этом файле является setup_arch(), которая определена для платформы х86 в arch/i386/kernel/setup. с и которая далее вызывает pagetable_init () в этом же файле. Остаток системной памяти выделяется для составления последней таблицы страниц.
До этого момента обсуждение подбиралось к моменту, когда система Intel становится готовой к настройке страниц. По мере нашего продвижения по коду head. S мы увидели,как происходит инициализация и как Linux использует х86-защищенный режим системы страниц. Это последний код, выполняемый перед стартом main. с ядра. За полной информацией о множестве доступных режимов и установок, связанных с инициализацией памяти и процессоров Intel, см. Intel Architecture Software Developer Manual, (Т. 3).
* Установка сегмента в известное значение. */ eld
Igdt boot_gdt_descr - PAGE_OFFSET
При включении все процессоры Intel работают в реальном режиме адресации. Реальная адресация - это режим, совместимый с ранними Intel процессорами. По мере усложнения процессоров наследуемый код всегда использовался в новых процессорах для совместимости. В реальном режиме адресации процессор может выполнять программы, написанные для 8086 и 8088 с использованием тех же самых инструкций и, что гораздо важнее, с помощью того же метода адресации или преобразования адресов (address translation). В результате преобразования адресов процессор получает доступ к системной памяти.
Мы знаем, как выглядит код, выполняющий управление памятью на РРС.
Следующий код является первым, получающим управления в ядре. Эта функция выполняет обратный вызов Firmware для выделения временной области с помощью функции claim (). Далее ядро распаковывается в соответствующее место.
Управляющие биты
Биты W, I, М, G, R и С управляют доступом процессора к кешу и основной памяти:
• W (Write Thought, повсеместная запись). Если данные находятся в кеше и над ними производится операция сохранения, при W=l копия в памяти также обновляется.
Недостатком преобразования адресов является реальная адресация. Преобразование адресов открывает двери для виртуальной адресации, при которой любой возможный адрес не является физически доступным для данного экземпляра, но благодаря хитрому использованию аппаратуры и программного обеспечения каждый возможный адрес может стать виртуально доступным для доступа.
Начиная со встраиваемых и заканчивая высокопроизводительными все процессоры PowerPC выполняют аппаратную перезагрузку в реальном режиме (real mode)1. Режим реальной адресации PowerPC переводит процессор в режим выключенного преобразования. MSR, иллюстрируемый на рис. 8.3, является 64- или 32-битовым регистром, описывающим текущее состояние процессора. На 32-битовых реализациях IR и DR занимают биты 26 и 27.
В мире PowerPC также известно как «управление хранением» (storage control). Этот подраздел описывает аппаратно-специфические особенности преобразования адресов на архитектуре PowerPC. Мы продолжим обсуждение того, как Linux использует (или игнорирует в целях портируемости) эти особенности начиная со старта системы и кончая инициализацией ядра.