Uploaded by Вячеслав Сафонов

Планирование на основе приоритетов

advertisement
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
"МИРЭА - Российский технологический университет"
РТУ МИРЭА
Институт информационных технологий (ИТ)
Кафедра Промышленной информатики
ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ №3
по дисциплине
«Вычислительные системы реального времени»
Выполнил студент группы
ИВБО-10-18
Принял преподаватель
Сафонов В.О.
Макаров М.А.
Практическая работа
выполнена
«__»_______2021 г.
«Зачтено»
«__»_______2021 г.
Москва 2021
Содержание
Изучение работы алгоритма................................................................................... 3
Проведение экспериментов с кодом ..................................................................... 5
Описание работы алгоритма на псевдокоде ......................................................... 7
Вывод ........................................................................................................................ 9
Изучение работы алгоритма
Планирование на основе приоритетов - это алгоритм вытесняющей
многозадачности. Каждому процессу назначается приоритет. Далее процессы
сортируются и выполняются в порядке понижения приоритета. Процессы с
одинаковым приоритетом выполняются в порядке очереди.
Выполним реализацию данного алгоритма на языке Си.
Листинг программы
#include <stdio.h>
int main(){
int bt[20], p[20], wt[20], tat[20], pr[20], i, j, n, total
= 0, pos, temp, avg_wt, avg_tat;
printf("Enter Total Number of Process:");
scanf("%d", &n);
printf("\nEnter Burst Time and Priority\n");
for(i = 0; i<n; i++){
printf("\nP[%d]\n", i+1);
printf("Burst Time:");
scanf("%d", &bt[i]);
printf("Priority:");
scanf("%d", &pr[i]);
p[i] = i + 1;
//contains process number
}
//sorting burst time, priority and process number in
//ascending order using selection sort
for(i = 0; i<n; i++){
pos = i;
for(j = i+1; j<n; j++)
{
if(pr[j] < pr[pos])
pos = j;
}
temp = pr[i];
pr[i] = pr[pos];
pr[pos] = temp;
temp = bt[i];
bt[i] = bt[pos];
bt[pos] = temp;
temp = p[i];
p[i] = p[pos];
p[pos] = temp;
}
wt[0] = 0; //waiting time for first process is zero
//calculates waiting time
for(i = 1; i<n; i++){
wt[i] = 0;
for(j=0; j < i; j++)
wt[i]+=bt[j];
total += wt[i];
}
avg_wt = total/n; //average waiting time
total = 0;
printf("\nProcess\t\tTime\t\tWaitingTime\tTurnaround
Time");
for(i = 0; i < n; i++)
{
tat[i] = bt[i] + wt[i];
total+= tat[i];
printf("\nP[%d]\t\t
%d\t\t%d\t\t\t%d",
p[i], bt[i], wt[i], tat[i]);
}
avg_tat = total/n; //average turnaround time
printf("\n\nAverage Waiting Time = %d", avg_wt);
printf("\nAverage Turnaround Time=%d\n", avg_tat);
system("pause");
return 0;
}
Проведение экспериментов с кодом
Протестируем выполнение алгоритма. Введем следующие исходные
данные:
Время
исполнения
Приоритет
Количество процессов: 4
Процесс 1
Процесс 2
Процесс 3
5
2
16
Процесс 4
7
2
4
3
1
В результате выполнения программы процессы должны выполниться в
следующей последовательности: 3, 1, 2, 4. При этом 4 процесс будет ожидать
своего исполнения 23 условных единиц времени.
Рисунок 1 - результат выполнения программы 1
Как видно по рисунку, работа программы полностью оправдала наши
ожидания.
Протестируем выполнение программы при нескольких процессов с
одинаковым приоритетом. Введем следующие исходные данные:
Количество процессов: 5
Процесс 1 Процесс 2 Процесс 3 Процесс 4 Процесс 5
Время
8
4
10
9
3
исполнения
Приоритет 2
3
3
3
1
Рисунок 2 - результат выполнения программы 2
Как мы можем наблюдать, в результате сортировки процесс 2 стал
последним, но, учитывая одинаковые приоритеты процессов 2, 3 и 4,
выполнение программы не считается ошибочным.
Описание работы алгоритма на псевдокоде
Опишем работу программы с помощью блок-схемы:
Рисунок 3 - блок-схема алгоритма
Вывод
Изучил работы улгоритма планирования на основе приоритетов и написание
под Линукс кода на C/C++.
Download