You are on page 1of 25

Лекція 4.

Керування процесами та
потоками.
Лекція 4. Керування процесами та
потоками.
План лекції.

1. Архітектура процесора.
2. Поняття процесу. Контекст процесу.
3. Стани процесу. Переходи між станами.
4. Створення та завершення процесів.
5. Поняття потоку.
6. Алгоритми планування процесів.
7. Планування процесів у UNIX.
8. Планування процесів у Windows.
1. Архітектура процесора
(загальна схема)
шина даних

регістри даних БЛОК Арифметико-


КЕРУВАННЯ логічний пристрій
регістри адреси (arithmetic-logic
(Control unit, CU)
unit, ALU)
пам”ять

шина регістр стану


керування
процесора (PSW)

шина адреси
Архітектура процесора (складові)
Найпростіший процесор складається з наступних елементів:
 арифметико-логічний пристрій (ALU):
 здійснює виконання команд;
 блок управління:
 визначає тип операції та кількість операндів;
 декодує адреси для ALU;
 шина адреси
 на цій шині встановлюється розрахована блоком управління адреса даних, котрі мають бути зчитані з
зовнішньої пам’яті.
 шина даних
 контролер пам’яті зчитує адресу з шини адреси та розміщує одержані за цією адресою на шині даних
 шина управління
 після розміщення даних на шині даних контролер встановлює сигнал готовності на шині управління.
Процесор перевіряє наявність цього сигналу і, якщо сигнал встановлено, зчитує дані для опрацювання.
 регістри – ділянки високошвидкісної пам’яті для зберігання даних в процесорі:
 регістри загального призначення
 регістри стану та управління
 індексні регістри
 сегментні регістри
 Важливі регістри:
лічильник команд (instruction pointer) – містить адресу комірки пам’яті з наступною командою, котра
має виконуватись.
вказівник стеку (stack pointer) – вказує на вершину поточного стеку в пам’яті. Стек містить вхідні
параметри для процедур, а також інші локальні змінні, які не містяться у регістрах.
слово стану програми (Program Status Word, PSW) – в цьому регістрі містяться біти управління
пріоритетом процесора, режимом (користувацький чи ядра) та інші службові біти. Зазвичай,
програми режиму користувача можуть зчитувати весь регістр PSW, але записувати можуть тільки в
деякі з його полів.
 таймер:
 виробляє тактові імпульси для роботи процесора та синхронізації цієї роботи з роботою інших пристроїв
– від таймера залежить тактова частота процесора (ГГц).
Цикл виконання команди процесором.
Є три основні операції, котрі виконує процесор:
1. Вибірка команди – блок управління вибирає команди, копіює їх з пам’яті в
чергу команд та збільшує на одиницю програмний лічильник.

2. Декодування – блок управління визначає тип команди, котра має


виконуватись. Якщо необхідно ще отримати операнди з пам’яті, блок
управління зчитує необхідні операнди та завантажує їх в арифметико-логічний
пристрій і повідомляє йому, який тип операції має бути виконаний.
3. Виконання – арифметико-логічний пристрій виконує команду, повертає
результат та оновлює слово стану процесора.

Послідовне виконання цих операцій за один раз є неефективним у


зв’язку із низькою швидкістю та нераціональним розподілом часу. Тому було
запроваджено конвеєрну модель роботи процесора, а згодом розроблено
суперскалярну модель процесора.
Конвеєрна модель роботи процесора.
Конвеєрна модель полягає у тому, що одночасно процесор виконує більше
ніж одну команду, оскільки має окремі блоки для вибірки, декодування та
виконання команд. Схематично це можна зобразити у таблиці:
Час IF ID EX MEM WB
0 команда 1
1 команда 2 команда 1
2 команда 3 команда 2 команда 1
3 команда 4 команда 3 команда 2 команда 1
4 команда 5 команда 4 команда 3 команда 2 команда 1
5 команда 6 команда 5 команда 4 команда 3 команда 2

Кількість стадій конвеєра - число елементарних задач на які розбивається виконання команди.
Позначення у таблиці стадій конвеєра:
IF (Instruction
(Instruction Fetch) -
Fetch) - одержання команди,
ID (Instruction Decode) - декодування команди,
EX (Execute) - виконання,
MEM (Memory
(Memory access) -
access) - доступ до пам’
пам’яті,
яті,
WB (Register write back) - запис в регістр.

