Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > создание диспетчера процессов


Автор: Partizan 4.9.2006, 19:49
значит так.....у меня есть задание....написать диспетчер процессов так называемый....на деле....прочто переключатель com/exe программ, находящихся в памяти....

помогите плз, если кто знает технологию написания подобных вещей...
ссылки на литературу и др. источники тоже приветствуются

Автор: Romikgy 4.9.2006, 20:26
Цитата(Partizan @  4.9.2006,  18:49 Найти цитируемый пост)
 диспетчер процессов

это понятно , а это 
Цитата(Partizan @  4.9.2006,  18:49 Найти цитируемый пост)
прочто переключатель com/exe программ

нет , тем более это 
Цитата(Partizan @  4.9.2006,  18:49 Найти цитируемый пост)
находящихся в памяти

 smile 

Автор: Partizan 4.9.2006, 21:38
Лабораторная работа № 1

Диспетчер процессов.

Цель работы: Создание процедуры диспетчера (переключателя) com программ находящихся в памяти.


з.ы. задание поставлено преподавателем....

Автор: Fixin 4.9.2006, 21:41
а что ты сам понимаешь под
Цитата(Partizan @  4.9.2006,  19:49 Найти цитируемый пост)
переключатель
?

Автор: Partizan 4.9.2006, 21:58
ну лично я понимаю это вот как:

есть у нас допустим 2 программы(каждая по 1 потоку)....мне видится, что под переключением следует понимать переключение процессора с выполнения одного потока на другой...

Автор: sOckets 4.9.2006, 22:04
А препод что накоман ?

Автор: Greeen 4.9.2006, 22:06
Partizan, а что понимается под 
Цитата(Partizan @  4.9.2006,  21:58 Найти цитируемый пост)
переключением процессора с выполнения одного потока на другой

Windows вообще то многозадачная система

Автор: sOckets 4.9.2006, 22:09
Может он имеет в виду , загрузить 2 программы в память , потом как бы приостанавливать по очереди , типо паузы ...с возможностью выбора кому разрешить работать , кого останавить.

Автор: Greeen 4.9.2006, 22:13
Мда, как пульт на проигрывателе, паузу нажал, включил радио, надоело опять сидюк...
Тем не менее тебе наверное помогут функции CreateToolhelp32Snapshot, Process32First, Process32Next

Автор: Romikgy 4.9.2006, 22:16
Цитата(Partizan @  4.9.2006,  20:58 Найти цитируемый пост)
есть у нас допустим 2 программы(каждая по 1 потоку)....мне видится, что под переключением следует понимать переключение процессора с выполнения одного потока на другой... 

Вы что на лабораторках ОСь пишете?
Имхо этим сама ось занимается

Автор: Partizan 4.9.2006, 22:25
к слову: предмет называется "Операционные системы" и на лабах действительно пишем некоторые из компонентов ОС....

Автор: Greeen 4.9.2006, 22:28
Partizan, но пишешь ты под виндой. И вообще какие процессы имеются в виду. Если речь идет о процессах ОС Виндовс дай в рог своему преподу  smile 

Автор: 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
Цитата(Partizan @  4.9.2006,  21:25 Найти цитируемый пост)
к слову: предмет называется "Операционные системы" и на лабах действительно пишем некоторые из компонентов ОС.... 

Имхо если вы пишете компоненты к оси, то ты смазал поминимуму разделом, по максимуму форумом,
потому как раздел про Win API т.е. то что юзает сама ось винда,
и переключение между задачами в ней уже встроенно ,
ежели ты пишешь для своей (или виртуальной) оси этот компонент , тогда те надо курить по процессорам , что  и как происходит при переключении между задачами, имхо здесь это не обсуждается, хотя могу и ошибаться
Да и вам на парах ведь тоже чтото рассказывают, так что зубрите предмет

Добавлено @ 22:37 
Цитата(Partizan @  4.9.2006,  21:32 Найти цитируемый пост)
ну давайте условимся что я пишу под MS-DOS...это вас устроит?

имхо дос не много задачная smile

Добавлено @ 22:38 
хотя там какой то библой и поднималась данная вещь

Автор: Greeen 4.9.2006, 22:42
Partizan, да сложно понять вообще о чем речь. Тема звучит "Создание диспетчера процессов". Fixin тебе дал немало ссылок. Функции тоже подсказали. Что за процессы-то ты определись.
А как ты вообще в MSDOS собираешься сообразить многозадачность  smile 

Автор: 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
Цитата(Partizan @  4.9.2006,  22:20 Найти цитируемый пост)
В MS-DOS переопределение стандартного прерывания производится следующим образом

еще раз какое это отношение имеет к вин апи?

Добавлено @ 00:11 
Да и плюс ко всему, я так понимаю тему надо в асм засунуть , может там чет посоветуют smile хотя больше похоже на центр помощи

Автор: dumb 5.9.2006, 04:18
эту тему надо переносить в Asm win/dos.

один из самых важных моментов в этой задаче - ограничения на переключаемые "процессы".

Автор: Partizan 5.9.2006, 14:26
Хорошо..перенесите туда, где могут помочь.....форум называется системное программирование....думаю это оно и есть )...

всем спасибо, кто откликнулся...тогда жду переноса темы куда следует....

з.ы. где матчасть найти?

Автор: SergeCpp 5.9.2006, 14:47
Кстати, весьма опасно, если во время перехвата таймера выполняется что-либо внутри DOS'а...

Попробую поискать сейчас...

У Зубкова, например, описано...

P.S. Сталкивался с этой проблемой лично. Писал кое-что...

Вот, нашёл...
smile http://forum.vingrad.ru/index.php?act=ST&f=151&t=71565

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)