![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
||||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
Имхо если вы пишете компоненты к оси, то ты смазал поминимуму разделом, по максимуму форумом, потому как раздел про Win API т.е. то что юзает сама ось винда, и переключение между задачами в ней уже встроенно , ежели ты пишешь для своей (или виртуальной) оси этот компонент , тогда те надо курить по процессорам , что и как происходит при переключении между задачами, имхо здесь это не обсуждается, хотя могу и ошибаться Да и вам на парах ведь тоже чтото рассказывают, так что зубрите предмет Добавлено @ 22:37 имхо дос не много задачная Добавлено @ 22:38 хотя там какой то библой и поднималась данная вещь -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: нет Всего: 18 |
Partizan, да сложно понять вообще о чем речь. Тема звучит "Создание диспетчера процессов". Fixin тебе дал немало ссылок. Функции тоже подсказали. Что за процессы-то ты определись.
А как ты вообще в MSDOS собираешься сообразить многозадачность -------------------- Подпись больше не нужна |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
||||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
ребят....вот есть методические указания....
Порядок работы: 1. Перехватывание прерывание 08h. В MS-DOS переопределение стандартного прерывания производится следующим образом: • Получить адрес старого обработчика. • Установить новый обработчик. • Выполнить программу. • восстановить старый обработчик. Получаем адрес старого обработчика. Таблица векторов прерывания находится с адреса 0000:0000 и имеет 256 элементов (по количеству прерываний). Каждый элемент таблицы - 4-ех байтный вектор - адрес процедуры обработчика. Для получения адреса старого прерывания можно воспользоваться функцией Си: getvect. Входной параметр – номер прерывания, в данном случае 0x08. Выходной параметр – указатель на текущую процедуру обработчика прерывания. Устанавливаем новый обработчик. Для установки адреса нового прерывания можно воспользоваться функцией Си: setvect. Входные параметры: • номер прерывания, в данном случае 0x08; • имя процедуры или указатель на неё. Выходных параметров нет. 2. Новый обработчик прерывания. Основные действия, производимые новым обработчиком: • Отключить прерывания, во избежание прерывания диспетчера самим собой. • Сохранить адрес стека текущей задачи, регистры сохраняются автоматически (при использовании языков высокого уровня ). • Вызвать старый обработчик прерываний, во избежание «потери времени». • Вызвать менеджер процессов (Лабораторная работа №2), для определения процесса, на который необходимо переключиться. • Записать в регистры стека, адрес стека новой задачи. • Закончить обработчик, регистры восстанавливаются автоматически (при использовании языков высокого уровня). Отключение прерываний в Си возможно с помощью функции disable() или в любом языке с помощью ассемблерной вставки: asm{cli}. Адрес вершины стека определяется регистрами SS (сегмент стека, в данном случае идентичен, сегменту кода – регистр CS) и SP (смещение стека). Т.к. SS=CS=Сегмент_с_загруженной_задачей, то сохранять (но восстанавливать обязательно) SS необязательно, т.к. CS должен храниться в дескрипторе процесса. Доступ к этим регистрам в Си возможен с помощью предопределенных переменных _SS и _SP (и на запись и на чтение) или в любом языке с помощью ассемблерной вставки: asm{mov ваша_переменная,sp} на чтении, asm{mov sp, ваша_переменная} на запись. Включение прерываний в Си возможно с помощью функции enable() или в любом языке с помощью ассемблерной вставки: asm{sti}. НО!!!! мне мало чего из этого понятно поэтому я и решил спросить здесь о ТЕХНОЛОГИЯХ НАПИСАНИЯ ПОДОБНЫХ ВЕЩЕЙ Добавлено @ 23:29 То, что дал SergeCpp некоторое прояснило....но всё-же... -------------------- СУВ, Partizan. |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
фигассе. а где вы учитесь?
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
хм....в Чувашском Гос. Университете на стециальности Вычислительные машины, комплексы системы и сети....
-------------------- СУВ, Partizan. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
еще раз какое это отношение имеет к вин апи? Добавлено @ 00:11 Да и плюс ко всему, я так понимаю тему надо в асм засунуть , может там чет посоветуют -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
эту тему надо переносить в Asm win/dos.
один из самых важных моментов в этой задаче - ограничения на переключаемые "процессы". |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
Хорошо..перенесите туда, где могут помочь.....форум называется системное программирование....думаю это оно и есть )...
всем спасибо, кто откликнулся...тогда жду переноса темы куда следует.... з.ы. где матчасть найти? -------------------- СУВ, Partizan. |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
Кстати, весьма опасно, если во время перехвата таймера выполняется что-либо внутри DOS'а...
Попробую поискать сейчас... У Зубкова, например, описано... P.S. Сталкивался с этой проблемой лично. Писал кое-что... Вот, нашёл... Найденное целиком Это сообщение отредактировал(а) SergeCpp - 5.9.2006, 14:51 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |