
- •Введение
- •1 Тема 7. Подсистема управления вводом-выводом
- •1.1 Язык С как стандарт взаимодействия с ОС
- •1.2 Системные операции для работы с файловой системой
- •1.2.1 Системные вызовы open() и close()
- •1.2.2 Системные вызовы read() и write()
- •1.2.3 Системный вызов lseek()
- •1.3 Создание специальных файлов
- •1.4 Запрос информации о статусе файлов
- •1.5 Каналы
- •1.5.1 Полудуплексные каналы UNIX
- •1.5.2 Именованные каналы FIFO
- •1.6 Дублирование дескрипторов файлов
- •1.7 Монтирование и демонтирование ФС
- •1.8 Ссылки на имена файлов
- •1.9 Лабораторная работа по теме №7
- •1.9.1 Интегрированная среда разработки Eclipse
- •1.9.2 Список заданий выполняемых работ
- •1.9.3 Проблема типов в языке С
- •1.9.4 Анализ структуры MBR блочных устройств
- •1.9.5 Запрос информации о статусе файлов
- •1.9.6 Неименованные каналы ядра ОС
- •1.9.7 Именованные каналы FIFO
- •1.9.8 Монтирование flashUSB
- •1.9.9 Работа с именами файлов
- •2 Тема 8. Подсистема управления памятью
- •2.1 Классификация способов управления ОЗУ
- •2.2 Программный и аппаратный способы адресации памяти
- •2.3 Страничная и сегментная адресации памяти
- •2.4 Комбинированный способ адресации памяти
- •2.5 Лабораторная работа по теме №8
- •2.5.1 Структура поцесса
- •2.5.2 Определяемые сегменты процесса
- •2.5.3 Создание и удаление процессов из памяти
- •2.5.4 Динамическое выделение и освобождение памяти процесса
- •3 Тема 9. Базовое взаимодействие процессов
- •3.1 Подсистема управления процессами
- •3.2 Синхронизация процессов
- •3.3 Стандарты POSIX
- •3.4 Системные вызовы ОС по управлению процессами
- •3.5 Системный вызов fork() и каналы процесса
- •1.5.1 Пример использования каналов процессов
- •1.5.2 Имитация конвейеров языка shell
- •3.6 Нити (Threads)
- •3.7 Сигналы POSIX
- •3.8 Лабораторная работа по теме №9
- •3.8.1 Системные вызовы общей группы
- •3.8.2 Управление потоками процессов
- •3.8.3 Обработка сигналов ОС
- •4 Тема 10. Асинхронное взаиодействие процессов
- •4.1 Проблемы распределения ресурсов ОС
- •4.2 Системный пакет IPC
- •4.3 Утилиты управления средствами пакета IPC
- •Утилита ipcmk
- •Утилита ipcs
- •Утлита ipcrm
- •4.4 Семафоры
- •4.5 Задача об обедающих философах
- •4.5.1 Описание задачи
- •4.5.2 Выбор стратегии решения
- •4.5.3 Модель философа
- •4.5.4 Программа-монитор
- •4.6 Лабораторная работа по теме №10
- •4.6.1 Синхронизация двух процессов
- •4.6.2 Задача «Обедающие философы»
- •5 Тема 11. Эффективное взаиодействие процессов
- •5.1 Прикладные средства пакета IPC
- •5.2 Разделяемые сегменты памяти
- •5.3 Задача о читателях и писателях
- •5.4 Передача сообщений
- •5.5 Лабораторная работа по теме №11
- •5.5.1 Задачи с разделяемыми сегментами памяти
- •5.5.2 Программы передачи сообщений
- •6 Тема 12. Системная шина D-Bus
- •6.1 Графические среды ОС
- •6.2 Рабочий стол пользователя
- •6.3 Различия графических сред ОС
- •6.4 X-сервер UNIX
- •6.5 Архитектура шины D-Bus
- •6.5.2 Бибиотека libdbus
- •6.5.3 Проекции ПО D-Bus на языки программирования
- •6.6 Лабораторная работа по теме №12
- •6.6.1 Утилита qdbus
- •6.6.2 Взаимодействие через шину с приложением evince
- •Заключение
- •Список использованных источников

