Решение задачи передачи данных одного процесса другому при помощи монитора (случай информационной базы) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Решение задачи передачи данных одного процесса другому при помощи монитора (случай информационной базы)



 

В вычислительных системах обычно имеются “процессы-читатели ” и “процессы-писатели”( readers and writers), если первые читают данные из информационной базы, то вторые, записывают данные в информационные базы. Заметим, что процессы-читатели не изменяют содержимого базы и могут обращаться к ней одновременно. А процесс-писатель может изменять данные, поэтому он должен иметь монопольный, исключительный доступ к базе данных.

Эта задача была впервые сформулирована и решена в работе Куртуа, Хейманса и Парнаса7. Решение этой задачи с использованием монитора впервые было предложено в работе Хоара8.

monitor Читатели_Писатели;

Var

READERS: integer; {переменная указывает количество активных читателей, когда READERS = 0, ожидающий процесс-писатель получает возможность начать работу}

SmbWRITE: boolean; {somebody write - когда кто-то пишет эта

переменная имеет истинное значение}

PermREAD,

PermWRITE: condition; {permission read/write - пока не появится истинное значение условия читать разрешается,PermREAD - процесс-читатель не может продолжить свое выполнение; пока не появится истинное значение условия писать разрешается, Permwrite - процесс-писатель не может продолжить свое выполнение}

Procedure Начало_Чтения;

Begin

If (SmbWRITE) or (Очередь(PermWRITE))

then Wait(PermREAD); {ожидание сигнала - читать разрешается}

READERS: = READEARS+1;

Signal(PermREAD); {сигнал, оповещающий о возможности чтения}

end;

Procedure Конец_Чтения;

Begin

READERS:=READERS-1;

If READERS=0 then Signal(PermWRITE); {сигнал, оповещающий о

возможности записи}

end;

Procedure Начало_Записи;

Begin

if (READERS>0) or (SmbWRITE)

then Wait(PermWRITE); {ожидание сигнала - писать разрешается}

SmbWRITE:=true

end;

Procedure Конец­_Записи;

Begin

SmbWRITE:=false;

If Очередь(PermREAD)

then Signal(PermREAD) {сигнал, оповещающий о возможности чтения}

else Signal(PermWRITE); {сигнал, оповещающий и возможности записи}

end;

Begin

READERS:=0;

SmbWRITE:=false

end;

Когда процессу-читателю нужно произвести чтение, он вызывает процедуру монитора под названием Начало_Чтения, а после завершения чтения - процедуру Конец_Чтения. После входа в процедуру Начало_Чтения новый процесс-читатель сможет продолжить свою работу, если нет процесса-писателя, производящего в данный момент запись или ожидающего очереди на запись. Второе из этих условий необходимо для того, чтобы предотвратить возможность бесконечного откладывания ожидающих процессов-писателей. Отметим, что процедура Начало_Чтения завершается выдачей сигнала разрешающего чтение, PermREAD, чтобы следующий, ожидающий в очереди читатель мог начать чтение. Причем во время выполнения такой цепочки действий все вновь приходящие процессы включаются в очередь ожидания.

Когда процесс завершает операцию чтения, он вызывает процедуру Конец_Чтения, которая уменьшает число читателей на 1 и, в конце концов количество процессов-читателей становится равным 0; в этот момент вырабатывается сигнал разрешающий запись, PermWRITE, и следующий процесс-писатель получает возможность продолжать работу.

Когда процессу-писателю нужно произвести запись, он вызывает процедуру Начало_Записи. Поскольку процесс-писатель должен иметь монопольный доступ к информации, то если в настоящий момент есть уже работающие процессы-читатели или какой-либо активизированный процесс-писатель, данному процессу-писателю придется ждать выдачи сигнала PermWRITE. Когда же писатель получает возможность продолжить работу, переменная SmbWRITE:=true.

Когда процесс-писатель заканчивает свою работу, он устанавливает SmbWRITE:=false, тем самым, открывая вход в монитор для других процессов.

Писатель, завершивший работу, проверяет, в первую очередь, нет ли ожидающего читателя - если есть, он выдает сигнал PermREAD, так что ожидающий читатель получает возможность продолжить работу. Если читателей нет, то выдается сигнал PermWRITE и получает возможность продолжить работу ожидающий процесс-писатель.

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

 

 

17.1) Фа́йловая систе́ма (англ. file system) — порядок, определяющий способ организации, хранения и именования данных на носителях информации в компьютерах, а также в другом электронном оборудовании: цифровых фотоаппаратах, мобильных телефонах и т. п. Файловая система определяет формат содержимого и способ физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имени файла (папки), максимальный возможный размер файла и раздела, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.

Иерархия каталогов

Практически всегда файлы на дисках объединяются в каталоги.

В простейшем случае все файлы на данном диске хранятся в одном каталоге. Такая одноуровневая схема использовалась в CP/M и в первой версии MS-DOS 1.0. Иерархическая файловая система со вложенными друг в друга каталогами впервые появилась в Multics, затем в UNIX.

Wiki.txt

Tornado.jpg

Notepad.exe

(Одноуровневая файловая система)

 

Каталоги на разных дисках могут образовывать несколько отдельных деревьев, как в DOS/Windows, или же объединяться в одно дерево, общее для всех дисков, как в UNIX-подобных системах.

C:

\Program files

\CDEx

\CDEx.exe

\CDEx.hlp

\mppenc.exe

\Мои документы

\Wiki.txt

\Tornado.jpg

D:

\Music

\ABBA

\1974 Waterloo

\1976 Arrival

\Money, Money, Money.ogg

\1977 The Album

(Иерархическая файловая система Windows/DOS)

В UNIX существует только один корневой каталог, а все остальные файлы и каталоги вложены в него. Чтобы получить доступ к файлам и каталогам на каком-нибудь диске, необходимо смонтировать этот диск командой mount. Например, чтобы открыть файлы на CD, нужно, говоря простым языком, сказать операционной системе: «возьми файловую систему на этом компакт-диске и покажи её в каталоге /mnt/cdrom». Все файлы и каталоги, находящиеся на CD, появятся в этом каталоге /mnt/cdrom, который называется точкой монтирования (англ. mount point).[2] В большинстве UNIX-подобных систем съёмные диски (дискеты и CD), флеш-накопители и другие внешние устройства хранения данных монтируют в каталог /mnt, /mount или /media. Unix и UNIX-подобные операционные системы также позволяет автоматически монтировать диски при загрузке операционной системы.

/

/usr

/bin

/arch

/ls

/raw

/lib

/libhistory.so.5.2

/libgpm.so.1

/home

/lost+found

/host.sh

/guest

/Pictures

/example.png

/Video

/matrix.avi

/news

/lost_ship.mpeg

(Иерархическая файловая система в Unix и UNIX-подобных операционных системах)

Задачи файловой системы

Основные функции любой файловой системы нацелены на решение следующих задач:

именование файлов;

программный интерфейс работы с файлами для приложений;

отображения логической модели файловой системы на физическую организацию хранилища данных;

организация устойчивости файловой системы к сбоям питания, ошибкам аппаратных и программных средств;

содержание параметров файла, необходимых для правильного его взаимодействия с другими объектами системы (ядро, приложения и пр.).

 

В многопользовательских системах появляется ещё одна задача: защита файлов одного пользователя от несанкционированного доступа другого пользователя, а также обеспечение совместной работы с файлами, к примеру, при открытии файла одним из пользователей, для других этот же файл временно будет доступен в режиме «только чтение».

2) Общая структура файловой системы

Файловая система Linux основана на модели иерархического дерева каталогов и с этой точки зрения аналогична файловой системе Windows и MS-DOS. Однако в отличие от названных систем в Linux отсутствует понятие логического устройства (диска), все каталоги являются подкаталогами единого дерева и начинаются с так называемого корневого каталога. Корневой каталог системы обозначается символом /, подкаталог корневого каталога с именем каталог1 обозначается /каталог1, подкаталог этого каталога /каталог1/каталог2, а файл, находящийся в каталоге /каталог1 обозначается /каталог1/файл1 (то есть, с точки зрения обозначения, никакой разницы между файлами и каталогами нет).

 

В именах файлов и каталогов могут встречаться практически любые символы (причем прописные и строчные буквы различаются), однако далеко не все программы могут работать с именами, в которых используется, например, символ звездочка (*). Необходимо проявлять особую осторожность и при работе с файлами, содержащими в именах символы с кодами, превышающими 127 (например, буквы национальных алфавитов).

Имена физических устройств компьютера выглядят как имена файлов в подкаталоге первого уровня /dev (и действительно являются файлами особого вида). Разделы жесткого диска с интерфейсом IDE (EIDE) имеют имена вида /dev/hdXY, где X это одна из букв a, b, c, d, обозначающие соответственно с 1 по 4 физический диск (от Primary Master до Secondary Slave), а Y число, обозначающее номер раздела на диске (разделы нумеруются в том порядке, в котором они перечислены в таблице разделов диска). Например, единственный раздел второго (Slave) диска, присоединенного к первичному (Primary) контроллеру, обозначается /dev/hdb1.



Поделиться:


Последнее изменение этой страницы: 2016-08-16; просмотров: 200; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.126.74 (0.015 с.)