Презентации и программа лекций
Учебный курс «ОС UNIX»
Введение, история и разновидности
- История развития UNIX.
- Сильные и слабые стороны UNIX.
- Разновидности UNIX и дистрибутивы GNU/Linux.
Процессы и файлы
- Понятие процесса, типы процессов,
pidпроцесса, функцияfork(). - Сигналы и приоритеты процессов.
- Структура файловой системы, типы файлов, монтирование файловых систем, команда
chroot. - Типы ссылок и права доступа.
- Понятие файлового дескриптора, функции
open(),read(),write()иclose().
Управление сетью и инструменты обеспечения безопасности
- Сетевые интерфейсы, таблица маршрутизации и беспроводные подключения.
- Инструменты отладки
nmap,pingиtraceroute. - Установление сетевого подключения.
- Утилиты подсчёта хэш-сумм.
- Утилиты
gpgиcryptsetup.
Сигналы и инструменты межпроцессного взаимодействия
- Обработка и блокирование сигналов, функция
signalfd(). - Трубы для потоковой передачи данных.
- Семафоры, разделяемая память и очереди сообщений.
- Сервис D-Bus.
Контейнерная виртуализация
- Технологии контейнерной виртуализации, плюсы и минусы.
- Docker и его понятия.
- Сервисы в Docker Compose и Docker Stack.
- Инструменты оркестрации.
Оконная система, терминалы и TeX
- X Window system и Wayland.
- Оконные менеджеры, GTK+ и QT.
- Терминалы и псевдотерминалы.
- TeX и LaTeX.
- Структура документа и форматирование текста.
Полезные материалы для практических работ
Практические работы
Практическая работа «Скрипт для сборки»
Требуется написать скрипт, совместимый с POSIX Shell, который производит сборку некоторого исходного файла. Таким файлом может быть как программа на языке C/C++, так и документ TeX. Скрипт должен:
- Возвращать информативный код ошибки (скажем, если исходный файл вообще невозможно откомпилировать).
- Анализировать текст и находить заготовленный комментарий с именем конечного файла.
Комментарий должен быть некоторым ключевым словом, наиболее логично использовать, скажем,
Output:. - Сборка должна производиться в временном каталоге, который должен быть создан при помощи утилиты
mktemp. - Каталог должен быть удалён при любом исходе работы скрипта, включая обработку сигналов, которые требуют немедленного прекращения работы. Если в ходе сборки файла создаются временные промежуточные файлы, они должна оставаться во временном каталоге и удаляться вместе с ним.
- Рядом с исходным файлом после завершения работы должен появиться конечный файл с именем, как в распознанном комментарии.
Практическая работа «Конкурентный контейнер»
Для выполнения работы следует:
- завести некоторый разделяемый том в Docker, который можно подключать к нескольким контейнерам;
- подготовить
Dockerfileи скрипт на POSIX Shell, с помощью которых можно создать образ контейнера для конкурентного управления файлами.
Под конкурентным управлением файлами мы подразумеваем следующие действия:
- Выполняются поочерёдно (бесконечно в цикле) две операции, между которами всегда осуществляется задержка в одну секунду: создание файла в каталоге общего тома и его последующее удаление.
- Для определения имени файла следует выбрать первое незанятое имя из последовательности
001,002,003и т. д. - В файл нужно записать некоторый случайно сгенерированный идентификатор контейнера (контейнер во все свои файлы записывает всегда один и тот же идентификатор) и порядковый номер созданного файла для этого контейнера (в первый записывается
1, во второй2и т. д.). - Определение незанятого имени и создание файла с ним должно проводиться как атомарная операция (т. е. этот фрагмент должен быть внутри блока с вызовом
flockна некотором служебном файле синхронизации). Атомарная операция должна длиться как можно короче.
Контейнер будет проверяться с запуском в единственном экземпляре, с запуском десяти экземпляров и с запуском 50 экземпляров. Во всех случаях работа должна быть стабильной и исключающей race condition.
Практическая работа «Жёсткие ссылки»
Необходимо написать консольное приложение на C/C++ с использованием любой библиотеки, но без вызова внешних приложений, которое:
- Обходит весь указанный каталог и составляет список файлов в нём.
- Для каждого файла вычисляет любой вид хэша (можно SHA1).
- Для всех файлов, у которых обнаружен совпадающий хэш, требуется оставить только один экзэмпляр, а остальные нужно заменить на жёсткие ссылки, указывающие на тот экземпляр, который был оставлен.
Практическая работа «Горизонтально масштабируемый сервис»
В рамках работы необходимо разработать сервис по микросервисной архитектуре, отвечающий следующим требованиям:
- Сервис должен содержать контейнеры не менее двух различных типов и один брокер. В общем случае допускается реализация одного управляющего контейнера, одного брокера и множество тиражируемых контейнеров-работников, запускаемых из общего образа.
- Сервис должен быть горизонтально масштабируемым. Другими словами, как минимум контейнер одного типа должен быть реплицируемым с балансировки нагрузки на все запущенные реплики.
- Функциональность сервиса любая по интерес авторов.