Реферат: Керування процесами і роботами в Linux
Процес породжується за допомогою системного виклику fork(). При цьому виклику відбувається перевірка на наявність вільної пам'яті, доступної для розміщення нового процесу. Якщо необхідна пам'ять доступна, то створюється процес-нащадок поточного процесу, що представляє собою точну копію процесу, що викликається При цьому в таблиці процесів для нового процесу будується відповідна структура. Нова структура створюється також у таблиці користувача. При цьому всі змінні ініціалізуються нулями. Цьому процесу присвоюється новий унікальний ідентифікатор, а ідентифікатор батьківського процесу запам'ятовується в блоці керування процесом.
Процеси, що виконують різні програми, утворюються завдяки застосуванню наявних у стандартній бібліотеці Linux функцій “сімейства ехес”: ехесl, ехесlр, ехесlе, ехесv, ехесvе, ехесvр. Ці функції відрізняються форматом виклику, але в остаточному підсумку виконують одну задачу: заміщають всередині поточного процесу код, що виконується, на код, що міститься в зазначеному файлі. Цей файл може бути не тільки двійковим файлом Linux, що виконується (аналог файла *. exe в системі Windows), але і сценарієм командного інтерпретатора, і двійковим файлом іншого формату (наприклад, класом java, що виконується файлом DOS).
Таким чином, якщо операція запуску програми у DOS і Windows виконується як єдине ціле, то у Linux (і в Unix взагалі) розділена на два етапи: спочатку здійснюється запуск, а потім визначається, яка програма буде працювати. Чи є в цьому сенс і чи не занадто великі додаткові витрати? Адже створення копії процесу передбачає копіювання дуже значного обсягу інформації.
Сенс у даному підході є суттєвий. Дуже часто програма повинна зробити деякі дії ще до того, як почнеться власне її виконання. Наприклад, створити непоіменований канал для спілкування з іншими процесами. Реалізується це дуже просто: спочатку “відмежовуються” процеси, потім виконується системний виклик рiре() для створення каналу - і тільки після цього запускається програма із функції еxес().
Стосовно додаткових витрат, то вони найчастіше виявляються надто малими: при створенні копії процесу його індивідуальні дані фізично нікуди не копіюються. Замість цього використовується техніка, відома за назвою сору-оn-write (копіювання при записі): сторінки даних обох процесів особливим чином позначаються, і тільки тоді, коли один процес намагається змінити вміст будь-якої своєї сторінки, він дублюється. Щоб створити новий активний процес рядовому користувачеві зовсім не обов’язково знати про всі ці системні виклики. Йому достатньо лише ініціювати виконання команди або програми, набравши в командному рядку відповідне ім’я файла, або натиснувши на відповідну піктограму на робочому столі. Приклад запуску годинника:
xclock
Для запуску процесу у фоновому режимі необхідно після імені команди чи імені файла ввести символ & і лише потім натиснути на клавішу <Enter>. Приклад запуску годинника в фоновому режимі:
xclock &
Щоб призупинити активний процес необхідно одночасно натиснути клавіші <Ctrl><Z>. Поки процес зупинено на нього не витрачається час процесора. Але ви завжди можете відновити процес, причому як на передньому плані, так і в фоні. Для поновлення процесу в активному режимі використовується команда fg (“foreground” - передній план), а в фоновому режимі – команда bg (“background” - задній план).
Ще одне зауваження. Команди fg і bg звичайно переводять на передній план чи у фоновий режим процеси, що були зупинені останніми (що визначається символом “+” після номера роботи при використанні команди jobs).
Якщо ви виконуєте багато процесів (робіт) одночасно, ви можете перевести на передній план чи, навпаки, у фоновий режим конкретну роботу із заданням її номера як аргумента команд fg або bg:
fg%2 (переведення на передній план роботи номер 2),
bg%3 (переведення у фон роботи номер 3).
Для цих команд не можна використовувати ідентифікатори процесів. Крім того, використання тільки номерів робіт, наприклад
%2
еквівалентно команді
fg%2
Тип процесу (роботи) можна легко визначити за допомогою команди jobs. Наприклад, якщо після виконання цієї команди ми отримали на екрані дисплея інформацію
[1] - Running xclock
[2] - Running xeyes &
[3] + Stopped xcalc
то це означає, що перший процес (робота) в даний момент є активним, другий процес (робота) – фоновим, а третій процес (робота) – відкладений.
Можна також отримати список процесів (робіт) лише одного типу, вказавши відповідну опцію в команді jobs:
jobs –r - видача лише активних процесів (робіт),
jobs –s - видача лише відкладених процесів (робіт).
Пам’ятайте, що керування роботами, це властивість оболонки операційної системи. Команди fg, bg і jobs - внутрішні команди оболонки bash. Якщо з якоїсь причини ви використовуєте текстову оболонку, що не підтримує керування роботами, там ви не знайдете цих команд. На додаток до цього, є деякі аспекти керування роботами, що розрізняються в оболонках bash і tcsh. Деякі оболонки не здатні керувати роботами, хоча більшість оболонок Linux мають таку можливість.
4. Пріоритети процесів
Зазвичай при запуску всі процеси користувачів мають однаковий пріоритет, рівний 10, що дає змогу операційній системі рівномірно розподіляти між ними процесорний час. Пріоритет можна змінити за допомогою команди
nice –число процес,
де число – величина, на яку зменшується початкове значення пріоритету для процесу.