Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
Кафедра автоматики и вычислительной техники
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 3
Дисциплина: системное программное обеспечение
Тема: управление процессами и нитями в ОС QNX
Выполнил ст. группы 4081/1:
Проверила
Санкт-Петербург 2008
1. Цель работы
Изучить основные принципы управления процессами и нитями в ОС QNX.
2. Управление процессами и нитями
2.1. Ознакомиться с выполнением системных вызовов fork(); execl(); wait(); exit(); sleep().
“Предком” всех процессов является процесс Администратор процессов ( процесс procnto), идентификатор PID которого равен 1. Остальные процессы порождаются в результате вызова соответсвующей функции другим процессом, именуемым родительским.
К основным средствам, используемым для управления процессами, относятся системные вызовы fork(); execl(); wait(); exit(); sleep().
pid_tfork(void) создает процесс-потомок, который отличается от родительского только значениями PID (идентификатор процесса) и PPID (идентификатор родительского процесса), а также тем фактом, что счетчики использования ресурсов установлены в 0. Блокировки файлов и сигналы, ожидающие обработки, не наследуются.
Семейство функций exec заменяет текущий образ процесса новым образом процесса. intexecl(constchar *path, constchar *arg, ...) является образом функции execve. Параметр const char *arg подразумевает параметры arg0, arg1, ..., argn. Все вместе они описывают один или нескольких указателей на строки, заканчивающиеся NULL, которые представляют собой список параметров, доступных исполняемой программе. Первый параметр, по соглашению, должен указывать на имя, ассоциированное с файлом, который надо исполнить. Список параметров должен заканчиваться NULL.
pid_twait(int *status) приостанавливает выполнение текущего процесса до тех пор, пока дочерний процесс не прекратит выполнение или до появления сигнала, который либо завершает текущий процесс, либо требует вызвать функцию-обработчик. Если дочерний процесс к моменту вызова функции уже завершился (так называемый "зомби"), то функция немедленно возвращается. Системные ресурсы, связанные с дочерним процессом, освобождаются.
void _exit(intstatus) "немедленно" завершает вызвавший её процесс. Любые открытые файловые дескрипторы, принадлежащие данному процессу, закрываются; любые потомки данного процесса наследуются процессом init, который имеет идентификатор (номер) 1; а родительскому процессу, посылается сигнал SIGCHLD. Значение status возвращается родительскому процессу как код завершения процесса, и может быть затем получено при помощи вызова одной из функций семейства wait.
unsignedintsleep(unsignedintseconds) переводит текущий процесс в режим ожидания либо на seconds секунд, либо на время до получения сигнала, который не может быть проигнорирован.
father.c – программа, создающая процесс-потомок.
Листинг программы father.c:
#include <sys/types.h>
#include <stdlib.h>
#include <process.h>
main()
{
int status;
printf("\nfather: PID=%i\tPPID=%i\n", getpid(), getppid());
if(fork()==0) execl("./son","son", NULL);
system("ps -f");
wait(&status);
}
son.c – программа, являющаяся процессом-потомком.
Листинг программы father.c:
#include <process.h>
#include <stdlib.h>
#include <sys/types.h>
main()
{
printf("\nson: PID=%i\tPPID=%i\n",getpid(), getppid());
sleep(15);
}
Пример работы программ:
# make father
cc father.c -o father
# make son
cc son.c -o son
# ./father
father: PID=3465252 PPID=561180
son: PID=3469349 PPID=3465252
UID PID PPID C STIME TTY TIME CMD
0 335894 2 - Nov23 ? 00:00:00 login
0 561175 479263 - Nov23 ? 00:00:26 pterm
0 434203 1 - Nov23 ? 00:00:09 pwm
0 561180 561175 - Nov23 ? 00:00:00 /bin/sh
0 479263 1 - Nov23 ? 00:00:34 shelf
0 479263 1 - Nov23 ? 00:00:34 shelf
0 516128 1 - Nov23 ? 00:00:01 bkgdmgr
0 516129 1 - Nov23 ? 00:00:02 wmswitch
0 516130 1 - Nov23 ? 00:00:11 saver
0 561187 561180 - Nov23 ? 00:00:07 pfm
0 3465252 561180 - 05:26 ? 00:00:00 ./father
0 3469349 3465252 - 05:26 ? 00:00:00 son
0 3117094 479263 - Nov23 ? 00:00:03 helpviewer
0 3117095 3117094 - Nov23 ? 00:00:02 vserver.file
0 3473448 3469353 - 05:26 ? 00:00:00 ps -f
0 3469353 3465252 - 05:26 ? 00:00:00 sh -c sh
# ./father&
[2] 3498021
#
father: PID=3498021 PPID=561180
son: PID=3502120 PPID=3498021
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.