Материал: 396_OS_uchebnoe_posobie_part1_2012

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лабораторная работа № 4. Программирование в ОС Linux. Основные этапы создания программ. Взаимодействие программ с командной оболочкой. Обработка исключительных ситуаций

Задание на лабораторную работу

Написать программу на языке Си, состоящую из двух файлов: заголовочного файла и файла программы.

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

Программа должна выполнять следующие действия:

1)вывести все переменные окружения на экран двумя различными способами (способ задаётся пользователем в командной строке опциями -1 и -2);

2)обработать все указанные опции командной строки и в случае ошибочных опций выдать сообщение в стандартный поток ошибок о неправильном использовании программы;

3)в командной строке опцией -f файл указывается имя файла, который необходимо открыть и вывести его содержимое на экран. Также необходимо обработать ошибки, которые могут возникнуть при открытии, закрытии и выводе файла на экран;

4)при завершении программы (даже в случае возникновения ошибок) на экран должно быть выдано сообщение об авторе программы: ФИО, учётное имя, группа.

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

1.Этапы создания программы с использованием языка высокого уровня.

2.Заголовочные файлы. Зачем используются, где находятся?

3.В чём отличие использования символов < > и '' '' в директиве препроцес-

сора #include?

4.Зачем используются производные системные типы (имеющие оконча-

ние «t»)?

5.Этапы компиляции программ, написанных на языке Си.

6.Зачем нужны файлы, имеющие суффикс .o?

7.Зачем нужна программа-компоновщик ld?

8.Способы получения переменных окружения.

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

10.Функции getopt и getopt_long. Принципы их работы.

11.Способы завершения программ. Команды exit, _exit.

12.Обработчики завершения программ.

13.Функции обработки ошибок в программах.

121

Лабораторная работа № 5. Порождение, завершение, синхронизация процессов. Группы и сеансы

Задание на лабораторную работу

Написать программу на языке Си, реализующую следующие действия.

1.Вывод информации об идентификаторах процесса, группы, сеанса.

2.Вывод на экран строки-приглашения пользователю для ввода команды.

3.Разбор командной строки, введённой пользователем, и формирование массива argv.

4.Порождение процесса, в котором выполняется указанная команда с указанными параметрами. Необходимо предусмотреть возможность поиска указанной программы в путях PATH.

5.Обработка ошибки запуска указанной программы.

6.Вывод информации о статусе завершения порождённого процесса при его завершении.

7.Программа завершается если: пользователь ввёл команду exit или нажал Enter без ввода команды.

8.При завершении работы программы на экран должна быть выведена следующая информация: имя автора, группа и логин.

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

1.Что такое процесс? В чем его отличие от программы?

2.Атрибуты процесса.

3.Что такое PID, PPID и зачем они нужны? Как их можно получить?

4.Что такое GID, EGID, UID, EUID и зачем они нужны? Как их можно получить?

5.Порождение нового процесса.

6.Семейство вызовов exec. Отличия функций.

7.Отличие порождения процесса от выполнения программы.

8.Синхронизация выполнения процессов. Зачем она нужна?

Лабораторная работа № 6. Взаимодействие процессов. Каналы. FIFO

Задание на лабораторную работу

1.Написать программу, выполняющую следующие действия:

создание программного канала и порождение дочернего процесса;

основной процесс считывает содержимое файла /etc/passwd и передаёт его в канал;

дочерний процесс получает информацию через канал и выводит эту информацию в файл с именем ~/passwds.

передача завершается при поступлении в канал символа с кодом 26.

при получении информации дочерний процесс производит замену символов по схеме: b n, i a, n b.

2.Написать программу, использующую именованные каналы.

122

1)Клиентская и серверная части должны иметь общий заголовочный файл, определяющий требуемые соглашения (имя FIFO, длины строк и т.д.).

2)Серверная часть создаёт именованный канал согласно соглашению и ждёт поступления от клиента строки формата: «FILENAME~имя_файла». Информация, поступившая до указанной строки, игнорируется. После поступления указанной строки сервер создаёт файл, имя которого было передано, и открывает его для записи. Далее, всё, что приходит от клиента, записывается в этот файл. Процедура взаимодействия заканчивается поступлением от клиента символа с кодом 26.

3)Клиент выводит приглашение пользователю для ввода имени файла, после чего формирует строку указанного формата и передаёт её серверу. Клиент передаёт любую информацию серверу, которая завершается символом с кодом 26.

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

1.Могут ли процессы получать непосредственный доступ к данным других процессов? Почему?

2.Программные каналы. Зачем нужны? Принцип функционирования.

3.Функция pipe.

4.Именованные каналы и их отличие от программных.

5.Функция mknod.

Лабораторная работа № 7. Многонитиевые программы

Задание на лабораторную работу

