MÜHENDİSLİK KAYDI / 29 EYLÜL 2026

Kodun ardındaki
neden.

Bir satırın eklenmesi tek başına ilerleme değil. Bu günlük, TurkOS'un VM zemininden fiziksel sayfa ayırıcısına ve istisna yoluna nasıl geldiğini; her kararın önceki koşulunu, ölçülen kanıtını ve sonraki bağımlılığını açıkça anlatır.

BUGÜNKÜ ZİNCİR05bağlı mühendislik aşaması
7 VM testi · 20 çekirdek testi
6 standart + 1 özel DTB açılışı
01 · ZEMİNQEMU / HVFTekrarlanabilir konuk ve günlük
02 · GÖZLEMBOOT0 + DTBGerçek RAM ve UART bilgisi
03 · GÜVENLİKRezervasyonKorunan sayfaların dışlanması
04 · KAYNAKÇerçeve ayırıcıMMU için fiziksel temel
01ALTYAPI / HOST
src/main.rs

Sanal makineyi çalışma zemini yaptık

DOĞRULANDI / SINIRLI
NEDEN ŞİMDİ?

TurkOS çekirdeğini doğrudan Mac donanımına bağlamak, her hatada hem platformu hem çekirdeği sorgulatırdı. Önce tekrarlanabilir bir sanal kart ve seri günlük gerekiyordu.

DEĞİŞEN KOD

Rust CLI, QEMU/HVF ile ARM64 konuğu başlatıyor; VM yapılandırmasını, qcow2 diskini, QMP durumunu ve seri günlüğü yönetiyor. Yeni kayıtlar virt-11.1 profiline sabitleniyor.

ÖLÇÜLEN KANIT

Alpine UEFI konuğu ve TurkOS Image açıldı. VM yaşam döngüsü için yedi birim testi geçti.

HENÜZ KANITLANMAYAN

Bu henüz Parallels benzeri grafik arayüz değil; QEMU/HVF aygıt ve CPU katmanını kullanıyor.

KAYNAKTAN KISA KESİTsrc/main.rs
qemu.args(["-machine", &config.machine, "-accel", "hvf", "-cpu", "host"])
← ÖNCEKİ BAĞ

Başlangıç fikri: aynı Mac üzerinde VM ve işletim sistemi geliştirmek.

SONRAKİ KAPI →

Sabit sanal platform, çekirdeğin açılış sözleşmesini tanımlamayı mümkün kıldı.

TEST KAPISI cargo test --locked · 7 VM testi

02ÇEKİRDEK / AÇILIŞ
kernel/src/boot.S + kernel/src/main.rs

BOOT0 ile gözlenebilir bir çekirdek kurduk

DOĞRULANDI / SINIRLI
NEDEN ŞİMDİ?

Bellek veya sürücü geliştirmeden önce en küçük çekirdeğin doğru adresten başlayıp seri porta yazabildiği kanıtlanmalıydı.

DEĞİŞEN KOD

ARM64 Image başlığı, BSS temizliği, 16 KiB yığın ve PL011 TX yolu eklendi. DTB işaretçisi x0 üzerinden Rust girişine taşındı.

ÖLÇÜLEN KANIT

Üç RAM boyutunda TURKOS/BOOT0, UART ve RAM işaretleri seri günlükte görüldü.

HENÜZ KANITLANMAYAN

Doğrudan Image yolu UEFI yükleyicisi veya genel donanım desteği değildir.

KAYNAKTAN KISA KESİTkernel/src/boot.S + kernel/src/main.rs
let hardware = &boot.hardware;
UART_BASE.store(hardware.uart_base as usize, Ordering::Relaxed);
← ÖNCEKİ BAĞ

Sürümlü virt platformu adreslerin ve önyükleme davranışının testte sabit kalmasını sağladı.

SONRAKİ KAPI →

DTB okunabildiği için sabit aygıt varsayımlarını azaltma ve bellek haritası oluşturma yolu açıldı.

TEST KAPISI Image · 256 / 512 / 1024 MiB QEMU/HVF

03ÇEKİRDEK / DTB
kernel/src/dtb.rs

DTB’den korunan belleği çıkardık

DOĞRULANDI / SINIRLI
NEDEN ŞİMDİ?

Ayırıcı yalnızca RAM düğümünü görürse çekirdek, DTB veya firmware tarafından ayrılmış alanı yanlışlıkla dağıtabilir. Bu güvenlik sınırı ayırıcıdan önce kurulmalıydı.

DEĞİŞEN KOD

FDT rezervasyon bloğu ve kök /reserved-memory altındaki statik reg aralıkları çözüldü. Boş ranges kimlik eşlemesi kabul edildi; dinamik size, çevrilen adres, taşma ve bozuk aralıklar reddedildi.

ÖLÇÜLEN KANIT

Özel DTB ile ilk dört RAM sayfası korundu; ilk verilen fiziksel çerçeve 0x40004000 oldu.

HENÜZ KANITLANMAYAN

Genel bus çevirisi ve dinamik rezervasyon desteklenmiyor; no-map gelecekteki MMU eşlemesinde ayrıca ele alınmalı.

KAYNAKTAN KISA KESİTkernel/src/dtb.rs
static_reserved: dtb::static_reserved(blob)?,
for region in boot.static_reserved.as_slice() {
    free.reserve(region.start, region.size)?;
}
← ÖNCEKİ BAĞ

BOOT0 ve DTB işaretçisi olmadan güvenilir fiziksel RAM sınırı çıkarılamazdı.

SONRAKİ KAPI →

Doğrulanmış serbest aralıklar, fiziksel sayfa ayırıcısının tek girdi kümesi oldu.

TEST KAPISI Sentetik DTB negatif testleri + özel DTB QEMU/HVF

04ÇEKİRDEK / BELLEK
kernel/src/memory.rs

İlk fiziksel çerçeve ayırıcısını ekledik

DOĞRULANDI / SINIRLI
NEDEN ŞİMDİ?

MMU sayfa tabloları ve heap, sahipliği belli fiziksel sayfalar olmadan güvenle kurulamaz. Önce korunan bölgeleri dışlayan küçük bir ayırıcı gerekir.

DEĞİŞEN KOD

FreeMap aralıklarından 4 KiB çerçeve ayır/serbest bırak eklendi. Korunan sayfa, çift iade ve kapasite aşımı açık hatadır; komşu boş aralıklar birleştirilir.

ÖLÇÜLEN KANIT

Tükenme, çoklu bölge, birleşme ve parçalanma testleri geçti. VM açılışında bir sayfaya yazıldı, okundu, eski içerik geri kondu ve sayfa iade edildi.

HENÜZ KANITLANMAYAN

Tek CPU içindir; parçalılık metaverisi sabit kapasiteli, MMU ve genel amaçlı heap yok.

KAYNAKTAN KISA KESİTkernel/src/memory.rs
let mut allocator = memory::FrameAllocator::new(free);
let Some(address) = allocator.allocate() else {
    return false;
};
← ÖNCEKİ BAĞ

DTB + imaj + DTB rezervasyonları ayrılmadan hiçbir fiziksel sayfa güvenle verilemezdi.

SONRAKİ KAPI →

Bu katman MMU sayfa tablolarına kaynak sağlayacak; önce çoklu yük ve sınır testleri genişletilecek.

TEST KAPISI 20 çekirdek testi · QEMU/HVF yaz / oku / iade

05ÇEKİRDEK / HATA YOLU
kernel/src/vectors.S + kernel/src/main.rs

İki ayrı senkron istisnayı ölçtük

DOĞRULANDI / SINIRLI
NEDEN ŞİMDİ?

Tek bir BRK denemesi vektör tablosunun başka hata sınıflarında doğru çalıştığını göstermez. IRQ açmadan önce senkron hata yolunun kaynağı ve ESR değeri ayırt edilmeli.

DEĞİŞEN KOD

Her vektör girişine yuva numarası eklendi. Handler EL, SLOT, ESR ve ELR yazıyor; BRK ve UDF için ayrı test imajları üretiliyor.

ÖLÇÜLEN KANIT

İki imaj QEMU/HVF üzerinde farklı EC değerleri ve aynı beklenen EL1 senkron yuvası ile açıldı.

HENÜZ KANITLANMAYAN

IRQ hâlâ maskeli; EL2 ve gerçek zamanlayıcı kesmesi doğrulanmış değil.

KAYNAKTAN KISA KESİTkernel/src/vectors.S + kernel/src/main.rs
mov x3, #vector_slot
b __exception_entry
← ÖNCEKİ BAĞ

Seri günlük ve test VM’leri olmadan hata sınıfını nesnel biçimde gözleyemezdik.

SONRAKİ KAPI →

Sırada kayıt saklama/geri yükleme, ardından GIC ve genel zamanlayıcı sözleşmesi var.

TEST KAPISI BRK EC=0x3c · UDF EC=0x00 · SLOT=0x04

BURADAN SONRA

Bir sonraki kod, önceki kanıta yaslanacak.

Çerçeve ayırıcısının çoklu yükü ve vektör kaydının sağlamlığı genişletildikten sonra GIC/zamanlayıcı ve MMU açılacak. VM tarafında CLI yaşam döngüsü ortak kütüphaneye ayrılıp masaüstü arayüzüne bağlanacak. Bu hedeflerin hiçbiri bugün “tamamlandı” olarak etiketlenmiyor.

Kararların gerekçesi ↗Test sınırları ↗Çekirdek yolu ↗