Відмінності між версіями «Процеси та їх стани»
3341810 (обговорення • внесок) |
3341810 (обговорення • внесок) |
||
(не показані 4 проміжні версії цього учасника) | |||
Рядок 56: | Рядок 56: | ||
Тепер перейдемо до практики. Нам потрібно знайти 5 станів в системі Linux. Ну що ж, почнемо.<br \> | Тепер перейдемо до практики. Нам потрібно знайти 5 станів в системі Linux. Ну що ж, почнемо.<br \> | ||
− | Найлегше в системі знайти 2 стани: '''виконання (R) і чекання, що переривається (S)'''. | + | Найлегше в системі знайти 2 стани: '''виконання (R) і чекання, що переривається (S)'''. Запускаємо термінал і пишемо команду '''ps -ax''' (виведення таблиці процесів).<br \> |
+ | В третій колонці ми бачимо потрібні нам стани.<br \> | ||
+ | [[Файл:Процес R and S.png]]<br \> | ||
+ | |||
+ | |||
+ | Щоб знайти ще 3 стан, доведеться попрацювати. Призупинений процес - T отримати найлегше. Для цього відкриваємо Системный монитор(натискаємо на значок Ubuntu і вводимо "Системный монитор") переходимо на вкладку Процесы - ПКМ на якомусь процесі і вибираємо пункт Остановить(для того, щоб бачити в якому стані знаходиться процес, натискаємо зверху Правка->Параметры->ставимо галочку на Состояние). Виконуємо '''ps -ax''' і бачимо серед процесів новий T - призупинений. <br \> | ||
+ | [[Файл:Стан Т.png]]<br \> | ||
+ | |||
+ | |||
+ | Процес D - чекання, що не переривається отримати можна забивши оперативну пам’ять(Наприклад відкрити ресурсоємкі програми на зразок браузера, або відкрити флешку і почати з неї щось копіювати). <br \> | ||
+ | [[Файл:Стан Д.png]]<br \> | ||
+ | |||
+ | |||
+ | Ну і найцікавіший процес Z - Зомбі отримати найважче напевне. Можна, звичайно, поставити собі компілятор на Сі, і скомпілювати дану програмку | ||
+ | |||
+ | #include <stdlib.h> | ||
+ | #include <sys/types.h> | ||
+ | #include <unistd.h> | ||
+ | int main () | ||
+ | { | ||
+ | pid_t child_pid; | ||
+ | child_pid = fork (); | ||
+ | if (child_pid > 0) { | ||
+ | sleep (60); | ||
+ | } | ||
+ | else { | ||
+ | exit (0); | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | А можна просто поназапускати багато програм, потім позакривати їх, перевірити в таблиці, чи не з’явився потрібний стан. Якщо не з’явився, то повторити дію ще раз. Думаю, максимум, 3 рази і стан повинен з’явитися. |
Поточна версія на 20:56, 2 листопада 2015
Спочатку трохи теорії...
Єдиного визначення процесу не існує. Можна навести декілька визначень, і вони всі будуть вірними.
Зміст
Процес
- це програма в стадії виконання;
- це жива душа процедури;
- це об'єкт, якому виділені процесори;
- це модуль, який диспетчеризується.
Модель трьох (п'яти) станів процесів
Народження - це стан (напівстан), процес проходить через даний стан, але знаходитися в ньому не може.
Готовність - це пасивний стан, процес знаходиться в списку готових до виконання процесів, фізично він знаходиться в оперативній пам'яті.
Виконання - це єдиний активний стан, саме в цьому стані процес займає або використовує процесор, знаходиться в RAW, але прийнято казати, що в цьому стані процес знаходиться в процесорі.
Чекання - це пасивний стан, процес чекає настання якоїсь події, даних, звільнення ресурсу.
Завершення - стан (напівстан) подібний до народження, процес проходить через цей стан, коли закінчується, але знаходитися в цьому стані довго не може.
Робота даної діаграми
Народжується процес. Потрапляє в стан готовність і в стані готовності знаходиться в черзі готових до виконання процесів доки не дійде до нього черга (як в столовкі в черзі). Потрапляє процес в стан виконання. Тут 3 варіанти:
- процес виконався повністю, тоді він завершився;
- якщо процесу чогось не вистачає, процес переводиться в стан чекання;
- можливий тільки на системах з витісняючою багатозадачністю, коли в списку готових до виконання процесів з'являється процес з вищим пріоритетом.
Перейшовши в стан чекання процес чекає настання необхідної події. Як тільки процес дочекався, він переводиться в стан готовність.
Операції над процесами
- Допуск до планування (створення процесу)
- Відправлення на виконання
- Переривання процесу
- Завершення процесу
- Переведення в стан чекання
- Переведення до стану готовність (відновлення процесу)
Процеси в Linux
Чекання, що переривається (S) - це стан блокування, при якому процес чекає події(вводу, виводу, гигналу від іншого процесу)
Чекання, що непериривається (D) - процес беспосередньо чекає виконання якоїсь апаратної умови і тому не сприймає ніякі інші сигнали.
Призупинення (T) - процес був зупинений і може бути продовжений тільки при дії іншого процесу.
Зомбі (Z) - процес було припинено, але за деяких обставин його структура залишилася в таблиці процесів.
Визначення станів Готовність та Виконання (R) такі ж, як і в попередній моделі!
Створення процесу в Linux
Використовуємо системну функцію fork(0).
- В таблиці процесів виділяється місце для нового процесу
- Цьому процесу назначається унікальний ідентифікатор
- Створюється копія образа батьківського процесу
- Збільшується значення лічильників всіх файлів, що належать батьківському процесу, тобто новий процес токаж є власником цих файлів
- Повернення батьківському процесу ідентифікатора молодшого процесу, а молодшому значення 0, fork(0).
Пошук процесів в системі
Тепер перейдемо до практики. Нам потрібно знайти 5 станів в системі Linux. Ну що ж, почнемо.
Найлегше в системі знайти 2 стани: виконання (R) і чекання, що переривається (S). Запускаємо термінал і пишемо команду ps -ax (виведення таблиці процесів).
В третій колонці ми бачимо потрібні нам стани.
Щоб знайти ще 3 стан, доведеться попрацювати. Призупинений процес - T отримати найлегше. Для цього відкриваємо Системный монитор(натискаємо на значок Ubuntu і вводимо "Системный монитор") переходимо на вкладку Процесы - ПКМ на якомусь процесі і вибираємо пункт Остановить(для того, щоб бачити в якому стані знаходиться процес, натискаємо зверху Правка->Параметры->ставимо галочку на Состояние). Виконуємо ps -ax і бачимо серед процесів новий T - призупинений.
Процес D - чекання, що не переривається отримати можна забивши оперативну пам’ять(Наприклад відкрити ресурсоємкі програми на зразок браузера, або відкрити флешку і почати з неї щось копіювати).
Ну і найцікавіший процес Z - Зомбі отримати найважче напевне. Можна, звичайно, поставити собі компілятор на Сі, і скомпілювати дану програмку
#include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main () { pid_t child_pid; child_pid = fork (); if (child_pid > 0) { sleep (60); } else { exit (0); } return 0; }
А можна просто поназапускати багато програм, потім позакривати їх, перевірити в таблиці, чи не з’явився потрібний стан. Якщо не з’явився, то повторити дію ще раз. Думаю, максимум, 3 рази і стан повинен з’явитися.