Модель обслуживания процессов с абсолютными приоритетами

 

1. Теоретическая часть


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

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

Существует четыре основных события для создания процесса [4]:

·инициализация системы

·создание процессом

·создание пользователем

·инициализация пакетного задания

При запуске операционной системы сразу создается несколько процессов. Некоторые из них являются высокоприоритетными, взаимодействующими с пользователем и выполняющие для него определенную работу. Остальные являются фоновыми процессами и выполняют ряд специфических функций. Фоновые процессы называются демонами. У больших систем насчитываются десятки демонов.

В системах Unix для создания процесса существует единственный системный вызов fork. В системе Windows для этого используется функция CreateProcess.

Завершение процесса происходит после одного из следующих событий[2]:

·обычного выхода (добровольно)

·при возникновении ошибки (добровольно)

·возникновение фатальной ошибки (принудительно)

·уничтожение другим процессом (принудительно)

За время своего существования процесс может находиться в различных состояниях:

·выполняемый (команды программы выполняются в процессоре)

·ожидающий (процесс ожидает завершения некоторого события, чаще всего операции ввода - вывода)

·готовый (процесс ожидает освобождения процессора, занятого другим процессом)

·завершенный (процесс завершил свою работу)

Планирование процессов

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

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

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

В операционных системах универсального назначения планирование является динамическим, т.е. решение принимается во время работы системы на основе анализа текущей ситуации. В данном случае, найденное решение почти ни когда не бывает оптимальным.

В специализированных системах с определенным набором задач применяется статическое (предварительно) планирование. В этом случае планировщик принимает решение заранее, а не во время работы системы. В результате работы планировщика формируется таблица с указанием имени процесса и времени его обработки в процессоре. Статическое планирование меньше нагружает работу системы, чем динамическое планирование.

При планировании процессов применяются следующие алгоритмы:

«Первый пришел - первым обслужен», является наипростейшим из всех алгоритмов. Приоритет процесса не учитывается. Центральный процессор предоставляется каждому из процессов в порядке поступления запросов. При блокировке выполняемого процесса, запускается следующий процесс, стоящий в очереди. Когда заблокированный процесс переходит в состояние готовности, он поступает в конец очереди.

«Наименьший срок исполнения», является неприоритетным алгоритмом, учитывающим время исполнения процесса. При поступлении заявок, в первую очередь обрабатываются процессы с наименьшим временем исполнения. Данный алгоритм оптимален, если все задания доступны одновременно.

«Циклическое планирование». Каждому процессу назначается определенный квант времени для использования процессора. При истечении кванта времени выполняемый процесс блокируется, управление передается следующему процессу.

«Приоритетное планирование». Каждому процессу присваивается определенный приоритет, в зависимости от которого, он занимает место в очереди. В данной курсовой работе используется приоритетное планирование.


2. Описание программы

процесс программа приоритет квант

2.1 Формулировка задания на разработку программы


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

При таком варианте обслуживания процессы обрабатываются в течение фиксированного интервала (кванта) времени. При поступлении нового процесса с более высоким приоритетом, чем обслуживаемый, выполнение последнего останавливается, и начинается обработка только что поступившего. Из уже частично обработанных, но не завершенных, и вновь поступивших в систему процессов формируется очередь. Для выполнения в течение следующего кванта времени из очереди выбирается процесс с наибольшим приоритетом. Если в очереди оказалось два или более процессов с одинаковыми приоритетами, то они обслуживаются в порядке их частичной обработки. Тот процесс, который обрабатывался последним, будет обработан первым и наоборот. Процесс, выполнение которого прекращено, поступает в очередь и вновь продолжит выполнение тогда, когда в момент наступления очередного кванта времени его приоритет окажется наибольшим из находящихся в очереди.

. Исходные данные:

·поток заявок на выполнение процессов (имя заявки, время поступления, приоритет, время исполнения).

2. Результаты работы модели, отображаемые на дисплее, должны для каждого момента времени, когда состояние системы изменяется, включать номер обслуживаемого процесса или фиксировать режим ожидания, а так же список процессов, составляющих очередь. Кроме этого возможна графическая интерпретация результатов работы программы, например в виде диаграммы выполнения процессов.

