Лабораторная работа №8


Тема: Создание имитационной модели «Модель управления ресурсами в локальной вычислительной сети»

Цель: на примере имитационной модели «Модель управления ресурсами в локальной вычислительной сети» реализовать замкнутую задачу

1. Описание моделируемого процесса

Локальная вычислительная сеть (ЛВС) имеет один процессор, один винчестер и несколько пользовательских терминалов. Пользователи посылают операционной системе OS UNIX запросы на выполнение своих прикладных задач, которые содержат некоторое количество операций ввода-вывода (I/O). Посланный запрос поступает на обработку процессором (CPU). По каждому запросу создается процесс, который начинает работать в ЛВС. Созданному процессу OS UNIX выделяет участок памяти (RAM) и затем несколько буферов I/O (ресурсы ЛВС). Процессы, требующие меньший объем ресурса, имеют больший приоритет при его выделении. Если ресурсов ЛВС недостаточно для очередного процесса, он ожидает освобождения ресурса другими процессами. После этого процесс получает доступ к винчестеру (HDD) для выполнения одной операции I/O. Процесс, завершивший свою работу, освобождает занимаемые им ресурсы, возвращая их операционной системе.

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

Таблица 1

Параметры модели

Параметр Среднеезначение
Количество пользователей 50
Время обдумывания запроса пользователем 10 сек
Время обработки запроса (процесса) в CPU 0.1 сек
Время доступа к винчестеру (операция I/O)минимальное 0.05 сек
Время доступа к винчестеру (операция I/O)максимальное 0.15 сек
Время доступа к винчестеру (операция I/O)наиболее вероятное 0.1 сек
Максимальный объем выделяемой RAM 64 Мбайт
Максимальное число выделяемых буферов I/O 10
Вероятность завершения процесса I/O 0.2
Время моделирования 8 ч

Описание работы модели

В модели транзакт имеет несколько состояний:

— обдумываемый пользователем запрос;

— посланный пользователем запрос на организацию процесса ввода-вывода;

— созданный OS UNIX-V процесс I/O;

— процесс, получивший RAM;

— процесс, получивший буферы I/O;

— процесс, выполнивший хотя бы одну операцию I/O;

— сигнал пользователю о выполнении запроса.

Текущее состояние транзакта заносится в его параметр и является критерием перехода из сервера, имитирующего работу процессора. Изменение состояния транзакта осуществляется в узлах, имитирующих терминалы пользователей, работу CPU, обращение к HDD, выделение RAM и буферов I/O. Имена используемых параметров транзактов переопределены операторами #define.

Модель является замкнутой. С помощью схемы зарядки (узлы 9, 10 и 11) генерируется семейство транзактов количеством USERS (число терминалов пользователей). Устройство схемы зарядки описанов п.4.6. настоящего пособия. Сгенерированные транзакты поступают в сервер (8), имитирующий пользовательские терминалы. Число каналов сервера равно константе USERS. Время обслуживания есть время обдумывания пользователем запроса к OS UNIX.

Рисунок 2- Схема модели работы ЛВС под OS UNIX

Перед входом в узел состояние транзакта (параметр PROCESS_STATUS) получает значение RAM. Это значит, что транзакт, выйдя из сервера, будет играть роль запроса на создание процесса I/O, и ему нужно будет выделить память.

Из сервера транзакт переходит в очередь (1), имитирующую очередь к процессору, и далее в сервер (2), имитирующий процессор. Перед входом в узел на основании значения параметра PROCESS_STATUS принимается решение о дальнейшей обработке транзакта. Если состояние транзакта имеет значение HDD, это значит, что данный транзакт имитирует уже созданный процесс I/O.

Если при этом установлен флажок доступа к винчестеру (параметр транзакта HDD_ACCESS равен 1), значит, процесс выполнил хотя бы одну операцию ввода-вывода и с вероятностью 0.2 является завершенным (значение генератора rundum больше 0.8).

