LINUX.ORG.RU

Страничная адресация и GDT

 


0

4

Добрый вечер!

Возможно вопрос не по linux, но: если я использую страничную адреацию, что мне делать с GDT?

У меня же есть каталог страниц, зачем тогда таблицы дескрипторов сегментов?



Последнее исправление: vanzef (всего исправлений: 1)

таблицы дескрипторов

ЕМНИП GDT эта таблица дескрипторов. Т.е. ссылок на блоки (с лимитами-размерами). А вот смещение это уже внутри блока, на который ссылается дескриптор из GDT.

ziemin ★★
()

Если не используешь сегменты - просто установи их на всю память (с нулевой базой), как в линукс.

unsigned ★★★★
()

У меня же есть каталог страниц, зачем тогда таблицы дескрипторов сегментов?

Это разные механизмы!

Сегменты нужны для разделения виртуального адресного пространства на отделные области. Сегменты работают только с виртуальными адресами.

Страницы нужны для отображения виртуальных адресов в физические адреса.

AF ★★★
()

Линукс тут при чём?

anonymous
()
Ответ на: комментарий от AF

Правильно ли я понял, что я должен создать GDT (пример: сегмент кода для ядра, сегмент данных для ядра, сегмент для пользщовательских программ), а потом делить каждый сегмент на страницы?

vanzef
() автор топика
Ответ на: комментарий от vanzef

Ты же понимаешь, что это очень низкоуровневое программирование и используется только при разработке ОС?

Лучше с такими вопросами обратиться на osdev.ru.

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

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

tlx ★★★★★
()
Ответ на: комментарий от vanzef

Могу посоветовать относительно свежую книгу по теме:

Аблязов Р.З. - Программирование на ассемблере на платформе x86-64

tlx ★★★★★
()
Ответ на: комментарий от tlx

Спасибо. С разработкой ОС угадали - школьный проект.

По x86-64 сильно отличается от x86, имея в виду структуры и т.п.?

vanzef
() автор топика
Ответ на: комментарий от vanzef

x86 гораздо проще.

Самая доходчивая книга по x86 - Зубков С.В. - Assembler для DOS, Windows и UNIX. ИМХО, некоторые считают иначе.

Я могу тебе помочь с проектом. Бесплатно. Просто потому, что люблю низкоуровневый код.

Давай добъём твоего препода и напишем на ассемблере для ARM. Хотя для начала x86 вполне подходит.

tlx ★★★★★
()
Ответ на: комментарий от vanzef

Напиши каких результатов хочешь достичь в проекте на мыло rtlx73 (cоббака)gmail.com

tlx ★★★★★
()
Ответ на: комментарий от tlx

Зубков уже имеется.

Спасибо за предложение, но я попробую сам) С вопросами можно обращаться?

Препода добивать не надо - я сам выбрал такую тему проекта, ARM хорошо, но x86 проще - писать (много книг и статей) и отлаживать (...)

vanzef
() автор топика
Ответ на: комментарий от vanzef

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

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

Последний раз я ее собирал в свежеустановленной Ubuntu 12.04 (не 04.1 или 04.2) потом когда обновился, собираться перестало. Может уже кто-то допилил. Есть несколько версий на GitHub.

В общем это одна из первых версий Linux, соостветственно в ней можно разобраться без проблем.

Если заинтересуешься, я могу тебя даже нанять чтобы подредактировать мои бредовые записи на kliga.ru. Писал на черновую, а теперь самому лень разбираться во всей этой ахинее. Об оплате договоримся.

tlx ★★★★★
()
Ответ на: комментарий от vanzef

Правильно ли я понял, что я должен создать GDT

Ну в общем да, в защищенном режиме без GDT жизни практически нет

потом делить каждый сегмент на страницы?

Не, этого делать ты не обязан. Раз учишся, то пока забудь про страницы. Осиль сначала сегменты, прерывания и т д.

AF ★★★
()
Ответ на: комментарий от tlx

Здравствуйте.

Интересное предложени, но, к сожалению, я не думаю, что у меня будет достаточно времени (11 класс на носу).

Насчёт GDT: Есть ли смысл (и если есть, то какой) в разделении сегментов кода и данных для ядра?

vanzef
() автор топика
Ответ на: комментарий от vanzef

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

Что у тебя будет в пользовательском режиме?

Только shell? Сам, наверное, его будешь писать. Тогда с форматом исполняемых фалов и пространствами не заморачивайся.

tlx ★★★★★
()
Ответ на: комментарий от tlx

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

Разделение пользовательского пространства и ядра будет, но делить ли ядро на данные и код: |нулевой сегмент

|сегмент кода для ядра: (первый 1 MiB)

|сегмент данных для ядра: (второй 1 1MiB)

|сегмент данных и кода (совпадают по ядресам) для пользователя: всё остальное

Что у тебя будет в пользовательском режиме?

Всё, что пожелаете

Тогда с форматом исполняемых фалов и пространствами не заморачивайся.

В каком плане?

vanzef
() автор топика
Ответ на: комментарий от vanzef

в каком плане?

Ты же не хочешь исполнять ЕХЕ или ELF файлы? Проще готовить бинарники парой команд и использовать их, чем тащить в ядро кучу хэдеров.

Расскажи, планируешь ли использовать какую-нибудь файловую систему или просто будешь сливать в один файл и помешать карту распределения в начало?

Я бы посоветовал второй вариант. Такая «ramfs» избавить тебя от кучи проблем.

tlx ★★★★★
()
Ответ на: комментарий от tlx

Как раз планируется более сложный способ - свой тип исполняемых файлов (или elf прикрутить).

Также поанируется использование файловой системы, скорее всего простой - fat16(32)

vanzef
() автор топика
Ответ на: комментарий от vanzef

С fat16 я имел дело когда вынимал код из Linux 1.0 в учебных целях. Кое-что получилось. В elf тоже не много копался.

Сегменты предлагаю организовать так же как в Linux. Ты уже начал писать? Как только застрянешь где-нибудь, зови. Помогу с отладкой. Свой код навязывать не буду, если не попросишь.

Могу отвечать оперативнее с 8 до 17 по Москве если будешь писать на мыло.

tlx ★★★★★
()
Ответ на: комментарий от vanzef

Куда пропал?

Проблемы с загрузчиком?

Если интерес с к осдеву пропадет, не удивляйся. Не ты первый, не ты последний.

tlx ★★★★★
()
Ответ на: комментарий от tlx

Здравствуйте. Я не пропал - после «удачного» обновления Arch сломался. Интерес к разработке не пропал, просто пытаюсь продумать архитектуру.

В качестве загрузчика планируется использовать GRUB, так что, думаю, проблем не возникнет.

vanzef
() автор топика
Ответ на: комментарий от vanzef

Загрузчик такого уровня нужен если планируешь запускать на реальном железе. Qemu само загружает ядро и initrd в память. Потом можно подсунуть готовый проект тому же грабу. Можно и в Qemu граб использовать если собирать образ диска, а не грузить ядро напрямую.

Ты смотрел Linux 0.1? Там свой загрузчик.

tlx ★★★★★
()
Ответ на: комментарий от vanzef

Как дела?

Может все таки поработаешь на меня: систематизируешь мой код вынутый из ядра 1.0. Там не много, 2-3 тысячи строк. Есть чтение файла с fat-раздела и даже arp-запрос. Предлагаю за эту работу пару тысяч рублей. В том, что справишься не сомневайся. Там просто много рутинной работы. Будешь спрашивать, если что.

А даже если не справишься, то деньги всё равно твои.

tlx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.