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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Каналы:

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

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

- файловая система должна эмулировать структуру и принцип работы S5FS
- файловая система должна «работать» в бинарном файле
- файловая система должна быть одноуровневой и работать с битовой картой свободных/занятых кластеров
- файловая система должна поддерживать:
- CRUD-операции с файлами и каталогами
- создание пользователей и групп, вход в систему от имени пользователей
- настройку прав доступа к файлам и каталогам
- дополнительные возможности на усмотрение разработчика
- в прототипе межпроцессного взаимодействия должны быть реализованы следующие средства:
- каналы
- именованные каналы
- разделяемая память
- эмулятор файловой системы должен быть выполнен в виде графического приложения
- работу межпроцессного взаимодействия можно проиллюстрировать в отдельных консольных программах
- язык написания эмулятора ФС — любой, межпроцессного взаимодействия — один из низкоуровневых (например, C/C++)
- все требования соблюдены
- эмулятор файловой системы кроссплатформенный, межпроцессное взаимодействие написано под Linux- [x] операции с бинарным файлом файловой системы покрыты тестами
- интегрированы инструменты управления зависимости и статического анализа кода
- проверка качества кода посредством CI/CD пайплайнов и Git-хуков
- Python — основной язык программирования
- uv — пакетный менеджер
- pytest — фреймворк для тестирования
- Ruff — инструмент для форматирования и анализа кода
- MyPy — статический типизатор Python
- pre-commit — фреймворк для настройки хуков Git
- GNU C++ — компилятор C++ для иллюстрации межпроцессного взаимодействия
- Клонируйте репозиторий и перейдите в папку эмулятора:
git clone [email protected]:Scorpi-ON/CourseOS.git
cd CourseOS/fs
- Установите пакетный менеджер uv одним из способов. Например, для Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Установите зависимости:
uv sync --frozen --no-dev
- Теперь запускать проект можно командой:
uv run -m CourseOS
- Клонируйте репозиторий и перейдите в папку файлов межпроцессного взаимодействия:
git clone [email protected]:Scorpi-ON/CourseOS.git
cd CourseOS/processes
- Запуск демонстрации работы каналов:
g++ pipes.cpp -o pipes.out && ./pipes.out
- Запуск демонстрации работы именованных каналов (выполняется с двух терминалов, открытых параллельно):
Ридер:
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
- Запуск демонстрации работы разделяемой памяти (выполняется с двух терминалов, открытых параллельно):
Ридер:
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
Эта операция производятся автоматически при отправке изменений.