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

13. Теоретическая классификация видов взаимодействия процессов: сигналы, семафоры, мьютексы.

Семафоры: Переменная, контролирующая вход в критическую секцию называется семафором: InterlockedExchange(&Status, 1). Status – семафор.

Семафор – переменная специального типа, которая доступна параллельным процессам для выполнения над ней только 2х операций – открытия и закрытия. У переменной Status можно использовать весь диапазон значений. Однако на практике, переменная – значение семафора есть критический ресурс, доступ к которому осуществляется с использованием критических секций.

Если sem > 0, то семафор открыт. Если sem == 0, то семафор закрыт.

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

Сигналы. Предназначены для синхронизации процессов. Представляют собой 1 бит информации (1 сигнал). Различаются по номеру, либо по имени. При наличии сигнала процесс-приемник обычно прерывает свое нормальное выполнение и выполняет какие-либо действия.

Сигналы делятся на пассивные и активные:

- Активные – выполнение процесса прерывается и управление передается специальной функции, которая была предварительно связана с сигналом.

- Пассивные сигналы обычно опрашиваются процессом.

Количество сигналов ограничено. В особую группу выделяются сигналы, возникающие при достижении определенного интервала времени. Они называются сигналами от таймера или просто таймерами. Таймеры бывают 2-х видов: однократные и периодические (возникают через определенный отрезок времени).

Функции сигналов: 1)Создать сигнал 2) Проверить сигнал 3) Связать сигнал с функцией 4)Создать периодический сигнал 5) Удалить периодический сигнал

Только в ОС Unix.. В ОС Windows сигналов нет, но есть таймеры.

Замечание 1: Если необходима многократная обработка одного и того же сигнала, процесс должен каждый раз осуществлять системный вызов signal для установления требуемой реакции на данный сигнал.Замечание 2: Процесс не в состоянии узнать, сколько однотипных сигналов им было получено. В том случае, если процесс не успевает обработать все поступившие сигналы, происходит потеря информации.Мьютекс. Мьютекс подобны событиям с ручным сбросом. Кроме того в мьютекс можно входить повторно одной и той же нитью. Создать мьютекс можно с помощью следующей функции:

HANDLE CreateMutex(PSECURITY_ATTRIBUTES psa, BOOL fInitialOwner, PCISIR pszName);

fInitialOwner – при создании мьютекса стать его владельцем и войти в него (мьютекс переходит в NON_SIGNALED) если true.

Вход в мьютекс по функции WaitForSingleObject

Выход по следующей функции:

BOOL ReleaseMutex(HANDLE hMutex);

Число входов в мьютекс должно равняться числу выходов. Если нить владеющая мьютексом умирает то функция WaitFor для этого мьютекса вернет значение WAIT_ABANDONED но при этом войдет в мьютекс

15. Теоретическая классификация видов взаимодействия процессов: очереди сообщений, файлы, разделяемая память, объект «ресурс».

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

В ОС UNIX широко распространен способ блокировки (организации критической секции) через открытие файла на запись, однако, данный способ является медленным.

Достоинства способа:

  1. Очень большие объемы передаваемой информации.

  2. Простота реализации

  3. Доступ к файлу контролирует ос

  4. Сохранность информации при внезапной потере питания

Недостатки способа:

Необходимость периодической очистки содержимого файла, медленная скорость передачи данных.

Очереди сообщений.

По сути является подмножеством почтового ящика. Очередь сообщений привязывается к процессу-приемнику. Процесс-приемник может читать и удалять сообщения из очереди, а остальные процессы могут помещать сообщения в очередь. В очередях сообщений возможно задать дисциплину обслуживания (FIFO, LIFO, приоритетный/произвольный доступ).

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

Яркий пример очереди сообщений – оконные сообщения ОС Windows.

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

В ОС Windows Win32 API разделяемая память реализуется через проекцию файла на адресное пространство процесса. Файл может быть: либо настоящий файл на диске, либо безымянный файл, который создаётся внутри файла свопинга.

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

Флаги проецирования:

PAGE_READONLY - память только на чтение

PAGE_READWRITE

PAGE_WRITECOPY - когда будем писать в память, то в памяти данные изменяются, а в файле нет

SEC_NOCACHE - сразу запись на диск, если нет то буферизация

Проекция файла на адресное пространство процесса задается с помощью функции: MapViewOfFile. Параметры функции:

1 – описатель на объект

2 – желаемый доступ, может быть вида:

FILE_MAP_READ FILE_MAP_WRITE

FILE_MAP_COPY FILE_MAP_ALL_ACCESS

3 – смещение от начала файла

5 – количество байт для окна разделяемой памяти (8 байт)

Функция возвращает адрес этого окна.

Обратная функция:

UnmapViewOfFile(lpBaseAddress);

По окончании работы следует вызвать функции UnmapViewOfFile и CloseHandle для дескриптора спроецированного в память файла.

Разделяемая память. Реализуется через проекцию файла на адресное пространство проекта. Файл мб в настоящем файлоносителе, так и в виртуальном файле, который создаётся в рамках свопинга. Create File Mapping, MapViewOf file – создаёт отображение части файла в адресное пространство. Обратный процесс: UnMapVieWotFile. Преимущества использования разделяемой памяти : 1)наиболее простой способ передачи данных между процессами;

2)операции передачи данных происходят без участия ос.

Недостатки:

1)реализация критических ресурсов возлагается на программиста;

2) на процесс возлагается операция поддержания корректности данных.