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

Научно исследовательский институт

Высшая школа экономики

Московский государственный институт электроники и математики

(Технический университет)

Кафедра информационных и автоматизированных систем

Отчет по лабораторным работам

Группа __АП-32__

Выполнил студентка

__Стахи Алина __

(ФИО)

Руководитель

__Витушкин П.И .

(ФИО)

МОСКВА 2012

Лабораторная работа №1. «Программная реализация средств представления и управления процессами в многопрограммных ОС».

  1. Постановка задачи

При выполнении лабораторной работы необходимо разработать алгоритм и составить программу, имитирующую работу простейшей ОС, (в дальнейшем будем называть ее "системой"), которая должна выполнять перечисленные ниже действия:

– формирование дескрипторов процессов, вводимых в "систему";

– определение состояний, в котором находятся все известные "системе" процессы;

– формирование и ведение списочных структур ("очередей") дескрипторов на основании их состояний, приоритетов и используе­мой дисциплины диспетчеризации;

  1. Структура программы

Программа содержит:

#include <vcl.h>

#pragma hdrstop

#include "Process.h"

#include <cstdlib>

#include <iostream>

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int n=-1,j=0,flag=0;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::InpNum(char &Key)

{

if ((Key>='0')&&(Key<='9')) return;

if (Key==DecimalSeparator){

if ((Edit1->Text).Pos(DecimalSeparator)!=0) Key=0; return;}

if (Key==VK_BACK) return;

if (Key==VK_RETURN) {Edit2->SetFocus(); return;}

Key=0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

int i;

AnsiString c;

if (Edit2->Text!=NULL&&Edit3->Text!=NULL) {

if (StrToInt(Edit3->Text)<StrToInt(Edit5->Text)){

n++;

Edit5->Text=IntToStr(StrToInt(Edit5->Text)-StrToInt(Edit3->Text));

Edit6->Text=IntToStr(StrToInt(Edit6->Text)+StrToInt(Edit3->Text));

ListBox1->Items->Add(Edit1->Text);

ListBox2->Items->Add(Edit2->Text);

ListBox3->Items->Add(Edit3->Text);

ListBox4->Items->Add("0");

ListBox5->Items->Add("ready");

Edit1->Text='\0';

Edit2->Text='\0';

Edit3->Text='\0';

for (i=0;i<n-1;i++)

{

if (StrToInt(ListBox2->Items->Strings[i])<StrToInt(ListBox2->Items->Strings[i+1]))

{

c=ListBox2->Items->Strings[i];

ListBox2->Items->Strings[i]=ListBox2->Items->Strings[i+1];

ListBox2->Items->Strings[i+1]=c;

}

}}}}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)

