Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 533
от 02.09.2006, 10:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 340, Экспертов: 27
В номере:Вопросов: 1, Ответов: 1


Вопрос № 53490: Добрый день, уважаемые эксперты! Пишу многозадачную ОС (gcc + nasm). У меня вопрос по защищенному режиму x86. Как я понимаю, все системные регистры (gdtr, idtr, cr3 и др.), указывающие на системные структуры данных должны инициализироваться адрес...

Вопрос № 53.490
Добрый день, уважаемые эксперты! Пишу многозадачную ОС (gcc + nasm). У меня вопрос по защищенному режиму x86.
Как я понимаю, все системные регистры (gdtr, idtr, cr3 и др.), указывающие на системные структуры данных должны инициализироваться адресами в ФИЗИЧЕСКОЙ памяти. Я прав? В руководстве по i486 везде упоминается линейный адрес.
Можно ли, например, tss размещать в виртуальном адресном пространстве или нет?
Отправлен: 28.08.2006, 10:07
Вопрос задал: Поливцев Константин (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: ASMодей
Здравствуйте, Поливцев Константин!
Регистр CR3 должен содержать физический адрес корневой таблицы страниц.
Регистры GDTR и IDTR инициализируются линейными (виртуальными) адресами. Следовательно при инициализации страничной адресации нужно следить, чтобы виртуальные адреса, на которые указывают эти регистры транслировались на те же самые физические адреса.
Что касается TSS, то он задается дескриптором в таблице GDT и также адресуется виртуально.
Надеюсь понятно объяснил.
Ответ отправил: ASMодей (статус: Профессионал)
Россия, Магнитогорск
----
Ответ отправлен: 28.08.2006, 17:40
Оценка за ответ: 5
Комментарий оценки:
Да, некоторые моменты прояснились. Как я понял, все, что отвечает за СЕГМЕНТАЦИЮ (или описывает сегменты) адресуется линейным адресом. А вот каталог таблиц страниц (регистр cr3) адресуется именно физическим адресом, т.к. эта часть аппаратуры отвечает за СТРАНИЧНОЕ преобразование адреса.

AMSодей писал: "Следовательно при инициализации страничной адресации нужно следить, чтобы виртуальные адреса, на которые указывают эти регистры транслировались на те же самые физические адреса."
Это, как я понял, делается для того, чтобы GDTR и IDTR "не потерялись" при активизации страничной адресации, поскольку теже самые линейные адреса могут указывать на совершенно иные физические.

Спасибо Вам за ответ, не много поразкинув мозгами, все додумал.

Это я спрашивал к тому, что на данный момент ядро у меня работает по физическим адресам (виртуальные адреса отображаются на теже самые физические), но вот возникла потребность ядро отправить в верний из 4ГБ адресного пространства, а нижние 3 Гб отдать процессам. По этому собственно и возник вопрос по поводу адресации системных структур.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное