Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shporka.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
623.62 Кб
Скачать

Ожидание завершения выполнения процесса

С помощью ф-ции Wait() процесс продолжает выполнение (ожидает завершения процесса потомка).

Алгоритм функции wait():

  1. Ядро ведет поиск потомков процессов и если их нету возвращает ошибку (-1), нечего не происходит.

  2. В случаи обнаружения завершения потомка, ядро передает его код идентификатору и значение возвращается функцией exit процессу вызванным функцию wait.

Однако возможны ситуации, когда процесс не исчезает и в этом случае.

Это может произойти для следующих процессов:

  1. Процессы зомби. Фактически процесса как такового не существует, осталась лишь запись в системной таблице процессов, поэтому удалить его можно только перезапуском операционной системы. Зомби в небольших количествах не представляют опасности, однако если их много, это может привести к переполнению таблицы процессов.

  2. Процессы, ожидающие недоступные ресурсы NFS (Network File

System), например, записывающие данные в файл файловой системы

удаленного компьютера, отключившегося от сети. Эту ситуацию

можно преодолеть, послав процессу сигнал SIGINT или

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

30. Семафоры в unix

Семафор – это ср-во синхр. Выполнения множества процессов. Семафоры объединены в группы, одну или более. Использование семафоров вместе с разделяемой памятью определяет мощное средство взаимодействия между процессами. В зависимости от своих прав процесс может либо только запрашивать значение семафора, либо также и изменять его.

Правила работы с семафорами:

Если процесс попытается уменьшить значение семафора до отрицательного значения, то эта операция и сам процесс будут приостановлены или заблокированны до тех пор, пока другой процесс не увеличит это значение до величины, достаточной для выполнения операции заблокированным процессом.

Если значение семафора положительное целое число, то процесс, который запрашивает нулевое значение семафора, блокируется, пока кто-то не обнулит значение семафора.

Процессы могут выполнить операцию не только над одним семафором, но и над группой семафоров. Если какая-то операция не может быть выполнена над одним семафором из группы, тоона считается неудачной и для других семафоров, и значения семафоров остаются прежними.

Набор семафоров однозначно определяется положительным числом, называемым (идентификатором набора семафоров semid). У каждого набора семафоров имеется структура данных struct semid_ds, определенная в <sys/sem.h>и состоящая из следующих полей:

struct ipc_perm sem_perm;

{ time_t sem_otime;/* время последней операции */

time_t sem_ctime;/* время последнего изменения */

ushort sem_nsems;/* количество семафоров в наборе */

} sem_perm;

SEMCTL - производит операции управления семафорами. Функция semctl позволяет выполнять операции, определенные в cmd над набором семафоров, указанным в semid или над семафором с номером semnum из этого набора.

SEMGET - считывает идентификатор набора семафоров. Системный вызов возвращает идентификатор набора семафоров, связанный с аргументом key. Создается новый набор из семафоров nsems , если значение key равно IPC_PRIVATE или c ключом key не связано ни одного существующего набора семафора, а выражение semflg & IPC_CREAT истинно.

SEMOP - операции над семафорами. Функция производит операции над выбранными элементами из набора семафоров semid. Каждый из элементов nsops в массиве sops определяет операцию, производимую над семафором в структуре struct sembuf.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]