Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Рекомендации по реализации подсистемы управления процессами




 

Модель операционной системы. Для создания модели операционной системы предлагается разработать класс OS, в интерфейс которого входят вышеперечисленные API-функции подсистемы управления процессами.

class OS {

OS() {...};

public int CreateProcess(int ProcType, int baseprior)

{

...

return pid;

}

public void MyResume(int pid) {

...

}

public void MySuspend(int pid){

...

}...

}

 

}

В состав класса OS необходимо включить информацию об очереди процессов, ожидающих времени процессора. Как известно, процесс в реальных ОС, представляется двумя информационными структурами: дескриптором и контекстом. В нашей модели в состав дескриптора необходимо, как минимум, включить:

class Description {

int pid; //Уникальный идентификатор процесса

int state; //Состояние процесса

int prior; //Приоритет

MyProcess context; //Указатель на контекст процесса

...

}

 

Очередь дескрипторов рекомендуется реализовать одним из классов, реализующим интерфейс Collection или List, например ArrayList.

Модель процесса. Как следует из предыдущего раздела, в учебной операционной системе модель процесса представляет собой поток, который в вечном цикле выполняет действия, определенные вариантом задания, а также случайным образом вызывает API-функции управления процессами.

Приведем пример описания класса потока, который выводит в окно терминала текущее время:

class NTimerThread implements Runnable{

Thread t;

 

NTimerThread () //Конструктор класса

{

t = new Thread(this); //создаем новый поток

t.start(); //и запускаем его

}

 

public void run() //определяем действия, которые выполняет

//поток

{

try

{

while (true) //Поток выполняется в вечном цикле

{

Date d=new Date(); //Получаем текущую дату

System.out.println(d.toString()); //Переводим ее в

// строку

Thread.sleep(1000); //Приостанавливаем себя на

//секунду, чтобы дать возможность

//отработать другим и вывести

//следующее время ровно через секунду

}

} catch (InterruptedException e) {

System.out.println("Thread");

}

}

};

Данная модель процесса не имеет точек соприкосновения с моделью подсистемы управления процессами. Для реализации взаимодействия необходимо использовать вышеописанные функции управления процессами. Например, с вероятностью 0.2 поток-модель завершает свою работу:

while (true) //Поток выполняется в вечном цикле

{

Random rand= new Random();

Date d=new Date(); //Получаем текущую дату

System.out.println(d.toString()); //Переводим ее в

// строку

Thread.sleep(1000); //Приостанавливаем себя на

//секунду, чтобы дать возможность

//отработать другим и вывести

//следующее время ровно через секунду

if (rand.nextDouble()<0.2) os.myterminate(pid);

//С вероятностью 0.2 завершаем себя с помощью //API нашей операционной системы

}

Здесь os - объект типа OS, а pid - дескриптор модели процесса. Для того чтобы, модель процесса могла знать свой идентификатор, а планировщик процессов мог управлять процессами вне зависимости от их типов, предлагается использовать универсальный абстрактный класс для описания сущности "модель процесса (контекст)":

abstract class MyProcess implements Runnable

{

int pid;

Thread t;

...

public void resume()

{

t.start();

}

public void suspend()

{

t.suspend();

}

public void terminate()

{

t.stop();

}

...

 

}

 

Тогда,

class NThread extends MyProcess implements Runnable{

 

OS os;

 

NThread (OS myos, int apid){

os=myos;

pid=apid;

t = new Thread(this);

...

}

Планировщик процессов. В состав подсистемы управления процессами должна входить, функция void MainKernel (), которая реализует заданный вариантом задания алгоритм планирования процессов и распределяет процессорное время. Эта функция запускается автоматически после старта модели ОС и выполняется в вечном цикле до завершения работы. Рекомендуется помещать данную функцию в отдельный поток исполнения. Примерный алгоритм работы функции mainkernel:

1) Выбрать из очереди готовых процессов процесс, которому будет предоставлен квант машинного времени;

2) Перевести процесс в состояние выполнения. Для этого использовать метод MyProcess.resume();

3) Предоставить квант времени для исполнения процесса (можно использовать Threed.sleep() для приостановки потока);

4) Остановить выбранный процесс по истечению его кванта, например использовать MyProcess.suspend();

5) Проверить состояние процесса. Если он завершен – удалить дескриптор процесса из очереди.

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

 

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

При реализации интерфейса необходимо, как минимум, разделить потоки сообщений, генерируемых моделями процессов и потоки команд управления операционной системой. В связи с этим, предлагается в потоках исполнения использовать вывод в консоль (System.out.println()).Интерфейс управления реализовать в виде фрейма

Рисунок 1.3 – Интерфейс подсистемы управления процессами

 

В командной строке пользователь модели вводит команду управления. Рекомендуется, как минимум, реализовать следующие команды:

1) Создание нового процесса: exec T P, где T - тип процесса, P - приоритет (Например, exec 1 6).

2) Уничтожение существующего процесса: kill PID, где PID - идентификатор уничтожаемого процесса.

3) Вывод списка процессов: ps.

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

 





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 407 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

2382 - | 2132 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.