Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR_СП_лекции_укр.doc
Скачиваний:
6
Добавлен:
22.04.2019
Размер:
697.34 Кб
Скачать

3.3 Завершення процесу

Завершення процесу є більше простим завданням, чим його запуск. Головним при цьому є від'єднання свопингового зображення процесу, що ускладнюється, коли текст або його частина є поділюваними й тому не можуть бути фізично отсоединены.

Можливий випадок, коли з ряду причин вхід у таблицю процесів для даного процесу може залишитися в пам'яті після від'єднання свопингового зображення. Це відбувається в тому випадку, коли процес-батько має потребу в інформації про процес-ребенке після його завершення.

Є дві можливості знищити процес. Перша полягає в тому, щоб послати до процесу сигнал про неявний (якому мається на увазі) дії, що й буде сигналом про смерть процесу. Друга полягає в тому, щоб використовувати системний виклик exit().

Якщо було викликане знищення процесу, то він сам переводить себе в те, що називається ZOMBIE PROCESS (знищуваний або пам'яті, що позбавляється, процес). Цей стан описує процес як "мертвий", тобто він позбавлений свопингового зображення, але ще існує в таблиці процесів. Такий стан необхідно тільки для того, щоб процес-батько або пов'язані з ним взаємодіючі процеси виводити зі стану wait(). Зомбі-Процес запустити знову не вдасться, тому що для нього вже не існує свопингового зображення.

Коли процес-дитина умирає, процес-батько сповіщається про це сигналом SIGCLD, після одержання якого він може зняти вхід процесу-дитини в таблиці процесів. Якщо процес-батько вмирає першим, процес-дитина йому успадковує через процес 1. Процес 1 є спадкоємцем процесу 0 і батьком всіх процесів, крім нульового. Якщо з якої-небудь причини процес-батько не знищив вхід померлого процесу-дитини, то це зробить процес 1.

Т.о. повторимо завдання, які виконує системний виклик exit():

  • придушує дії свех сигналів, які були заявлені для процесу, що завершується:

  • закриває файли, раніше відкриті процесом, що завершується;

  • від'єднує свопинговое зображення процесу, що від'єднується;

  • установлює статус процесу, що завершується, як p_stat = SZOMB;

  • повідомляє процес-батько про смерть процесу-дитині посилкою до нього сигналу SIGCLD;

  • указує процесу-ребенку, що він не є підлеглим процесу-батькові, установивши для процесу-батька ppid = 1;

  • якщо з'явився зомбі-дитина, то про це повідомляється процес 1;

  • передає ключ до нового процесу.

3.4 Взаємодія процесів в ос unix

Дуже важливим фактором ОС UNIX є те, що процеси, що йдуть під його керуванням, повністю незалежні при виконанні й мають строго свої зони даних. Це спрощує керування виконанням кожного окремого процесу, але створює складності при передачі інформації між процесами, необхідність у якій періодично з'являється в процесі роботи. Такого роду передачі забезпечуються системними функціями UNIX, призначеними для комунікацій між процесами, що забезпечують:

  1. обмін інформацією,

  2. синхронізацію, що контролює розвиток пройесса в часі і його взаємозв'язок з іншими процесами, які можуть проходити одночасно з ним.

Є шість різних механізмів, що забезпечують межпроцессные комунікації:

  1. messages - пакети даних, посыдаемых від одного процесу іншому;

  2. shared memory - зони даних, використовувані більш ніж одним процесом;

  3. pipes - спеціальний тип файлів даних, що використовує механізм доступу FIFO;

  4. process tracing - трасування - обмін інформацією з контролем, виконуваний між процесом-батьком і процессом-ребенком (насамперед використовується отладчиком);

  5. synchronization signals - системні прапори, що відзначають появу певних подій;

  6. Death of Child - спеціальний сигнал, що повідомляє процесу-батькові, що процес-дитина закінчився.

Їм відповідають системні виклики, що дозволяють инициализировать відповідні дії із програми:

Таблиця 4

Системні викликі межпроцесних комунікацій

signal

signal()

kill()

pause()

визначає, що треба робити, якщо сигнал

отриманий.

посилає сигнал до процесу або групи

процесів.

припиняє прцессы до одержання

сигналу.

pipes

pipe()

mknode()

створює канал зв'язку між процесами.

створює файл із доступом FIFO.

Wait for Child

wait()

exit()

ожидаетостановки або завершення процесу-

дитини.

заершает процес.

process tracing

ptrace()

msgget()

msgsnd()

msgrcv()

msgctl()

трасування процесу.

одержання повідомлення із черги.

посилка повідомлення в чергу.

читання повідомлення із черги.

виконання операції по контролі за сооб-

щением.

semaphores

semget()

semop()

semctl()

одержати установку семафорів.

виконати операції над семафорами.

виконати операції по контролі за сема-

фором.

shared memory

shmget()

shmat()

shmdt()

shmctl()

одержати сегмент поділюваної пам'яті.

приєднати зазначений сегмент поділюваної

пам'яті.

отсоединить зазначений сегмент поділюваної

пам'яті.

виконати операції по контролі разделяе-

мий пам'яті.

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