Thanks to visit codestin.com
Credit goes to github.com

Skip to content

alexeev-prog/KintsugiOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

KintsugiOS

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡ‚ΠΈΡ‡Π½Π°Ρ опСрационная 32 разрядная систСма с ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΌ ядром ΠΈ собствСнным Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ Π½Π° (N)ASM ΠΈ GCC 15


docs Top Language Language Count License Issues Stars Last Commit Contributors

KintsugiOS β€” это минималистичная x86 опСрационная систСма, написанная Π½Π° (N)ASM ΠΈ C, созданная Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлях для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм. НазваниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° отсылаСт ΠΊ японскому искусству Kintsugi, Π³Π΄Π΅ разбитая ΠΊΠ΅Ρ€Π°ΠΌΠΈΠΊΠ° восстанавливаСтся Π·ΠΎΠ»ΠΎΡ‚Ρ‹ΠΌ Π»Π°ΠΊΠΎΠΌ, подчСркивая красоту Π½Π΅ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π° ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ развития.

ВСкущая Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия: v0.2.1a ПослСдняя ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия: v0.2.0a

Caution

KintsugiOS Π΅Ρ‰Π΅ Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅.

Π’Π°ΠΊΠΆΠ΅ я занимаюсь ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ OSDEV-Notes

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ

  • БобствСнный Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° Π² Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ
  • GDT (Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° дСскрипторов) с ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ сСгмСнтациСй памяти
  • ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ с двумя уровнями Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ:
    • Аллокатор Π½Π° основС связанных Π±Π»ΠΎΠΊΠΎΠ² памяти с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ слияниСм
    • Бтраничная организация памяти (Paging) с ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π² Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ
  • Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ оборудования:
    • VGA-экран с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ тСкста ΠΈ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ
    • ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° (PS/2) с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² (Shift, Ctrl, Alt, Caps Lock)
    • Π’Π°ΠΉΠΌΠ΅Ρ€ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ прСрываниями
    • ATA PIO с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ LBA-адрСсации
  • БистСма ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (IDT, ISR, IRQ) с кастомными ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ
  • Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° "Keramika Shell" с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄:
    • help β€” список ΠΊΠΎΠΌΠ°Π½Π΄
    • clear β€” очистка экрана
    • end β€” остановка CPU
    • malloc β€” Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти
    • free β€” освобоТдСниС памяти
    • info β€” информация ΠΎ систСмС
    • memdump β€” Π΄Π°ΠΌΠΏ памяти
    • И Π΄Ρ€ΡƒΠ³ΠΈΠ΅...
  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° KKLibC (Kintsugi Kernel LibC) Π²ΠΊΠ»ΡŽΡ‡Π°Ρ:
    • Π Π°Π±ΠΎΡ‚Ρƒ со строками, гСнСрация числа ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ стандартныС Π²Π΅Ρ‰ΠΈ (stdlib.h)
    • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ (stdio.h)
    • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ памяти (mem.h)
    • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ (math.h)
    • Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (ctypes.h)
    • ΠžΠ±Ρ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» kklibc.h
    • Бтраничная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° памяти (paging.h)
    • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (stdlib.h)

Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅

  • Ѐайловая систСма Fat12
  • Ѐайловая систСма ext2
  • ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ пространство
  • Inter-Process Communication
  • Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ELF
  • ГрафичСский интСрфСйс
  • ΠœΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ
  • Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ стСк
  • ΠŸΡΠ΅Π²Π΄ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ интСрфСйс
  • ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ LibC

Π“ΠΎΡ‚ΠΎΠ²ΠΎ

  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ (Paging)
  • ДинамичСскиС Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ памяти
  • Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊ рСгистру
  • Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ ATA PIO
  • БистСма ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
  • ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Π°Ρ shell-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°

ВрСбования

Для сборки ΠΈ запуска KintsugiOS Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ инструмСнтарий:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ окруТСния ΠΌΠΎΠΆΠ½ΠΎ скриптом:

./check-env.sh

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ запуск

Базовая сборка

make

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° диска (hdd) ΠΈ запуск Π² QEMU

make run

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° диска fda ΠΈ запуск Π² QEMU

make run_fda

ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

make clean      # Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
make clean_all  # Полная очистка

ΠžΡ‚Π»Π°Π΄ΠΊΠ°

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ KintsugiOS запуститС систСму Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ:

