Процеси в ОС UNIX

Матеріал з Вікіпедії — вільної енциклопедії.

Процес в ОС UNІX - це програма, виконувана у власному віртуальному адресному просторі. Коли користувач входить у систему, автоматично створюється процес, у якому виконується програма командного інтерпретатора. Якщо командному інтерпретаторові зустрічається команда, що відповідає виконуваному файлу, то він створює новий процес і запускає в ньому відповідну програму, починаючи з функції maіn. Ця запущена програма, у свою чергу, може створити процес і запустити в ньому іншу програму (вона теж повинна містити функцію maіn) і т.д.

Для утворення нового процесу й запуску в ньому програми використаються два системних виклики (примітива ядра ОС UNІ) - fork() і exec (ім'я-виконуван-файлу). Системний виклик fork приводить до створення нового адресного простору, стан якого абсолютно ідентично стану адресного простору основного процесу (тобто в ньому втримуються ті ж програми й дані).

Інакше кажучи, відразу після виконання системного виклику fork основний і породжений процеси є абсолютними близнюками; керування й у тім, і в іншому перебуває в крапці, що безпосередньо випливає за викликом fork. Щоб програма могла розібратися, у якому процесі вона тепер працює - в основна або породженому, функція fork повертає різні значення: 0 у породженому процесі й ціле позитивне число (ідентифікатор породженого процесу) в основному процесі.

Тепер, якщо ми хочемо запустити нову програму в породженому процесі, потрібно звернутися до системного виклику exec, указавши як аргументи виклику ім'я файлу, що містить нову виконувану програму, і, можливо, одну або кілька текстових рядків, які будуть передані як аргументи функції maіn нової програми. Виконання системного виклику exec приводить до того, що в адресний простір породженого процесу завантажується нова виконувана програма й із із адреси, що відповідає входу у функцію maіn.

У наступному прикладі користувальницька програма, викликувана як команда shell, виконує в окремому процесі стандартну команду shell ls, що видає на екран уміст поточного каталогу файлів:


main()

{if(fork()==0) wait(0); /* батьківський процес */

else execl("ls", "ls", 0); /* породжений процесс */

}


Комп'ютер Це незавершена стаття про комп'ютери.
Ви можете допомогти проекту, виправивши або дописавши її.


Цю статтю необхідно відформатувати, використовуючи мову розмітки Вікі.
Ви можете допомогти проекту, зробивши це!