An open API service indexing awesome lists of open source software.

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)

Awesome Lists containing this project

README

          

# CourseOS

[![license](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![release](https://img.shields.io/github/v/release/Scorpi-ON/CourseOS?include_prereleases)](https://github.com/Scorpi-ON/CourseOS/releases)
[![downloads](https://img.shields.io/github/downloads/Scorpi-ON/CourseOS/total)](https://github.com/Scorpi-ON/CourseOS/releases)
[![code size](https://img.shields.io/github/languages/code-size/Scorpi-ON/CourseOS.svg)](https://github.com/Scorpi-ON/CourseOS)

[![Ruff and MyPy checks](https://github.com/Scorpi-ON/CourseOS/actions/workflows/linters.yaml/badge.svg)](https://github.com/Scorpi-ON/CourseOS/actions/workflows/linters.yaml)
[![pytest tests](https://github.com/Scorpi-ON/CourseOS/actions/workflows/tests.yaml/badge.svg)](https://github.com/Scorpi-ON/CourseOS/actions/workflows/tests.yaml)
[![PyQt UI compilation](https://github.com/Scorpi-ON/CourseOS/actions/workflows/ui-compile.yaml/badge.svg)](https://github.com/Scorpi-ON/CourseOS/actions/workflows/ui-compile.yaml)
[![CodeQL (Python, C++, GH Actions)](https://github.com/Scorpi-ON/CourseOS/actions/workflows/codeql.yaml/badge.svg)](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
```

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