OSDev

для всех
Текущее время: 28 апр 2024, 02:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: возврат из программы (iretd)
СообщениеДобавлено: 30 авг 2013, 07:24 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
у меня началаглючить многозадачность, как таковые процессы запускаются но когда происходит команда iretd всё останавливается,

для теста даже проверил отдельно
Код:
lgdt [GDTR]
lidt [IDTR]
jmp far 08h:this_kernel_code
this_kernel_code:
mov ax, 0x10
mov es, ax
mov ds, ax
mov fs, ax
mov gs, ax
mov      ax, sel_kernel
ltr      ax
call far sel_TSS1:0

пробовал всё это дело вразных комбинациях и в разном порядке,
но так и не могу понять почему эта штука не возвращается обратно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 30 авг 2013, 08:18 

Зарегистрирован: 31 июл 2013, 09:40
Сообщения: 28
Какой эмулятор и какое исключение? А ещё весь код нужен, думаю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 30 авг 2013, 08:58 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
sh2ezo писал(а):
Какой эмулятор и какое исключение?

эмулято vbox
sh2ezo писал(а):
А ещё весь код нужен, думаю

весь код не нужен, там idt gdt и tss-ы генерируются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 30 авг 2013, 11:54 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Где код выхода из вложенной задачи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 30 авг 2013, 13:56 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
phantom-84 писал(а):
Где код выхода из вложенной задачи?

там просто iret стоит.
Код:
T_init:
mov eax, 0FF00FFh
mov ecx, 0AA00DDh
iretd
T_enter:
iretd
jmp T_enter


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 30 авг 2013, 15:29 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Ты уверен, что у тебя установлен флаг NT? Надеюсь, прерывания во вложенной задаче запрещены.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 31 авг 2013, 06:58 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
phantom-84 писал(а):
Ты уверен, что у тебя установлен флаг NT?

я его не устанавливал, у основной задачи все флаги сброшены
phantom-84 писал(а):
Надеюсь, прерывания во вложенной задаче запрещены.

нет там прерывания разрешены, пробовал запрещять и это не помогает,


пославил исключения и попробовал вызвать какое нибудь из них ( int 10h)
после этого отключилось GDT,

поставил на таймерный IRQ многозадачность и оно тоже не работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 31 авг 2013, 11:40 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Причину ошибки быстро найдёшь с помощью отладчика Bochs. Там мы много обсуждали способы отладки
viewtopic.php?f=6&t=785


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 31 авг 2013, 13:08 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Himik писал(а):
Причину ошибки быстро найдёшь с помощью отладчика Bochs. Там мы много обсуждали способы отладки
viewtopic.php?f=6&t=785

В плане отладки, если работаешь под *nix запросто можно запилить такое - вполне себе полноценную IDE для разработки ОС, с дамами и преферансом. Вместо VMware использовать тот же Bochs или QEMU, у них же есть gdb stub на порту 1234 (только вот работали они у меня под x86, а на x86_64 в упор не хотят).

P.S.: Это можно сделать из под винды - gdb есть реализация и под win.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: возврат из программы (iretd)
СообщениеДобавлено: 31 авг 2013, 18:25 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
scuter писал(а):
phantom-84 писал(а):
Ты уверен, что у тебя установлен флаг NT?

я его не устанавливал, у основной задачи все флаги сброшены
Этот флаг устанавливается автоматически внутри вызванной задачи. И чтобы правильно сработал именно нужный iret, нужно обеспечить NT=1 в момент выполнения этого iret'а.

Цитата:
phantom-84 писал(а):
Надеюсь, прерывания во вложенной задаче запрещены.

нет там прерывания разрешены, пробовал запрещять и это не помогает,

пославил исключения и попробовал вызвать какое нибудь из них ( int 10h)
после этого отключилось GDT,

поставил на таймерный IRQ многозадачность и оно тоже не работает.
Прерывания должны быть запрещены. Иначе все прерывания и исключения должны обрабатываться внутри других вложенных задач или при NT=0. Сдается мне, вы неправильно используете аппаратную многозадачность с вложенными задачами. Скорее всего вам больше подойдет аппаратное переключение jump'ом.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB