Читайте также: |
|
Очередь (queue) представляет cобой некоторый программный механизм синхронизации и передачи информации между процессами. Какой-либо процесс заносит сообщения в очередь, а другой процесс (владелец очереди) вынимает их из очереди. На основе механизма очередей реализованы основные системные механизмы взаимодействия задач, работающих в рамках современных ОС (OS/2, Windows и UNIX).
Очередь представляет собой не один ПЯ, а множество буферов, связанных в список. Отправитель помещает очередное сообщение в свободный буфер. Получатель читает из очередного буфера. Скорости процессов разные, поэтому используется буферизация сообщений.
При этом используется стратегия FIFO - "первый пришел - первый ушел". Для такого способа буфера связываются в циклический список (рис. 4.10).
Заводятся две переменные типа "якорь" с адресом головы списка и хвоста списка. Когда в буферах ничего нет @головы = @хвоста. Для очистки буферов адресу хвоста присваивают значение головы. Запись осуществляется в хвост, а чтение из головы. Количество буферов известно отправителю.
Схема работы с очередью представлена на рис. 4.11.
Алгоритм выполняется как неделимая операция, так как меняются адреса и содержимое буферов. Кроме семафоров, связанных с критическими участками, необходимо управление ресурсами множества буферов.
Примером очереди в MS DOS может служить буфер опережающего ввода с клавиатуры. Один процесс, связанный с вводом с клавиатуры, пишет в этот буфер, другой процесс читает из данного буфера в программу пользователя.
Очереди в OS/2
В OS/2 имеются очереди трех типов — организованные в виде стека (LIFO — Last In First Out — последним пришел, первым ушел), собственно очереди (FIFO — First In First Out — первым пришел, первым ушел) и приоритетной очереди, в которой порядок выборки элементов зависит от их приоритетов. Процесс, создавший очередь, считается ее владельцем, и только задачи этого процесса могут считывать элементы из очереди. Невзирая на тип очереди, задача процесса — владельца очереди имеет возможность считать любой элемент, проверив предварительно его содержимое.
При занесении элемента в очередь указываются адрес буфера с данными, размер буфера и сопроводительная информация. Реально данные не переписываются при передаче элемента — передается только адрес.
Дата добавления: 2015-10-02; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Почтовые ящики | | | Очереди и почтовые ящики в WINDOWS |