Skip to content

kranks-uga/Tomorrow

Repository files navigation

Tomorrow OS

Безопасная x86-64 операционная система на Rust (no_std) с мандатной моделью прав доступа, изоляцией процессов по compartment-ам и совместимостью с Linux ABI.

Автор идеи: Kirill Repin


Концепция

Большинство ОС проверяют права при входе в систему, но дальше процесс получает привилегии «навсегда». Tomorrow строится на другом принципе: каждое действие проверяется индивидуально.

Права доступа

Права хранятся в ядре и привязаны одновременно к двум сторонам:

  • субъект — пользователь или процесс, который что-то запрашивает
  • объект — файл, устройство или ресурс, к которому обращаются

Только если права субъекта и допустимые права объекта пересекаются — действие разрешается. Это похоже на мандатный контроль доступа (MAC), но реализованный на уровне ядра с явными масками для каждой сущности.

Compartment-изоляция

Процессы объединяются в команды (compartments) — изолированные группы, которые не видят и не могут напрямую влиять друг на друга. Взаимодействие с остальной системой — только через брокеров: специальные процессы-посредники, которые явно определены в ядре и проверяют каждый запрос.

 ┌─────────────────┐     ┌─────────────────┐
 │  Compartment A  │     │  Compartment B  │
 │  proc1  proc2   │     │  proc3  proc4   │
 └────────┬────────┘     └─────────┬───────┘
          │   только через брокера │
          └──────────┬─────────────┘
                ┌────▼─────┐
                │  Broker  │  ← проверяет права,
                │          │    передаёт только
                └──────────┘    разрешённые данные

Linux ABI совместимость

Номера системных вызовов совпадают с Linux x86-64. Цель — запускать существующие Linux-бинарники без перекомпиляции, при этом применяя собственную модель безопасности на уровне ядра.


Возможности

Компонент Статус
Multiboot2 boot (GRUB2) готово
Higher-half kernel (0xFFFF800000000000) готово
PMM — bitmap физических страниц (до 8 GB) готово
VMM — 4-уровневые таблицы страниц (4 KB) готово
Heap — bump-allocator (64 KB) готово
IDT + APIC (Local + IO APIC via ACPI MADT) готово
TSS + GDT (kernel/user сегменты) готово
Round-robin планировщик (до 64 процессов) готово
Контекст-свитч через прерывание таймера готово
Userspace ring-3 (iretq) готово
SYSCALL/SYSRET (MSR-based) готово
PS/2 клавиатура готово
Framebuffer-консоль + PSF-шрифт готово
PCI/PCIe enumeration (MCFG) готово
xHCI USB обнаружение работает, init отключён

Системные вызовы

Название Описание
0 SYS_READ fd, buf, len
1 SYS_WRITE fd, buf, len
2 SYS_OPEN
3 SYS_CLOSE
24 SYS_YIELD
60 SYS_EXIT code

Требования

  • Linux (Ubuntu/Debian, Arch, Fedora)
  • Rust nightly
  • grub-mkrescue, xorriso, gcc, nasm
  • qemu-system-x86_64 — для запуска в эмуляторе

Автоматическая установка:

./setup.sh

Сборка

./make.sh

Собирает ELF-ядро через cargo и упаковывает его в загрузочный ISO-образ tomorrow.iso.

Запуск в QEMU

qemu-system-x86_64 \
    -cdrom tomorrow.iso \
    -m 256M \
    -serial stdio

Запись на реальное железо

./load.sh

Скрипт покажет список дисков и запишет tomorrow.iso через dd.


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

src/
  boot.s          — старт 32→64 бит, page tables, higher half
  main.rs         — kernel_main, парсинг Multiboot2/ACPI, scheduler
  pmm.rs          — физический менеджер памяти
  vmm.rs          — виртуальный менеджер памяти
  heap.rs         — bump-allocator
  idt.rs          — дескрипторная таблица прерываний
  lapic.rs        — Local APIC
  ioapic.rs       — IO APIC
  pic.rs          — отключение PIC 8259
  hpet.rs         — HPET таймер
  tss.rs          — TSS + GDT
  process.rs      — структура процесса и контекста
  scheduler.rs    — round-robin планировщик
  syscall.rs      — обработчик системных вызовов
  syscall_entry.s — вход/выход SYSCALL (MSR)
  timer.s         — обработчик прерывания таймера, context switch
  switch.s        — start_first_process_ring3
  keyboard.rs     — PS/2 клавиатура
  keyboard.s      — ISR клавиатуры
  console.rs      — framebuffer-консоль
  font.rs / font.psf — PSF-шрифт
  pci.rs          — поиск xHCI через MCFG/PCIe
  xhci.rs         — xHCI USB (WIP)
boot/grub/grub.cfg — конфиг загрузчика
md/architecture.md — подробная документация архитектуры

Архитектура

Подробное описание всех подсистем — в md/architecture.md.

Раскладка виртуальной памяти:

0xFFFF_FFFF_FFFF_FFFF  ┐
                       │  kernel space
0xFFFF_8000_0000_0000 ─┤  ядро, стеки, heap
       ...             │  non-canonical hole
0x0000_0200_0000_0000 ─┤  user code
0x0000_0100_0000_0000 ─┤  user stack
0x0000_0000_0000_0000  ┘

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors