17.0 (Russian conspect)

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

Они бывают разного приоритета и очередь тоже, соответственно, приорететная.

Чтобы создать объект, который будет работать очередью сообщений нужно сделать системный вызов (вернее его оболочку) - MQ_OPEN()

Туда передаётся 4 параметра:

1.jpg

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

Как вызывать данную программу:

4.jpg

Как послать сообщение: Надо открыть очередь на запись и послать сообщение с помощью вызова MQ_SEND у которого 4 параметра:

1. очередь, которую нужно посылать

2. строчка сообщения

3. длина сообщения

4. приоритет

Приоритет - число, которое сем больше, тем приоритет выше.

Программа, которая читает сообщения выглядит примерно так:

2.jpg

Теперь модифицируем программу, чтобы это сообщение печаталось:

3.jpg

И вот какой вывод мы получим:

5.jpg

Вот таким способом очередь можно удалить:

6.jpg

Системный взов NMAP имеет несолько параметров:

Месть в памяти куда будет происходить отображение

Размер

Как именно мы эту память защищаем

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

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

7.jpg

Давайте его скомпилируем:

8.jpg

Shared memory object - В отличии от очереди это просто память в которую можно просто что-либо класть и считывать

Код будет примерно похожий:

9.jpg

Запустим его:

10.jpg

Программа, которая пишет в эту память:

11.jpg

Запустим её:

12.jpg

HSE/ProgrammingOS/17_IPC2/Conspect (последним исправлял пользователь Lecture_Uploads 2020-06-08 23:51:08)