русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Створення процесу | Породження процесу в Linux

Процеси - загальні відомості

Процес Unix/Linux являє собою одиницю роботи обчислювальної системи, якої операційна система виділяє ресурси. З деякою мірою наближення можна визначити процес як виконувану програму. Кожен процес в системі має свій унікальний ідентифікатор процесу (PID), що цілим числом.

Кожному процесу в операційній системі відповідає запис у таблиці процесів і адресний простір процесу. Запис у таблиці процесів (і її розширення в адресному просторі процесу) містить керуючу інформацію про ресурсах, виділених процесу, і про стан процесу. Адресний простір містить коди і дані процесу.

Процес може породжувати інший процес. Породження нового процесу в Linux (Unix) реалізовано копіюванням запису таблиці процесів, таким чином, що процес-нащадок в момент свого породження являє собою точну копію процесу-предка. Це називається створення процесу. Процес-попередник та процес-нащадок далі виконуються паралельно, але процес-попередник може очікувати завершення процесу-нащадка.

Процеси в Unix/Linux виконуються в режимі поділу часу, це означає, що час центрального процесора рівномірно (з урахуванням пріоритетів) розподіляється між усіма готовими до виконання процесами. Навіть якщо процес не переходить у стан очікування (наприклад, очікування виконання операції введення-виведення) за своєю ініціативою, після виділеного процесу кванта часу виконання процесу буде перервано операційною системою, і процесор буде віддано більше пріоритетного процесу. Unix/Linux застосовує динамічне перевычисление пріоритетів, пріоритет виконується процесу знижується, а пріоритети чекаючих процесів підвищуються.

 

 

Породження процесів в Linux

Новий процес породжується системним викликом fork, який створює дочірній процес - копію батьківського. У нащадку виконується та ж програма, що і в батьківському, і коли дочірній процес починає виконуватися, він виконується з точки повернення з системного виклику fork. Системний виклик fork возвращает батьківського процесу PID дочірнього процесу, а дочірнього процесу - 0. За кодом повернення виклику fork дочірній процес може "усвідомити себе як дочірній. Свій PID процес може отримати при допомогою системного виклику getpid, а PID батьківського процесу - за допомогою системного виклику getppid. Якщо потрібно, щоб у нащадку виконувалася програма, відмінна від програми батьківського процесу, процес може змінити виконувану в ньому програму за допомогою одного з системних викликів сімейства exec. Всі виклики цього сімейства download для виконання в процесі програму з заданого в виклик файлу і відрізняються один від одного способом передачі параметрів цієї програмі. Таким чином, найбільш поширений контекст застосування системного виклику fork виглядає приблизно так:


 /* породження дочірнього процесу і запам'ятовування його PID */
 if (!(ch_pid=fork()) 
 /* завантаження іншої програми в нащадку */
 exec(програма);
 else
 продовження батьківського процесу

Переглядів: 10968

Повернутися в зміст:ОС Linux




Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн