МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПsУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«Гомельский государственный технический университет имени П. О. Сухого»
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №2
по дисциплине «Мультипроцессорная и мультипрограммная обработка данных»
на тему: «Программирование планировщиков процессов»
Выполнил: студент группы ИТ-32 |
|
|
|
Проверил преподаватель: |
|
|
|
Дата сдачи отчета __________________ |
|
Дата допуска к защите ______________ |
|
Дата защиты ______________________ |
Гомель 2013
Цель: разработать программу, осуществляющую моделирование работы планировщика заданий ОС в режиме разделения времени.
Задание:
Необходимо разработать программу на языке С#, осуществляющую моделирование режима работы с разделением времени между независимыми процессами.
Моделирование режима разделения времени выполняется по алгоритму вытесняющий алгоритм SJF. Первым выполняется процесс с наименьшей длительностью. Новый процесс с более низкой длительностью вызывает прерывания выполнения текущего процесса, а ждет его завершения. Величина кванта времени равна 3.
1. На экран выводится следующая информация:
2. Номер текущего кванта времени процессора;
3. Таблица процессов с указанием их текущего состояния (исполнение, готовность, ожидание), их продолжительности, приоритета, оставшегося времени выполнения;
4. При невозможности поставить процесс в очередь выводится необходимо выводить соответствующее сообщение.
5. По окончанию работы процесса на экране должно выводится сообщение о его завершении «Процесс такой то завершен», при этом сам процесс удаляется из списка заданий.
Программа должна осуществлять диалог с пользователем по средством цифрового меню (по желанию возможен любой другой вариант).
1. Выход из программы;
2. Добавление нового процесса в очередь;
3. Удаление заданного процесса;
4. Следующий квант времени.
Листинг PlanningMethod:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using Lab2.Classes;
namespace Lab2
{
abstract class PlanningMethod : IEnumerable<Process>
{
#region Fields
public List<Process> Processes { get; set; }
public int Time { get; set; }
#endregion
#region Constructor
public PlanningMethod()
{
Processes = new List<Process>();
Time = 0;
}
#endregion
#region Methods
public abstract Process Step();
public virtual void AddProcess(Process newProcess)
{
Processes.Add(newProcess);
}
public virtual void RemoveProcess(string processName)
{
Process process = Processes.Find(proc => proc.Name == processName);
Processes.Remove(process);
}
#endregion
public IEnumerator<Process> GetEnumerator()
{
for (int i = 0; i < Processes.Count; i++)
{
yield return Processes[i];
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}
Листинг Process:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab2.Classes
{
class Process
{
#region Fields
public string Name { get; set; }
public State CurtainState { get; set; }
public int CurtainDuration { get; set; }
public int ID { get; set; }
public int Time { get; set; }
#endregion
#region Constructors
public Process() { }
public Process(string name, int duration, int id, int time)
{
Name = name;
CurtainDuration = duration;
CurtainState = State.Ожидание;
ID = id;
Time = time;
}
#endregion
}
}
Листинг SJF:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab2.Classes
{
class SJF : PlanningMethod
{
#region Constructor
public SJF()
: base() { }
#endregion
#region Methods
override public Process Step()
{
Time++;
Processes.Sort(new CustomComparer());
Process fastestProcess = ChooseNext();
if (fastestProcess == null)
{
return fastestProcess;
}
fastestProcess.CurtainDuration--;
if (fastestProcess.CurtainDuration == 0)
{
fastestProcess.CurtainState = State.Завершён;
}
else fastestProcess.CurtainState = State.Выполнение;
return fastestProcess;
}
private Process ChooseNext()
{
int minDuration = -1;
Process minProc = null;
for (int i = 0; i < Processes.Count; i++)
{
if (Processes[i].Time <= Time && Processes[i].CurtainState != State.Завершён &&
(minDuration > Processes[i].CurtainDuration || minDuration == -1))
{
minDuration = Processes[i].CurtainDuration;
minProc = Processes[i];
}
}
return minProc;
}
public bool CheckProcesses()
{
foreach (var proc in Processes)
{
if (proc.CurtainState != State.Завершён)
{
return true;
}
}
return false;
}
#endregion
}
}
Тесты:
Рисунок 1 – Процессы готовы к исполнению
Рисунок 2 – Выполнение
Рисунок 3 – Планирование процессов по алгоритму SJF
Выводы: В ходе лабораторной работы был реализован алгоритм SJF с величиной кванта времени равной 3, создано приложение способное моделировать работу планировщика процессов в режиме разделения времени.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.