Файл: Курсовая работа по дисциплине операционнные системы Тема курсовой работы Исследование алгоритмов планирования многопоточных вычислительных процессов.doc
Добавлен: 29.11.2023
Просмотров: 94
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Обработка процессов здесь происходит не полностью, как во всех других алгоритмах, а по квантам (определенным промежуткам процессорного времени). Кроме того нужно выбирать не просто первый пришедший процесс, а также ориентироваться на приоритет процесса. Поэтому из общей очереди выбираются сначала процессы с наивысшим приоритетом, сравнивается время поступления и процессорное время, и или процесс «поступил», то к его времени обработки, а также ко времени процесс прибавляется время кванта. Как только время обработки процесса станет равным времени, требуемому на его обработку, можно считать процесс обработанным.
Кроме обработки, на каждом шаге обработки формируется диаграмма обработки процессов. Таким образом, объект система должен вести обработку процессов, а также реализовывать сортировки и проверки, требуемые для определенного алгоритма.
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). Метод сортирует очередь процессов.
Возможны три варианта обработки очереди процессов, в зависимости от передаваемого параметра.
-
Сортировка очереди по времени готовности. -
Сортировка очереди процессов по времени их обработки. -
Сортировка очереди процессов по порядку, в котором они были созданы.
Система также проводит обработку процессов. Это выполняется методом public void Handle(string Discipline). Метод принимает параметр Discipline, который обозначает дисциплину обслуживания. В зависимости от принятого параметра система проводит выборку процессов из очереди и их обработку.
Система проводит также проверку очереди процессов на наличие необработанных процессов. Данная функция осуществляется методом public bool IsAny(), который возвращает значение «Истина» в случае, если необработанные процессы еще существуют, и значение «Ложь», если такие процессы отсутствуют.
Методы WriteToFile(), InformationOfProcesses(), InformationOfProcessors() формируют строку, содержащую соответственно информацию по диаграмме обработки каждого процесса, общую информацию о каждом процессе из очереди и каждом процессоре из очереди.
4.6.2. Разработка пользовательского интерфейса
Для того чтобы проводить анализ работы системы, максимально удобно создан графический интерфейс программы. При запуске программы пользователю открывается окно, где ему предлагается сначала выбрать дисциплину обслуживания. Далее он должен задать характеристики системы. Пользователь определяет количество процессоров в системе, время смены контекста, количество приоритетов, время кванта. Причем даже в дисциплинах обслуживания, в которых не требуется задание количества приоритетов и времени кванта, необходимо ввести эти характеристики для сравнения дисциплин обслуживания в будущем. Для дальнейшей работы необходимо проиници- ализировать систему нажатием клавиши с одноименной надписью.
Далее у пользователя есть два варианта. Во-первых, он может создать очередь процессов самостоятельно, задав для каждого из них все характеристики. Во-вторых, есть возможность создать очередь автоматически. При этом все атрибуты процессов создаются случайным образом при использовании объекта RandObj класса Random.
После выполнения всех этих действий можно начать моделирование. Пользователь должен нажать для этого кнопку «Начать моделирование». После этого выдаются результаты работы модели.
Результаты включают в себя:
-
время ожидания каждого процесса; -
время обработки процесса (время, которое процесс провел в системе); -
время работы процессора; -
время его простоя; -
среднее время ожидания процессов; -
среднее время обработки процессов; -
среднее время работы процессоров; -
среднее время простоя процессоров.
Все эти показатели выводятся в форме сразу после окончания моделирования. Ест: возможность просмотреть диаграммы обработки процессов. Для этого необходимо нажать на кнопку «Вывести диаграмму». В этом случае открывается вторая форма.
Она содержит следующее.
-
Диаграмму обработки каждого из процессов. Диаграмма состоит из символов «О» «И» и «Г». Символ «О» соответствует поступлению процесса в очередь. Символ «И соответствует обработке процесса. Символ «Г» соответствует состояние процесс «Готов», когда процесс находится в очереди, но не обрабатывается в процессором. Во всех дисциплинах, кроме RR, один символ соответствует одной секунде. В R1 каждый символ соответствует кванту процессора. -
Время готовности, время ожидания, время обработки и длительность непосредственной обработки каждого из процессов. -
Время простоя, время работы, количество смен контекста и время, потраченное на смены контекста каждого из процессоров.
Все эти данные можно записать в файл. Для этого пользователю необходимо нажать на кнопку «Сохранить в файл», после чего выведется диалоговое окно с возможностью ввода имени файла или выбора существующего файла для сохранения.
По окончании работы модели можно завершить работу с моделью и закрыть форму. Имеется возможность продолжить работу с моделью. Следует заметить, что продолжить работу можно и с исходными данными, заданными в предыдущем моделировании. Это очень важно при сравнении и анализе работы разных дисциплин обслуживания. Для этого создается глобальный экземпляр Sys класса Systema, который содержит в себе всю информацию и производит обработку в соответствии с выбранной дисциплиной обслуживания.
Форма позволяет выбирать дисциплину обслуживания, для этого разработана система кнопок, объектов класса RadioButton. Форма также позволяет задавать характеристики системы и атрибуты процессов. Для этого созданы соответствующие текстовые поля ввода. Для инициализации системы, автоматического создания очереди Randomize) и начала моделирования, а также переключения между процессами и профессорами при выводе результатов, вывода диаграммы, сохранения в файл созданы снопки, объекты класса Button.
Форма 1
Для корректности работы программы в коде формы в обработчиках событий обозначены все необходимые проверки корректности ввода и последовательности действий, выполняемых пользователем.
Форма 2 позволяет вывести результаты моделирования. В данной форме взаимодействия с пользователем не нужно, поэтому и не предусмотрено.
Форма 2
5. Анализ работы программы
5.1. Пример 1. Рассмотрим пример работы программы. Для этого производим ее запуск. Далее выбираем дисциплину обслуживания FIFO. Как уже указывалось выше, ввести нужно все характеристики, в том числе и время кванта, и количество приоритетов. Выберем характеристики системы: 3 процессора, время смены контекста - 2 мс, время кванта 20 мс, количество приоритетов - 3.
Создаем очередь процессов автоматически. Очередь состоит из 7 процессов. Их характеристики приведены в таблице результатов. Результаты работы с моделью показаны ниже.
Результаты моделирования
Сразу очевидна разница в количестве смен контекста, т.к. в алгоритме FIFO смены контекста происходят только при полной обработке каждого из процессов. В алгоритме RR смена контекста в процессоре происходит после каждого кванта обработки процесса.