- •Введение
- •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
- •Заключение
- •Список использованных источников
166
4.6 Лабораторная работа по теме №10
Выполнение лабораторной работы №10 опирается на теоретический материал и примеры, изложенные в данном разделе данного методического руководства, поэтому, приступая к выполнению работы, следует сначала подробно изучить подразделы 4.1 и 4.2, где дано описание проблематики синхронизации процессов, которые выполняют свою работу асинхронно.
Изучив основную идею и назначение системного пакета System V IPC, следует познакомиться с набором утилит, которые поддерживат этот пакет. Для этого, следует изучить подраздел 4.3 и, например, запустить утилиту ipcs без параметров, которая, как показано на рисунке 4.3, выведет информацию о семафорах, разделяемых сегментах памяти и очередях сообщений, используемых в данный момент в среде ОС.
Рисунок 4.3 — Вывод информации утилитой ipcs без параметров
Далее, следует перейти к основной тематике данной лабораторной работы, которая
167
посвящена изучению семафоров, где вся последовательность выполнения заданий разделена на две группы:
•подраздел 4.6.1 — синхронизация двух процессов, позволяет закрепить основные навыки работы с системными вызовами семафоров;
•подраздел 4.6.2 — задача «Обедающие философы», демострирует реальный
пример устранения блокировок между асинхронно работающими процессами, использующими общие ресурсы.
Чтобы во время выполнения работы были доступны проекты примеров среды разработки Eclipse, следует:
•выйти из среды разработки Eclipse, если она - запущена;
•правой кнопкой мыши активировать меню значка EclipseC, расположенного на рабочем столе и выбрать пункт меню «Свойства...»;
•отредактировать команду запуска, указав рабочую область среды Eclipse в директорию /home/upk/lab10, как показано на рисунке 4.4.
•закрыть окно «Eclipse — Свойства» и снова запустить среду разработки, которая должна содержать проекты лабораторной работы №10.
Рисунок 4.4 — Настройка среды разработки Eclipse С
168
4.6.1 Синхронизация двух процессов
Системные вызовы для работы с семаформами описаны в подразделе 4.4 данного руководства.
Следует изучить учебный материал этого подраздела и выполнить следующее задание.
Задание 4.1
Запустить среду разработки EclipseС, с настройками, указанными ранее, а затем разобраться с примерами программ, реализованными в виде двух проектов: lab10.1
и lab10.2.
Провести исследование, посредством запуска прогамм этих проектов, обратив внимание на разные результаты взаимодествия, при разной последовательности запуска этих программ.
Отразить содержание проделанной работы в личном отчете.
4.6.2 Задача «Обедающие философы»
Задача «Обедающие философы» является классическим примером взаимодействия процессов, которое может привести к их взаимной блокировке. Поэтому, решение данной задачи подробно изложено в подразделе 4.5 данного рукововдства.
Задание 4.2
Запустить среду разработки EclipseС и, в процессе изучения подраздела 4.5, выполнить данное задание, воспользовавшись модержимым проектов lab10.3 и lab10.4.
Особое внимание следует обратить на проектирование алгоритма разрешения конфликтов между процессами, отвественность за наличие которых полностью лежит на плечах программиста.
Отразить содержание проделанной работы в личном отчете.