ozsipahi / OS_Devolopment_101
Herkese Açık Ömer Özsipahi update: WritingOS.pdf path
OS_Devolopment_101 subject.md
subject.md 4.7 KB
# Kendi Kernelin: İlk Bootloader'ınız
> **İşletim Sistemlerinin Temeline Yolculuk**
Bilgisayarınızın güç düğmesine bastığınızda, işletim sisteminiz yüklenmeden önce donanım seviyesinde neler olduğunu hiç merak ettiniz mi? Modern işletim sistemleri ve yüksek seviyeli diller, donanımın karmaşıklığını bizden gizleyen devasa soyutlama katmanlarıdır.
Bu projede, tüm soyutlama katmanlarını ve standart kütüphaneleri arkanızda bırakıyorsunuz. Doğrudan donanımla konuşacak ve bir bilgisayarın hayata gözlerini açtığı ilk anları kodlayacaksınız.
---
## Genel Kurallar
- Kodunuz tamamen **Assembly dili (x86_64 mimarisi)** kullanılarak yazılmalıdır.
- Herhangi bir standart C kütüphanesi veya harici kütüphane/fonksiyon kullanımı **kesinlikle yasaktır**.
- Kodunuz derlendiğinde/çevrildiğinde sanal bir makinede (örn. QEMU, Bochs) veya gerçek bir donanımda doğrudan boot edilebilir bir **flat binary dosyası** oluşturmalıdır.
---
## Zorunlu Kısım
#### Döndürülecek Dosyalar:
- boot.asm
- README.md
Git Deponuza eklediğiniz dosyalar arasında yukarıda belirtilen dosyalar haricinde dosya bulunmamalıdır.
Sizden beklenen, x86 mimarisi için boot edilebilir basit bir makine kodu yazmanızdır. Yazdığınız kod başarıyla boot edildikten sonra aşağıdaki görevleri eksiksiz bir şekilde yerine getirmelidir:
1. **Ekrana Çıktı Verme:** Ekrana tam olarak aşağıdaki metni yazdırmalıdır:
`my very own kernel`
2. **Sonsuz Döngü:**
Metni yazdırdıktan sonra sistem kapanmamalı, çökmemeli veya rastgele bir hafıza bölgesine atlamamalıdır. Kodunuz kendi içinde güvenli bir sonsuz döngüye girmelidir.
> **Uyarı:** Beklenen çıktı dışındaki hiçbir karakter veya davranış kabul edilmeyecektir. Bu işlemi gerçekleştirmek için işlemcinin ve BIOS'un sağladığı temel donanım kesmelerini (interrupts) nasıl kullanacağınızı araştırmanız gerekecektir.
---
## README Gereksinimleri
`README.md` dosyası aşağıda belirtilen başlıkları ve detayları eksiksiz bir şekilde içermelidir:
- **Derleyici Kullanımı:** Proje geliştirme sürecinde kullanılan derleyici.
- **Projenin Yapılış Süreci:** Projenin başlangıcından sonuna kadar izlenen adımlar, geliştirme ve test aşamalarının detaylı (yazılan
her bir compiler instruction'ı detaylıca açıklanmalı ör. `[BITS 64], [ORG 0xXXXXX]`) açıklaması.
- **Ekrana Çıktı Verme Yöntemleri:** Ekrana metin yazdırma sürecinde tercih edilen teknikler ve bu tekniklerin seçilme gerekçeleri.
- **İşlemcinin Çalışma Modu:** İşlemcinin güç düğmesine basıldığı andaki ilk çalışma modu (ör. `Real Mode`, `Protected Mode` vb.) ve sistemin neden başka bir modda değil de bu modda uyandığının mimari ve tarihsel gerekçeleri.
- **Register Nedir?:** Register'ların (yazmaçların) işlemci mimarisindeki tanımı, projede hangi amaçlarla kullanıldığı.
- **Register Kullanımı:** Verilerin ve/veya stringlerin saklanması için hangi register'ların (ör. `ax`, `ah`, `bh`, `si`, vb.) kullanıldığı ve spesifik olarak neden bu register'ların tercih edildiği.
- **BIOS Kesmeleri (Interrupts):** Projede kullanılan BIOS kesmeleri (ör. `INT 0x13`) ve bu kesmelerin kullanılma amaçları.
- **Kaynaklar:** Proje geliştirilirken yararlanılan tüm kaynaklar, dokümantasyonlar ve bağlantılar.
- **Şahsi Notlar:** Geliştiricinin süreç boyunca edindiği kişisel tecrübeler, karşılaşılan zorluklar ve alınan notlar.
---
## Kaynaklar
Bu projeyi tamamlamak için aşağıdaki kaynaklardan yararlanabilirsiniz.
- <a href="https://carbon4code.com/ozsipahi/Sources?path=osDev" style="color: #b19c70 text-decoration: none">WritinOS.pdf</a>
- <a href="https://wiki.osdev.org/Expanded_Main_Page?__cf_chl_f_tk=jP5WPw.N1DqXvqEk8Q_tESk.yqLHQwpkkRzbK0OywWg-1782996881-1.0.1.1-iAbtPA4uvwPw.MtPmt_8kvIFTaXriZyOl60wSaUr7ak" style="color: #b19c70 text-decoration: none">OSDev</a>
- **Size verilenler haricinde kendi araştırma yöntemlerinizi ve kaynaklarınızı kullanmaktan çekinmeyin**
### Proje Teslimi
Projenizi ilgili sayfada verilen Git deposuna push'ladıktan sonra `Teslim Et` butonu ile kilitleyebilirsiniz. Proje kilitlendikten sonra depo üzerinde herhangi bir değişiklik yapmanız mümkün olmayacaktır.
Projeden başarılı olabilmeniz için, daha önce projeyi tamamlamış onaylı bir kullanıcı tarafından deponuzdaki dosyalar değerlendirilecektir. Uygun görülmesi halinde projeniz onaylanacaktır. Projeden kalmanız durumunda tekrar teslim etmeyi deneyebilirsiniz.
---
**RTFM!**
<sub>This subject created by *<b><a href="https://carbon4code.com/u/ozsipahi" style= "color: #b19c70 text-decoration: none" >Ömer Özsipahi</a></b>* </sub>