Skip to content
AlpaganBPublic

About

x86 ve ARM destekli sıfırdan yazılmış işletim sistemi.

Topics

Resources

Stars

6 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ViraOS

Merhaba,

İşletim sistemlerinin temel seviyede nasıl çalıştığını öğrenmek ve donanımla yazılımın nasıl iletişim kurduğunu kendi gözlerimle görmek için sıfırdan küçük bir işletim sistemi projesi geliştirmeye karar verdim. Projenin adını ViraOS koydum. Bu ticari veya devasa bir sistem olma iddiası taşımayan, tamamen öğrenme ve pratik yapma amaçlı kişisel bir projedir.

Projeyi sadece x86'ya bağımlı kılmak yerine, modern bir yaklaşım sergileyerek hem CISC (x86) hem de RISC (ARM) mimarilerinde çalışabilecek şekilde kurguladım. Kernel kodları ile donanıma özel kodların birbirine karışmasını önlemek için araya HAL katmanı ekledim. Projeyi daha da ileri götürerek kendi GDT yapılandırmamı, heap allocator'ımı, cooperative scheduler'ımı ve TarFS dosya sistemini sıfırdan kodladım.

Proje Yapısı

Klasör yapısını anlaşılır ve sade tutmaya çalıştım:

OS/
|-- Makefile       # Derleme kuralları
|-- kernel/
|   `-- kernel.c   # Platformdan bağımsız kernel kodları
|-- x86/
|   |-- boot.asm   # x86 başlangıç kodu ve context switch assembly yardımı
|   |-- hal.c      # x86 HAL sürücüleri
|   `-- linker.ld  # x86 linker script
`-- arm/
    |-- boot.s     # ARM başlangıç kodu ve context switch assembly yardımı
    |-- hal.c      # ARM HAL sürücüleri
    `-- linker.ld  # ARM linker script

Bileşenler ve Özellikler

  • kernel/kernel.c: Çekirdeğin ana giriş noktası. kernel_main fonksiyonu üzerinden yürür. Mimariye özel donanım adreslerini doğrudan kullanmaz. İçerisinde şunları barındırır:
    • Heap Allocator: kmalloc ve kfree sunan linked list tabanlı First-Fit yapısı. ARM64'teki pointer hizalama hatalarını önlemek için tüm heap alanı ve bloklar 16byte hizalıdır.
    • Cooperative Scheduler: task_create ve task_yield ile çalışan, görevlerin sırayla stack pointer değiştirerek çalıştığı multitasking yapısı.
    • TarFS: files/ dizinindeki dosyaları Makefile aşamasında initrd.tar yapıp, objcopy ile doğrudan kernel'a gömdüğümüz ve RAM'de okunan basit dosya sistemi.
    • Interactive Shell: ls, cat, heap, help, version, clear ve reboot komutlarını destekleyen komut satırı arayüzü.
  • x86/ Klasörü: PC mimarisi için gerekli kodlar. VGA text moduna yazan, klavye denetleyicisini (port 0x60/0x64) sorgulayan HAL sürücülerini ve 3 segmentli (null, kernel code, kernel data) GDT yapılandırmasını içerir.
  • arm/ Klasörü: ARM mimarisi için gerekli kodlar. PL011 UART seri portunu (0x09000000) kullanan sürücüyü içerir.

Nasıl Çalıştırılır?

Derleme için QEMU emülatörünün ve ilgili cross compiler'ların sisteminizde kurulu olması gerekir. Kurulumlardan sonra terminal üzerinden tek komutla test yapabilirsiniz:

  • x86 mimarisini test etmek için: make run-x86
  • ARM mimarisini test etmek için: make run-arm

Test işlemleri bittikten sonra compile artıklarını temizlemek için make clean çalıştırabilirsiniz.

Kodu kurcalamaktan, bir şeyleri bozmaktan veya patch atmaktan çekinmeyin.

Godspeed.

— Alpagan Barut

About

x86 ve ARM destekli sıfırdan yazılmış işletim sistemi.

Topics

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages