https://github.com/scorpi-on/courseos
Course project on operational systems (Dec 2023, 5th semester of university)
https://github.com/scorpi-on/courseos
course-project file-system interprocess-communication pyqt6 pytest s5fs
Last synced: 6 months ago
JSON representation
Course project on operational systems (Dec 2023, 5th semester of university)
- Host: GitHub
- URL: https://github.com/scorpi-on/courseos
- Owner: Scorpi-ON
- License: mit
- Created: 2024-07-30T18:30:55.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-07T13:37:21.000Z (over 1 year ago)
- Last Synced: 2025-01-24T18:14:19.350Z (over 1 year ago)
- Topics: course-project, file-system, interprocess-communication, pyqt6, pytest, s5fs
- Language: Python
- Homepage:
- Size: 73.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CourseOS
[](https://opensource.org/licenses/MIT)
[](https://github.com/Scorpi-ON/CourseOS/releases)
[](https://github.com/Scorpi-ON/CourseOS/releases)
[](https://github.com/Scorpi-ON/CourseOS)
[](https://github.com/Scorpi-ON/CourseOS/actions/workflows/linters.yaml)
[](https://github.com/Scorpi-ON/CourseOS/actions/workflows/tests.yaml)
[](https://github.com/Scorpi-ON/CourseOS/actions/workflows/ui-compile.yaml)
[](https://github.com/Scorpi-ON/CourseOS/actions/workflows/codeql.yaml)
Курсовой проект по операционным системам, продуктом которого является эмулятор файловой системы S5FS, а
также межпроцессного взаимодействия.
Скриншоты
Эмулятор ФС
Авторизация:
Списки групп и пользователей:
Список файлов:
Создание новой группы:
Создание нового пользователя:
Группа и пользователь успешно добавлены:
Попытка открыть системный файл (запрещено):
Подтверждение перед удалением не системного файла:
Поскольку файл был создан другим пользователем, а у других пользователей права на запись нет, удалить его нельзя:
Создание нового файла:
Выставление прав при создании нового файла:
Открытие файла после создания (метаданные обновлены):
Открытие файла после снятия права на запись (поля заполнены данными, но не активны для изменения):
Дата модификации файла после его редактирования обновлена:
Копирование файла:
Удаление исходного файла (будет произведено только после возвращения права на запись):
Демо межпроцессного взаимодействия
Каналы:
Именованные каналы:
Разделяемая память:
## Основные требования
- файловая система должна эмулировать структуру и принцип работы S5FS
- файловая система должна «работать» в бинарном файле
- файловая система должна быть одноуровневой и работать с битовой картой свободных/занятых кластеров
- файловая система должна поддерживать:
- CRUD-операции с файлами и каталогами
- создание пользователей и групп, вход в систему от имени пользователей
- настройку прав доступа к файлам и каталогам
- дополнительные возможности на усмотрение разработчика
- в прототипе межпроцессного взаимодействия должны быть реализованы следующие средства:
- каналы
- именованные каналы
- разделяемая память
- эмулятор файловой системы должен быть выполнен в виде графического приложения
- работу межпроцессного взаимодействия можно проиллюстрировать в отдельных консольных программах
- язык написания эмулятора ФС — любой, межпроцессного взаимодействия — один из низкоуровневых (например, C/C++)
## Особенности реализации
- [x] все требования соблюдены
- [x] эмулятор файловой системы кроссплатформенный, межпроцессное взаимодействие написано под Linux- [x] операции с бинарным файлом файловой системы покрыты тестами
- [x] интегрированы инструменты управления зависимости и статического анализа кода
- [x] проверка качества кода посредством CI/CD пайплайнов и Git-хуков
## Стек
- **Python** — основной язык программирования
- **uv** — пакетный менеджер
- **pytest** — фреймворк для тестирования
- **Ruff** — инструмент для форматирования и анализа кода
- **MyPy** — статический типизатор Python
- **pre-commit** — фреймворк для настройки хуков Git
- **GNU C++** — компилятор C++ для иллюстрации межпроцессного взаимодействия
## Установка и запуск
### Эмулятор ФС
0. Клонируйте репозиторий и перейдите в папку эмулятора:
```shell
git clone git@github.com:Scorpi-ON/CourseOS.git
cd CourseOS/fs
```
1. Установите пакетный менеджер uv одним из способов. Например, для Windows:
```shell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
2. Установите зависимости:
```shell
uv sync --frozen --no-dev
```
3. Теперь запускать проект можно командой:
```shell
uv run -m CourseOS
```
### Демо межпроцессного взаимодействия
0. Клонируйте репозиторий и перейдите в папку файлов межпроцессного взаимодействия:
```shell
git clone git@github.com:Scorpi-ON/CourseOS.git
cd CourseOS/processes
```
1. Запуск демонстрации работы **каналов**:
```shell
g++ pipes.cpp -o pipes.out && ./pipes.out
```
2. Запуск демонстрации работы **именованных каналов** (выполняется с двух терминалов, открытых параллельно):
Ридер:
```shell
g++ named_pipes_reader.cpp -o named_pipes_reader.out && ./named_pipes_reader.out
```
Райтер:
```shell
g++ named_pipes_writer.cpp -o named_pipes_writer.out && ./named_pipes_writer.out
```
3. Запуск демонстрации работы **разделяемой памяти** (выполняется с двух терминалов, открытых параллельно):
Ридер:
```shell
g++ shared_memory_reader.cpp -o shared_memory_reader.out && ./shared_memory_reader.out
```
Райтер:
```shell
g++ shared_memory_writer.cpp -o shared_memory_writer.out && ./shared_memory_writer.out
```
## Модификация
### Эмулятор ФС
Чтобы модифицировать проект, необходимо установить все зависимости, включая необходимые только для разработки:
```shell
uv sync
pre-commit install --hook-type pre-commit --hook-type pre-push```
```
Запустить форматирование кода, его линтинг и статический анализ типов можно следующими командами соответственно:
```shell
ruff format
ruff check --fix
mypy .
```
Эта операция производятся автоматически при коммитах.
Для запуска всех автотестов выполните команду:
```shell
pytest CourseOS/tests
```
Эта операция производятся автоматически при отправке изменений.