OSDev http://osdev.su/ |
|
Инициализация мультизадачности, или jmp far SEG:00 на GCC http://osdev.su/viewtopic.php?f=6&t=536 |
Страница 2 из 2 |
Автор: | DJ PhoeniX [ 03 май 2012, 07:40 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
Всё таки это я дурак. Хотя в описании тоже ошибка. Цитата: Примечание 1: Байт прав доступа access_rights имеет следующий формат: бит: описание 0: = 1 1: Бит B (Busy) - занятость задачи (см. следующую главу) 2: = 1 3: = 0 4: = 0 5,6: = DPL - Уровень привилегий сегмента TSS (см. следующую главу) 7: P - бит присутствия сегмента, обычно установлен в 1. А в коде встречается строчка Код: mov cx,10001001b В таком виде код почти заработал. Оказывается, что там ещё один косяк - far ptr принимает не word:word, а word:long. Вот так работает в итоге: Код: asm("mov %w0, _taskaddr"::"a"(main_tss_d*8));
asm(".byte 0xEA\n.long 0x0000\n_taskaddr:\n.word 0x0000"); |
Автор: | grindars [ 03 май 2012, 08:41 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
Вот поэтому я и пользуюсь исключительно интеловским мануалом (и иногда амдовским), а не статьями неизвестных авторов. А зачем вам аппаратная многозадачность, кстати? Она тормозная и систему только усложняет зря. Не просто ж так ее из 64-битного режима выкинули . |
Автор: | DJ PhoeniX [ 03 май 2012, 08:52 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
VM86 же... Ну и вообще, если есть - надо юзать. |
Автор: | grindars [ 03 май 2012, 08:56 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
Ну и заюзайте 16-битную многозадачность, сегментацию, все четыре кольца, LDT и прочее, чтоб побольше геморроя было, чего уж там. Если аппаратный механзим кривее и медленнее аналогичного программного, то на кой хрен он вообще нужен? А V86 еще зачем? BIOS дергать? |
Автор: | DJ PhoeniX [ 03 май 2012, 09:18 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
V86 очень нужен для работы с биосом |
Автор: | Yoda [ 03 май 2012, 11:19 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
А всё же в связи с отсутствием оного в Long Mode (64 битный режим), придётся искать альтернативные решения. Для меня это пока тоже головная боль и я не придумал красивого во всех отношениях решения. Пока больше склоняюсь к программному эмулятору. |
Автор: | SII [ 03 май 2012, 12:31 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
А нету красивого решения, увы. Архитектура не способствует-с. |
Автор: | Bargest [ 03 май 2012, 15:15 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
Цитата: Пока больше склоняюсь к программному эмулятору. ИМХО иначе вообще никак. Скакать туда-сюда между х32 и х64, включая там V86 - не дело. Остаётся эмулятор. |
Автор: | Yoda [ 03 май 2012, 18:45 ] |
Заголовок сообщения: | Re: Инициализация мультизадачности, или jmp far SEG:00 на GC |
С эмулятором две засады. 1. Непонятно, до какой глубины эмулировать процессор. Постоянно добавляются новые инструкции и не факт, что производители системного БИОСа (зная, какой именно процессор может быть установлен на мамке), не используют их. 2. Эмуляция работает очень медленно. Каждый вызов прерывания, хотя и не сильно тормозит мультизадачность, но сам по себе - настоящий achtung! Кроме того, написание эмулятора - задача существенно посложней, чем реализация v86. Поэтому я пока ещё в сомнениях. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |