- •Введение
- •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
- •Заключение
- •Список использованных источников
61
1.9.2 Список заданий выполняемых работ
Все задания лабораторных работ ориентированы на использование среды разработки Eclipse, изученной в предыдущем подразделе.
Сами проекты данной лабораторной работы должны находятся в директории
/home/upk/lab7.
Чтобы подключить к Eclipse нужную рабочую среду, следует:
•выйти из среды разработки Eclipse, если она еще запущена;
•правой кнопкой мыши активировать меню значка EclipseC, расположенного
на рабочем столе и выбрать пункт меню «Свойства...»; в результате, откроется окно, показанное на рисунке 1.23 (вкладка «Запуск»);
•отредактировать команду запуска, указав рабочую область среды Eclipse в директорию /home/upk/lab7, как показано на рисунке 1.24;
•закрыть окно «Eclipse — Свойства» и снова запустить среду разработки,
которая должна содержать проекты лабораторной работы №7, как показано на рисунке 1.25.
Рисунок 1.23 — Окно свойств для запуска Eclipse
62
Рисунок 1.24 — Отредактированное окно свойств для запуска Eclipse
Рисунок 1.25 — Проекты лабораторной работы №7
63
Замечание
Для того, чтобы вызвать в окно редактора нужный исходный текст проекта, необходимо:
•в «Project Explorer» раскрыть нужный проект и найти исходный текст программы, как показано на рисунке 1.25;
•дважды, левой кнопкой мыши, активировать имя программы, текст которой появится в окне редактора Eclipse.
Общая методика выполнения всех лабораторных работ предполагает, что студент, перед выполнением каждой из них, изучает теоретический материал, изложенный в первом разделе руководства. Такой подход позволяет лучше усвоить все вопросы и успешно подготовиться к сдаче экзамена.
1.9.3 Проблема типов в языке С
Как было объявлено во введении данного методического пособия, вторая часть изучаемой дисциплины предполагает интенсивное использование языка программирования С.
В вводной части первого раздела уточняется, что тема №7, посвященная подсистеме управления вводом-выводом, рассматривается из пространства пользователя через интерфейс API, обеспечиваемый ядром ОС.
Для взаимодействия с интерфейсом API, любая ОС предоставляет библиотеку libc (glibc для ОС Linux), которая создается в момент компиляции ядра ОС и является набором функций, обеспечивающих системные вызовы к этому ядру.
Сама библиотека libc написана на языке С, с возможными вставками на языке assembler, поэтому она, наряду с синтаксисом системных вызовов, создает семантическое представление, которое формируется у программиста и восприниматся им как базовые функции ОС.
Таким образом, язык C, в своем базовом функциональном наполнении, становится синонимом некоторой обобщенной ОС, для которой пришется прикладное программное обеспечение.
Язык С, заменяя аппаратно ориентированный язык assembler, берет на себя все
проблемы, связанные с определением типов данных:
•тип char — минимально адресуемый тип данных, соответствующий размер-
ности одного байта, вызывает проблемы кодировок символов и строковых типов данных;
•тип int — привязан к размерности базовых целочисленных регистров процес-
сора, поэтому является основным источником проблем, поскольку, исторически, все системные вызовы ОС ориентированы на этот тип данных;
•тип float — обычно рассматривается как дополнительный тип данных, свя-
занный с сопроцессором вещественных типов данных; этот тип данных не используется в ядре ОС и может вызвать проблемы только в приложениях.
Использование модификаторов типов short и long только добавляют количество
64
проблем:
•модификатор short определяется как тип, который не превышает размерности типа int;
•модификатор long определяется как тип, который не меньше, чем размер-
ность типа int.
Таким образом, учитывая плеяду 8, 16, 32 и 64-битных архитектур современных процессоров, следует очень тщательно относиться к размерности типов данных в разрабатываемых прикладных программах.
Цель данного подраздела — анализ типов данных, используемых в ОС УПК АСУ. Необходимо:
•прочитать учебный материал подраздела 1.1 и осознать важность стандарта POSIX и специфику программирования на языке С;
•освоить использование утилиты getconf для целей изунения параметров используемой ОС;
•запустить среду разработки Eclipse и, в рамках тестового проекта lab7.1, на
примере текста листинга 1.1, исследовать основные типы языка С для используемой ОС.
Замечание
Особое внимание следует обратить на размерность структуры mbr, которая соответствует структуре MBR блочных устройств.
1.9.4 Анализ структуры MBR блочных устройств
Основу операций работы с файловой системой ОС составляют системные вызовы open(...), close(...), read(...), write(...) и lseek(...), которые:
•входят в системную библиотеку libc (glibc) и обеспечивают побайтный обмен данными с файлами ОС;
•на основе их формируются функции потокового ввода-вывода, например,
fopen(...), fclose(...), fread(...), fwrite(...), fseek(...) и другие, формирующие библиотеки стандартного ввода вывода ОС.
Для демонстрации примеров работы с операциями системного ввода-вывода выбрана задача анализа структуры MBR блочных устройств, поскольку:
•хотя сама MBR и не входит ни в одну файловую систему, но работа с ней необходима для правильного взаимодействия с любым блочным устройством;
•структура MBR имеет набор полей, имеющих строгое позиционирование, поэтому неправильное использование типов данных языка С может иметь не-
предсказуемый результат.
Эту часть лабораторной работы следует выполнять в процессе изучения подраздела 1.2 данного руководства.
Изучив описание системных вызовов open(...), close(...), read(...) и write(...), следу-