![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
![]()
Пытаюсь написать систему, которая бы обеспечила переключение задач в режиме реальных адресов. Сделал загрузку с дискеты FAT12 (позаимствовал из исходников KolibriOS). Создал обработчик прерывания таймера (8h), который просто сохраняет состояние текущей задачи в стеке, потом сохраняет указатель стека в специальном месте в заголовке задачи (адрес задачи + 2 байта), загружаю соответствующие данные для другого процесса и возвращаюсь из прерывания iret'ом. Т.к. выполнение задачи остановилось на прерывании, то возврат из прерывания, логично, возвращает в ту же точку задачи независимо от того, сколько процессов выполнилось за время прерывания.
Но что-то не работает, подозреваю, что неправильно задаю начальное состояние процессов. Нужно так задать начальное состояние, как будто задача была прервана с помощью прерывания, т.е. в стеке должны быть адрес возврата и регистр флагов. Вот как я это делаю: Код:
Последний раз редактировалось anyx; 03.11.2011 в 20:02. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Многопоточность и многозадачность | mephistophel | Win Api | 1 | 21.04.2011 09:34 |
Нужно описать (словами) несколько реальных коммерческих проектов | GeNerik | Фриланс | 1 | 29.01.2011 01:19 |
Режим реальных адресов | smileman | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 5 | 08.01.2009 01:47 |
Вставка картинки реальных размеров или хотябы в пропорции | Mbus | Microsoft Office Excel | 4 | 02.12.2008 09:55 |
разработка ОС: многозадачность | drRobert | Помощь студентам | 3 | 12.08.2008 08:38 |