Планувальник потоків у просторі користувача
Автор: Данил Ивасюк • Декабрь 25, 2019 • Лабораторная работа • 2,073 Слов (9 Страниц) • 336 Просмотры
Шкель І.В. КІ-162
Лабораторна робота №2
Планувальник потоків у просторі користувача.
Мета роботи:
Ознайомитися з поняттям планувальник, з алгоритмом планування, розглянути основні види планувальників.
Короткі теоретичні відомості
Планувальник завдань - програма (служба чи демон), часто названа сервісом операційної системи, яка запускає інші програми в залежності від різних критеріїв, як, наприклад:
• наступ певного часу;
• перехід операційної системи в певний стан (бездіяльність, сплячий режим і т. д.);
• надходження запиту від адміністратора через інтерфейс користувача або через інструменти віддаленого адміністрування.
Існує багато різних методів планування. Більшість з них можна віднести до двох основних типів:
• невитісняючі (кооперативні) - планувальник не може забрати час у обчислювального потоку, поки той сам його не віддасть.
• витісняючі - планувальник після закінчення кванта часу вибирає наступний активний обчислювальний потік, сам обчислювальний потік також може віддати призначений для нього залишок кванта часу.
Перемикання контексту - заміна контексту одного потоку іншим. Планувальник зберігає поточний контекст і завантажує в регістри процесора інший. Планувальник може перервати активний потік в будь-який момент часу, що дещо спрощує модель. Насправді ж не планувальник перериває потік, а поточна програма переривається процесором в результаті реакції на зовнішню подію - апаратне переривання - і передає управління планувальнику.
Завдання на лабораторну роботу
Для виконання даної лабораторної роботи необхідно реалізувати планувальник для обраної вами ОС. Для прикладу розглянемо планувальник для OC Linux. Robin Round - cамий простий, ефективний і широко використовуваний алгоритм для складання розкладів в багатозадачних системах з поділом часу. Усі виконувані процеси поміщаються в циклічну чергу.
Планувальник почергово виділяє кожному процесу квантований інтервал часу. В системі, де всі завдання мають однаковий пріоритет, квант часу один і той же. Нові процеси додаються в хвіст черги.
Планувальник вибирає перший процес у черзі, встановлює таймер на переривання після закінчення кванта часу і відправляє процес на виконання.
Якщо процес після закінчення виділеного інтервалу часу не закінчується, то ЦП вивантажується, а даний процес додається у хвіст черги. Якщо ж процес завершується, то він звільняє ЦП. У кожному разі планувальник виділяє ЦП наступного процесу в черзі очікування.
Виконання завдання
Текст файла main.cpp:
#include
#include "Thread.h"
#include
#include
#include
#include
using namespace std;
int ID = 1;
#define TIMER 1
void func_choise();
void init_queue(int);
void thread_func();
void alarm_handler(int signo);
Thread *threadTmp;
bool flag = 0;
list
int main() {
func_choise();
return 0;
}
void func_choise() {
while (true) {
int choise = 0;
cout << "1. Добавить поток в очередь.\n"
"2. Выполнение без прерывания.\n"
"3. Выполнение с прерыванием.\n";
cout << endl << "Введите пункт: ";
cin >> choise;
switch (choise) {
case 1:
int cnt;
cout << "Введите количетсво потоков :" << endl;
cin >> cnt;
init_queue(cnt);
cout << "Потоки добавлены" << endl << endl;
...