make debug        # ΠΎΠ±Ρ€Π°Π· диска hdd
make debug_fda    # ΠΎΠ±Ρ€Π°Π· диска fda

И ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Ρ‡Π΅Ρ€Π΅Π· ваш Π΄Π΅Π±Π°Π³Π³Π΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ gdb).

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ KintsugiOS β€” это критичСски Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, написанный Π½Π° ассСмблСрС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ: Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (16-Π±ΠΈΡ‚), ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ стСк, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ GDT (Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ дСскрипторов) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ процСссор Π² 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ.
  • Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ядра: Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ BIOS Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ считываСт ядро с диска Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎ адрСсу 0x1000.
  • ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ядра: ПослС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся ядру.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°:

  • bootsector.asm β€” основной Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ сСктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ загруТаСтся BIOS ΠΏΠΎ адрСсу 0x7c00. УстанавливаСт стСк, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ядро ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ.
  • diskload.asm β€” содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ disk_load для чтСния сСкторов с диска с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ BIOS.
  • gdt.asm β€” опрСдСляСт GDT (Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ дСскрипторов) для Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ дСскрипторы для сСгмСнтов ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
  • switch_to32.asm β€” ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ GDT ΠΈ установку Π±ΠΈΡ‚Π° Π² рСгистрС cr0.
  • puts_chars.asm ΠΈ puts_chars32.asm β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° строк Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… соотвСтствСнно. Π’ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹Π²ΠΎΠ΄ осущСствляСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒ VGA.
  • puts_hex.asm β€” функция для Π²Ρ‹Π²ΠΎΠ΄Π° чисСл Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ).
  • kernel_entry.asm β€” Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° для ядра, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ kmain ΠΈΠ· ядра.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:

  1. BIOS Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ сСктор диска (512 Π±Π°ΠΉΡ‚) ΠΏΠΎ адрСсу 0x7c00 ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ.
  2. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ стСк ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎ запускС Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.
  3. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ядро с диска Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎ адрСсу 0x1000, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ BIOS.
  4. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ GDT ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ процСссор Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ.
  5. Π’ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ядру ΠΏΠΎ адрСсу 0x1000.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ

KintsugiOS Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ "Keramika Shell" со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ:

  • end - остановка процСссора
  • clear - очистка экрана
  • malloc <size> - Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти (ΠΊΡƒΡ‡Π°)
  • free <address> - освобоТдСниС памяти
  • info - информация ΠΎ систСмС
  • memdump - Π΄Π°ΠΌΠΏ памяти
  • echp <text> - Π²Ρ‹Π²ΠΎΠ΄ тСкста
  • help - справка ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ
  • sleep <ms> - ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ N сСкунд
  • reboot - ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°
  • rand <seed> - гСнСрация случайного числа ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ xorshift32
  • randrange <seed> <min> <max> - гСнСрация случайного числа Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ xorshift32
  • binpow <base> <exponent> - Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ
  • fib <num> - Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ

Kintsugi Kernel LibC

