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/