В этом случае транзакт отправляется в сервер (8) — OS UNIX посылает пользователю сигнал о выполнении его запроса. Если же либо значение HDD_ACCESS равно 0 (процесс не выполнил еще ни одной операции ввода-вывода), либо значение генератора rundum не превосходит 0.8 (процесс не завершен), то транзакт отправляется в очередь (3), имитирующую очередь к винчестеру на совершение операций I/O (процесс должен выполнить очередную операцию ввода-вывода).

Если состояние транзакта имеет значение BUFF, значит, процесс получил память и теперь должен получить буферы I/O. В этом случае транзакт отправляется на склад ресурсов (7), имитирующий выделение процессу буферов I/O. Если состояние транзакта имеет значение RAM, значит, транзакт имитирует только что пришедший запрос на создание процесса I/O. В этом случае транзакт отправляется на склад ресурсов (5), имитирующий выделение процессу памяти.

Число каналов сервера равно 1 — процессор одновременно обрабатывает один процесс (запрос). Время обслуживания есть время обработки процесса (запроса) процессором и имеет равномерный закон распределения.

Если вошедший в узел транзакт будет отправлен в сервер (8), сбрасывается флажок доступа к винчестеру HDD_ACCESS (он получает значение 0), и транзакт возвращает полученные им ресурсы (выполняются операции detach).

В очереди (3) устанавливается флажок доступа к винчестеру HDD_ACCESS, и транзакт переходит в сервер (4), имитирующий обращение к винчестеру — операцию I/O. Число каналов сервера равно 1 — одновременно выполняется одна операция I/O. Время обслуживания в сервере есть время доступа к винчестеру и задано с помощью beta-распределения с минимальным временем доступа 0.05 секунды, максимальным — 0.15 секунды и наиболее вероятным — 0.1 секунды. Из сервера транзакт переходит в очередь (1).

На складе ресурсов (5) транзакту выделяется ресурс “RAM”. Перед входом в узел определяется объем запрашиваемой памяти (параметр транзакта RAM_AMOUNT) как случайная доля от масимального выделяемого объема памяти.

Состояние транзакта PROCESS_STATUS получет значение BUFF — процесс помечается как ожидающий выделения буферов I/O. В описании узла параметр RAM_AMOUNT указывает количество запрашиваемого ресурса. Флажок учета приоритета запроса установлен (см. “Описание моделируемого процесса”). Далее транзакт переходит к управляющему складом (6), и оттуда в очередь (1).

На складе ресурсов (7) транзакту выделяется требуемое количество буферов I/O (параметр транзакта BUF_AMOUNT). Состояние транзакта получает значение HDD (процесс готов к выполнению операций I/O — доступ к винчестеру разрешен). В остальном узел (7) аналогичен узлу (5).

Текст модели

/* Модель управления ресурсами в ЛВС под UNIX/System-V */

/* Время измеряется в секундах */

#include <Pilgrim.h>

#define USERS 50 /* Количество пользователей */

#define RAM 0 /* Флаг создания процесса */

#define BUFF 1 /* Флаг захвата буферов I/O */

#define HDD 2 /* Флаг операции I/O */ #define MAX_RAM 64 /* Максимальный объем RAM */

#define MAX_BUFFERS 10 /* Максимальное число буферов */

#define PROCESS_STATUS t->iu0 /* Состояние транзакта */

#define RAM_AMOUNT t->iu1 /* Выделяемый объем RAM */

#define BUF_AMOUNT t->iu2 /*Число выделяемых буферов */

#define HDD_ACCESS t->iu3/*Флаг получения доступа к HDD*/

#define MEMORY 5 /* Узел выделения RAM */

#define IO_BUFFERS 7 /* Узел выделения буферов I/O */

#define MOD_TIME 28800.0 /*Время моделирования 8 часов */

int Next_top; /* Номер следующего узла */

forward

