| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > создание диспетчера процессов |
| Автор: Partizan 4.9.2006, 19:49 |
| значит так.....у меня есть задание....написать диспетчер процессов так называемый....на деле....прочто переключатель com/exe программ, находящихся в памяти.... помогите плз, если кто знает технологию написания подобных вещей... ссылки на литературу и др. источники тоже приветствуются |
| Автор: Romikgy 4.9.2006, 20:26 |
это понятно , а это нет , тем более это |
| Автор: Partizan 4.9.2006, 21:38 |
| Лабораторная работа № 1 Диспетчер процессов. Цель работы: Создание процедуры диспетчера (переключателя) com программ находящихся в памяти. з.ы. задание поставлено преподавателем.... |
| Автор: Fixin 4.9.2006, 21:41 |
| а что ты сам понимаешь под? |
| Автор: Partizan 4.9.2006, 21:58 |
| ну лично я понимаю это вот как: есть у нас допустим 2 программы(каждая по 1 потоку)....мне видится, что под переключением следует понимать переключение процессора с выполнения одного потока на другой... |
| Автор: sOckets 4.9.2006, 22:04 |
| А препод что накоман ? |
| Автор: Greeen 4.9.2006, 22:06 |
| Partizan, а что понимается под Windows вообще то многозадачная система |
| Автор: sOckets 4.9.2006, 22:09 |
| Может он имеет в виду , загрузить 2 программы в память , потом как бы приостанавливать по очереди , типо паузы ...с возможностью выбора кому разрешить работать , кого останавить. |
| Автор: Greeen 4.9.2006, 22:13 |
| Мда, как пульт на проигрывателе, паузу нажал, включил радио, надоело опять сидюк... Тем не менее тебе наверное помогут функции CreateToolhelp32Snapshot, Process32First, Process32Next |
| Автор: Partizan 4.9.2006, 22:25 |
| к слову: предмет называется "Операционные системы" и на лабах действительно пишем некоторые из компонентов ОС.... |
| Автор: Greeen 4.9.2006, 22:28 |
| Partizan, но пишешь ты под виндой. И вообще какие процессы имеются в виду. Если речь идет о процессах ОС Виндовс дай в рог своему преподу |
| Автор: Partizan 4.9.2006, 22:32 |
| ну давайте условимся что я пишу под MS-DOS...это вас устроит? |
| Автор: Fixin 4.9.2006, 22:33 |
| http://forum.vingrad.ru/index.php?showtopic=110567&st=0&unread=&#look |
| Автор: Partizan 4.9.2006, 22:34 |
| я так и не увидел ответа на мой вопрос....о технологиях написания подобных вещей... |
| Автор: Fixin 4.9.2006, 22:35 |
| http://forum.vingrad.ru/index.php?showtopic=75232 |
| Автор: Romikgy 4.9.2006, 22:36 | ||
Имхо если вы пишете компоненты к оси, то ты смазал поминимуму разделом, по максимуму форумом, потому как раздел про Win API т.е. то что юзает сама ось винда, и переключение между задачами в ней уже встроенно , ежели ты пишешь для своей (или виртуальной) оси этот компонент , тогда те надо курить по процессорам , что и как происходит при переключении между задачами, имхо здесь это не обсуждается, хотя могу и ошибаться Да и вам на парах ведь тоже чтото рассказывают, так что зубрите предмет Добавлено @ 22:37 имхо дос не много задачная Добавлено @ 22:38 хотя там какой то библой и поднималась данная вещь |
| Автор: Greeen 4.9.2006, 22:42 |
| Partizan, да сложно понять вообще о чем речь. Тема звучит "Создание диспетчера процессов". Fixin тебе дал немало ссылок. Функции тоже подсказали. Что за процессы-то ты определись. А как ты вообще в MSDOS собираешься сообразить многозадачность |
| Автор: SergeCpp 4.9.2006, 22:59 |
| http://en.wikipedia.org/wiki/Computer_multitasking http://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C |
| Автор: Partizan 4.9.2006, 23:20 |
| ребят....вот есть методические указания.... Порядок работы: 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 некоторое прояснило....но всё-же... |
| Автор: Fixin 4.9.2006, 23:38 |
| фигассе. а где вы учитесь? |
| Автор: Partizan 4.9.2006, 23:45 |
| хм....в Чувашском Гос. Университете на стециальности Вычислительные машины, комплексы системы и сети.... |
| Автор: Romikgy 5.9.2006, 00:03 | ||
еще раз какое это отношение имеет к вин апи? Добавлено @ 00:11 Да и плюс ко всему, я так понимаю тему надо в асм засунуть , может там чет посоветуют |
| Автор: dumb 5.9.2006, 04:18 |
| эту тему надо переносить в Asm win/dos. один из самых важных моментов в этой задаче - ограничения на переключаемые "процессы". |
| Автор: Partizan 5.9.2006, 14:26 |
| Хорошо..перенесите туда, где могут помочь.....форум называется системное программирование....думаю это оно и есть )... всем спасибо, кто откликнулся...тогда жду переноса темы куда следует.... з.ы. где матчасть найти? |
| Автор: SergeCpp 5.9.2006, 14:47 |
| Кстати, весьма опасно, если во время перехвата таймера выполняется что-либо внутри DOS'а... Попробую поискать сейчас... У Зубкова, например, описано... P.S. Сталкивался с этой проблемой лично. Писал кое-что... Вот, нашёл... http://www.google.ru/search?hl=ru&q=DOS+%D1%80%D0%B5%D0%B5%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%B1%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C&lr=lang_ru |