📚

MyOs Wiki

Документация, руководства и технические ресурсы

Обзор

MyOs — простая операционная система с собственным ядром, файловой системой, оболочкой и драйверами устройств. Система поддерживает многозадачность через прерывания, управление памятью, работу с дисками ATA и интерактивную оболочку с расширенными возможностями.

Язык: Ассемблер и C
Архитектура: x86_64
Загрузчик: GRUB с поддержкой мультизагрузки
Лицензия: MIT

Архитектура системы

Основные компоненты

  • Ядро (kernel.c): Основной компонент, инициализирующий все подсистемы
  • Загрузчик (boot.asm): Multiboot-совместимый загрузчик для x86_64
  • Драйвер терминала (terminal.c): Управление выводом на экран с поддержкой ANSI escape-последовательностей
  • Драйвер клавиатуры (keyboard.c): Обработка ввода с клавиатуры с поддержкой специальных клавиш
  • Драйвер прерываний (interrupts.c): Обработка аппаратных и программных прерываний
  • Таймер (pit.c): Программируемый интервальный таймер
  • Драйвер ATA (ata.c): Работа с жесткими дисками через ATA интерфейс
  • Файловая система (filesystem.c): Виртуальная файловая система в памяти с возможностью сохранения на диск
  • Менеджер памяти (memory.c): Аллокатор памяти с поддержкой выравнивания
  • Система потоков (thread.c): Управление потоками с планировщиком
  • Система процессов (process.c): Управление процессами с иерархией и изоляцией
  • Оболочка (shell.c): Интерактивная командная оболочка с автодополнением и историей

Загрузчик и инициализация

MyOs использует GRUB в качестве загрузчика, настроенного через заголовок мультизагрузки. Процесс загрузки следует этим шагам:

  1. BIOS загружает GRUB из загрузочного сектора
  2. GRUB читает заголовок мультизагрузки и загружает ядро
  3. Процессор переключается в 64-битный режим
  4. Начинается инициализация ядра (настройка GDT, IDT)
  5. Инициализируется VGA терминал
  6. Запускается PIT таймер
  7. Создается RAM файловая система
  8. Появляется приглашение командной строки

Структура ядра

Ключевые модули

Структура проекта
include/
├── ata.h
├── filesystem.h
├── interrupts.h
├── io.h
├── keyboard.h
├── memory.h
├── pit.h
├── process.h
├── shell.h
├── stddef.h
├── stdint.h
├── string.h
├── system.h
├── terminal.h
└── thread.h

src/
├── ata.c
├── boot.asm
├── filesystem.c
├── interrupts.c
├── kernel.c
├── keyboard.c
├── memory.c
├── pit.c
├── process.c
├── shell.c
├── string.c
├── system.c
├── terminal.c
└── thread_switch.S
└── thread.c

Ядро спроектировано минимальным, но функциональным, предоставляя необходимые службы ОС без излишней сложности.

Управление памятью

Аллокатор кучи

MyOs реализует простой аллокатор кучи first-fit со следующими возможностями:

  • Динамическое выделение памяти (malloc/free)
  • Объединение блоков для уменьшения фрагментации
  • Отслеживание памяти и статистика
  • Верификация кучи для отладки
Команды для работы с памятью
mem      # Показать статистику кучи
testmem  # Выделить тестовые блоки и проверить кучу

RAM файловая система

Файловая система полностью основана на памяти, обеспечивая быстрый доступ, но требуя ручного сохранения:

Возможности

  • Иерархическая структура директорий
  • Поддержка файлов и директорий
  • Unix-подобная навигация по путям
  • Ручное сохранение/загрузка на ATA диск

Файловые операции

pwd

Показать текущую директорию

ls [path]

Список содержимого директории

cd path

Изменить директорию

mkdir path

Создать директорию

touch path

Создать файл

cat path

Показать файл

savefs

Сохранить на диск

loadfs

Загрузить с диска

Управление процессами

MyOs поддерживает полноценную систему процессов, основанную на иерархии родитель-потомок, с изоляцией адресного пространства и управлением жизненным циклом.

Структура процесса

typedef struct process
typedef struct process {
    uint64_t pid;                    // Process ID
    uint64_t ppid;                   // Parent Process ID
    process_state_t state;
    char name[PROCESS_NAME_MAX];
    struct process *parent;
    struct process *children;
    uint64_t main_thread_id;
} process_t;

Жизненный цикл

  • running — активный процесс
  • sleeping — ожидание события
  • zombie — завершился, но не был "собран" родителем
  • stopped — приостановлен

API процессов

  • process_create() — создание нового процесса
  • process_fork() — создание копии текущего процесса
  • process_exec() — загрузка новой программы в процесс
  • process_exit() — завершение процесса
  • process_wait() — ожидание завершения дочернего процесса
  • process_kill() — принудительное завершение процесса

Команды оболочки

ps

Просмотр всех процессов (PID, PPID, состояние)

kill PID

Принудительное завершение процесса

spawn TEXT

Запуск фонового процесса

threads

Список всех потоков

Процесс init с PID 1 является корневым. Все "сироты" автоматически усыновляются им.

Интерфейс командной строки

Командная оболочка MyOs предоставляет мощный интерактивный интерфейс с расширенными возможностями:

Возможности оболочки

  • Автодополнение команд (Tab): Нажмите Tab для автодополнения команд во время ввода
  • История команд (Up/Down): Используйте стрелки вверх/вниз для навигации по истории выполненных команд
  • Поиск по истории (Ctrl+R): Быстрый поиск и выполнение ранее введенных команд
  • Цветной вывод: Полная поддержка ANSI escape sequences для цветного и форматированного вывода
  • Автосохранение: Автоматическое сохранение файловой системы при изменениях

Поддержка ANSI

Поддерживаемые ANSI последовательности
Цвета текста и фона: 30-37, 40-47, 90-97, 100-107
Стили текста: жирный, инверсный
Управление курсором и очистка экрана

Команда: ansi  # Тест ANSI последовательностей

Категории команд

  • Системные команды: help, clear, uptime, mem, testmem, history, myfetch, poweroff, reboot
  • Файловая система: pwd, ls, cd, touch, cat, write, append, mkdir, rm, cp, mv
  • Поиск и анализ: find, grep, head, tail, wc, hexdump
  • Утилиты диска: diskinfo, savefs, loadfs
  • Управление процессами: ps, kill, spawn, threads
  • Тестовые команды: echo, ansi

Смотрите страницу команд для полного справочника.

Система сборки

Требования

🛠️

x86_64-elf-gcc

Кросс-компилятор для 64-бит

⚙️

nasm

Ассемблер

💿

grub-mkrescue

Создатель ISO

🖥️

qemu-system-x86_64

Эмулятор

Команды сборки

# Клонировать репозиторий
git clone https://github.com/KaVoshnik/MyOs.git  
cd MyOs

# Собрать ISO образ
make

# Запустить в QEMU
make run

# Очистить артефакты сборки
make clean