їх число логічно не обмежується, і безліч частин програми
(такий як copy) може одночасно перебувати в системі. Різноманітні системні операції дозволяють процесам породжувати нові процеси, завершують процеси, синхронізують виконання етапів процесу і управляють реакцією на наступлю-ня різних подій. Завдяки різним зверненнями до операційної
системі, процеси виконуються незалежно один від одного.
Наприклад, процес, що виконується в програмі, наведеної на рисунку
1.4, запускає операцію fork, щоб породити новий процес. Новий процес,
іменований породженим процесом, отримує значення коду завершення операції
fork, рівне 0, і активізує операцію execl, яка виконує програму
copy (Малюнок 1.3). Операція execl завантажує файл "Copy", який предполо-жітельно знаходиться в поточному каталозі, в адресний простір породженого
процесу і запускає програму з параметрами, отриманими від користувача. В
разі успішного виконання операції execl управління в викликав її процес
; не повертається, оскільки процес виконується в новому адресному просторі. Тим часом, процес, що запустив операцію fork (Батьківський процес), отримує нульове значення коду завершення операції, викликає операцію wait, яка призупиняє його виконання до тих пір, поки не закінчиться виконання програми copy, і завершується (кожна програма має вихід в кінці головної процедури, після якої розташовуються програми стандартних бібліотек Сі, що підключаються в процесі компіляції). Наприклад, якщо виконується програма називається run, користувач запускає її наступним чином:
main (argc, argv)
int argc;
char * argv [];
{
/* передбачено 2 аргументи: вихідний файл і новий файл */
if (fork () == 0)
execl ("copy", "copy", argv [1], argv [2], 0); p> wait ((int *) 0)
printf ("copy donen ");
}
Малюнок 1.4. Програма породження нового процесу, виконує копіювання файлів
run oldfile newfile
Процес виконує копіювання файлу з ім'ям "Oldfile" у файл з ім'ям
"newfile" і виводить повідомлення. Хоча дана програма мало що додала до
програмі "copy", у ній з'явилися чотири основних звернення до операційної
системі, керують виконанням процесів: fork, exec, wait і exit.
Взагалі використання звернень до операційної системи дає можливість
користувачеві створювати програми, виконують складні дії, і як наслідок, ядро ​​операційної системи UNIX не включає в себе багато функцій, які є частиною "ядра" в інших системах. Такі функції, і серед них компілятори та редактори, в системі UNIX є програмами користувацького
рівня. Найбільш характерним прикладом подібної програми може служити командний процесор shell, з яким зазвичай взаємодіють користувачі після
входу в систему. Shell інтерпретує перше слово командного рядка як ім'я
команди: у багатьох командах,...