Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Порядок выполнения и защиты курсовых работ.doc
Скачиваний:
6
Добавлен:
04.12.2018
Размер:
995.33 Кб
Скачать

4.6. Построение модели

4.6.1. Разработка программы

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

В ходе объектно-ориентированного проектирования мы выделили следующие классы: Systema (Система), Process (Процесс), Processor (Процессор).

Это и будут классы в нашей программе. Языком программирования выбран объектно-ориентированный язык третьего поколения С#. Разработка программы производилась на основе платформы Visual Studio.Net 2005. Для удобства все классы содержатся в отдельных файлах.

Класс Process. Процесс характеризуется главным образом во всех дисциплинах обслуживания временем готовности (временем поступления в систему после начала работы модели) и временем, необходимым для обработки. Для анализа эффективности работы системы необходимы данные о времени ожидания процесса и времени, которое он суммарно провел в системе. Для дисциплины обслуживания RR необходим такой атрибут процесса, как приоритет.

Информация о том, как происходит обработка каждого процесса, отображаете в виде диаграммы. Также процесс может быть готов/не готов к обработке, обработан не обработан.

В связи с этим введем следующие поля для класса Process:

private double timeOfEvaluation - время, необходимое для обработки процесса;

private double timeOfReady - время готовности процесса;

private double timeOfWaiting - время, которое процессор ожидал своей обработю находясь в очереди;

private double timeOfServe - время, в течение которого процесс находился в системе:

private bool isProcessed - флаг, показывающий, обработан ли процесс;

private string diagram = "" - диаграмма обработки процесса;

private int number = 0 - порядковый номер инициализации процесса.;

private double timeOfProcessing - переменная-счетчик, показывающая текущее время нахождения процесса в системе;

private double timeOfEvaluationConst - дополнительная переменная: время, необхс димое для обработки процесса;

private int priority - приоритет процесса;

private bool isReady false - флаг, показывающий, готов ли процесс к обработке да данного процессора (см. класс процессор).

Для всех переменных закрытого типа созданы свойства. Среди методов класса только его конструктор, который служит для задания определенных характеристик пpоцессу при его создании.

Класс Processor. Процессор производит обработку каждого отдельного процесс Процессор характеризуется временем смены контекста. Также для анализа работ системы нам необходимо запоминать время простоя процессора, время, которое сработал (производил обработку процессов), а также количество смен контекста.

Таким образом, класс Processor имеет следующие поля:

private double timeOfWork - время работы процессора;

private double timeOfldle - время простоя процессора;

private int numCont = 0 - количество смен контекста;

private double timeCont - время, необходимое для смены контекста.

Для всех закрытых переменных созданы свойства. Однако особенным являет свойство Time, которое содержит общее время, которое процесс функционирует с м мента начала работы всей модели. Среди методов этого класса только его конструктор

Class Systema. Класс Systema выполняет создание очередей процессов и процесс ров. Также система может быть проинициализирована (т.е. создана), а впоследствр запущена. При создании системы также необходимо сразу обозначить следующие характеристики:

-количество процессоров;

-время, необходимое для смены контекста;

-количество приоритетов (в дисциплинах обслуживания с приоритетами);

-длительность (время) кванта.

Таким образом, класс Systema должен содержать следующие поля: public ArrayList ALPr = new ArrayList(); - очередь процессоров;

public ArrayList AL = new ArrayList(); - очередь процессов;

private int numProc = 0; - количество процессоров;

private double timeCont; - время, необходимое для смены контекста private bool isStarted=false; - флаг, показывающий, запущена система или нет; private bool islnitialazed = false; - флаг, показывающий, проинициализирована ли система;

private double timeOfQuantum; - время кванта; private int numberOfPriorities; - количество приоритетов;

Для всех переменных закрытого типа созданы свойства. Система выполняет выборку свободных процессоров и необработанных процессов из соответствующих очередей. Для этого необходима сортировка каждой из очереди.

Создаем для этого следующие методы:

public ArrayList SortProc(ArrayList AList). Метод сортирует очередь процессоров по времени их работы в порядке возрастания;

public ArrayList Sort(ArrayList AList, int parameter). Метод сортирует очередь процессов.

Возможны три варианта обработки очереди процессов, в зависимости от передаваемого параметра.

  1. Сортировка очереди по времени готовности.

  2. Сортировка очереди процессов по времени их обработки.

  3. Сортировка очереди процессов по порядку, в котором они были созданы.

Система также проводит обработку процессов. Это выполняется методом public void Handle(string Discipline). Метод принимает параметр Discipline, который обозначает дисциплину обслуживания. В зависимости от принятого параметра система проводит выборку процессов из очереди и их обработку.

Система проводит также проверку очереди процессов на наличие необработанных процессов. Данная функция осуществляется методом public bool IsAny(), который возвращает значение «Истина» в случае, если необработанные процессы еще существуют, и значение «Ложь», если такие процессы отсутствуют.

Методы WriteToFile(), InformationOfProcesses(), InformationOfProcessors() формируют строку, содержащую соответственно информацию по диаграмме обработки каждо­го процесса, общую информацию о каждом процессе из очереди и каждом процессоре из очереди.