210
Рисунок 6.8 — Результат запуска qdbus без параметров
6.6 Лабораторная работа по теме №12
Ранее было отмечено, что без хорошего знания архитектуры приложений, использовать взаимодействие через шину D-Bus - довольно сложно. Кроме того, многие приложения ОС специализированы для применения в конкретной графической среде и развиваются в рамках отдельных проектов.
Такое положение вещей затрудняет изучение ПО D-Bus, делая все рассматриваемые примеры частными, по отношения к общей концепции взаимодействия процессов в среде ОС.
Тем не менее, даже частные примеры демонстрируют возможности и перспективы использования современных тенденций развития ПО ОС.
Вданной лабораторной работе, мы ограничимся:
•изучением утилиты qdbus, обеспечивающей наиболее удобное исследование шины D-Bus;
•исследованием примера взаимодействия с приложением evince, посредством доступа к его методам, доступным через шину D-Bus.

211
6.6.1 Утилита qdbus
Утилита qdbus специализирована для работы с приложениями, использующими библиотеки Qt API.
Кроме того, эта утилита удобна для исследования шины D-Bus, что частично продемонстрировано рисунком 6.8.
Общий вызов утилиты:
qdbus [--system] [--literal] [servicename] [path] [method] [args],
где --system - обращение идет к системной шине, в провном случае - к шине сессии; --literal — печатать сообщение литерами;
servicename — имя сервиса, можно использовать формат ':x.y'; path — путь к объекту, в формате - как к файлу;
method — имя вызываемого метода;
args — аргументы, передаваемые вызываемому методу сервиса.
Для исследования приложений, использовать утилиту qdbus довольно просто:
•сначала, утилита запускается без параметров; она выведет все доступные имена сервисов, зарегистрированных на D-Bus;
•выбрав имя сервиса, следует запустить ее с этим именем; в результате на консоль выведется список доступных путей;
•запустить утилиту с выбранными именем и путем; на консоль выведутся доступные методы;
•запустить утилиту с выбранными именем, путем, методом и аргументами.
Задание 6.1
Изучить по руководству man назначение и способы применения утилиты qdbus. Освоить применение утилиты qdbus в командной строке терминала.
Оразить полученные результаты исследования в личном отчете по теме №12.
6.6.2 Взаимодействие через шину с приложением evince
Возможности утилиты qdbus рассмотрим на примере ее взаимодействия с приложением evince, которое предназначено для просмотра файлов формата pdf.
Задание 6.2
Обучающийся должен повторить все примеры действий, описанных в данном подразделе, и отобразить полученные результаты в личном отчете.
Для начала, следует запустить утилиту qdbus, без параметров, и просмотреть имена сервисов, как это показано на рисунке 6.8.

212 Поскольку студент читает методическое пособие по теме №12, то:
•уже запущено приложение evince для просмотра pdf-файлов;
•поэтому, на рисунке 6.8 присутствует строка: org.gnome.evince.Daemon, соответствующая имени сервиса приложения evince.
Далее следует, в директории ~/bin создать запускаемый сценарий lab12.1.sh, в котором набрать строку:
qdbus org.gnome.evince.Daemon
Запустить сценарий lab12.1.sh и провести анализ путей, выведенных утилитой qdbus на терминал и показанных на рисунке 6.9.
Рисунок 6.9 — Результат запуска сценария lab12.1.sh
Добавить в сценарий путь /org/gnome/evince/Daemon и снова — запустить. Провести анализ результата, показанного на рисунке 6.10.
Рисунок 6.10 — Методы приложения evince на шине D-Bus
Выберем метод FindDocument, как показано на рисунке 6.10, и учтем, что он имеет два параметра:

213
•uri — строковое значение, задающее путь к документу, например,
/home/upk/Документы/Керниган-С.pdf;
•spawn — булевое значение, которое следует задать как 1.
Модифицировать сценарий lab12.1.sh, как показано на рисунке 6.11, и запустить его на исполнение.
Рисунок 6.11 — Окончательный вариант сценария lab12.1.pdf
В результате указанных действий, должно запуститься приложение evince с открытым на просмотр файлом Керниган-С.pdf.
После завершения исследования шины D-Bus, следует:
•оформить отчет по лаборатоной работе №12;
•завершить оформление общего отчета по темам №7-№12;
•приступить к процедуре сдачи результатов проделанных работ преподавателю.