интересно
Предыдущая | Содержание | Следующая

Модель динамическое распределение ресурсов в сети под управлением unix

Локальная вычислительная сеть (ЛВС) имеет один процессор, один винчестер и несколько пользовательских терминалов. Пользователи посылают операционной системе OS UNIX запросы на выполнение своих прикладных задач, которые содержат некоторое количество операций ввода-вывода (I/O). Посланный запрос поступает на обработку процессором (CPU, число процессоров может быть 1, 2,4 и др.). По каждому запросу создается процесс, который начинает работать в ЛВС.

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

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

Текст модели приведен ниже: •

Описание работы модели. В модели транзакт имеет несколько состояний:

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

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

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

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

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

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

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

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

Имена используемых параметров транзактов переопределены операторами #defme.

Модель является замкнутой. С помощью схемы зарядки (узлы 9, 10 и 11) генерируется семейство транзактов количеством USERS (число терминалов пользователей). Сгенерированные транзакты поступают в сервер 8, имитирующий пользовательские терминалы. Число каналов сервера равно константе USERS. Время обслуживания - это время обдумывания пользователем запроса к 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 посылает пользователю сигнал о выполнении его запроса. Транзакт отправляется в очередь 3, имитирующую очередь запросов к винчестеру на выполнение операций I/O (процесс должен выполнить очередную операцию ввода-вывода), когда выполняется хотя бы одно из двух условий:

значение HDD_ACCESS равно нулю (процесс не выполнил еще ни одной операции ввода-вывода);

значение генератора rundum не превосходит 0,8 (процесс не завершен).

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

Число каналов сервера 2, имитирующего процессор, равно единице, поэтому процессор одновременно обрабатывает один процесс (запрос). Время обслуживания - это время обработки ветви программы процесса между двумя прерываниями; оно имеет равномерный закон распределения.

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

В очереди 3 устанавливается флажок доступа к винчестеру HDD_ACCESS, и транзакт переходит в сервер 4, имитирующий обращение к винчестеру - операцию 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.

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

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

Было 25 799 запросов от процессов на получение RAM (счетчик входов узла 5). Однако 41 запрос остался неудовлетворенным: из-за дефицита 41 транзакт находится в очереди attach на момент завершения моделирования. Кроме того, 25 758 запросов было на получение буферов I/O, причем все они были удовлетворены. Диспетчер ресурсов произвел 51 516 операций по управлению ресурсами. Видно, что выполняется основное балансное соотношение: (25 799 - 41) + (25 758 - 0) = 51 516 .

Всего процессор находился в состоянии работы 71,3% времени, операции ввода-вывода заняли 44,6% времени. Среднее время ожидания процессора составило 0,05 с, а среднее время пребывания в очереди ввода-вывода - 0,01 с.

Средняя загрузка ресурса RAM составляет 73,8%. На момент окончания моделирования остаток ресурса RAM составляет 9 Мбайт, а стоящие в очереди процессы требуют в общей сложности 2495 Мбайт памяти. Это объясняет большую задержку - 42,33 с при каждом обращении; данный ресурс - самое узкое место ЛВС. Средняя загруженность ресурса буферов I/O составляет 55,5%. Задержка в связи с возможным дефицитом сравнительно невелика - 0,38 с.