Как стать автором
Обновить

Комментарии 16

Оперативно вы. Когда увидел код и ник Phantom_84 сразу вспомнил вашу переписку на wasm'е, которую недавно видел. )
Пост супер, единственное для удобства можно добавить ссылки на источники информации.
Отлично. Как раз в тему, нужна была инфа :)
Может быть еще напишите про реализацию многозадачности в PM?
Я сейчас этим вопросом тоже занимаюсь. Как будут наработки — обязательно.
Вообще многозадачность описана в System Programming Guide Volume 1 в 7-ой главе. Но там рассказано как меняются флаги, стек при переключении, про выполнение эти самых task'ов и.т.д., всё остальное придумывается и пишется самостоятельно. Вообще я думал свою, для начала делать монозадачной, но раз интересует этот вопрос, то я покопаюсь. Будут удовлетворительный результат — обязательно напишу.
Кстати, для организации многозадачности не обязательно использовать механизм task-ов процессора. Если мне не изменяет память, в ядре Linux на ia32, в частности, этот механизм не используется. Помнится, они делают по одному сегменту TSS на каждый процессор (совсем без него — ну никак), не на каждый процесс. И все процессы, работающие на одном и том же процессоре, разделяют один и тот же TSS.

Насколько я понимаю, это делается из соображений быстродействия. Для переключения процессов в Linux не обязательно делать такую полную смену контекста, как это делается при переключения task-ов в процессоре.
Можете попробовать посмотреть, например, здесь. Возможно, найдете для себя какие-нибудь идеи.

Конечно, совсем не обязательно следовать тому, как это делают другие. Но познакомится, зачастую, бывает интересно.
PM — Protected Mode процессора
В этом режиме работаю большинство операционных систем.

В защищённом режиме процессор может адресовать до 16 Мбайт виртуальной памяти за счёт изменения механизма адресации. Переключение из реального режима в защищённый происходит программно и относительно просто, однако для обратного перехода необходим аппаратный сброс процессора. Для отслеживания текущего режима работы процессора используется регистр слово состояния машины (MSW). Программы реального режима без модификаций в защищённом режиме исполняться не могут, также как и программы BIOS машины.
Суть защищённого режима в следующем: программист и разрабатываемые им программы используют логическое адресное пространство, размер которого может составлять 16 мегабайт. Логический адрес преобразуется в физический адрес автоматически с помощью схемы управления памятью (MMU). Благодаря защищённому режиму, в памяти может храниться только та часть программы, которая необходима в данный момент, а остальная часть может храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объема имеющейся памяти, и пользователю кажется, что он работает с большей памятью, чем на самом деле.
Физический адрес формируется следующим образом. В сегментных регистрах хранится селектор, содержащий индекс дескриптора в таблице дескрипторов (13 бит), 1 бит, определяющий к какой таблице дескрипторов будет производиться обращение (к локальной или к глобальной) и 2 бита запрашиваемого уровня привилегий. Далее происходит обращение к соответствующей таблице дескрипторов и соответствующему дескриптору, который содержит начальный 24-битный адрес сегмента, размер сегмента и права доступа, после чего вычисляется необходимый физический адрес путём сложения адреса сегмента со смещением из 16-разрядного регистра.

© Википедия

З.Ы.: Просто там лучше объяснено
Могу описать более подробно, если интересно =)
Не слишком ли устарела эта информация? Если я ничего не забыл, то 16M можно было адресовать на 80286.
Очень устарела. Её, видать, с литературы братьев Фроловых писали. Я у них видел подобное.
Хорошо написано, интересная статья.
Но, как мне кажется, изучение таких вещей должно быть последовательным по книгам, а не по статьям.
Да, потому то я написал: господа, читаем маны. Хотя у Юрова есть в учебнике про PM, но мне сие не понравилось. Я не видел пока ни одной книги, где бы эта тема хорошо раскрывалась.
по моему — лучше всего это описал broken sword все на том же васме:)
откуда, кстати, и табличка type field.
Несомненно. Но меня попросили, так что не обессудьте.
Когда я этим интересовался (лет 10 назад), то использовал книгу тов. Финогенова «Программируем на языке Ассемблера IBM PC».
До сих пор считаю лучшим ресурсом по защищенному режиму вот этот древний сайт на народе (понятнее никто не писал):
sasm.narod.ru/docs/pm/pm_main.htm

Ну и документация от Intel и AMD всегда на видном месте — первоисточники.
Да, сайтец просто класс. Я натыкался на него когда-то, но потерял и не смог найти заново. Спасибо, почитаем.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.