Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 

Repository files navigation

Задания по Основам Операционных Систем

Курс поможет познакомиться с базовыми концепциями операционных систем и поэтапно разработать собственные мини-системы.

Структура курса

Директория tasks содержит задания, каждое из которых описано в файле labN.md. Лабораторные выполняются последовательно.

Каждый labN.md включает:

  1. краткие теоретические вопросы,
  2. формулировку задания,
  3. требования (включая интерфейсы), которым должен соответствовать ваш код.

Требования накапливаются: всё, что требуется в lab1, актуально и для всех последующих лабораторных в конкретном проекте.

Проекты

Семестр 1. Универсальная инфраструктура с расширениями (lab1 - lab4)

В этом проекте вы:

  1. Спроектируете каркас приложения с поддержкой подключаемых расширений.
  2. Внедрите единую систему конфигурации.
  3. Настроите централизованное логирование.
  4. Реализуете управление жизненным циклом воркеров-процессов (запуск, перезапуск, завершение).
  5. Организуете сетевое взаимодействие с клиентами.

Итог проекта: минимально рабочая система с расширениями, конфигурацией, логированием, управлением воркерами и базовым сетевым протоколом взаимодействия.

Семестр 2. In-memory key-value хранилище (lab5 - lab7)

В этом проекте вы:

  1. Разработаете in-memory key-value хранилище, работающее по протоколу RESP.
  2. Создадите собственную библиотеку корутин и примените её в проекте.
  3. Реализуете CLI-утилиту для управления и отладки.
  4. Освоите взаимодействие с терминалом (ввод/вывод, управление режимами).

Итог проекта: работающее хранилище с поддержкой протокола RESP, параллельной обработкой клиентов, собственной реализацией корутин и CLI-инструментом для работы из терминала.

Общие требования ко всем лабораторным

Стиль кода

Соблюдайте единообразие во всём проекте:

  1. Код должен быть логически структурирован по файлам, а файлы, в свою очередь, разбиты по папкам.
  2. Именование: функции, типы, переменные, макросы и т. п. Допускается свой стиль для каждого вида сущностей, но он должен быть последовательным.
  3. Однообразные отступы и расстановка скобок.
  4. В коде не должно быть магических захардкоженных констант. Используйте для этого модуль конфигурации.
  5. Разделяйте сложные функции на понятные части: конкретная функция должна делать конкретное действие.
  6. В коде должны быть понятные комментарии, объясняющие логику работы.

Диагностика и обработка ошибок

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

Сборка и предупреждения компилятора

  1. Сборка осуществляется только через Makefile.

  2. Код должен собираться без ошибок и предупреждений. Обязательные флаги:

    -Wall -Wextra -Werror

Управление ресурсами и проверки на утечки

  1. Все явно выделенные ресурсы должны быть явно освобождены.

  2. Не должно быть путей выхода из программы, где ресурсы остаются неосвобождёнными.

    Для самопроверки используйте инструменты:

    # Санитайзеры
    -fsanitize=address -fsanitize=leak
    
    # Valgrind
    valgrind --leak-check=full --show-leak-kinds=all ./your_program

Улучшение проекта (обратная связь и вклад)

Нашли ошибку, неточность или противоречие в заданиях или тестах? Сообщите нам — это поможет сделать курс лучше. Будем рады пул-реквестам/issues:

  1. Репозиторий заданий: os-nsu/tasks
  2. Репозиторий тестов: os-nsu/tests

About

OS project tasks. Template repository for GitHub Classroom

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors