Задания на лабораторную работу по многопроцессному программированию

Требования к отчету по лабораторной работе приведены в конце страницы.
  1. Составить программу cpr ,  осуществляющую рекурсивное копирование поддерева файловой  системы  OC  UNIX. Программа cpr  должна  вызываться на выполнение в соответствие со следующим синтаксисом:
  2. cpr имя_дир_1 имя_дир_2,
    где имя_дир_1 -  имя  директории,  служащее  корнем поддерева файлов, подлежащего копированию; имя_дир_2 - имя директории, в которую должно быть скопировано поддерево.
    Замечание. На  языке оболочки OC UNIX эта задача решается с помощью конвейера из трех команд:
    tar cf - имя_дир_1 | (cd имя_дир_2 ; tar xf -)
     
  3. Составить программу, решающую задачу разрешимости логического  выражения,  содержащего  3 переменные (т.е. задачу отыскания значений всех комбинаций 3  логических  переменных, делающих выражение истинным).

  4. Замечание. Логическое выражение реализовать в виде функции языка СИ с тремя аргументами.
    Для проверки истинности логического выражения на каждой комбинации переменных организовать 8 параллельно выполняемых процессов, при этом родственные связи процессов имеют вид дерева с тремя ярусами. В качестве значений логических переменных целесообразно использовать значения, возвращаемые системным вызовом fork. В каждом процессе осуществить печать значений переменных и истинности выражения.
     
  5. Составить программу параллельного чтения и печати на стандартный вывод содержимого любого текстового файла 2-мя процессами так, чтобы 1-ый процесс преобразовывал перед печатью все прочитанные им буквы в заглавные, а процесс 2 - в строчные. Имя обрабатываемого файла должно передаваться программе как аргумент командной строки.

  6. Внимание! Файл должен открываться посредством open однократно до выполнения системного вызова fork. Чтение файла каждым процессом должно выполняться побайтно с помощью read с небольшой задержкой (см. usleep()).
     
  7. Составить программу поиска в архиве (библиотеке) имен файлов, содержащих заданный прототип. Имя архива и прототипа должны передаваться программе как параметры. Для просмотра содержания архива использовать команду ar в сочетании со средствами перенаправления стандартного ввода-вывода через программный канал. Дополнительно предложить вариант решения данной задачи средствами командного процессора sh или csh.

  8.  
  9. Составить программу, которая заданное число раз (для определенности 5) через определенный временной интервал (5 сек.) повторяет на экране запрос, ожидающий стандартный ввод. Процесс должен завершаться в случае корректного ответа на запрос или после исчерпывания заданного числа запросов. При написании программы рекомендуется использовать средства обработки сигнала от таймера и средства нелокального перехода.

  10.  
  11. Составить программу, которая осуществляет бесконечный цикл обработки сигналов от таймера и игнорирует сигналы прерывания от терминала (^C) и выхода (^\). Обеспечить интерактивную регулировку величины таймерного интервала, поддерживающую 2 частоты посылки сигналов от таймера с периодом 1 и 3 сек, соответственно. Как переключатель таймерного интервала использовать нажатие клавиши Return. Для завершения работы программы использовать комбинацию ^D, которая обеспечивает нулевой возврат при чтении стандартного ввода. Для индикации событий завершения программы и переключения частоты таймера рекомендуется использовать сигналы SIGUSR1 и SIGUSR2, обеспечив их соответствующую обработку.

    Рекомендуется использовать системные вызовы fork, read, exit, kill, signal, alarm, pause и обработку сигналов SIGUSR1, SIGUSR2, SIGINT, SIGQUIT.
    Рекомендуется организовать 2 процесса, 1-й из которых обеспечивает цикл обработки таймерных сигналов, а 2-й управление работой первого процесса через посылку ему сигналов SIGUSR1 и SIGUSR2.
     
  12. Разработать программу, функционирующую в рамках двух процессов (отец и сын). Процесс-отец считывает символы со стандартного ввода посредством read(0,&ch,1) и передаёт процессу-сыну двоичные коды считанных символов посредством отправки сигналов SIGUSR1 (нулевой бит) и SIGUSR2 (единичный бит). Процесс-сын выводит переданные ему символы на стандартный вывод с помощью write(1,&ch,1).
  13. Разработать программу, моделирующую в реальном времени работу лифтовой системы десятиэтажного дома, состоящей из блока управления БУ, пассажирского ЛП и грузового ЛГ лифтов.
    БУ отслеживает текущее состояние лифтов, принимает вызовы пассажиров на этажах, диспетчеризует движение лифтов (выбирает "ближайший", направляет к пассажирам, тормозит на промежуточных этажах и т.п.), индицирует состояние лифтов.
    Лифты исполняют команды находящихся в них пассажиров и команды БУ. Скорость ЛП в два раза выше скорости ЛГ.
    Работа каждого элемента системы (БН, ЛП и ЛГ) моделируется отдельным процессом.
    Клавиши "1"..."0" используются для имитации клавиш вызова лифта на этажах здания. Следующий ряд клавиш "q"..."p" имитирует кнопки внутри ЛП, а ряд "a"...":" - внутри ЛГ. Для обработки нажатий клавиш использовать неканонический режим.
    Визуализация перемещения лифтов може выглядить, например, след. образом.
    
    ЛП - - - - 2 - - - - -
    
    ЛГ - - - - - - - - 0 -
    
    Здесь цифры индицируют количество пассажиров в лифте.
  14. Разработать программу, моделирующую в реальном времени работу поточной линии, состоящей из N станков и обрабатывающей заготовки M типов.
    Каждая заготовка последовательно проходит обработку на всех станках линии. Времена обработки заготовок каждого типа (в секундах) на каждом станке линии задаются в виде прямоугольной матрицы размером NxM в конфигурационном файле line.cnf. Первые 2 строки этого файла содержат числа N и M.
    Программа реализуется в N+1 процессов. Процесс 0 порождает N процессов-"станков", обеспечивая канал (pipe) связи между ними и организуя передачу информации (способ выбрать самостоятельно) о временах обработки заготовок разного типа. Далее этот процесс читает со стандартного ввода последовательность номеров типов заготовок и передает её на вход первого процесса-"станка". Процессы-"станки" имитируют обработку заготовок с помощью функции sleep().
    Предусмотреть вывод информации о ходе обработки заготовок.
    Некоторые из возможных модификаций задания.
  15. Разработать программу, моделирующую в реальном времени работу кооператива подвижных манипуляторов (ПМ) и блока управления (БУ) ими.
    БУ реализуется в качестве головного (корневого) процесса и воспринимает со стандартного ввода команды создания/уничтожения ПМ и управления ими. ПМ реализуются в рамках отдельных вновь порождаемых (и убиваемых) процессов. ПМ существуют в прямоугольном дискретном поле размером NxM и могут передвигаться в нем в 4-х направлениях с временными затратами T секунд на клетку. При достижении границы поля ПМ останавливается. ПМ информируют о смене своего положения, например, выдавая на стандартный вывод (что неправильно, почему?) строку "кто: откуда=>куда".
    БУ читает со стандартного ввода команды пользователя (синтаксис придумать самостоятельно), позволяющие создавать/уничтожать ПМ, задавать их направление и "скорость" движения (количество ПМ не ограничено).
    Некоторые из возможных модификаций задания:
  16. Разработать программу, реализующую обработку строк текста и функционирующую в рамках 3-х процессов.
    Процесс 0 (корневой) порождает 2-ух потомков (напрямую или опосредованно, решать вам) и органиует конвейер (pipe) передачи строк символов в последовательности "процесс-0 => процесс-1 => процесс-2".
    Процесс 0 получает строку символов латинского алфавита со стандартного ввода и передаёет ее в неизменном виде процессу 1.
    Процесс 1 умеет преобразовывать полученную от процесса 0 строку символов различными способами: Процесс 2 умеет преобразовывать полученную от процесса 1 строку символов следующими способами: Основная функциональноcть процесса 0 - считывание со стандартного ввода строк латинского текста и передача их (строк) процессу 1. Однако сигнал SIGINT (Ctrl/C) переводит процесс 0 в состояние однократного чтения со стандартного ввода команды перехода процесса 1 или 2 к новому способу обработки поступающих к нему строк текста (синтаксис команд придумать самостоятельно).
    Обязательно обеспечить индикацию результатов работы каждого процесса в правильной временной последовательности.
  17. Разработать программу, реализующую обработку текстовых файлов и функционирующую в рамках 3-х процессов.
    Корневой процесс является управляющим и принимает в качестве аргументов имена 2-х файлов. В начале своей работы он порождает 2 процесса, передавая каждому по одному имени файла.
    Первый порожденный процесс осуществляет побайтное считывание файла и вывод с небольшой задержкой прочитанных байт (по одному на строке) в верхнем регистре на стандартный вывод.
    Второй порожденный процесс осуществляет побайтное считывание файла и вывод с небольшой задержкой прочитанных байт (по одному на строке) в нижнем регистре на стандартный вывод.
    Управляющий процесс считывает со стандартного ввода строки, содержащие имена новых текстовых файлов и заставляет порожденные процессы немедленно переходить на обработку новых файлов по следующей схеме: второй порожденный процесс переходит к обработке файла, ранее обрабатываемого первым процессом; первый порожденный процесс начинает обрабатывать файл, имя которого ему передает управляющий процесс.
  18. Разработать программу "Виндоуз мобиле", функционирующую в рамках пяти процессов (отец и 4 сына). Процесс-отец, имитируя работу ядра ОС, порождает 4 процесса-сына. Каждый сын регистрирует функцию-обработчик сигнала SIGUSR1 и переходит в состояние ожидания посредством pause(). Процесс-отец читает со стандартного ввода цифру в диапазоне 0...3 (имитация касания какой-либо иконки на экране планшета/смартфона) и посылает сигнал SIGUSR1 соответствующему процессу-сыну. Разбуженный сигналом процесс считывает со стандартного ввода одну строку символов, преобразует её соответственно своей функциональности, выводит результат в стандартный вывод и возвращается в состояние сна.
    Процессы-сыновья имеют следующие функциональности: Для чтения цифры с клавиатуры в процессе-отце использовать неканонический режим.
Содержание отчета