МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования "МИРЭА - Российский технологический университет" РТУ МИРЭА Институт информационных технологий (ИТ) Кафедра Промышленной информатики ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ №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++.