KKLibc β€” это собствСнная рСализация стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ языка C, разработанная ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Π½ΡƒΠΆΠ΄ ядра Kintsugi OS. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… libc (Π²Ρ€ΠΎΠ΄Π΅ glibc), ΠΎΠ½Π° тСсно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π° с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ ядра, лишСна избыточности ΠΈ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самыС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² пространствС ядра.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ основныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ:

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π½Π°Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° свою ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ:

  • stdlib.h / stdlib.c: Π―Π΄Ρ€ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚:

    • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…: itoa, utoa, atoi, hex_strtoint для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ числами ΠΈ строками Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСмах счислСния.
    • Π Π°Π±ΠΎΡ‚Π° со строками: ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для манипуляций со строками: strlen, strcpy/strncpy, strcmp/strncmp, strcat/strncat, strchr, strstr, strtok, strspn, strcspn.
    • Π Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ: Аналоги стандартных memcpy, memset, memmove, memcmp, memchr, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ memory_set, u32memory_set.
    • ГСнСрация псСвдослучайных чисСл: РСализация Π½Π° основС быстрого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° xorshift32 (rand) ΠΈ функция для получСния числа Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (rand_range).
    • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ систСмой: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ reboot() ΠΈ wait(int ms) для взаимодСйствия с ΠΆΠ΅Π»Π΅Π·ΠΎΠΌ.
    • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Π±ΡƒΡ„Π΅Ρ€: Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ sprintf, snprintf ΠΈ vsnprintf для бСзопасного ΠΈ нСбСзопасного формирования строк.
    • Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹: Алгоритм Π½Π΅Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ поиска fuzzy_search для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ использования Π² интСрфСйсах.
  • stdio.h / stdio.c: ΠœΠΎΠ΄ΡƒΠ»ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π°. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf, printf_colored ΠΈ printf_at, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ экрана (screen.h), обСспСчивая Π²Ρ‹Π²ΠΎΠ΄ тСкста Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ мСстС ΠΈ Ρ†Π²Π΅Ρ‚Π΅.

  • mem.h / mem.c: ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ памяти (ΠΊΡƒΡ‡ΠΈ) ядра. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра.

    • Аллокатор: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ слияниСм свободных Π±Π»ΠΎΠΊΠΎΠ² памяти для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
    • Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Paging: Ѐункция expand_heap динамичСски Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ физичСскиС страницы Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти (paging.h) ΠΏΡ€ΠΈ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅ памяти Π² ΠΊΡƒΡ‡Π΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΡƒΡ‡Ρƒ ΠΏΠΎ-настоящСму Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠΉ.
    • API: ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ API: kmalloc, kfree, krealloc.
    • ΠžΡ‚Π»Π°Π΄ΠΊΠ°: Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° состояния ΠΊΡƒΡ‡ΠΈ: kmemdump, get_meminfo.
  • paging.h / paging.c: ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти. Один ΠΈΠ· самых Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

    • ΠžΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ 4-Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π½ΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство ядра.
    • Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ страничной адрСсации x86 с двумя уровнями Ρ‚Π°Π±Π»ΠΈΡ† (Page Directory ΠΈ Page Table).
    • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для выдСлСния (alloc_frame) ΠΈ освобоТдСния (free_frame) физичСских ΠΊΠ°Π΄Ρ€ΠΎΠ² памяти.
    • Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Page Fault.
    • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ интСрфСйс pkmalloc для выдСлСния Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎ страницС Π±Π»ΠΎΠΊΠΎΠ² памяти с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ получСния физичСского адрСса, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с DMA ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ hardware.
  • math.h / math.c: Набор матСматичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ вычислСниС чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈ дискриминант.

  • ctypes.h / ctypes.c: Полная рСализация стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ классификации ΠΈ прСобразования символов (isalpha, isdigit, toupper, etc.).

  • kklibc.h: Π“Π»Π°Π²Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для удобства.

Ѐилософия Π΄ΠΈΠ·Π°ΠΉΠ½Π°:

  • ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΡ‹ k ΠΈ p: ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ k (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, kmalloc) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊ ядру (kernel) ΠΈ Π΅Π³ΠΎ ΠΊΡƒΡ‡Π΅. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ p (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, pkmalloc) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ страничной ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (paging).
  • Π‘Π°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° минимально зависима ΠΎΡ‚ внСшнСго ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ для ΠΊΠΎΠ΄Π° ядра.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π°Π΄ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ с оглядкой Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ расход памяти, Π° Π½Π΅ Π½Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со стандартом.

KKLibc являСтся ΠΆΠΈΠ²Ρ‹ΠΌ, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°ΡΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΌΠΈ функциями ΠΈ оптимизациями ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ развития самой Kintsugi OS. Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ KKLibc Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связано с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ Kintsugi OS. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ систСмный Π²Ρ‹Π·ΠΎΠ², Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ядра Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΈ эффСктивноС API.

ΠŸΠ»Π°Π½Ρ‹ Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅

