Программа лекций и презентации по курсу «ОС UNIX»

Лекции, названия которых выделены полужирным шрифтом, выносятся на устный зачёт.

Презентации к практическим работам

  1. Оболочка и скриптовые инструменты.
  2. Оформление проектов и инструменты сборки.
  3. Использование Docker.
  4. Сигналы и слоты в QT.

Задания для практических работ

Практическая работа «Скрипт для сборки»

Требуется написать скрипт, совместимый с POSIX Shell, который производит сборку некоторого исходного файла. Таким файлом может быть как программа на языке C/C++, так и документ  TeX. Скрипт должен:

  1. Возвращать информативный код ошибки (скажем, если исходный файл вообще невозможно откомпилировать).
  2. Анализировать текст и находить заготовленный комментарий с именем конечного файла. Комментарий должен быть некоторым ключевым словом, наиболее логично использовать, скажем, &Output:.
  3. Сборка должна производиться в временном каталоге, который должен быть создан при помощи утилиты mktemp.
  4. Каталог должен быть удалён при любом исходе работы скрипта, включая обработку сигналов, которые требуют немедленного прекращения работы.
  5. Рядом с исходным файлом после завершения работы должен появиться конечный файл с именем, как в распознанном комментарии. Все попутные файлы компиляции должны быть удалены вместе со временным каталогом (что очевидно, потому что они не должны покидать пределы временного каталога).

Практическая работа «Конкурентный контейнер»

Для выполнения работы следует:

Под конкурентным управлением файлами мы подразумеваем следующие действия:

  1. Выполняются поочерёдно (бесконечно в цикле) две операции, между которами всегда осуществляется задержка в одну секунду: создание файла в каталоге общего тома и его последующее удаление.
  2. Для определения имени файла следует выбрать первое незанятое имя из последовательности 001, 002, 003 и т. д.
  3. В файл нужно записать некоторый случайно сгенерированный идентификатор контейнера (контейнер во все свои файлы записывает всегда один и тот же идентификатор) и порядковый номер созданного файла для этого контейнера (в первый записывается 1, во второй 2 и т. д.).
  4. Определение незанятого имени и создание файла с ним должно проводиться как атомарная операция (т. е. этот фрагмент должен быть внутри блока с вызовом flock на некотором служебном файле синхронизации). Атомарная операция должна длиться как можно короче.

Контейнер будет проверяться с запуском в единственном экземпляре, с запуском десяти экземпляров и с запуском 50 экземпляров. Во всех случаях работа должна быть стабильной и исключающей race condition.

Практическая работа «Оконное приложение на QT#187;

Необходимо разработать любое оконное приложение с использованием библиотеки QT, которое должно удовлетворять следующим требованиям:

Мастерская работа «Горизонтально масштабируемый сервис»

Работа повышенной сложности и ориентирована на учащихся, желающих отточить своё мастерство с особенным усердием. Для снижения требований допускаются три смягчающих правила:

В рамках работы необходимо разработать сервис по микросервисной архитектуре, отвечающий следующим требованиям:

  1. Сервис должен содержать контейнеры не менее двух различных типов и один брокер. В общем случае допускается реализация одного управляющего контейнера, одного брокера и множество тиражируемых контейнеров-работников, запускаемых из общего образа.
  2. Сервис должен быть горизонтально масштабируемым. Другими словами, как минимум контейнер одного типа должен быть реплицируемым с балансировки нагрузки на все запущенные реплики.
  3. Функциональность сервиса любая по интерес авторов.