В кожен момент часу одна команда знаходиться на стадії виконання, тоді як інша – тільки одержання.
Складністю у використанні конвеєрної моделі є виконання програм з розгалуженнями: як тільки зустрінеться
команда розгалуження весь конвеєр має зупинитися поки ця команда не виконається і не буде відома наступна команда.
Для таких випадків з метою підвищення ефективності роботи процесора використовують алгоритми
динамічного виконання команд: 1) прогнозування розгалужень (branch
(branch prediction)
prediction); 2) аналіз потоку команд (out-of-
order execution); 3) попереднє виконання (data forwarding).
Суперскалярна модель роботи процесора.
Суперскалярний процесор має декілька виконавчих блоків:
1) для цілочисельної арифметики
2) для арифметики з плаваючою крапкою
3) для логічних операцій.

Одночасно вибираються декілька команд, котрі декодуються та поміщаються в буфер,


де очікують можливості свого виконання. Коли виконавчий блок вивільняється, він
звертається до буфера за наступною командою, яку він може виконати.

Виконавчий
блок
Блок Блок
вибірки декодування
Буфер
Виконавчий
команд
блок

Блок Блок
вибірки декодування Виконавчий
блок
2. Поняття процесу.
Контекст процесу.
Процес – програма в режимі виконання.
З кожним процесом пов’язаний адресний простір, котрий містить
• код програми
• дані до програми
• стек програми

З кожним процесом також пов’язаний набір регістрів.

Кожному процесу відповідає контекст, котрий включає:


 користувацький контекст
• вміст адресного простору
• вміст сегментів коду, даних, стеку
 регістровий контекст
• вміст апаратних регістрів (лічильника команд, стану процесу, вказівника стеку,
регістрів загального призначення)
 контекст системного рівня
• ідентифікатор процесу
• ідентифікатор батьківського процесу
• стан процесу
• пріоритет процесу
• ідентифікатор користувача
3. Стани процесу.
Переходи між станами.
Можливі стани процесу:
1. Виконання (процес використовує процесор).
2. Готовність (процес тимчасово припинений, щоб дозволити виконуватися
іншому процесу).
3. Блокування (процес не може бути запущений перш, ніж відбудеться
деяка зовнішня подія).
Переходи між процесами:
Завершення • Процес заблокований в
очікуванні введення
1 Виконання даних
3 • Диспетчер процесів
2
вибрав інший процес
• Диспетчер вибрав
Очікування Готовність даний процес
Створення
• Вхідні дані стали
4 доступні для даного
процесу

В операційній системі UNIX також є особливий стан процесу - зомбі.


Процес переходить у цей стан якщо він завершився раніше, ніж цього
очікував батьківський процес.
4. Створення та завершення
процесів.
Існують чотири основні події, що призводять до створення
процесів:

 Ініціалізація системи. (winload.exe, winresume.exe, ntoskrnl.exe,


smss.exe, hal.dll, wininit.exe, services.exe; init, rc, ttytab, getty)
 Виконання запущеним процесом системного виклику створення
процесу.
 Запит користувача на створення процесу.
 Ініціалізація пакетного завдання.

В UNIX для створення процесу використовується системний виклик


fork(), у Windows - CreateProcess().

Після створення нового процесу обидва процеси мають власний


адресний простір.
Початковий стан дочірнього процесу є точною копією батьківського
процесу.
Завершення процесів.
Процес завершується одним з наступних чотирьох
способів:

 Нормальне завершення (добровільне).

 Завершення внаслідок помилки (добровільне).


 відсутність файлу
 заборона доступу

 Завершення внаслідок фатальної помилки (примусове).


 неправильно написана програма
 ділення на нуль
 посилання на неіснуючу чи заборонену область пам’яті.

 Знищення іншим процесом (примусове).


 Виконання системного виклику exit() у UNIX чи ExitProcess() у
Windows
5. Поняття потоку.
Потік (thread) – окрема послідовність інструкцій в рамках одного процесу.
З кожним потоком пов’язується:
- лічиньник команд;
- регістри;
- стек;
- стан (готовність, виконання, блокування).

Спільним для усіх потоків конкретного процесу є:


 адресний простір
 глобальні змінні
 відкриті файли
 Таймери
 статистична інформація.

Переваги використання потоків замість багатьох процесів є:


1. Спрощення програми.
2. Створення потоку є швидшим за створення процесу приблизно у 100 разів.
3. Підвищення продуктивності програми, оскільки є можливість одночасного
виконання різних дій.

Приклад: текстовий редактор з трьома потоками може одночасно взаємодіяти з


користувачем, форматувати текст та записувати на диск резервну копію.
6. Алгоритми планування
процесів.
Планування - забезпечення почергового доступу процесів до одного процесору.
Планувальник - відповідальна за це частина операційної системи.
Алгоритм планування - використовуваний алгоритм для планування.
Ситуації, коли необхідно планування:
 створення процесу
 завершення роботи процесу
 блокування процесу на операції введення/виведення, семафорі, тощо.
 при перериванні введення/виведення.

