Отказ от ответственности? Привет, Хабр! Это серия статей о написании своей ОС с нуля.
Я большой поклонник ретро-программирования, поэтому мгновенно забуду о существовании EDC. Пожалуйста, не пишите комментарии типа «БИОС давно устарел, где UEFIЭ» Пишу это просто для того, чтобы было что почитать вечером и отдохнуть.
Спасибо.
Давайте договоримся
Если вы не владеете языком ассемблера, вам могут быть трудно понять, что происходит. я использую ассемблер ФАСМ .В Последняя часть мы написали свой загрузчик из двух этапов: ограниченный кадрами МБР и без ограничений (ну почти), у которого даже есть прекрасный колхоз BSOD .
В этой части мы перейдем в защищенный режим.
BSOD (да, вот я пытался запустить это чудо в Oracle VMs VirtualBox)
Проблемы х86-16
Ну, думаю, я мог бы написать здесь длинный список.Выделю, на мой взгляд, самые важные из них:
- Ограничение адресации ОЗУ 1 МБ;
- 0 защита и изоляция памяти;
- Отсутствие некоторых функций.
Думаю, здесь тоже можно понять, что IA-32 лучше х86-16 как архитектура.
Выходи за меня замуж, OSDev.org!
Да-да.Это тот самый сайт для медитации в момент брейнкудатушеля.
Я изучил страницы OSdev по защищенному режиму от и до и уже начал впихивать себе в голову монитор.
Через пару часов с помощью Макса (он попросил удалить ссылку) я все понял и начал писать.
Что такое ГДТ и с чем его едят?
Итак, реальный режим плох, есть более удобный вариант - защищенный.В нем память адресуется линейно, все 4ГБ адресов, которые умещаются в регистре процессора x86. Но за годы работы в реальном режиме мы уже выяснили, что обращаться к физической памяти напрямую очень неудобно (как минимум встает вопрос о загрузке в нее нескольких процессов, чтобы они не конфликтовали), небезопасно (процессы могут нарушать память друг друга), да и вообще памяти вообще может быть меньше 4Гб и было бы удобно назначать разные права на разные участки виртуальной памяти (Чтение, Запись, Выполнение или ничего).
Вот почему они придумали адресацию страниц и виртуальную память.
У каждого процесса есть свои виртуальные 4ГБ, и процессор соотносит виртуальный адрес с реальным, проверяя при этом права на запрошенную операцию.
Для этого виртуальная память делится на страницы.
Страница похожа на сегмент, но она может начинаться в произвольном месте физической памяти, иметь произвольный размер, настройки доступа и назначение.
Описание страницы, по-английски — «дескриптор» содержит все эти свойства.
А список всех страниц, соответственно, будет называться таблицей дескрипторов.
Почему стол? Потому что для доступа к разным страницам можно просто указать номер дескриптора нужной страницы в регистре сегмента (теперь это «селектор»).
Было бы удобно иметь глобальную таблицу дескрипторов, одну для всей системы, для доступа к разделяемым библиотекам и для целей ядра системы, и локальные, по одной для каждого потока/процесса.
Они называются соответственно глобальной таблицей дескрипторов и локальной таблицей дескрипторов.
Ну вот. Итак, нам нужен «дескриптор» для кода и данных.
Всю таблицу можно найти под спойлером с отрывком 1.
Дресс-код
ядро.asm (отрывок 1)
Теги: #ОС #Ассемблер #asm #защищенный режимGDT:
-
Выбор Лучшей Ит-Поддержки В Вейбридже
19 Oct, 24 -
Использование Yahoo! Виджеты В Бизнесе
19 Oct, 24 -
Свежий Взгляд На Микроконтроллеры
19 Oct, 24