
Лекція_3
Декомпозиція програм на множину задач
Визначення процесу;
стан процесу;
створення процесу;
ресурси процесу;
поділ програми на задачі.
Паралельність в програмі досягається шляхом її (програми) розділення на декілька процесів або потоків. Не дивлячись на існування різних варіантів організації логіки програми (наприклад, за допомогою об’єктів, функцій або узагальнених шаблонів), під паралелізмом все ж розуміємо використання множини процесів і потоків.
1. Визначення процесу
Процес (process) – це деяка частина (одиниця) роботи, що створюється операційною системою. Важливо зауважити, що процеси і програми – необов’язково еквівалентні поняття. Програма може складатися з декількох процесів. В деяких випадках процес може бути не пов'язаний з конкретною програмою. Процеси – це артефакти операційної системи, а програми – це артефакти розробника. Такі операційні системи, як UNIX/Linux дозволяє управляти сотнями або навіть тисячами процесів, які завантажуються. Щоб деяку частину роботи можна було назвати процесом, вона повинна мати адресний простір, що призначається операційною системою, і ідентифікатор, або ідентифікаційний номер (id процесу). Процес повинен володіти певним статусом і мати свій елемент в таблиці процесів. У відповідності зі стандартом POSIX він повинен містити один або декілька потоків керування, які виконуються в межах його адресного простору, і використовувати системні ресурси, необхідні для цих потоків. Процес складається з множини інструкцій які виконуються, і розміщені в межах адресного простору даного процесу. Адресний простір процесу розподіляється між інструкціями, даними, які належать процесу, і стеками, які забезпечують виклик функцій і зберігання локальних змінних.
1.1. Два види процесів
При виконанні процесу операційна система призначає йому деякий процесор. Процес виконує свої інструкції на протязі деякого періоду часу. Планувальник операційної системи переключається з коду одного процесу на код іншого, надаючи кожному процесу шанс виконати свої інструкції. Розрізняють користувацькі процеси і системні процеси. Процеси, які виконують системний код, називаються системними і застосовуються до системи в цілому. Вони займаються виконанням наступних службових задач, як розподіл пам’яті, обмін сторінками між внутрішнім допоміжним запам’ятовуючим пристроєм, контроль пристроїв та інше. Вони також виконують деякі задачі задорученням користувацьких процесів, наприклад, виконують запити на ввід-вивід даних, виділяють пам'ять та інше. Користувацькі процеси виконують власний код і інколи звертаються до системних функцій. Виконуючи власний код, користувацький процес перебуває в користувацькому режимі (user mode). В користуванькому режимі процес не може виконувати привілейовані машинні команди. Викликаючи системні функції (наприклад read (), write () або open ()) користуванький процес виконує інструкції операційної системи. При цьому користувацький процес утримує процесор до тих пір, доки не буде виконаний системний виклик. Для виконання системного виклику процесор звертається до ядра операційної системи. В цей час про користувацький процес говорять, що він перебуває в привілейованому режимі, або режимі ядра (kernel mode), і не може бути вивантаженим ніяким іншим користувацьким процесом.
1.2. Блок керування процесами
Процеси мають характеристики, які використовуються для ідентифікації і визначення їх поведінки. Ядро підтримує необхідні структури даних і надає системні функції, які дають можливість користувачу отримати доступ до цієї інформації. Деякі дані зберігаються у блоках управління процесами (process control block – PCB), або БУП. Дані, які зберігаються в БУП-блоках, описують процес з точки зору потреб операційної системи. За допомогою цієї інформації операційна система може керувати кожним процесом. Коли операційна система переключається з одного процесу на інший, вона зберігає біжучий стан процесу, який виконується і його контекст в області зберігання БУП-блоку, щоб належним чином відновити виконання цього процесу в наступний раз, коли йому знову буде виділений центральний процесор (ЦП). БУП-блок зчитується і оновлюється різними модулями операційної системи. Модулі відповідають контроль продуктивності операційної системи, планування, розподілення ресурсів і доступ до механізму обробки переривань іабо модифікують БУП-блок. БУП-блок містить наступну інформацію:
біжучий стан і пріоритет процесу;
ідентифікатор процесу, а також ідентифікатори батьківського і дочірнього процесів;
вказівники на виділені ресурси;
вказівники на область пам’яті процесу;
вказівники на батьківський та дочірні процеси;
процесор, занятий процесом;
регістри управління і станів;
стекові вказівники.
Серед данх, які містяться в БУП-блоці, є такі, що відповідають за керування процесом, тобто відображають його біжучий стан і пріоритети, вказують на БУП-блоки батьківського і дочірнього процесів, а також виділені ресурси і пам'ять. Крім того, цей блок містить інформацію, пов’язану з планування, привілеями процесів, прапорцями, повідомленнями і сигналами, якими обмінюються процеси (маємо на увазі між процесорною взаємодією - іnterprocess communication, або ІРС). За допомогою інформації, яка зв’язана з інформацією управління процесами, операційна система може координувати програми які виконуються паралельно. Стекові вказівники і вміст регістрів користувача, управління і стану містить інформацію, зв’язану зі станом процесора. При виконанні процесу відповідна інформація розміщується в регістрах ЦП. При перемиканні операційної системи з одного процесу на інший вся інформація з цих регістрів зберігається. Коли процес знову отримує ЦП в тимчасове користування, раніше збережена інформація може бути відновлена. Є ще один вид інформації, який відповідає за ідентифікацію процесу. Маємо на увазі ідентифікатор процесу (id), або PID, і ідентифікатор батьківського процесу (PPID). Ці ідентифікаційні номери (котрі подано додатнім цілим значенням) унікальні для кожного процесу.