процесу. Весь цей час на іншому кінці лінії зв'язку периферійний процес чекає відповіді. У нього в розпорядженні немає ніяких структур, які зберігали б інформацію про файл, який відкривається; дескриптор, що повертається функцією open, являє собою покажчик на запис у таблиці користувальницьких дескрипторів файлу, що належить процесу-супутникові. Результати виконання
функції показані на малюнку 13.4.
Якщо виробляється звертання до системної функції write, периферійний процесор формує повідомлення, що складається з ознаки функції write, дескриптора файлу й обсягу записуваних даних. Потім із простору периферійного процеса він по лінії зв'язку копіює дані процесу-супутникові. Процес-супутник розшифровує отримане повідомлення, читає дані з лінії зв'язку й записує їх у відповідний файл (в якості вказівника на індекс якого і запис про який в таблиці файлів використовується вміщений в повідомленні дескриптор); всі зазначені дії виконуються на центральному процесорі. По
Центральний процесор Периферійний процесор
+--------------------------------------+ +---------------------+
| таблиця | | |
| користувацьких | | |
| дескрип- | | |
| таблиця таблиця торів | | |
| индексів файлів файла +--------+| | +---------+ |
| +-----+ +-----+ +-----+ |Процес- |----------| Процес | |
| | | | | | | |супутник|| | +---------+ |
| +-----+ +-----+ +-----+ +-+------+| | |
| | -+-+ | | ++- -+---+ | | |
| +-----+ | +-----+ |+-----+ дескрип- | | |
| | | +-+- -+-+| | тор файла | | |
| +-----+ +-----+ +-----+ | | |
| | | | | | | |
| +-----+ +-----+ | | |
| | | | | | | |
| +-----+ +-----+ | | |
+--------------------------------------+ +---------------------+
Малюнок 13.4. Виклик функції open з периферійного процесу
закінченні роботи процес-супутник передає периферійному процесу посилку, що підтверджує прийом повідомлення й утримує кількість байт даних, успішно переписаних у файл. Операція read виконується аналогічно; супутника інформує периферійний процес про кількість реально прочитаних байт (у випадку читання даних з термінала або з каналу ця кількість не завжди збігається з кількістю, зазначеною в запиті). Для виконання як тієї, так й іншої функції може знадобитися багаторазове пересилання інформаційних повідомлень по мережі, що визначається обсягом даних, що пересилаються, і розмірами мережних пакетів.
Єдиною функцією, що вимагає внесення змін при роботі на центральнім процесорі, є системна функція fork. Коли процес виконує цю функцію на ЦП, ядро вибирає для нього периферійний процесор і посилає
повідомлення спеціальному процесу -серверу, інформуючи останній про те, що збирається приступити до вивантаження поточного процесу. Припускаючи, що сервер прийняв запит, ядро за допомогою функції fork створює новий периферійний процес, виділяючи запис у таблиці процесів й адресний простір. Центральний процесор вивантажує копію процесу, що викликав функцію fork, на периферійний процесор, затираючи тільки що виділений адресний простір, породжує локальний супутник для зв'язку з новим периферійним процесом і посилає на периферію повідомлення про необхідність ініціалізації лічильника команд для нового процесу. Процес-супутник (на ЦП) є нащадком процесу, викликаного функцію fork; периферійний процес із технічної точки зору виступає нащадком процесу-сервера, але по логіці він є нащадком процесу, що викликає функцію fork. Процес-сервер не має логічного зв'язку з нащадком по завершенні функції fork; єдине завдання сервера полягає в наданні допомоги при вивантаженні нащадка. Через сильний зв'язок між компонентами системи (периферійні процесори не мають у своєму розпорядженні автономію) периферійний процес й процес-супутник мають той самий код ідентифікації. Взаємозв'язок між процесами показаний на малюнку 13.5: безперервною лінією показаний зв'язок типу "родич-нащадок", пунктиром - зв'язок між рівноправними партнерами.
Коли процес виконує функцію fork на периферійному процесорі, він посилає повідомлення своєму супутникові на ЦП, що і виконує після цього всю вищеописану послідовність дій. Супутник вибирає новий периферійний
Центральний процесор Периферійний процесор
+----------------------+ +----------------------+
| +------------------+ | | +------------------+ |
| | Процес-породжувач|-------------| Процес-сервер | |
| +---------+--------+ | | +------------------+ |
| | | | |
| | | | |
| +---------+--------+ | | +------------------+ |
| | Породжений супут-|-------------| Породжений про- | |
| | ник | | | | цес | |
| +------------------+ | | +------------------+ |
+----------------------+ +----------------------+
Малюнок 13.5. Виконання функції fork на центральному процесорі
процесор і робить необхідні приготування до вивантаження образа старого процесу: посилає периферійному процесу-родичеві запит на читання його образу, у відповідь на який на іншому кінці каналу зв'язку починається передача запитуваних даних. Супутник зчитує переданий образ і переписує
його периферійному нащадкові. Коли вивантаження образа закінчується, процес-супутник виконує функцію fork, створюючи свого нащадка на ЦП, і передає значення лічильника команд периферійному нащадкові, щоб останній знав, з якої адреси починати виконання. Очевидно, було б краще, якби нащадок процесу-супутника призначався периферійному нащадкові як родич, однак в нашому випадку породжені процеси одержують можливість виконуватися й на інших периферійних процесорах, а не тільки на тім, на якому вони створені. Взаємозв'язок між процесами по завершенні функції fork показана на малюнку 13.6. Коли периферійний процес завершує свою роботу, він посилає відповідне повідомлення процесу-супутникові й той теж завершується. Від процеса-супутника ініціатива завершення роботи виходити не може.
Центральний процесор
+-------------------------------------------------------+
| +-------------------+ +-----------------+ |
|