Комментарии 16
Оперативно вы. Когда увидел код и ник Phantom_84 сразу вспомнил вашу переписку на wasm'е, которую недавно видел. )
Пост супер, единственное для удобства можно добавить ссылки на источники информации.
Пост супер, единственное для удобства можно добавить ссылки на источники информации.
+1
Отлично. Как раз в тему, нужна была инфа :)
Может быть еще напишите про реализацию многозадачности в PM?
Может быть еще напишите про реализацию многозадачности в PM?
0
Я сейчас этим вопросом тоже занимаюсь. Как будут наработки — обязательно.
Вообще многозадачность описана в System Programming Guide Volume 1 в 7-ой главе. Но там рассказано как меняются флаги, стек при переключении, про выполнение эти самых task'ов и.т.д., всё остальное придумывается и пишется самостоятельно. Вообще я думал свою, для начала делать монозадачной, но раз интересует этот вопрос, то я покопаюсь. Будут удовлетворительный результат — обязательно напишу.
Вообще многозадачность описана в System Programming Guide Volume 1 в 7-ой главе. Но там рассказано как меняются флаги, стек при переключении, про выполнение эти самых task'ов и.т.д., всё остальное придумывается и пишется самостоятельно. Вообще я думал свою, для начала делать монозадачной, но раз интересует этот вопрос, то я покопаюсь. Будут удовлетворительный результат — обязательно напишу.
+1
Кстати, для организации многозадачности не обязательно использовать механизм task-ов процессора. Если мне не изменяет память, в ядре Linux на ia32, в частности, этот механизм не используется. Помнится, они делают по одному сегменту TSS на каждый процессор (совсем без него — ну никак), не на каждый процесс. И все процессы, работающие на одном и том же процессоре, разделяют один и тот же TSS.
Насколько я понимаю, это делается из соображений быстродействия. Для переключения процессов в Linux не обязательно делать такую полную смену контекста, как это делается при переключения task-ов в процессоре.
Можете попробовать посмотреть, например, здесь. Возможно, найдете для себя какие-нибудь идеи.
Конечно, совсем не обязательно следовать тому, как это делают другие. Но познакомится, зачастую, бывает интересно.
Насколько я понимаю, это делается из соображений быстродействия. Для переключения процессов в Linux не обязательно делать такую полную смену контекста, как это делается при переключения task-ов в процессоре.
Можете попробовать посмотреть, например, здесь. Возможно, найдете для себя какие-нибудь идеи.
Конечно, совсем не обязательно следовать тому, как это делают другие. Но познакомится, зачастую, бывает интересно.
0
PM — Protected Mode процессора
В этом режиме работаю большинство операционных систем.
В защищённом режиме процессор может адресовать до 16 Мбайт виртуальной памяти за счёт изменения механизма адресации. Переключение из реального режима в защищённый происходит программно и относительно просто, однако для обратного перехода необходим аппаратный сброс процессора. Для отслеживания текущего режима работы процессора используется регистр слово состояния машины (MSW). Программы реального режима без модификаций в защищённом режиме исполняться не могут, также как и программы BIOS машины.
Суть защищённого режима в следующем: программист и разрабатываемые им программы используют логическое адресное пространство, размер которого может составлять 16 мегабайт. Логический адрес преобразуется в физический адрес автоматически с помощью схемы управления памятью (MMU). Благодаря защищённому режиму, в памяти может храниться только та часть программы, которая необходима в данный момент, а остальная часть может храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объема имеющейся памяти, и пользователю кажется, что он работает с большей памятью, чем на самом деле.
Физический адрес формируется следующим образом. В сегментных регистрах хранится селектор, содержащий индекс дескриптора в таблице дескрипторов (13 бит), 1 бит, определяющий к какой таблице дескрипторов будет производиться обращение (к локальной или к глобальной) и 2 бита запрашиваемого уровня привилегий. Далее происходит обращение к соответствующей таблице дескрипторов и соответствующему дескриптору, который содержит начальный 24-битный адрес сегмента, размер сегмента и права доступа, после чего вычисляется необходимый физический адрес путём сложения адреса сегмента со смещением из 16-разрядного регистра.
© Википедия
З.Ы.: Просто там лучше объяснено
В этом режиме работаю большинство операционных систем.
В защищённом режиме процессор может адресовать до 16 Мбайт виртуальной памяти за счёт изменения механизма адресации. Переключение из реального режима в защищённый происходит программно и относительно просто, однако для обратного перехода необходим аппаратный сброс процессора. Для отслеживания текущего режима работы процессора используется регистр слово состояния машины (MSW). Программы реального режима без модификаций в защищённом режиме исполняться не могут, также как и программы BIOS машины.
Суть защищённого режима в следующем: программист и разрабатываемые им программы используют логическое адресное пространство, размер которого может составлять 16 мегабайт. Логический адрес преобразуется в физический адрес автоматически с помощью схемы управления памятью (MMU). Благодаря защищённому режиму, в памяти может храниться только та часть программы, которая необходима в данный момент, а остальная часть может храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объема имеющейся памяти, и пользователю кажется, что он работает с большей памятью, чем на самом деле.
Физический адрес формируется следующим образом. В сегментных регистрах хранится селектор, содержащий индекс дескриптора в таблице дескрипторов (13 бит), 1 бит, определяющий к какой таблице дескрипторов будет производиться обращение (к локальной или к глобальной) и 2 бита запрашиваемого уровня привилегий. Далее происходит обращение к соответствующей таблице дескрипторов и соответствующему дескриптору, который содержит начальный 24-битный адрес сегмента, размер сегмента и права доступа, после чего вычисляется необходимый физический адрес путём сложения адреса сегмента со смещением из 16-разрядного регистра.
© Википедия
З.Ы.: Просто там лучше объяснено
-1
Хорошо написано, интересная статья.
Но, как мне кажется, изучение таких вещей должно быть последовательным по книгам, а не по статьям.
Но, как мне кажется, изучение таких вещей должно быть последовательным по книгам, а не по статьям.
0
по моему — лучше всего это описал broken sword все на том же васме:)
откуда, кстати, и табличка type field.
откуда, кстати, и табличка type field.
0
wasm.ru/series.php?sid=20 вот ссылка на цикл, если что.
+2
Несомненно. Но меня попросили, так что не обессудьте.
0
Когда я этим интересовался (лет 10 назад), то использовал книгу тов. Финогенова «Программируем на языке Ассемблера IBM PC».
0
До сих пор считаю лучшим ресурсом по защищенному режиму вот этот древний сайт на народе (понятнее никто не писал):
— sasm.narod.ru/docs/pm/pm_main.htm
Ну и документация от Intel и AMD всегда на видном месте — первоисточники.
— sasm.narod.ru/docs/pm/pm_main.htm
Ну и документация от Intel и AMD всегда на видном месте — первоисточники.
+2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Что такое Protected Mode и с чем его едят