Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.191.22] |
|
Сообщ.
#1
,
|
|
|
Возможно ли сделать в DOS программу-резидент, которая позволяла бы
переключать между собой хотя бы два параллельных процесса. Я не о многозадачности, а просто о переключении, допустим нажатием "Alt-Tab" ? Возможно ли сделать это так (после того как нажаты Alt-Tab) : 1). резидент перехватил комбинацию Alt-Tab; 2). определил регистры CS:IP (выполняющаяся какая-либо в данный момент программа) и сохранил их; 3). сохранил где-нибудь код выполняющийся программы, начиная с текущего CS:IP до, допустим, CS:[IP+200h]; 4). записал по этому адресу код, выполняющий EXEC, вклющающий корректировку стека, выделение памяти программе-потомку и вызов 4bh(21h). 5). передал управление стандарт.обработчику; 6). теперь выполняется код, который был записан, т.е. запуск, допстим, COMMAND.COM; 7). идёт обычная работа, если выходим из программы-потомка, то управление передаётся прерванной программе: после того, как восстановим DTA и стек программы-родителя, то восстановим из памяти то, что раньше сохранили (см. пункт 2 и 3); Cкажите, будет ли работать такая фигня или операционная система не позволит ? Если нет - то почему, если да - как бы это всё улучшить, оптимизировать ? Спасибо ! |
Сообщ.
#2
,
|
|
|
На мой взгляд, нереально! За процессор сохранять контекст задачи (все регистры, стек), самому восстанавливать. На мой взгляд даже с контрольной точкой уже будут проблемы. Короче, утопия! Но это на мой взгляд!
|
Сообщ.
#3
,
|
|
|
Если заюзать защищённый режим, то запросто.
|
Сообщ.
#4
,
|
|
|
Как ?
Объясните неграмотному, чем здесь может помочь перевод в защищённый режим. Я знаю пока про защищённый режим только то что - это позволяет адресовать больше памяти - программам назначаются какие-то уровни доступа (кольца какие-то) - ... и всё , дальше я не знаю :-[ :-[ Разве это можно всё использовать в данном случае ? А как ? |
Сообщ.
#5
,
|
|
|
Это слишком будет длинный разговор... Лучше почитай книжку Фроловых "Защищенный режим процессоров Intel 80286/80386/80486" (Том 6). В книжке очень много ошибок, но зато проста для понимания.
А для твоего случая это неприменимо. Твоя программа работает в режиме V86, где очень многие команды защищенного режима недействительны. То что ты хочешь сделать, теоретически возможно, но практически вряд ли. Прервать еще как-то можно, поставив контрольную точку int 3 (0ССh), сохранить все регистры, стек в обработчике int 3, затем восстановить все, но это все не так просто и у меня сплошные сомнения... Стоит ли овчинка выделки? |
Сообщ.
#6
,
|
|
|
Нашёл эту книжку. :) Начало обещает быть хорошим (там есть и примеры на С++
и на асме :) ), а я ещё раз убедился в том, что многово не знаю. :( ...хотя меня пока не совсем оставила оставила надежда насчёт "переключения процессов", вряд ли наверное, получится, но хотяб поучусь, как говориться, на своих ошибках :) |
Сообщ.
#7
,
|
|
|
В защищённом режиме можно вообще сотворить несколько абсолютно независимых ДОС-сессий. Эдакие виртуальные машины, между которыми можно переключатся. Как консоли в Линухе.
|
Сообщ.
#8
,
|
|
|
Прочитал полностью книгу про защищённый режим процессоров. Было всё
нормально, нонятно, но... знаете как это бывает... большой объём информации сразу и легко запутаться... Вобщем, чё я оправдываюсь, так и скажи, что тормоз. Короче, такой у меня идиотский вопрос: с реальным режимом всё понятно - программа, например, даёт команду JMP <segment:offset>. Далее, например, переводим, процессор в защищённый режим. Теперь программа, наверное, будет выдавать на этом месте команду JMP <selector+TI+RTL :offset>. Но откуда, откуда она возьмёт селектор ? Откуда она должна знать, в каком ей кольце работать, какую таблицу дескрипторов использовать ? Я надеюсь, я хоть правильно сформулировал вопрос. Запутался блин |
Сообщ.
#9
,
|
|
|
Не мучайся, Илья, всё гораздо проще!!!
Запускаешь свою (TSR) программу. Нажимаешь Hotkey, прога её перехватывает. Дальше Int 28 или Int 8 (с проверкой InDOS Flag) сохраняет регистры, всю память с адреса после своей проги до конца DOS-памяти + видеопамять , а затем запускает (или восстанавливает из файла) другую прогу.... Только, вот я не знаю, что будет, если придётся переключаться из проги, работающей в защищённом режиме или написанную, например, на TMT Pascal'е..... ;D |
Сообщ.
#10
,
|
|
|
Это, конечно, будет работать намного глючнее, чем через защищённым режим, но ИМХО проще реализуется (правда, я не пробовал ).
|
Сообщ.
#11
,
|
|
|
Вот и я уже понял, что здесь TSR & RMode - без перспектив. Так что, Eugene,
не всё так просто |
Сообщ.
#12
,
|
|
|
А линух не использует механизмы процессора Intel для переключения задач !!! (то бишь ручками настраивает CS:EIP и др. регистры ). Ну разве что регистр задачи TR и то только для того, чтобы при системном вызове (int 80h) сменить стек 3 кольца на стек 0 кольца. Это работает быстрее, чем JMP или CALL.
|