![]() |
|
![]() ![]() ![]() |
|
eXz |
|
|||
Unregistered |
Помогите написать переключение задач под защищеным режимом. Кинте ссылку или пример, а то ни на одном форуме ничто про это незнают.
Буду очень благодарен. eXz. |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Посмотри книгу Финогенова ~"Программируем на языке ассемблера для IBM PC" - четырехтомник. Там все подробно про эти TSS и т.п. Есть примеры. Все, что я у него пробовал запускать - работало.
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
eXz |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 21.7.2003 Репутация: нет Всего: нет |
А эти примеры они в сети есть?
|
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Без понятия ;) Яндекс ? ;)
На wasm.ru есть цикл статей BrockenSword'а по защищенному режиму. Может быть, тама ?... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
eXz |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 21.7.2003 Репутация: нет Всего: нет |
|
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Не, ну все же лучше тебе найти Финогенова... Неужели нигде нет ? Раньше эту книгу (и) можно было купить ... Или в библиотеке ?
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: нет Всего: 232 |
Еще, кстати, есть толковая бука от г-на В.Юров. Точнее, бука плюс отдельный справочник. Там не столько примеров, зато отличный теоретический материал - можно разобраться во всем и сразу.
-------------------- ![]() |
|||
|
||||
eXz |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 21.7.2003 Репутация: нет Всего: нет |
mr.DUDA
Это ли не тот бук, который выходит в трех версиях: самоучитель, справочник, учебник? Если тот, то в нём ето-го нет. =( Chingachguk
|
|||
|
||||
bedel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.8.2003 Репутация: нет Всего: нет |
На intel'овском сайте можно найти документы 24547007.pdf, 24547107.pdf, 24547207.pdf -- это полное описание
архитектуры ia32. Переключение задач само по себе довольно простая вещь -- заполнил TSS, а потом делаешь long call или long jmp на дескриптор этого TSS. В самой задаче (если ты переключился на нее с помощью call'а) можно сделать iret -- вернешся в вызывавшуу задачу (для нее не нужно заполнять TSS, надо только отвести под него место и дескриптор, при переключении задач процессорными средствами процессор сам заполнит TSS вызывающей задачи). Правда есть одна заморочка -- советую TSS располагать с равнением на размер страницы (4096), так как процессор делает страничное преобразование (если включен paging) при переключении задач только один раз -- для начала TSS, и предполагает, что обязательная часть TSS располагается дальше в памяти непрерывно. Это кооперативная многозадачность, если надо вытесняющую, необxодимо еще переxватить прерывание таймера и из него принудительно переключать задачи. Это тоже не сложно. Проблемы начинаются если xочешь, чтобы задачи работали в разныx виртуальныx пространстваx, разныx кольцаx защиты и т.д. Легко ошибиться где-нибудь, если ошибешься практически наверняка это приведет к тому, что процессор не выдавая никакиx исключений просто перезагрузится (tripple fault). Наxодить ошибки очень сложно. В этом случае советую отлаживать на емуляторе процессора (типа bochs или vmware), bochs xорош тем, что его легко спарить со стандартным дебуггером (gdb) и отлаживать ядро как самую обычную программу. В принципе можно переключать задачи и в ручную, не обращаясь к возможностям процессора. Для этого надо самостоятельно соxранять и восстанавливать состояние процессора в память. Проще всего это делать в прерывании (например в том же timer'e): 1) при вxоде в прерывание надо соxранить все регистры общего назначения, возможно сегментные регистры (если они разные у разныx задач), cr3, cr4, возможно регистры сопроцессора 2) соxранить флаги и адрес возврата (из стека) 3) подменить в стеке адрес возврата и флаги 4) загрузить регистры для задачи на которую происxодит переключение 5) iret |
|||
|
||||
eXz |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 21.7.2003 Репутация: нет Всего: нет |
Большое спасибо всем-всем-всем! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |