Skip to content

Latest commit

 

History

History
226 lines (182 loc) · 11.3 KB

File metadata and controls

226 lines (182 loc) · 11.3 KB

CourseOS

license release downloads code size

Ruff and MyPy checks pytest tests PyQt UI compilation CodeQL (Python, C++, GH Actions)

Курсовой проект по операционным системам, продуктом которого является эмулятор файловой системы S5FS, а также межпроцессного взаимодействия.

Скриншоты

Эмулятор ФС

Авторизация:



Списки групп и пользователей:



Список файлов:



Создание новой группы:



Создание нового пользователя:



Группа и пользователь успешно добавлены:



Попытка открыть системный файл (запрещено):



Подтверждение перед удалением не системного файла:



Поскольку файл был создан другим пользователем, а у других пользователей права на запись нет, удалить его нельзя:



Создание нового файла:



Выставление прав при создании нового файла:



Открытие файла после создания (метаданные обновлены):



Открытие файла после снятия права на запись (поля заполнены данными, но не активны для изменения):



Дата модификации файла после его редактирования обновлена:



Копирование файла:



Удаление исходного файла (будет произведено только после возвращения права на запись):

Демо межпроцессного взаимодействия

Каналы:



Именованные каналы:



Разделяемая память:

Основные требования

  • файловая система должна эмулировать структуру и принцип работы S5FS
  • файловая система должна «работать» в бинарном файле
  • файловая система должна быть одноуровневой и работать с битовой картой свободных/занятых кластеров
  • файловая система должна поддерживать:
    • CRUD-операции с файлами и каталогами
    • создание пользователей и групп, вход в систему от имени пользователей
    • настройку прав доступа к файлам и каталогам
    • дополнительные возможности на усмотрение разработчика
  • в прототипе межпроцессного взаимодействия должны быть реализованы следующие средства:
    • каналы
    • именованные каналы
    • разделяемая память
  • эмулятор файловой системы должен быть выполнен в виде графического приложения
  • работу межпроцессного взаимодействия можно проиллюстрировать в отдельных консольных программах
  • язык написания эмулятора ФС — любой, межпроцессного взаимодействия — один из низкоуровневых (например, C/C++)

Особенности реализации

  • все требования соблюдены
  • эмулятор файловой системы кроссплатформенный, межпроцессное взаимодействие написано под Linux- [x] операции с бинарным файлом файловой системы покрыты тестами
  • интегрированы инструменты управления зависимости и статического анализа кода
  • проверка качества кода посредством CI/CD пайплайнов и Git-хуков

Стек

  • Python — основной язык программирования
  • uv — пакетный менеджер
  • pytest — фреймворк для тестирования
  • Ruff — инструмент для форматирования и анализа кода
  • MyPy — статический типизатор Python
  • pre-commit — фреймворк для настройки хуков Git
  • GNU C++ — компилятор C++ для иллюстрации межпроцессного взаимодействия

Установка и запуск

Эмулятор ФС

  1. Клонируйте репозиторий и перейдите в папку эмулятора:
git clone git@github.com:Scorpi-ON/CourseOS.git
cd CourseOS/fs
  1. Установите пакетный менеджер uv одним из способов. Например, для Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  1. Установите зависимости:
uv sync --frozen --no-dev
  1. Теперь запускать проект можно командой:
uv run -m CourseOS

Демо межпроцессного взаимодействия

  1. Клонируйте репозиторий и перейдите в папку файлов межпроцессного взаимодействия:
git clone git@github.com:Scorpi-ON/CourseOS.git
cd CourseOS/processes
  1. Запуск демонстрации работы каналов:
g++ pipes.cpp -o pipes.out && ./pipes.out
  1. Запуск демонстрации работы именованных каналов (выполняется с двух терминалов, открытых параллельно):

Ридер:

g++ named_pipes_reader.cpp -o named_pipes_reader.out && ./named_pipes_reader.out

Райтер:

g++ named_pipes_writer.cpp -o named_pipes_writer.out && ./named_pipes_writer.out
  1. Запуск демонстрации работы разделяемой памяти (выполняется с двух терминалов, открытых параллельно):

Ридер:

g++ shared_memory_reader.cpp -o shared_memory_reader.out && ./shared_memory_reader.out

Райтер:

g++ shared_memory_writer.cpp -o shared_memory_writer.out && ./shared_memory_writer.out

Модификация

Эмулятор ФС

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

uv sync
pre-commit install --hook-type pre-commit --hook-type pre-push```

Запустить форматирование кода, его линтинг и статический анализ типов можно следующими командами соответственно:

ruff format
ruff check --fix
mypy .

Эта операция производятся автоматически при коммитах.

Для запуска всех автотестов выполните команду:

pytest CourseOS/tests

Эта операция производятся автоматически при отправке изменений.