{

modbeg(«Лок.ВС / UNIX-V», 1,MOD_TIME,(long)time(NULL),

none,5,none,none,2 );

ag(«Вспом. транзакт»,9,none,none,0.0,zero,zero,10);

supply(MEMORY,add,MAX_RAM);

/*Максимально возможный объем памяти */

supply(IO_BUFFERS,add,MAX_BUFFERS);

/*Максимальное число буферов */

network(dummy,dummy)

{

top(1):queue(«Очередь к CPU»,none,2);

place;

top(2):switch(PROCESS_STATUS)

{

case HDD: /* Процесс создан и работает */

if (rundum()>0.8 && HDD_ACCESS)

Next_top=8;

/* Управление возвращается пользователю */

else

Next_top=3; /* Очередная операция I/O */

break;

case BUFF: /* Отвести процессу буферы I/O */

Next_top=7;

break;

case RAM: /* Создать процесс */

Next_top=5;

break;

}

serv(«CPU»,1,none,unif,0.1,0.1,zero,Next_top);

if (Next_top==8)

{

clcode

HDD_ACCESS=0; /* Доступ к HDD прекращен*/

detach(MEMORY,RAM_AMOUNT);

/* Освободить память */

detach(IO_BUFFERS,BUF_AMOUNT);

/* Освободить буферы */

}

place;

top(3):HDD_ACCESS=1; /*Получение доступа к HDD */

queue(«Очередь к HDD», none,4);

place;

top(4):serv(«HDD»,1,none,beta,0.05,0.1,0.15,1 );

place;

top(5):RAM_AMOUNT=1+rundum()*(MAX_RAM-1);

PROCESS_STATUS=BUFF; /* Запросить буферы I/O */

attach(«Выделить RAM»,RAM_AMOUNT,prty,6);

place;

top(6):manage(«Диспетчер ресурсов»,1);

place;

top(7):BUF_AMOUNT=1+rundum()*(MAX_BUFFERS-1);

PROCESS_STATUS=HDD; /* Начать операции I-O */

attach(«Выделить буферы I/O»,BUF_AMOUNT,prty,6);

place;

top(8):PROCESS_STATUS=RAM; /* Создание процесса */

serv(«Терминалы п-лей»,USERS,none,

norm,10.0,2.5,zero,1);

place;

/* Схема зарядки */

top(10):creat(«Генерация п-лей»,none,USERS,copy,8,11);

place;

top(11):term(«Выключение Ag 9»);

cheg(9,none,none,MOD_TIME,zero,zero,11);

place;

fault(123);

}

modend(«Unix5.rep», 1, 13, page );

return 0;

}

Анализ результатов моделирования

За период моделирования к OS UNIX поступило 25799 запросов на создание процесса ввода-вывода (счетчик входов узла 5). Каждый пользователь послал в среднем по 500 запросов и 7 пользователей на момент окончания моделирования обдумывают очередной запрос. В среднем польлзователи потратили на обдумывание запросов 18 % времени работы с ЛВС.

25 758 процессов было обеспечено ресурсами (счетчик входов узла 7 показывает число процессов, получивших ресурс, так как все транзакты покинули узел). 41 запрос ожидает выделения ресурса RAM. Было совершено 128 516 операций ввода-вывода и одна операция осталась незаконченной. Было произведено 205831 обращений к процессору, и на момент окончания моделирования процессор находился в состоянии работы. Всего процессор находился в состоянии работы 71 % времени работы ЛВС, операции ввода-вывода заняли 42 % времени. Среднее время ожидания доступа к процессору составило 0.05 секунды, среднее время ожидания операции ввода-вывода — 0.01 секунды.

Средняя загруженность ресурса RAM составляет 73 %. На момент окончания моделирования остаток ресурса RAM составляет 9 Мбайт, а стоящие в очереди процессы требуют в общей сложности 2495 Мбайт памяти. Средняя загруженость ресурса буферов I/O составляет 55 %. На момент окончания моделирования свободен один буфер, и потребности в ресурсе нет. Среднее время ожидания выделения RAM составляет 42 секунды, буферов — 0.38 секунды. Различия в результатах связаны с тем, что процесс вначале требует выделения RAM, а затем — буферов ввода-вывода.

Загрузка...