Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы (Л. р.).doc
Скачиваний:
5
Добавлен:
02.05.2019
Размер:
792.06 Кб
Скачать

51

Зміст

Лабораторна робота 1 3

Лабораторна робота 2 13

Лабораторна робота 3 20

Лабораторна робота 4 28

Лабораторна робота 5 46

Лабораторна робота 6 49

Лабораторна робота 1 Керування процесами

Мета роботи: одержання практичних навичок керування процесами й самостійною роботою з документацією команд.

Теоретичні відомості

Процес (завдання) - програма, що перебуває в режимі виконання.

З кожним процесом зв'язується його адресний простір, з якого він може читати й у яке він може писати дані.

Адресний простір містить:

  • саму програму

  • дані до програми

  • стік програми

З кожним процесом зв'язується набір регістрів, наприклад:

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

  • покажчик стека

  • і буд.р.

У багатьох операційних системах вся інформація про кожний процес, додаткова до вмісту його власного адресного простору, зберігається в таблиці процесів операційної системи.

Деякі поля таблиці:

Керування процесом

Керування пам'яттю

Керування файлами

Регістри

Лічильник команд

Покажчик стека

Стан процесу

Пріоритет

Параметри планування

Ідентифікатор процесу

Батьківський процес

Група процесу

Час початку процесу

Використаний процесорний час

Покажчик на текстовий сегмент

Покажчик на сегмент даних

Покажчик на сегмент стека

Кореневий каталог

Робочий каталог

Дескриптори файлу

Ідентифікатор користувача

Ідентифікатор групи

Модель процесу

У багатофункціональній системі реальний процесор перемикається із процесу на процес, але для спрощення моделі розглядається набір процесів, що йдуть паралельно (псевдопаралельно).

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

Рис.1 Багатозадачність в ОС

У кожний момент часу активний тільки один процес.

Рис.2 Один та чьотири лічильника команд

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

Створення процесу

Три основних події, що приводять до створення процесів (виклик fork або CreateProcess):

  • Завантаження системи

  • Працюючий процес подає системний виклик на створення процесу

  • Запит користувача на створення процесу

У всіх випадках, активний поточний процес посилає системний виклик на створення нового процесу.

В UNIX кожному процесу привласнюється ідентифікатор процесу ( PID - Process IDentifier)

Завершення процесу

Чотири події, що приводять до зупинки процесу (виклик exit або ExitProcess):

  • Планове завершення (закінчення виконання)

  • Плановий вихід по відомій помилці (наприклад, відсутність файлу)

  • Вихід по непоправній помилці (помилка в програмі)

  • Знищення іншим процесом

Таким чином, припинений процес складається із власного адресного простору, звичайно називаного образом пам'яті (core image), і компонентів таблиці процесів (у числі компонентів і його регістри).

Ієрархія процесів

В UNIX системах закладена тверда ієрархія процесів. Кожний новий процес створений системним викликом fork, є дочірнім до попереднього процесу. Дочірньому процесу дістаються від батьківського змінні, регістри й т.п. Після виклику fork, як тільки батьківські дані скопійовані, наступні зміни в одному із процесів не впливають на інший, але процеси пам'ятають про те, хто є батьківським.

У такому випадку в UNIX існує й прабатько всіх процесів - процес init.

Рис. 3 Дерево процесів для систем UNIX

В Windows не існує поняття ієрархії процесів. Хоча можна задати спеціальний маркер батьківському процесу, що дозволяє контролювати дочірній процес.

Стан процесів

Три стани процесу:

  • Виконання (займає процесор)

  • Готовність (процес тимчасово припинений, щоб дозволити виконуватися іншому процесу)

  • Очікування (процес не може бути запущений по своїх внутрішніх причинах, наприклад, очікуючи операції уведення/виводу)

Рис. 4 Можливі переходи між станами.

1. Процес блокується, очікуючи вхідних даних

2. Планувальник вибирає інший процес

3. Планувальник вибирає цей процес

4. Надійшли вхідні дані

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

На серверах для прискорення відповіді на запіт клієнта, часто завантажують кілька процесів у режим очікування, і як тільки сервер одержить запіт, процес переходить із "очікування" в "виконання". Цей перехід виконується набагато швидше, ніж запуск нового процесу.

Потоки (нитки, полегшений процес)

Поняття потоку

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

Рис.5 Порівняння багатопотокової системи з однопотокової

Модель потоку

З кожним потоком зв'язується:

  • Лічильник виконання команд

  • Регістри для поточних змінних

  • Стік

  • Стан

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

  • Адресний простір

  • Глобальні змінні

  • Відкриті файли

  • Таймери

  • Семафори

  • Статистичну інформацію.

В іншому модель ідентична моделі процесів.

В POSIX і Windows є підтримка потоків на рівні ядра.

В Linux є новий системний виклик clone для створення потоків, відсутній у всіх інших версіях системи UNIX.

