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

6 Программная реализация

6.1 Средства взаимодействия процессов

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

Процессы взаимодействуют посредствам семафоров.

Семафор представляет собой глобальный объект, позволяющий синхронизировать работу двух или нескольких процессов или потоков. Для программиста семафор - это просто счетчик. Если счетчик равен N, это означает, что к ресурсу имеют доступ N процессов. Рассмотрим функции для работы с семафорами:

– CreateSemaphor - создаёт глобальный объект-семафор. Возвращает дескриптор семафора.

HANDLE CreateSemaphore

{LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,

LONG lInitialCount,

LONG lMaximumCount,

LPCTSTR lpName}

где, первый параметр - указатель на структуру, определяющую атрибуты доступа. Может иметь значение для Windows NT. Обычно данный параметр равен NULL.Второй параметр - начальное значение счётчика семафора. Определяет, сколько задач имеют доступ к ресурсу в начале.Третий параметр - количество задач, которые имеют одновременный доступ к ресурсу.Четвёртый параметр - указатель на строку, содержащую имя семафора.

– OpenSemaphor - открыть уже созданный семафор. Возвращает дескриптор семафора. Данную функцию используют не так часто. Обычно создают семафор и присваивают его дескриптор глобальной переменной, а потом используют этот дескриптор в порождаемых потоках.

HANDLE OpenSemaphore

{ DWORD dwDesiredAccess,

BOOL bInheritHandle,

LPCTSTR lpName}

Параметры функции: первый параметр - определяет желаемый уровень доступа к семафору. Возможны значения: SEMAPHORE_MODiFY_STATE = 2H, разрешить использование функции ReleaseSemaphore, SYNCHRONIZE = 100000H, разрешить использование любой функции ожидания, только для Windows NT, SEMAPHORE_ALLACCESS = 0F0000h+ SYNCHRONIZE+3H, специфицирует все возможные флаги доступа к семафору.

– WaitForSingleObject – ожидать открытие семафора. При успешном завершении, т. е. открытии доступа к объекту, функция возвращает 0. Значение 102h будет означать, что заданный период ожидания.

DWORD WaitForSingleObject

{HANDLE hHandle,

DWORD dwMilliseconds}

Первый параметр – дескриптор семафора.Второй параметр – время ожидания в миллисекундах. Если параметр равен INFINITE = 0FFFFFFFFh, то время ожидания не ограничено.

– ReleaseSemaphore – освободить семафор и позволить получить доступ к ресурсу другим процессам.

BOOL ReleaseSemaphore

{HANDLE hSemaphore,

LONG lReleaseCount,

LPLONG lpPreviousCount}

Первый параметр – дескриптор семафора. Второй параметр – определяет какое значение должно быть добавлено к счетчику семафора. Чаще всего этот параметр равен единице. Третий параметр – указатель на переменную, куда должно быть перемещено предыдущее значение счетчика.

На рисунке 6.1 представлена конфигурация выполняемых процессов.

Рисунок 6.1 – Конфигурация процессов

В каждой вершине представленного графа выполняются различные функции: 1 – IT, 2 – IT, 3 – IT, 4 – IT, 5 – IT, 6 – IT, 7 – SS, 8 – SS.

“начало” — начинает выполнение (результат всегда = 1);

“конец” — завершает выполнение– выводит на экран свой аргумент, закрывает все потоки, освобождает ресурсы;

SS — SS(Arg) – вычисление суммы ряда Σ ABS(sin(i)) для i от 1 до модуля Arg;

IT — IT(Arg) – вычисление определенного интеграла ABS(cos(x)*sin(x)) на интервале от -Arg до +Arg методом трапеций с разбиением на 100*Arg интервалов;

Arg = Σ Rez * Nblock * Nvar,

где, Σ Rez – сумма результатов входящих блоков; Nblock – номер блока в конфигурации.

Рассмотрим алгоритм работы с семафором. Сначала при помощи функции CreateSemaphore создадим семафор, и его дескриптор присваивается глобальной переменной. Пред попыткой обращения к ресурсам доступ, к которым необходимо ограничить, поток должен вызвать функцию WaitForSingleObject. При открытии доступа функция возвращает 0. По окончании работы с ресурсом следует вызвать функцию ReleaseSemaphor. Тем самым увеличивается счётчик доступа на 1. С помощью семафора можно регулировать количество потоков, которые одновременно могут иметь доступ к ресурсу. Максимальное значение счетчика как раз и определяет, сколько потоков могут получить доступ к ресурсу одновременно.

Листинг программного кода представлен в приложении В.

6.2 Реализация логики управления файловой системой

Организация файловой системы, применяемой в ОС, является UNIX. В результате выполнения курсового проекта был разработан эмулятор файловой системы UNIX. Который позволяет выполнять различные операции над файлами. Такими как запись, копирование, удаление а также удаление всех файлов сразу (Quick Format).

Рисунок 6.2 – Расположение файловой системы Unix

Расположение файловой системы на диске показано на рисунке 6.2. Все дисковое пространство, отведенное под файловую систему, делится на четыре области:

  • загрузочный блок (boot), в котором хранится загрузчик операционной системы;

  • суперблок (superblock) - содержит самую общую информацию о файловой системе: размер файловой системы, размер области индексных дескрипторов, число индексных дескрипторов, список свободных блоков и список свободных индексных дескрипторов, а также другую административную информацию;

  • область индексных дескрипторов, порядок расположения индексных дескрипторов в которой соответствует их номерам;

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

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

Файловая система спроектирована по аналогии с UNIX и содержит её основные блоки:

а) Суперблок — 12 бит. Содержит:

  • размер блока;

  • размер индексного дескриптора;

  • размер файловой системы.

б) Блок индексных дескрипторов — 64 бита. Содержит:

  • имя файла;

  • номер дескриптора;

  • размер файла;

  • десять блоков указующие на блоки данных;

  • три блока содержащие косвенные дескрипторы.

в) Блок данных. Размер блоков задается при создании образа файловой системы.

Спецификация команд эмулятора:

а) Create(char *img_name, int size, int size_blocks) — создаёт файл-образ с именем img_name, размером size, параметр size_blocks — указывает на размер блоков данных файловой системы.

б) CopyFromHDD(char *img_name, char *file) — копирует в файл-образ с именем img_name файл с жесткого диска с именем file.

в) CopyToHDD(char *img_name,char *file, char *fileToHDD) — копирует из файла-образа (img_name) файл с именем file на жесткий диск. FileToHDD — задает имя итогового файла.

г) Delete (char *img_name, char *file) — удаляет с файла-образа (img_name) файл с именем file.

д) Format (char *img_name) — форматирует файл-образ (img_name).

е) ShowRoot — показывает информацию о файловой системе и выводит информацию о файлах содержащихся в ней.

Листинг программного кода представлен в приложении В.