mirror of
https://github.com/StepanovPlaton/OSin1000Lines.git
synced 2026-04-03 20:30:46 +04:00
Add readme
This commit is contained in:
95
README.md
Normal file
95
README.md
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
# 🖥️ Операционная система в 1000 строках кода на С
|
||||||
|
|
||||||
|
> Минимальная операционная система для архитектуры RISC-V 32-bit, реализованная по книге [Operating System in 1,000 Lines](https://operating-system-in-1000-lines.vercel.app/en/)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Стек
|
||||||
|
|
||||||
|
- **Архитектура:** RISC-V 32-bit
|
||||||
|
- **Компилятор:** Clang с поддержкой RISC-V
|
||||||
|
- **Язык:** C11 (freestanding)
|
||||||
|
- **Виртуализация:** QEMU (для эмуляции)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 О проекте
|
||||||
|
|
||||||
|
- **Минимальная операционная система** с полным набором базовых функций
|
||||||
|
- **Управление памятью** с поддержкой виртуальной адресации и страничной организации памяти (SV32)
|
||||||
|
- Выделение страниц памяти
|
||||||
|
- Маппинг виртуальных адресов на физические
|
||||||
|
- Изоляция адресных пространств процессов
|
||||||
|
- **Многозадачность** с поддержкой до 8 процессов одновременно
|
||||||
|
- Переключение контекста между процессами
|
||||||
|
- Планировщик задач с round-robin алгоритмом
|
||||||
|
- Изоляция процессов через отдельные page tables
|
||||||
|
- **Системные вызовы** для взаимодействия пользовательских программ с ядром
|
||||||
|
- `SYS_PUTCHAR` — вывод символа в консоль
|
||||||
|
- `SYS_GETCHAR` — чтение символа из консоли (с блокировкой)
|
||||||
|
- `SYS_EXIT` — завершение процесса
|
||||||
|
- `SYS_READFILE` — чтение файла
|
||||||
|
- `SYS_WRITEFILE` — запись в файл
|
||||||
|
- **Файловая система** на основе формата tar (ustar)
|
||||||
|
- Поддержка чтения и записи файлов
|
||||||
|
- Автоматическая загрузка файлов из образа диска при старте
|
||||||
|
- Сохранение изменений на диск через VirtIO
|
||||||
|
- **Работа с диском** через интерфейс VirtIO Block Device
|
||||||
|
- Чтение и запись секторов диска
|
||||||
|
- Поддержка виртуальных очередей VirtIO
|
||||||
|
- **Обработка исключений и прерываний** через trap handler
|
||||||
|
- Обработка системных вызовов через инструкцию `ecall`
|
||||||
|
- Переключение между режимами supervisor и user
|
||||||
|
- **Интерактивная оболочка (shell)** в пользовательском пространстве
|
||||||
|
- Команда `hello` — приветствие
|
||||||
|
- Команда `exit` — выход из shell
|
||||||
|
- Команда `readfile` — чтение файла
|
||||||
|
- Команда `writefile` — запись в файл
|
||||||
|
- **Разделение на kernel и user space**
|
||||||
|
- Ядро работает в режиме supervisor
|
||||||
|
- Пользовательские программы работают в режиме user с ограниченными правами
|
||||||
|
- Защита памяти через page tables
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Структура проекта
|
||||||
|
|
||||||
|
```
|
||||||
|
OSIn1000Lines/
|
||||||
|
├── src/
|
||||||
|
│ ├── kernel.c # Основной код ядра (управление процессами, системные вызовы)
|
||||||
|
│ ├── kernel.h # Заголовочные файлы ядра
|
||||||
|
│ ├── kernel.ld # Скрипт линковки ядра
|
||||||
|
│ ├── user.c # Пользовательское пространство (системные вызовы)
|
||||||
|
│ ├── user.h # Заголовочные файлы пользовательского пространства
|
||||||
|
│ ├── user.ld # Скрипт линковки пользовательских программ
|
||||||
|
│ ├── shell.c # Код интерактивной оболочки
|
||||||
|
│ ├── common.c # Общие функции (printf, memset, memcpy, strcmp)
|
||||||
|
│ ├── common.h # Общие определения
|
||||||
|
│ ├── Makefile # Сборка проекта
|
||||||
|
│ ├── disk/ # Файлы для файловой системы
|
||||||
|
│ │ ├── hello.txt
|
||||||
|
│ │ └── meow.txt
|
||||||
|
│ └── run.sh # Скрипт запуска в QEMU для Linux
|
||||||
|
│ └── run.bat # Скрипт запуска в QEMU для Windows
|
||||||
|
└── README.md # Этот файл
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Сборка и запуск
|
||||||
|
|
||||||
|
### Требования
|
||||||
|
|
||||||
|
- **Clang** с поддержкой RISC-V target
|
||||||
|
- **LLVM objcopy** (llvm-objcopy)
|
||||||
|
- **QEMU** с поддержкой RISC-V 32-bit
|
||||||
|
|
||||||
|
### Запуск
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd src
|
||||||
|
./run.sh
|
||||||
|
```
|
||||||
BIN
screenshot.png
Normal file
BIN
screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
Reference in New Issue
Block a user