Курс поможет познакомиться с базовыми концепциями операционных систем и поэтапно разработать собственные мини-системы.
Директория tasks содержит задания, каждое из которых описано в файле labN.md.
Лабораторные выполняются последовательно.
Каждый labN.md включает:
- краткие теоретические вопросы,
- формулировку задания,
- требования (включая интерфейсы), которым должен соответствовать ваш код.
Требования накапливаются: всё, что требуется в lab1, актуально и для всех последующих лабораторных в конкретном проекте.
В этом проекте вы:
- Спроектируете каркас приложения с поддержкой подключаемых расширений.
- Внедрите единую систему конфигурации.
- Настроите централизованное логирование.
- Реализуете управление жизненным циклом воркеров-процессов (запуск, перезапуск, завершение).
- Организуете сетевое взаимодействие с клиентами.
Итог проекта: минимально рабочая система с расширениями, конфигурацией, логированием, управлением воркерами и базовым сетевым протоколом взаимодействия.
В этом проекте вы:
- Разработаете in-memory key-value хранилище, работающее по протоколу RESP.
- Создадите собственную библиотеку корутин и примените её в проекте.
- Реализуете CLI-утилиту для управления и отладки.
- Освоите взаимодействие с терминалом (ввод/вывод, управление режимами).
Итог проекта: работающее хранилище с поддержкой протокола RESP, параллельной обработкой клиентов, собственной реализацией корутин и CLI-инструментом для работы из терминала.
Соблюдайте единообразие во всём проекте:
- Код должен быть логически структурирован по файлам, а файлы, в свою очередь, разбиты по папкам.
- Именование: функции, типы, переменные, макросы и т. п. Допускается свой стиль для каждого вида сущностей, но он должен быть последовательным.
- Однообразные отступы и расстановка скобок.
- В коде не должно быть магических захардкоженных констант. Используйте для этого модуль конфигурации.
- Разделяйте сложные функции на понятные части: конкретная функция должна делать конкретное действие.
- В коде должны быть понятные комментарии, объясняющие логику работы.
- Проверяйте возвращаемые значения всех функций и системных вызовов, корректно реагируйте на ошибки.
- Все ошибки в коде должны быть обработаны.
- При корректной работе программа завершается с кодом возврата 0.
-
Сборка осуществляется только через
Makefile. -
Код должен собираться без ошибок и предупреждений. Обязательные флаги:
-Wall -Wextra -Werror
-
Все явно выделенные ресурсы должны быть явно освобождены.
-
Не должно быть путей выхода из программы, где ресурсы остаются неосвобождёнными.
Для самопроверки используйте инструменты:
# Санитайзеры -fsanitize=address -fsanitize=leak # Valgrind valgrind --leak-check=full --show-leak-kinds=all ./your_program
Нашли ошибку, неточность или противоречие в заданиях или тестах? Сообщите нам — это поможет сделать курс лучше. Будем рады пул-реквестам/issues:
- Репозиторий заданий: os-nsu/tasks
- Репозиторий тестов: os-nsu/tests