Всем привет! Кто разбирается в переключении задач, помогите плз, не работает выход из задачи. Если кто сможет прогнать код в боше и скажет в чем проблема - буду очень благодарен за помощь. В вмаре друг прогонял код - работает. Пробую из доса запускать - ребут. Креплю файл.
дебагером отладь до PM можно дойти и узнать валиться ли он ДО а в PM можно прыгнуть тем же дебагером и узнать допрыгивает ли ОН
Входит в РМ, все ок, загружаю в TR селектор сегмента TSS, переключаюсь на другую задача с помощью команды CALL SEL_TSS и из этой задачи по команде IRET не происходит возврата. Не понимаю почему. Вроде теоретически все сделано правильно. Не могу понять ошибку.
исключение по чему происходит? по iret ? так может стоит полистать справочник интелла? или другой какой гука например по полям TSS и работе iret как он срабатывает и что проверят при срабатывании поля TSS типа беклинк стек и прочее
0136 Я как-то испытал возможно схожую проблему: так же при переключении на исходную задачу валилось с исключением неверного TSS. Оказалось (кто-то подсказал) что при переключении на вторую задачу из первой проц сохраняет все селектора в полях задачи (те текущие селектора) - которые могут иметь абстрактные значения сразу после перехода в PM. Новая задача выполняется до возврата - далее проц пытается грузить из контекста старые селектора - и если они неверные - выбрасывает такую хрень. У меня так: Код (Text): mov ax,SEL_DATA mov ds,ax mov ax,SEL_STACK mov ss,ax mov ax,SEL_SCREEN mov es,ax mov ax,SEL_HIMEM ; massive selector mov gs,ax mov ax,0 mov fs,ax Не помню какой именно селектор был проблемным - FS/GS.
Заработало, а когда подключил задачам страничное тождественное преобразование, то снова ошибка происходит копец!
"страничное тождественное преобразование" - а что это? Ты же установил обработчики ВСЕХ исключений и в случае такового - какое исключение и какой код ошибки? На какой инструкции?
Ребут идет, установил борщ, разбираюсь с ним. А перезагрузки идет может еще из за того что у меня обработчики исключений сделаны как шлюзы прерываний, они наверное тоже не "выдерживают". Странич тождеств преобразование - это когда пейджинг включен но преобразования "нет". Таблицы построены таким образом, что они отображают физ память. Ну равные - тождественные равенство, идентичность, в таком плане.