Є дві основні стратегії планування:


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

Алгоритм витісняльної багатозадачності (пріоритетний) – потоки можуть бути перервані


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

Завдання алгоритмів планування:


1. Ефективне використання ресурсів,
2. Скорочення часу даремного навантаження,
3. Справедливість - кожному процесу справедливу частку процесорного часу.
Планування за принципом FCFS
Алгоритм називається від абревіатури First Come – First Served
(першим надійшов – першим обслужений).

Суть: процеси, котрі переходять у стан готовності заносяться у


чергу. Як тільки процесор звільняється, він завантажує перший у
черзі процес.

Процес
Процес Процес Процес Процес Процесор
4 3 2 1
5

черга

+ 1) легкість реалізації;

- 1) середній час очікування залежить від взаємного розташування процесів,


2) є невитісняльним, може призвести до “зависання системи” при монопольному заволодінні
процесором окремим потоком.
Кругове планування (Round robin)
Суть: кожному потоку виділяють однаковий квант часу,
упродовж якого цьому потоку дозволено виконуватись. Після
вичерпання кванту його переривають і перемикають процесор
на виконання інструкцій іншого потоку.
Процесор

Процес Процес Процес Процес Процес


5 4 3 2 1

+ 1) легкість реалізації;
2) справедливість (всі потоки рівні).
- 1) потрібно ретельно підбирати довжину кванту, оскільки для короткого кванту буде багато
часу витрачатись на перемикання, для довгого – окремий користувач, який останнім
запустив процес, може досить довго чекати своєї черги.
Планування з пріоритетами
Суть: кожному потоку ставиться у відповідність пріоритет. На виконання
ставиться потік із найвищим пріоритетом із черги готових потоків.
Пріоритети можуть надаватись статично або динамічно.
Процесор
найвищий Процес Процес Процес Процес Процес
пріоритет 5 3 8 2 1

пріоритет 1 Процес
15
Процес
12
Процес
10
Процес
7

пріоритет 2 Процес
17
Процес
16
Процес
14
Процес
11

+ 1) насамперед виконуються найважливіші завдання;

- 1) Процеси з дуже низьким пріоритетом можуть не дочекатися своєї черги.


Планування на підставі характеристик
подальшого виконання.
Найпоширеніший алгоритм цього класу: “перший – з найкоротшим часом
виконання” (Shortest time to completion, STCF).
Суть: з кожним потоком пов’язують час виконання і вибирають потік з найкоротшим
часом.
Процесор

Процес 1 Процес 3 Процес 2 Процес 5 Процес 4


15 мс 10 мс 6 мс 3 мс 2 мс

Початкова Процес 5 Процес 4 Процес 3 Процес 2 Процес 1


черга: 3 мс 2 мс 10 мс 6 мс 15 мс

+ 1) теоретично є оптимальним за критерієм середнього часу очікування;

- 1) важко передбачити час виконання потоків,


2) несправедливий до потоків з довшим часом виконання.
Багаторівневі черги зі зворотнім зв’язком.
Суть: є кілька черг готових потоків із різним пріоритетом, при цьому потоки із нижчим
пріоритетом виконуються тільки коли верхні черги порожні. При цьому
потокам дозволено переходити з рівня на рівень,
в кожній черзі потоки об’єднуються за довжиною інтервалу використання процесора.

Потік не вичерпав кванта

Потік вичерпав квант

Потік давно не одержував керування

Довжина кванта

Черга алгоритму FIFO

пріоритет

+ 1) є найуніверсальнішим алгоритмом, за певного налаштування параметрів його можна


звести до попередніх;
- 1) важко передбачити час виконання потоків,
2) несправедливий до потоків з довшим часом виконання.
Лотерейне планування.
•коженпроцес отримує певну кількість лотерейних квитків, кожен дає право використовувати
процесор певний час Т;
•через проміжок часу Т планувальником випадково вибирається лотерейний квиток;
•потік з квитком, який “виграв”, дістає керування.

ПОТІК 1 ПОТІК i

квиток А квиток M квиток N квиток X


… … … …
отримує процесор на час Т
ПЛАНУВАЛЬНИК:
“виграшний” – квиток Х

За допомогою лотерейного планування можна емулювати кругове планування,


