Процеси
Процеси Linux
Linux може керувати процесами в системі, кожен процес представлений task_struct Структура даних (завдання і сам процес терміни, які використовуються як взаємозамінні Linux). Завдання вектор масив покажчиків на кожен task_struct Структура даних в системі. Це означає, що максимальна кількість процесів у системі обмежена розміром завдання вектора, за замовчуванням він має 512 записів. Як процеси створюються, нові task_struct виділяється з системної пам'яті і додається в завдання вектор. Щоб зробити його легко знайти, струм, працює, процес, на який вказує поточний покажчик. Як і нормальний тип процесу, Linux підтримує реальні процеси часу. Ці процеси повинні реагувати дуже швидко на зовнішні події (звідси і термін `` реальним часом'') і з ними поводяться інакше, ніж нормальні процеси користувача, планувальник. Хоча task_struct Структура даних досить велика і складна, але її полів можна розділити на декілька функціональних зон:
Стани Linux процеси мають наступні стани: Працюючий Процес або працює (це поточний процес у системі) або воно готове до запуску (вона чекає, щоб бути віднесені до однієї з процесорів системи). Очікування Процес очікує події або для ресурсу. Linux розрізняє два типи очікування процесу; переривання і безперебійне. Переривається очікування процесів може бути перервана в той час як сигнали безперебійного очікування процеси чекають безпосередньо на апаратній умовах і не може бути перерваний за яких обставин. Зупинений Процес був зупинений, як правило, надходить сигнал. Процес, який регламентуватиме може перебувати в зупиненому стані. Зомбі Це зупинив процес, який, з деяких причин, до цих пір task_struct Структура даних в задачі вектор. Це те, що це звучить як, мертві процесу. Планування інформації Планувальник потрібна ця інформація для того, щоб чесно вирішити, який процес в системі всього заслуговує, щоб бігти. Ідентифікатори Кожен процес у системі має ідентифікатор процесу. Ідентифікатор процесу не індексу в задачі вектор, то це просто число. Кожен процес також має користувачів і груп ідентифікатори, вони використовуються для управління цим процесам доступ до файлів та пристроїв в системі. Inter-Process Communication Linux підтримує класичні механізми IPC Unix сигналів, труб і семафори, а також System V IPC механізми пам'яті, що розділяється, семафорів і черги повідомлень. Зв'язки У Linux-системі жоден процес не залежить від будь-якої інший процес. Кожен процес в системі, за винятком початкового процес батьківського процесу. Нові процеси не створюються, вони копіюються або, вірніше, клонованих від попередніх процесів. Кожен task_struct представляють процес зберігає покажчики на його батьківський процес і його братів і сестер (ті процеси, з тим же батьківського процесу), а також його власні процеси дитини. Ви можете побачити сімейні відносини між запущеними процесами в Linux системи з допомогою pstree команду: ініціалізації (1) - +-crond (98)
|-Emacs (387) |-Гал (146) |-Inetd (110) |-Kerneld (18) |-Kflushd (2) |-Klogd (87) |-Kswapd (3) |-Логін (160) --- Баш (192) --- Emacs (225) |-LPD (121) |-Mingetty (161) |-Mingetty (162) |-Mingetty (163) |-Mingetty (164) |-Логін (403) --- Баш (404) --- pstree (594) |-Sendmail (134) |-Syslogd (78) `-Оновлення (166)
Крім того, всі процеси в системі проводяться в двічі зв'язаний список коренем якого є ініціалізації процесів task_struct структури даних. Цей список дозволяє Linux-ядра, щоб дивитися на кожен процес в системі. Він повинен зробити це, щоб забезпечити підтримку таких команд, як пс або вбити . Час та лічильники Ядро відстежує час створення процесів, а також процесорного часу, що він споживає за час свого життя. Кожен такт, поновлення ядра кількість часу в джіффісах , Що нинішній процес провів в системі і в режимі користувача. Linux також підтримує процес конкретних таймера інтервал, процеси можуть використовувати системні виклики, налаштувати таймер, щоб посилати сигнали до себе, коли таймер закінчується. Ці таймери можуть бути одноразових або періодичних таймерів. Файлова система Процеси можуть відкривати і закривати файли, як вони хочуть і процесів task_struct містить покажчики на дескриптори для кожного відкритого файлу, а також покажчики на два VFS індексних дескрипторів. Перший полягає в корінь процесу (його домашній каталог), а другий перед своїми нинішніми або PWD каталог. PWD походить від Unix команду PWD , Друк робочий каталог. Ці два VFS Інода їх рахунок полів збільшується, щоб показати, що один або декілька процесів звернення до них. Ось чому ви не можете видалити каталог, процес має на PWD каталогу встановлений, або в цьому відношенні одним з його підкаталогів. Віртуальна пам'ять Більшість процесів є деякі віртуальної пам'яті (потоків ядра і демонів немає) і Linux ядра повинні відстежувати, як ця віртуальна пам'ять відображається на фізичну пам'ять системи. Процесор конкретному контексті Процес може розглядатися як сума поточного стану системи. Всякий раз, коли процес запущений він використовує регістрів процесора, стека і так далі. Це процеси контексту і, коли процес зупиняється, все, що процесор конкретних умовах повинен бути збережений в task_struct для процесу.