2.2 Описание алгоритма и перечень задаваемых исходных данных


В данной программе содержится алгоритм обработки массива структур, содержащих описание процессов (имя процесса, время поступления, приоритет, время исполнения).

На начальном этапе определяется количество поступивших заявок, в соответствие с чем инициализируется массив структур определенного размера, с проверкой входных данных.

Если инициализация прошла успешно (без ошибок) далее выполняется алгоритм, выбирающий следующий процесс на выполнение. При завершении процесса, его приоритет меняется на значение 0, что соответствует статуту «выполнен». Алгоритм содержит бесконечный цикл, завершающийся при выполнении всех процессов. В цикле идет отсчет времени.

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


2.3 Исходный текст программы


using System;

using System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Linq;System. Text;System. Windows. Forms;System.IO;Kursovaya_Form

{partial class Form1: Form

{proc // структура процессов

{string name;int priority;int time_in;int time_execution;

}Form1 ()

{();

}void button1_Click (object sender, EventArgs e)

{r = File. ReadAllLines («d:\\data.txt»).Length; // переменная, указывающая колличество процессов[] all = new proc[r]; // определение массива стуктур процессовright_input = true; // при некорректных входных данных получает значение falseex_prc_id = 0; // номер исполняемого процесса в массивеtime = 0;status = true; // при выполнении всех процессов получает значение false

// попытка считывания данных

{line;

string path = «d:\\data.txt»;sr = new StreamReader(path);j = 0;((line = sr. ReadLine())!= null)

{[] spots = line. Split (', ');[j].name = spots[0];[j].time_in = int. Parse (spots[1]);[j].priority = int. Parse (spots[2]);[j].time_execution = int. Parse (spots[3]);

// проверка приоритета(all[j].priority > 5 || all[j].priority < 1)

{new Exception();

}. AppendText (all[j].name + «Time in:» + all[j].time_in +» Priority:» + all[j].priority +» Ex: «+ all[j].time_execution + «\n»);++;


}. Close();


}(Exception ex) // выдача ошибки

{_input = false;. Show («Некорректные входные данные»);

}(right_input) // следующие действия выполняются, если входные данные корректны

{(int i = 1; i < r; i++) // выбор процесса, с наименьшим временем и большим приоритетом. Будет выполняться первым.

{(all [ex_prc_id].time_in > all[i].time_in)

{ex_prc_id = i;}(all [ex_prc_id].time_in == all[i].time_in && all [ex_prc_id].priority < all[i].priority)

{ex_prc_id = i;}

}(status) // бесконенчный цикл, является таймером

{

int s = 0;

string line=»»; // содержит имена процессов в очереди

for (int i = 0; i < r; i++) // выбор процесса для выполнения

{

// зануление приоритета выполненного процесса(all [ex_prc_id].time_execution == 0) all [ex_prc_id].priority = 0;

// выбор процесса, получающего управление процессором(all[i].time_in <= time && all [ex_prc_id].priority < all[i].priority && all[i].time_execution!= 0)

{ex_prc_id = i;}

// проверка выполнения процессов, если равно 0 - выход из цикла

s += all[i].priority;

}

// инициализация переменной line, содержит имена процессов в очереди

for (int i = 0; i < r; i++)

{if (all[i].time_in <= time && i!=ex_prc_id && all[i].time_execution!= 0) line += all[i].name+»»;}

// если все процессы выполнены(s == 0) status = false;

// заполнение таблицы(all [ex_prc_id].time_in <= time && all [ex_prc_id].time_execution > 0)

{. Rows. Add (time, all [ex_prc_id].name, «выполнение», line);[ex_prc_id].time_execution -;

}{dataGridView1. Rows. Add (time, «», «бездействие»);}


time++;

}

}

}

}

}


2.4 Описание тестовых примеров исходных данных и результатов работы программы


Входной файл содержит следующие данные:



Результат работы программы:



1. Теоретическая часть Процесс является одним из основных понятий в операционной системе. Это абстракция, описывающая выполняющуюся программу. Процессы п

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