- •1.Аналитическая часть
- •1.1.Постановка задачи
- •1.2.Операционная система и процессы
- •1.3.Модель функционирования параллельных программ.
- •1.3.1. Понятие ресурса
- •1.3.2. Организация программ как системы процессов
- •1.4.Алгоритм планирования процессов
- •2.Построение объектной модели
- •2.1.Анализ предметной области и построение модели
- •2.2.Формализация задачи
- •3. Формирование объектной модели.
- •3.1. Идентификация объектов и классов.
- •3.2. Идентификация семантики классов.
- •3.3. Идентификация отношений между классами.
2.2.Формализация задачи
Итак, проанализировав предметную область, наметив общие черты модели и рассмотрев детали проектирования отдельных важных элементов, сопоставим предварительный результат и постановку задачи. Дополним описание системы следующими характеристиками:
1. Будем считать, что квант времени принимает целочисленное значение. То есть длина элементарного кванта времени, время жизни процесса, увеличение кванта времени при переходе от одной очереди к другой – это целое положительное число.
2. Созданные процессы помещаются в очередь 0.
3. Из-за отсутствия каких-либо условий и ограничений на моменты времени запроса и освобождения ресурса будем считать, что эти события происходят случайным образом с вероятностью 50%. Так же определение номера необходимого ресурса будет происходить случайно.
4. Решение о переходе процесса из одной очереди в другую будет приниматься не сразу, как это нам предписывает классический алгоритм, а после работы процесса в данной очереди в течение некоторого количества квантов времени. Для обеспечения такого механизма в систему необходимо включить структуру, в которой будет храниться информация о количестве попыток блокировки процесса и собственно количестве блокировок. Кроме того, определим «коэффициент адекватности», как отношение количества квантов времени ,в течение которых процесс находится в данной очереди, к количеству блокировок процесса. Коэффициент и количество квантов времени, необходимое для принятия решения о переходе являются параметрами системы.
3. Формирование объектной модели.
3.1. Идентификация объектов и классов.
Реализуем нашу модель с использованием технологий объектно-ориентированного программирования. Преимущества такого подхода очевидны: анализ предметной области показал, что каждую логическую единицу (процесс, операционная система) можно рассматривать по отдельности и во взаимосвязи с остальными понятиями; видны структурные сходства некоторых элементов системы, что позволяет нам использовать принципы наследования. Кроме того, объектно-ориентированная модель в полной мере отражает сущность исследуемой области, позволяя нам эффективно и все цело описать построенную модель. Этап построения объектной модели позволил нам получить набор данных, пригодных для окончательного определения объектов и классов, моделирующих исследуемую систему.
Итак, объектно-ориентированная модель включает следующие классы:
Очередь(QueueProc)
Процесс (Process).
Планировщик(Scheduler).
Его смысл будет раскрыт при дальнейшем проектировании модели.
3.2. Идентификация семантики классов.
Рассмотрим выделенные нами классы. Каждый из них наделим методами и свойствами, выделенными при анализе системы и необходимыми для организации взаимодействия с остальными элементами модели.
Как отмечалось выше, очередь процессов готовых к выполнению и список заблокированных процессов могут быть реализованы с использованием одной организационной структуры – очередь, так как список в понимании нашей модели может быть представлен в виде очереди. Все процессы из этого списка в реальных системах извлекаются случайным образом, но мы не ограничим общности и не изменим смысла модели, если будем пытаться извлекать элементы по принципу FIFO, в силу того что в такое событие для конкретного элемента носит случайный характер.
Приведем полное описание методов и полей каждого класса:
Название класса |
Название поля/метода |
Описание |
1.QueueProc |
int n; |
Количество элементов |
int quant; |
квант |
|
Add(Process p) |
Добавляем процесс в очередь |
|
Process Get_Process() |
Достает элемент из очереди |
|
int Get_n() |
Возвращает количество элементов в очереди |
|
int Get_Quant() |
Возвращает количество времени которое дает очередь |
|
2.Process |
int identifier; |
Номер процесса |
string Info() |
Вывод информации о процессе |
|
String action; |
Действие |
|
String condition; |
Состояние |
|
int CPU_burst; |
Сколько времени требуется процессу до блокировки |
|
3. Scheduler |
QueueProc queue0; |
Очередь с нулевым приоритетом |
QueueProc queue1; |
Очередь с первым приоритетом |
|
QueueProc queue2; |
Очередь со вторым приоритетом |
|
QueueProc queue3; |
Очередь с третьим приоритетом |
|
Process CreateProcess(int) |
Создание процесса |
|
Sort(Process, int) |
Сортировка процессам по очередям |
|
void Start() |
Запуск планировщика |
|
void RunProcess(QueueProc) |
Запуск процесса |