/BSUIR-2.4-OSiSP

ОСиСП — Операционные системы и системное программирование

Primary LanguageC

Лабораторные ОСиСП

Лабораторная 1 (Bash / Ubuntu Server 18.04)

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

Лабораторная 2 (Bash / Ubuntu Server 18.04)

  1. Найти все дубликаты (с одинаковым содержимым) файлов в заданном диапазоне размеров от N1 до N2 (N1, N2 задаются в аргументах командной строки), начиная с исходного каталога и ниже. Имя исходного каталога задаётся пользователем в качестве первого аргумента командной строки.

Лабораторная 3 (C / Ubuntu Server 18.04)

Процессы непрерывно обмениваются сигналами. Запись в таблице 1 вида: 1-> (2,3,4,5) означает, что исходный процесс 0 создаёт дочерний процесс 1, который, в свою очередь, создаёт дочерние процессы 2,3,4,5. Запись в таблице 2 вида: 1-> (2,3,4) SIGUSR1 означает, что процесс 1 посылает дочерним процессам 2,3,4 одновременно (т.е. за один вызов kill()) сигнал SIGUSR1. После передачи 101–го по счету сигнала SIGUSR родительский процесс посылает сыновьям сигнал SIGTERM и ожидает завершения всех сыновей, после чего завершается. Сыновья, получив сигнал SIGTERM завершают работу с выводом на консоль сообщения вида:

Pid ppid завершил работу после X-го сигнала SIGUSR1 и Y-го сигнала SIGUSR2

где X, Y – количество посланных за все время работы данным сыном сигналов SIGUSR1 и SIGUSR2 Каждый процесс в процессе работы выводит на консоль информацию в следующем виде:

N pid ppid послал/получил USR1/USR2 текущее время (мксек)

Дерево:

  1. 1->(2,3,4,5,6) 6->(7,8)

Последовательность обмена сигналами:

  1. 1->(2,3,4,5,6)SIGUSR2 6->(7,8)SIGUSR1 8->1 SIGUSR2

В данной лабораторной есть одна неприятная особенность, приводящая к нестабильной работе без слипов, которые по условию запрещены. Нестабильная работа заключается в том, что процессы, которые сами не отправляют сигналов, получают их меньше, чем нужно. Далее привожу объяснение этого на первый взгляд волшебного бага.

По условию отправка нескольким процессам сигнала должна осуществляться за один вызов kill, то есть фактически мы просим все процессы одновременно вызвать обработчики. Также заметим, что не все процессы из группы участвуют в продолжении цепи передачи сигналов, имеются также бездействующие процессы, которые просто выводят информацию о полученном сигнале. Еще один важный факт: полная потеря сигнала процессом может произойти в том случае, когда второй сигнал приходит в момент переустановки обработчика (фактически сразу после прихода первого сигнала). Все сигналы, пришедшие в этот момент, будут утеряны.

Полное описание данной проблемы вы можете найти у vanashimko

Лабораторная 4 (C / Ubuntu Server 18.04)

  1. Написать программу синхронизации двух каталогов, например, Dir1 и Dir2. Пользователь задаёт имена Dir1 и Dir2 в качестве первого и второго аргумента командной строки. В результате работы программы файлы, имеющиеся в Dir1, но отсутствующие в Dir2, должны скопироваться в Dir2 вместе с правами доступа. Процедуры копирования должны запускаться в отдельном процессе для каждого копируемого файла. Каждый процесс выводит на экран свой pid, полный путь, имя копируемого файла и число скопированных байт. Число запущенных процессов в любой момент времени не должно превышать N (вводится пользователем).

Лабораторная 5 (C / Ubuntu Server 18.04)

  1. Написать программу, создающую 2 дочерних процесса. Родительский процесс создаёт 2 неименованных канала. Дочерние процессы записывают в канал по 100 строк вида: номер_строки pid_процесса текущее_время (мксек). Родительский процесс читает из канала по 75 строк и выводит их на экран в следующем виде: pid строка, прочитанная из файла. Дочерние процессы начинают работу после получения сигнала SIGUSR2 от родительского процесса. По завершению работы они посылают сигнал SIGUSR1 родительскому процессу.

Лабораторная 6 (Ubuntu Server 18.04)

  1. Запустить веб-сайт на PHP в контейнере Docker. Сформировать SSH-ключ для беспарольного доступа к ОС по SSH.