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



ЗНАЕТЕ ЛИ ВЫ?

Конвейеры и очереди сообщений

Поиск

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

Канал (Pipe) был введен в UNIX -системах и имеет размер не более 64 К, поскольку в 16-разрядных мини-ЭВМ, для которых создавалась эта система, нельзя было создать массив данных большего размера. Работает он циклически, по принципу кольцевого буфера. Как информационная структура описывается идентификатором, размером и двумя указателями – на первый элемент и на последний. Указатель Head на рисунке указывает на первый записанный элемент, а Tail – на последний элемент очереди. Заштрихованная область означает наличие информации. Читается (и удаляется) всегда первый элемент, что вызывает изменение значения указателя Head. При записи новых элементов меняется значение указателя Tail. При

 
 

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

 

Конвейер представляет собой системный ресурс, для работы с ним процесс должен сделать соответствующий запрос операционной системе.

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

§ FIFO – сообщение, записанное первым, первым будет прочитано;

§ LIFO (Last In – First Out) – сообщение, записанное последним, будет прочитано первым;

§ приоритетный – сообщения читаются с учетом их приоритетов;

§ произвольный доступ, т.е. можно читать любое сообщение.

Второе отличие от каналов состоит в том, что при чтении из канала сообщение автоматически удаляется, а при чтении из очереди – нет, т.е. одно сообщение может быть прочитано при необходимости несколько раз.

Третье отличие состоит в том, что в очередях присутствуют не сами сообщения, а только их адреса в памяти и размер.

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

§ идентификатор процесса (PID), который передал сообщение;

§ адрес и длина переданного сообщения;

§ ждать или нет, если очередь пуста;

§ приоритет переданного сообщения;

§ номер освобождаемого семафора, когда сообщение передается в очередь.

Итак, мы рассмотрели основные средства, используемые для синхронизации процессов в мультипрограммной системе.

3.2.8 Контрольные вопросы

1. Всегда ли взаимодействуют задачи в мультипрограммной системе?

2. Могут ли оказывать друг на друга какое-то влияние независимые задачи?

3. Что такое критические ресурсы?

4. Для чего нужна синхронизация процессов и в чём она состоит?

5. Какие проблемы могут возникать при отсутствии синхронизации взаимодействующих потоков?

6. Что такое критическая секция?

7. Какие требования предъявляются к критическим секциям?

8. Что такое взаимное исключение в проблеме КС? Какие существуют способы его реализации?

9. Чем плох алгоритм с жёсткой синхронизацией?

10. Каковы достоинства алгоритма Деккера? Есть ли у него недостатки?

11. Что такое семафоры? Какие операции применимы к ним?

12. Каковы преимущества семафоров при организации взаимного исключения? Как можно использовать семафоры при работе с КС?

13. Как можно применить семафоры при решении проблемы производителя-потребителя?

14. Каковы преимущества мониторов Хоара по сравнению с семафорами?

15. Каким образом мониторы Хоара позволяют решить проблему взаимоисключения?

16. Для чего применяется обмен сообщениями в мультипрограммных системах? Какие примитивы для него используются?

17. Чем различаются блокирующий и неблокирующий примитивы SEND?

18. Какие проблемы могут возникать при использовании блокирующего примитива RECEIVE? Как их можно решить?

19. Какие способы адресации могут использоваться при передаче сообщений?

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

21. Какие информационные структуры используются для передачи сообщений при косвенной адресации?

22. Каковы достоинства и недостатки почтовых ящиков?

23. В чём различия между конвейерами и очередями сообщений?

24. В каких информационных структурах хранится всегда сам текст сообщения, а в каких может храниться только его адрес?

25. Какая из информационных структур допускает использование нескольких дисциплин обработки?

26. Что происходит с сообщением после его прочтения: при использовании конвейера? в случае применения очереди сообщений?

27. По какому принципу считываются сообщения из очереди?

 

Управление памятью

Термин "память" используется для обозначения любого устройства, способного хранить информацию. Здесь будем иметь в виду оперативную память компьютера (ОЗУ). Управление памятью – одна из основных задач ОС, и занимается им менеджер памяти, который входит в состав ядра ОС.



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 327; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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