Управление процессами и нитями в ОС QNX. Основные принципы управления процессами и нитями в ОС QNX

Страницы работы

Содержание работы

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра автоматики и вычислительной техники

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 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

Похожие материалы

Информация о работе