планування з пріоритетами, забезпечувати розподіл процесорного часу між потоками.
7. Планування процесів у UNIX.
Створення процесу викликом функції fork(). Контекст процесу:
• Користувацький (вміст віртуального
адресного простору, сегментів програмного
виконувана програма, ПРОЦЕС дані з областей коду, даних, стеку, сегментів файлів)
відкриті файли і т.д. PID 11 пам”яті процесу
• регістровий (вміст апаратних регістрів)
• структури даних ядра
копія копія

PID нащадка
Статична частина контексту процесу:
fork() • ідентифікатор процесу (PID)
0
• ідентифікатор батьківського процесу (PPID)
виконувана програма, ПРОЦЕС дані з областей
відкриті файли і т.д. PID 28 пам”яті процесу
• стан процесу
• ідентифікатори користувача (для
визначення меж доступу процесу)
дії...
дії... • пріоритет процесу (змінюється динамічно
за допомогою системного виклику nice)
Планування процесів здійснюється на основі схеми • таблиця дескрипторів відкритих файлів
з кільцевою чергою та пріоритетами. На основі
значення пріоритету визначаються можливість
процесу перебувати в оперативній пам’яті і Динамічна частина контексту процесу – стеки,
конкурувати за процесор, квант часу для що використовуються процесом при
роботи з процесором, місце в загальній черзі. виконанні в режимі ядра і в режимі
користувача
Планування процесів у Linux.
Процеси в системі:
 реального часу із плануванням за принципом FIFO
 реального часу із круговим плануванням
 звичайні

Процеси реального часу:


 Мають пріоритет над звичайними процесами
 Процес із плануванням за схемою FIFO виконується доти, доки він сам не віддасть процесор, або поки не
витісниться процесом реального часу з вищим пріоритетом
 Аналогічно для процесів з круговим плануванням, крім того, вони витісняються при вичерпанні кванту часу

Алгоритм планування звичайних процесів.


 Процесорний час поділяється на епохи.
 Кожен процес в межах епохи має певний квант часу.
 Кожен процес виконується лише один раз впродовж епохи.
 Епоха завершується після вичерпування квантів всіх готових до виконання процесів.
8. Планування процесів у
Windows.
Планування процесів передбачає розв’язання таких задач:
1. Облік відносних пріоритетів потоків
2. Мінімізація часу відгуку інтерактивних програм

Одиниця планування – потік.

Значення пріоритету – в межах від 1 до 31;


• 16 – 31 - пріоритет реального часу (для дій, час виконання яких є критичним чинником)
• 1 – 15 - динамічні пріоритети (для потоків застосувань користувача)

Присвоєння пріоритету
реального часу (real-time, 24)
присвоєння класу
високий (high, 13)
ПРОЦЕС
нормальний (normal,
(normal, 8)
невикористовуваний (idle, 4)

найвищий (+2)
вище за нормальний (+1)
потік 1 потік n
… нормальний (+0)
відносні пріоритети нижче за нормальний (-1)
найнижчий (-2)
Планування процесів у Windows.
Новий потік для виконання вибирається коли:
 минув квант часу для потоку
 потік перейшов у стан очікування події
 потік перейшов у стан готовності до виконання

Потік може бути витіснений коли:


 Потік перейшов у стан очікування
 Минув квант часу потоку
 Потік з вищим пріоритетом перейшов у стан готовності до виконання
 Змінився пріоритет потоку або пріоритет іншого потоку

Динамічна зміна пріоритету.


 Завершення операції введення-виведення підвищує пріоритет (дискові операції - +1, введення
з клавіатури, обробка події миші - +6)
 Для потоків інтерактивних застосувань вихід із стану очікування - +2
 Перехід в стан готовності потоків, пов’язних з відображенням інтерфейсу користувача - +2
 Потоки, які не виконувались впродовж тривалого часу, підвищують пріоритет.
Висновки:
1.Найпростішийпроцесор складається з наступних елементів:
арифметико-логічний пристрій (ALU), блок управління, шина адреси,
шина даних, шина управління, регістрів, таймеру.

2. Процес – програма в режимі виконання. З кожним процесом


пов’язаний адресний простір, котрий містить код програми, дані до
програми, стек програми.

3. Можливі стани процесу: виконання, готовність, блокування.

4. Потік (thread) – окрема послідовність інструкцій в рамках одного


процесу.

5. Алгоритми планування процесів: планування за принципом FCFS,


кругове планування (Round robin), планування з пріоритетами,
планування на підставі характеристик подальшого виконання,
багаторівневі черги зі зворотнім зв’язком, лотерейне планування.
Література:
1. Шеховцов В. А. Операційні системи. – К.: BHV, 2005 . -
576 с.
2. Таненбаум. Э. Современные операционные системы.2-е
изд. – СПб.: Питер, 2002. – 1040 с.

You might also like