Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Иерархия процессов в ОС UNIX. Понятие сеанса. Фоновые процессы.




 

В качестве узлов в иерарх деревьях выступают сами процессы. А связями будут служить отнош родитель-потомок.

Принято разделять на группы процессов или семьи:

 

Группы вкл 1 или больше процессов и сущ пока сущ хотя бы один процесс в ней.

Каждый процесс включается в какую либо группу. При порожд нового процесса он попадает в ту же где и родитель. Процессы могут мигрир из группы в группу. ( по своему жел или по жел других проц) Группы объед в сеансы, образуя кланы семей. С кажд сеансом связан терминал, через него проц общаются с пользователем, у сеанса не мб >1 терминала. Установка идентиф сеанса:

Int setsid(void);

Примен процессом, кот не явл лидером.

Приводит к созданию новой группы, кот будет сост из проц вызвавшего set и он будет лидером. И образуется новый сеанс, идент кот совп с id процесса.

При попытке вв/вывода фонового процесса через упр терминал этот процесс получ сигнал, кот привед к прекр раб процесса. Передавать упр терминал может только лидер сеанса. При заверш работы лидера все процессы получают SIGNUP, они завершаются и дальше будут работать только фоновые процессы.

Эффективный идентиф пользователя: EUID – пользователь от имени которого процесс пользуется полномочиями.

31.Каналы – средства взаимодействия процессов. Неименованные каналы. Организация конвейера (пример программы).

Канал – объект ядра, предст собой ср-во однонапр передачи данных. Канал имеет 2 конца – один для записи, другой для чтения. С кажд концом связан файловый дескриптор. Неименованный канал:

Int pipe(int fd[2]);

Единственный способ подкл к одному из концов – создать копию процесса. Исп неим канал могут только родств проги.

Далее родительский процесс закрывает свой экземпляр дескриптора, в перв доч процессе закрывают для чтен, во втором для записи.

В системе присутств откр деск обоих концов канала: при попытке чтения из канала в кот никто не писал читающий проц будет заблок пока туда кто нить не запишет. Либо все деск на запись окажутся закрытыми. Если канал дост только для чтения: тогда read вернет управление немедленно.

Попытка записи в канал, из которого никто не читает: пока не заполнится внутр буфер (4кб), после очередного write Заблок процесс пока кто нибудь не прочитает оттуда.

Если Все дескр связ с одним из концов канала окажутся закрытыми, то его никогда не удастся использ.

Чтение сначала прочитает внутренний буфер канала, а затем возвратит 0 (конец файла). (Если закр все дескрипторы на запись)

Если закрыты все дескрипторы на чтение, то первая запись в канал приведет к тому, что процесс получит SIGPIPE(заверш процесса).

Конвеер с помощью pipe:

>ls–lR/grep ‘^d’

 

Int main();

Int fd[2];

Pipe(fd);

 

If (fork()==0) {close(fd[0]);

Dup2(fd[1],1); close(fd[1]);

Execlp(“ls”,”ls”,-lR”,NULL);

Perror(“ошибка”); exit(1);

 

If (fork()==0) {close(fd[10]);

Dup2(fd[0],0); close(fd[0]);

Execlp(“grep”,”grep”,”^d”,NULL);

Perror(“ошибка”); exit(2);

 

Close(fd[0]),close(fd[1]);wait(NULL);wait(NULL);return(0)


Поделиться:

Дата добавления: 2015-01-14; просмотров: 92; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты