Skip to content

An emulator of the S5FS file system and an interprocess communication. A course project on Operating Systems (Dec 2023, 5th semester of university).

License

Notifications You must be signed in to change notification settings

Scorpi-ON/CourseOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 [email protected]: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 [email protected]: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

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

About

An emulator of the S5FS file system and an interprocess communication. A course project on Operating Systems (Dec 2023, 5th semester of university).

Topics

Resources

License

Stars

Watchers

Forks