{

InpNum(Key);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit3KeyPress(TObject *Sender, char &Key)

{

InpNum(Key);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit4KeyPress(TObject *Sender, char &Key)

{

InpNum(Key);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit7KeyPress(TObject *Sender, char &Key)

{

InpNum(Key);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit5KeyPress(TObject *Sender, char &Key)

{

InpNum(Key);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit6KeyPress(TObject *Sender, char &Key)

{

InpNum(Key);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

if (n>=0){

Edit5->Text=IntToStr(StrToInt(Edit5->Text)+StrToInt(ListBox3->Items->Strings[ListBox5->ItemIndex]));

Edit6->Text=IntToStr(StrToInt(Edit6->Text)-StrToInt(ListBox3->Items->Strings[ListBox5->ItemIndex]));

ListBox1->Items->Delete(ListBox1->ItemIndex);

ListBox2->Items->Delete(ListBox2->ItemIndex);

ListBox3->Items->Delete(ListBox3->ItemIndex);

ListBox4->Items->Delete(ListBox4->ItemIndex);

ListBox5->Items->Delete(ListBox5->ItemIndex);

n--;

}}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox2Click(TObject *Sender)

{

ListBox1->ItemIndex=ListBox2->ItemIndex;

ListBox3->ItemIndex=ListBox2->ItemIndex;

ListBox4->ItemIndex=ListBox2->ItemIndex;

ListBox5->ItemIndex=ListBox2->ItemIndex;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox3Click(TObject *Sender)

{

ListBox1->ItemIndex=ListBox3->ItemIndex;

ListBox2->ItemIndex=ListBox3->ItemIndex;

ListBox4->ItemIndex=ListBox3->ItemIndex;

ListBox5->ItemIndex=ListBox3->ItemIndex;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox4Click(TObject *Sender)

{

ListBox1->ItemIndex=ListBox4->ItemIndex;

ListBox2->ItemIndex=ListBox4->ItemIndex;

ListBox3->ItemIndex=ListBox4->ItemIndex;

ListBox5->ItemIndex=ListBox4->ItemIndex;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox1Click(TObject *Sender)

{

ListBox2->ItemIndex=ListBox1->ItemIndex;

ListBox3->ItemIndex=ListBox1->ItemIndex;

ListBox4->ItemIndex=ListBox1->ItemIndex;

ListBox5->ItemIndex=ListBox1->ItemIndex;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

ListBox5->Items->Strings[ListBox5->ItemIndex]="freeze";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox5Click(TObject *Sender)

{

ListBox1->ItemIndex=ListBox5->ItemIndex;

ListBox2->ItemIndex=ListBox5->ItemIndex;

ListBox3->ItemIndex=ListBox5->ItemIndex;

ListBox4->ItemIndex=ListBox5->ItemIndex;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)

{

if (ListBox5->Items->Strings[ListBox5->ItemIndex]=="freeze")

ListBox5->Items->Strings[ListBox5->ItemIndex]="ready";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

AnsiString c;

c=ListBox2->Items->Strings[1];

ListBox2->Items->Strings[1]=ListBox2->Items->Strings[0];

ListBox2->Items->Strings[0]=c;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if (ListBox5->Items->Strings[j]=="active") {

ListBox5->Items->Strings[j]="ready";

ListBox4->Items->Strings[j]=IntToStr(StrToInt(ListBox4->Items->Strings[j])+1);

j++;}

if (j<=n) while (j<=n&&ListBox5->Items->Strings[j]!="ready") j++;

if (j>n) j=0; else if (ListBox5->Items->Strings[j]=="ready") ListBox5->Items->Strings[j]="active";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int i;

for (i=0;i<10;i++){

Sleep(200);

if (ListBox5->Items->Strings[j]=="active") {

ListBox5->Items->Strings[j]="ready";

ListBox4->Items->Strings[j]=IntToStr(StrToInt(ListBox4->Items->Strings[j])+1);

j++;}

if (j<=n) while (j<=n&&ListBox5->Items->Strings[j]!="ready") j++;

if (j>n) j=0; else if (ListBox5->Items->Strings[j]=="ready") ListBox5->Items->Strings[j]="active";}

}

//---------------------------------------------------------------------------

Контрольные вопросы к Л.Р. №1.

  1. Процесс – абстракция, вводимая для описания механизма функционирования ОС. ОС рассматривает процессы как единицы, между которыми необходимо распределить и перераспределять ресурсы ВС. В силу естественной ограниченности ресурсов ВС не все запросы на использование ресурсов, выдаваемые различными процессами, могут быть удовлетворены сразу после их поступления к ОС. Это является причиной того, что процессы, кроме всего прочего, отличаются друг от друга тем, в какой степени и на какие ресурсы их запросы удовлетворены; последнее, а также статус и характер использования программы, о которой ассоциируется данный процесс, определяет состояние процесса. По мере удовлетворения запросов ресурсов, процесс переходит из одного состояния в другое. Причиной изменения состояний процессов в разработанной системе является команда пользователя.

  2. Выбор (имя процесса): готовность -> выполнение

Истечение _кванта (имя процесса): выполнение -> готовность

Запрос_ресурса (имя процесса, вид ресурса): выполнение -> ожидание_ресурса.

Выделение_ресурса (имя процесса, вид ресурса):ожидание_ресурса -> готовность.

Состояния процессов и возможные переходы.

Пассивные состояния

Активные состояние

Запуск

Приостановка

Порождение

Возобновление

Прекращение

Удаление

Завершение

3. Переход процессов из одного состояния в другое

Готовность

Выполнение

Выбор

Запуск Завершение

Истеч. кванта

Выделение ресурса Запрос ресурса

П

Ожидание

риостановка/

П рекращение

В озобновление

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

Краткое описание команд взаимодействия:

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

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

3. Изменить приоритет активного процесса – указав новый приоритет процесса пользователь может присвоить это значение приоритета активному процессу.

4. Запрос операции ввода\ вывода – необходимо указать номер процесса, который должен потребовать операцию ввода\вывода, затем, указать номер процесса, которому выделили ресурс ввода\вывода\

5. Квант времени – нажатие на эту кнопку аналогично истечению кванта времени при работе ЦП. Активный процесс переводится в пассивное состояние, среди готовых процессов выбирается процесс, который следующим будет переведен в активное состояние.

Л.Р. № 2«Изучение дисциплин диспетчеризации процессов в многопрограммных ос»

Контрольные вопросы к Л.Р. №2.

1. Чем продолжительнее квант времени, тем дольше ЦП обрабатывает один процесс. Остальные процессы в это время будут находиться в состоянии готовности или ожидания, будут ждать освобождения ЦП.

2. При выполнении операции Выбор процесс, дескриптор которого расположен в начале i-той очереди (1<=i<=n), будет помещен в состояние выполнение только в том случае, если все очереди от первой до (i-1)-ой – пустые. Выполнение выбранного процесса будет осуществляться в течение кванта времени (если, конечно, не произойдет операция диспетчеризации Запрос_ресурса, Завершение или какая-либо другая операция планирования процессов в отношении данного выполняемого процесса). После истечения кванта времени, вследст­вие выполнения операции диспетчеризации Истечение_кванта времени ЦП произойдет перевод процесса из состояния выполнение в состоя­ние готовность и его дескриптор поступает в конец очереди с номером i+1.

Последующая за этим операция Выбор переведет в состояние выполнение тот процесс, дескриптор которого стоит в начале очереди с самым младшим номером. Таким процессом может оказаться процесс, дескриптор которого стоял следующим в очереди i или в очереди i+1 (при условии, что после выбора процесса из очереди i последняя оказалась пустой). Дескриптор процесса, переводимого из пассивного состояния в активное (с помощью операции Запуск), поступает в первую очередь (i=1). Если это имеет место быть, после окончания кванта времени ЦП, выделенного для выполнения процесса из очереди i, будет осуществлен запуск процесса, дескриптор которого помещен в очередь номер 1.

Данная схема обеспечивает быстрое выполнение наиболее коротких процессов.

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

Лабораторная работа № 3. "Реализация дисциплин диспетчеризации процессов с учетом приоритетов".