Для KKLibc

  • РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΊΡƒΡ‡Π΅ΠΉ: ВСкущая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° с двумя Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ (kmalloc ΠΈ pkmalloc) мощная, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ для ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Основная Π·Π°Π΄Π°Ρ‡Π° β€” ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ scenarious поврСТдСния ΠΊΡƒΡ‡ΠΈ, особСнно Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° kmalloc Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ expand_heap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‡Π΅Ρ€Π΅Π· pkmalloc ΠΈ alloc_frame Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ физичСскиС страницы. НСобходимо Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это взаимодСйствиС Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ race condition ΠΈ коррСктности обновлСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… структур Π΄Π°Π½Π½Ρ‹Ρ… Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Π°.
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π½ΠΈΠ½Π³ΠΎΠ² (Canaries): Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ поврСТдСния ΠΊΡƒΡ‡ΠΈ планируСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ "ΠΊΠ°Π½Π°Ρ€Π΅Π΅ΠΊ" β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π²ΠΎΠΊΡ€ΡƒΠ³ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² памяти. ΠŸΡ€ΠΈ освобоТдСнии памяти ΠΈΠ»ΠΈ Π² ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ сборкС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ этих ΠΊΠ°Π½Π°Ρ€Π΅Π΅ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ сразу ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° (buffer overflow).
  • ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€: РСализация ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии kmalloc, которая Π²Π΅Π΄Π΅Ρ‚ Π»ΠΎΠ³ΠΈ всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ выдСлСния/освобоТдСния памяти (с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, адрСса ΠΈ callstack'Π°). Π­Ρ‚ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΉ инструмСнт для поиска ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти (memory leaks) Π² ядрС.
  • ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈ синхронизация: Когда Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ, критичСски Π²Π°ΠΆΠ½Ρ‹ΠΌ станСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€ потокобСзопасным. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ добавлСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² синхронизации (спинлоков ΠΈΠ»ΠΈ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ²) Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ kmalloc ΠΈ kfree.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ пространства: Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° появится Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅ΠΆΠΈΠΌ ядра ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ, KKLibc Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π°. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ останСтся Π² ядрС, Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ пространства Π±ΡƒΠ΄Π΅Ρ‚ создана ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, урСзанная ΠΈ Π±ΠΎΠ»Π΅Π΅ бСзопасная вСрсия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹ΠΉ процСсс: пСрСписываниС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, memcpy, memset) Π½Π° ассСмблСрС для максимальной скорости, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ эффСктивных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска свободных Π±Π»ΠΎΠΊΠΎΠ² памяти.
  • НовыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ: По ΠΌΠ΅Ρ€Π΅ нСобходимости Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… (связныС списки, Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹), Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8 ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой.

Для ядра

  • Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы: РСализация FAT12 ΠΈ ext2
  • ΠœΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ: ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ IPC
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ: Π Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ
  • Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ стСк: Базовая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сСтСвых ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ²
  • ГрафичСский интСрфСйс: ΠŸΡΠ΅Π²Π΄ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΈ источники

АссСмблСр

Π―Π·Ρ‹ΠΊ C

  • ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½ Π‘., Π ΠΈΡ‚Ρ‡ΠΈ Π”. Β«Π―Π·Ρ‹ΠΊ программирования CΒ»
  • Π¨ΠΈΠ»Π΄Ρ‚ Π“. Β«ΠŸΠΎΠ»Π½Ρ‹ΠΉ справочник ΠΏΠΎ CΒ»
  • C standard library for embedded systems

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы

  • Π’Π°Π½Π΅Π½Π±Π°ΡƒΠΌ Π­. Β«Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы»
  • Π’Π°Π½Π΅Π½Π±Π°ΡƒΠΌ Π­. Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы: Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ рСализация»
  • OSDEV Wiki
  • FlingOSβ„’ Documentation

АрхитСктура Π­Π’Πœ

  • Π’Π°Π½Π΅Π½Π±Π°ΡƒΠΌ Π­. «АрхитСктура ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Β»
  • Π“ΡƒΠΊ М. «АппаратныС срСдства IBM PC. ЭнциклопСдия»

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ DOCLINKS вСсь ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» со ссылками.

ЛицСнзия

KintsugiOS распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Π² Ρ„Π°ΠΉΠ»Π΅ LICENSE.

Π’ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ issues ΠΈ pull requests. ΠŸΠ΅Ρ€Π΅Π΄ внСсСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ поТалуйста:

  1. ΠžΠ±ΡΡƒΠ΄ΠΈΡ‚Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ измСнСния Π² issue
  2. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ кодстайлу
  3. ДобавляйтС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π° русском языкС
  4. ВСстируйтС измСнСния Π² QEMU ΠΈ Bochs

Благодарности

Особая Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ сообщСству OSDev ΠΈ Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΈ источники".


НазваниС "Kintsugi" отсылаСт ΠΊ японскому искусству восстановлСния ΠΊΠ΅Ρ€Π°ΠΌΠΈΠΊΠΈ Π·ΠΎΠ»ΠΎΡ‚Ρ‹ΠΌ Π»Π°ΠΊΠΎΠΌ β€” ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π° красоты Π² Π½Π΅ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π΅ ΠΈ постоянного развития.