Rust ile İşletim Sistemi Yazmak
Bu blog serisi, Rust programlama dilinde küçük bir işletim sistemi oluşturmayı amaçlamaktadır. Her gönderi küçük bir öğretici niteliğindedir ve gerekli tüm kodları içerir, böylece adım adım takip edebilirsiniz. Bu projenin kaynak kodu, ilgili Github deposunda da mevcuttur.
Son yazı: Async/Await
CPU Exception'ları
CPU exception’ları çeşitli hatalı durumlarda meydana gelir; örneğin geçersiz bir bellek adresine erişilirken veya sıfıra bölünürken. Onlara tepki verebilmek için, handler fonksiyonları sağlayan bir interrupt descriptor table kurmamız gerekir. Bu yazının sonunda, kernel’imiz breakpoint exception’larını yakalayabilecek ve sonrasında normal çalıştırmaya devam edebilecek.
devamını oku »Double Fault'lar
Bu yazı, CPU bir exception handler’ı çağırmayı başaramadığında meydana gelen double fault exception’ını ayrıntılı olarak inceliyor. Bu exception’ı işleyerek, sistem sıfırlamasına neden olan ölümcül triple fault’lardan kaçınıyoruz. Triple fault’ları her durumda önlemek için, double fault’ları ayrı bir kernel stack’inde yakalamak üzere bir Interrupt Stack Table da kuruyoruz.
devamını oku »Donanım Interrupt'ları
Bu yazıda, donanım interrupt’larını CPU’ya doğru şekilde iletmek için programlanabilir interrupt controller’ı kuruyoruz. Bu interrupt’ları işlemek için, tıpkı exception handler’larımız için yaptığımız gibi, interrupt descriptor table’ımıza yeni girdiler ekliyoruz. Periyodik timer interrupt’larını nasıl alacağımızı ve klavyeden nasıl girdi alacağımızı öğreneceğiz.
devamını oku »Paging'e Giriş
Bu yazı, işletim sistemimiz için de kullanacağımız çok yaygın bir bellek yönetimi şeması olan paging’i tanıtıyor. Bellek yalıtımının neden gerekli olduğunu, segmentasyonun nasıl çalıştığını, sanal belleğin ne olduğunu ve paging’in bellek parçalanması sorunlarını nasıl çözdüğünü açıklıyor. Ayrıca x86_64 mimarisindeki çok seviyeli sayfa tablolarının düzenini de inceliyor.
devamını oku »Paging Uygulaması
Bu yazı, kernel’imizde paging desteğinin nasıl uygulanacağını gösterir. Önce fiziksel sayfa tablosu frame’lerini kernel için erişilebilir kılmaya yönelik farklı teknikleri inceler ve bunların ilgili avantaj ve dezavantajlarını tartışır. Ardından bir adres çevirme fonksiyonu ve yeni bir eşleme oluşturan bir fonksiyon uygular.
devamını oku »Heap Ayırma
Bu yazı, kernel’imize heap ayırma desteği ekler. İlk olarak, dinamik belleğe bir giriş yapar ve borrow checker’ın yaygın ayırma hatalarını nasıl önlediğini gösterir. Ardından Rust’ın temel ayırma arayüzünü uygular, bir heap bellek bölgesi oluşturur ve bir allocator crate’i kurar. Bu yazının sonunda, yerleşik alloc crate’inin tüm ayırma ve koleksiyon tipleri kernel’imiz için kullanılabilir olacak.
Allocator Tasarımları
Bu yazı, heap allocator’ların sıfırdan nasıl uygulanacağını açıklar. Bump ayırma, bağlı liste ayırma ve sabit boyutlu blok ayırma dahil olmak üzere farklı allocator tasarımlarını sunar ve tartışır. Üç tasarımın her biri için, kernel’imizde kullanılabilecek temel bir uygulama oluşturacağız.
devamını oku »Async/Await
Bu yazıda, işbirlikçi çoklu görevi (cooperative multitasking) ve Rust’ın async/await özelliğini inceliyoruz. Future trait’inin tasarımı, durum makinesi (state machine) dönüşümü ve pinning dahil olmak üzere, async/await’in Rust’ta nasıl çalıştığına ayrıntılı bir göz atıyoruz. Ardından, asenkron bir klavye görevi ve temel bir executor oluşturarak kernel’imize async/await için temel destek ekliyoruz.
Subscribe
Receive notifications about new posts and other major changes! You can either:
- Subscribe to our RSS/Atom Feed,
- Subscribe to this GitHub issue, or
- Subscribe to our email newsletter.
Status Updates
These posts give a regular overview of the most important changes to the blog and the tools and libraries behind the scenes.
First Edition
You are currently viewing the second edition of “Writing an OS in Rust”. The first edition is very different in many aspects, for example it builds upon the GRUB bootloader instead of using the `bootloader` crate. In case you're interested in it, it is still available. Note that the first edition is no longer updated and might contain outdated information. read the first edition »
Beni Destekle
Bu blogu ve ilişkili kütüphaneleri oluşturmak ve sürdürmek çok emek gerektiriyor, ve bunu yapmaktan gerçekten zevk alıyorum. Beni destekleyerek yeni içerik, yeni özellikler ve sürekli bakım için daha fazla zaman ayırmama olanak tanıyorsunuz. Beni desteklemenin en iyi yolu GitHub'da sponsor olmak. Teşekkürler!