В POSIX є новий системний виклик pthread_create для створення потоків.

В Windows є новий системний виклик Createthread для створення потоків.

Переваги використання потоків

  1. Спрощення програми в деяких випадках, за рахунок використання загального адресного простору.

  2. Швидкість створення потоку, у порівнянні із процесом, приблизно в 100 разів.

  3. Підвищення продуктивності самої програми, тому що їсти можливість одночасно виконувати обчислення на процесорі й операцію уведення/виводу. Приклад: текстовий редактор із трьома потоками може одночасно взаємодіяти з користувачем, форматувати текст і записувати на диск резервну копію.

Реалізація потоків у просторі користувача, ядра й змішане

Рис. 6 А - потоки в просторі користувача; B - потоки в просторі ядра;

У випадку А ядро про потоки нічого не знає. Кожному процесу необхідна таблиця потоків, аналогічна таблиці процесів.

Переваги випадку А:

  • Таку багатопотоковість можна реалізувати на ядрі не підтримуючим багатопотоковість

  • Більше швидке перемикання, створення й завершення потоків

  • Процес може мати власний алгоритм планування.

Недоліки випадку А:

  • Відсутність переривання по таймері усередині одного процесу

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

  • Складність реалізації

Рис. 7 Мультиплексування потоків користувача в потоках ядра

Потік ядра може містити кілька потоків користувача.

Особливості реалізації Windows

Використовується чотири поняття:

  • Завдання - набір процесів із загальними квотами й лімітами

  • Процес - контейнер ресурсів (пам'ять ...), містить як мінімум один потік.

  • Потік - частина, що виконується саме, планована ядром.

  • Волокно - полегшений потік, керований повністю в просторі користувача. Один потік може містити кілька волокон.

Потоки працюють у режимі користувача, але при системних викликах перемикаються в режим ядра. Через перемикання в режим ядра й назад, дуже вповільнюється робота системи. Тому було уведене поняття волокна. У кожного потоку може бути кілька волокон.

Команди POSIX для роботи із процесами (повинні бути у всіх операційних системах)

at - запускає програми в певний час

crontab - файл утримуючу таблицю розкладів запуску завдань

kill - припинення виконання процесу по PID процесу

nice - задає пріоритет процесу перед його запуском

renice - змінює пріоритет працюючого процесу

ps - виводить інформацію про працюючі процеси

fg - переклад процесу з фонового режиму

bg - продовження виконання фонового процесу, якщо він припинений натисканням <Ctrl+Z>

Команди LINUX для роботи із процесами

at - запускає програми в певний час

atq - виводить список завдань, поставлених у чергу командою at

atrm - видалення завдання із черги команди at

/etc/crontab - файл утримуючу таблицю розкладів запуску завдань

kill - припинення виконання процесу по PID процесу

killall - припинення виконання процесу по ім'ю процесу

nice - задає пріоритет процесу перед його запуском

renice - змінює пріоритет працюючого процесу

ps - виводить інформацію про працюючі процеси

top - виводить динамічну інформацію про процеси

fg - вивід процесу з фонового режиму

bg - продовження виконання фонового процесу, якщо він припинений натисканням <Ctrl+Z>

ipcs - взаємодія процесів (поділювана пам'ять, семафори, повідомлення)

Для одержання більше докладної інформації, можна використовувати help (наприклад: ps ---help),або документацію (наприклад: man ps, для виходу натисніть q).

Запуск фонового процесу здійснюється так:

ps -x &

При завантаженні системи, необхідні процеси, завантажуються у фоновий режим, їх називають "демонами". Вони перебувають у каталозі /etc/rc.d/init.d/.

Деякі комбінації клавіш:

<Ctrl+Z> - призупинити виконання завдання

<Ctrl+C> - завершити виконання завдання

Зв'язування процесів за допомогою каналів. Запуск декількох команд із передачею вихідного потоку наступній програмі, "|" означає передачу вихідного потоку від першої програми до другого.

ps -ax | more

запускається команда ps -ax, і передає вихідний потік програм more яка запускається на виконання.

Перенапрямок уведення/виводу. Запуск команди із записом вихідного потоку у файл

ps -ax > test.txt

ps -ax > test.txt - додасть у коней файлу

Групи команд

command-1;command-2; command-3

{ command-1;command-2} > test.txt

Команди Windows для роботи із процесами

Більшу частину інформації про процеси можна одержати через диспетчер завдань.

at - запуск програм у заданий час

Schtasks - набудовує виконання команд за розкладом

Start - запускає певну програму або команду в окремому вікні.

Taskkill - завершує процес

Tasklist - виводить інформацію про працюючі процеси

Для одержання більше докладної інформації, можна використовувати центр довідки й підтримки або команду help (наприклад: help at)

command.com - запуск командної оболонки MS-DOS

cmd.exe - запуск командної оболонки Windows