Разработать программу, реализующую модель работы склада, отвечающего за хранение и продажу некоторого товара (одного). Склад содержитN помещений, каждый из которых может хранить определённое количество единиц товара. Поступающий товар помещается в одно из помещений специальным погрузчиком. За товаром прибывает K покупателей, каждому из которых требуется по Lk единиц товара. Площадка перед складом мала, и на ней может в один момент времени находиться либо погрузчик, либо один из покупателей. Если покупателям требуется больше товара, чем имеется на складе, то они ждут новых поступлений, периодически проверяя склад. Время работы склада ограниченно.

1)Основная нить (функция main) выполняет следующие действия:

формирует начальное заполнение склада (для каждого помещения случайным образом выбирается число из диапазона от 1 до 40);

обрабатывает опции командной строки, в которой должно быть указано, сколько клиентов будет обслуживаться складом, и в течение какого времени должен работать склад;

порождает заданное количество нитей, каждая из которых реализует алгоритм работы покупателя. Каждому покупателю случайным образом назначается количество требуемых единиц продукции (число из диапазона от 1 до 1000);

123

настраивает таймер (alarm) таким образом, чтобы он сработал по окончании времени работы склада;

запускает алгоритм работы погрузчика;

после срабатывания таймера принудительно завершает все выполняющиеся нити (если таковые имеются);

завершает работу программы.

2)Алгоритм работы погрузчика:

пытается попасть на площадку перед складом;

как только попадёт на площадку, ищет хотя бы один склад, в котором нет продукции, и заполняет его максимально возможным образом;

покидает площадку;

«засыпает» на 5 секунд;

цикл повторяется до срабатывания таймера.

3)Алгоритм работы покупателя:

пытается попасть на площадку перед складом;

как только попадёт на площадку, ищет хотя бы один склад, в котором есть продукция, и забирает либо столько, сколько надо, либо всю продукцию;

покидает площадку;

«засыпает» на 5 секунд;

цикл повторяется до тех пор, пока покупателю нужна продукция. Программа должна выводить на экран информацию о помещениях склада.

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

1.Что такое нить? Чем она отличается от процесса?

2.Каким образом можно создать нить и завершить её?

3.Как можно узнать статус завершения нити (возвращаемое значение)?

4.Могут ли нити использовать общие переменные? Приведите пример.

5.Что такое «мьютекс»? Каким образом он используется в лабораторной работе?

Лабораторная работа № 8. Взаимодействие процессов. Идентификация. Сообщения

Задание на лабораторную работу

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

1)Клиент предлагает пользователю ввести символьную строку, которая потом будет отправлена серверу. Далее клиент ожидает ответа от сервера. Работа клиента прекращается в случае поступления от сервера строки, содержащей «bye».

124

2)Сервер получает строку от клиента и отвечает на неё следующим образом: если клиент прислал строку «hello», сервер отвечает «hi», если –

«how_are_you», то – «fine», если – «bye», то – «bye». Работа сервера завершается в случае поступления от клиента строки, содержащей «bye». PID клиента сервер получает в сообщении с идентификатором 2.

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

1.Зачем нужна идентификация процессов? Что такое ключ?

2.Функция ftok. Какие файлы могут быть использованы в качестве параметров? Что такое идентификатор проекта?

3.Зачем нужны функции класса get?

4.Являются ли ключи локальными в рамках одного процесса, или они доступны и другим процессам?

5.Где хранятся ключи?

6.Кто создаёт и кто удаляет ключи?

7.Что такое сообщения? Зачем они нужны?

8.Имеют ли сообщения структуру?

9.Зачем нужен идентификатор сообщения, и какие значения он может принимать?

10.Как хранится очередь сообщений? Можно ли прочитать сообщения от процесса, которого уже нет в системе?

11.Функция msgget.

12.Функция msgrcv.

13.Функция msgsnd.

14.Функция msgctl.

Лабораторная работа № 9. Взаимодействие процессов. Семафоры. Разделяемая память

Задание на лабораторную работу

Описать три семафора и следующие операции с ними:

1)Семафор первый – информация о запуске и остановке клиентов. Значение семафора – количество запущенных клиентов. Операции: 1) подключение клиента (увеличение значения семафора на 1); 2) отключение клиента (уменьшение семафора на 1); 3) проверка отсутствия клиентов (проверка на 0 значения семафора).

2)Семафор второй – контроль доступа к памяти. Значения семафора: 0 – доступ разрешён, 1 – доступ заблокирован. Операции: 1) ожидание освобождения и блокирование памяти и 2) разблокирование памяти.

3)Семафор третий – контроль наличия сообщения. Значения семафора:

0 – сообщение отсутствует, 1 – сообщение присутствует.

Операции:

1) занесение сообщения (установка значения в 1); 2)

считывание

125

Источник: https://studfile.net/preview/16708918/