3

Я пытаюсь понять, как машина переходит от ядра к запуску ядра. Из того, что я собрал, полезно переключиться в защищенный режим во время загрузки, чтобы получить доступ к более адресуемой памяти, даже если мы в конечном итоге переключимся на более обычный план виртуальной памяти с каталогами страниц и таблицами страниц и отключим сегментацию ,Как установить флаг PE в CR0 включить защищенный режим?

кажется, что для переключения в защищенный режим 3 вещи, которые необходимо сделать:

  1. Настройка глобальной таблицы дескрипторов (GDT) и загрузить его с помощью lgdt инструкции
  2. Установите PE флаг/бит в регистр управления CR0 с поддержкой (то есть. до значения 1)
  3. Выполнить длинный прыжок с ljmp

Я задаюсь вопросом о логике для Translat используя регистр сегмента и указатель инструкции в индекс и смещение для использования с gdt. Является ли эта логика реализована аппаратными средствами? Если это так, то какое аппаратное обеспечение и почему является выполнением части процесса ljmp? Почему бы просто не установить флаг PE в CR0 для включения защищенного режима (без следующих ljmp)?

+0

Мне интересно, почему вы не искали текстовый шаблон 'protected mode' в [Intel® 64 и IA-32 Architectures Software Developer's Manual] (http: // www. intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html), и какова ваша исследовательская работа и почему вы спрашиваете, какую проблему вы пытаетесь решить/понять? Кстати: знаете ли вы, что частый ответ на подобные вопросы: читайте http://wiki.osdev.org? – xmojmr

+3

@xmojmr Я искал в руководстве разработчика Intel, но не смог найти нужную мне информацию. Я пытаюсь понять, как достигается переход из реального режима в защищенный режим. Я не знал о wsdev wiki, поэтому я посмотрю на него в следующий раз, когда у меня возникнет такой вопрос. –

ответ

1

Первый вопрос может быть: Почему Intel не разработала чип таким образом, чтобы настройка PE попала в защищенный режим?

Ответ: Это было бы невозможно; он предположил бы, что регистр CS содержит селектор, базовый адрес которого равен 0x10 * CS.

Другими словами: Если адрес «mov CR0, EAX» расположен по адресу 0x0100: 0x1200, то следующая инструкция будет выполнена с адресом 0x0100: 0x1203. Поэтому переход в защищенный режим возможен только в сочетании с инструкцией перехода; в противном случае переключение PE само по себе сделает нежелательный скачок (от 0x0100: 0x1203 Real Mode до 0x0100: 0x1203 Protected Mode).

Технически ЦП внутренне сохраняет информацию о селекторах всех используемых селекторов. Когда изменяется регистр селектора, загружаются лимит, база и т. Д. Это означает, что загрузка CS-регистра необходима для обновления базы, ограничения и, следовательно, регистра CS. Это означает: должен быть сделан большой скачок (потому что это загрузит регистр CS). Может быть, RETF тоже будет работать ...

Я не уверен, что если загрузка других регистров сегмента (например, DS) уже будет работать до дальнего прыжка, поэтому, если вы загрузите регистр DS перед дальним прыжком, базовый адрес и ограничение будет взято из GDT. Было бы неплохо попробовать это ...

+0

Хм, поэтому 'ljmp' консультируется с GDT (поскольку' ljmp' загружает регистр CS)? Всегда ли это делается, или только если установлен флаг PE CR0? –

+0

Хмм, дорогой @PedroCattori, пожалуйста, прочитайте хотя бы главу «** АКТИВИРОВАТЬ ЗАЩИЩЕННЫЙ РЕЖИМ **» из статьи, связанной с вики-версией OSDev.org, как [Защищенный режим → прагматический учебник по pmode] (http://web.archive.org)/веб/20030604185154/HTTP: // домой.swipnet.se/smaffy/asm/info/embedded_pmode.pdf), а также прочитайте главу «** 9.9.1 Переключение в защищенный режим **» в [Руководство разработчика программного обеспечения Intel® 64 и IA-32] (http: //www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html), поскольку он должен отвечать как основным, так и более сложным вопросам – xmojmr

 Смежные вопросы

  • Нет связанных вопросов^_^