Программирование планировщиков процессов. Программа, осуществляющая моделирование работы планировщика заданий ОС в режиме разделения времени

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСП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, создано приложение способное моделировать работу планировщика процессов в режиме разделения времени.

Похожие материалы

Информация о работе