Linux Kernel - İşletim Sistemlerinin Tasarımı ve Gerçekleştirilmesi
Bu kitap Kaan ASLAN ve Sebahat ERSOY tarafından C ve Sistem Programcıları Derneği’ndeki Kaan ASLAN tarafından verilen Linux Kernel - İşletim Sistemlerinin Tasarımı ve Gerçekleştirilmesi kursundaki kurs notları temel alınarak oluşturulmuştur.
Kitaptaki içerik belli bir kaynak referans alınarak oluşturulmamıştır ve içeriğin oluşturulmasında yapay zeka araçlarından faydalanılmamıştır. Bu bakımdan içerik tamamen özgündür.
Yazarlar konu ile ilgili literatürü uzun bir zaman dilimi içerisinde tümden gözden geçirmiştir. Her ne kadar güncelliğini yitiriyor olsa da *Understanding the Linux Kernel 3. Edition (D. P. Bovet ve M. Cesati) halen literatürün en önemli yabancı kaynağı durumundadır. Linux çekirdeği ile ilgili önemli tüm kaynaklar Kaynaklar bölümünde listelenmiştir.
Kitabımızı diğer yabancı kaynaklardan ayıran en önemli farklılıkları şunlardır:
Daha kapsamlı ve ayrıntılı olması
Daha pedagojik olması
Güncel çekirdekleri de dikkate alması
Örnek kodlarla desteklenmiş olması
Bu e-kitap oluşturulma aşamasındadır, içerik sürekli güncellenmektedir. Dokümanın kurs formatındaki saf metin haline aşağıdaki bağlantıdan erişebilirsiniz:
https://github.com/CSD-1993/KursNotlari
Ön Gereksinimler
Okuyucunun C programlama diline hâkim olduğu ve UNIX/Linux sistemlerinin kullanıcı modu (user mode) programlamasına ilişkin temel bilgilere ve becerilere sahip olduğu varsayılmaktadır.
İçindekiler
- 1. Giriş
- 1.1. Gereksinimler
- 1.2. Çekirdek Kodları Üzerinde Gezinme
- 1.3. İşletim Sistemi Nedir?
- 1.4. İşletim Sistemlerinin Sınıflandırılması
- 1.5. İşletim Sistemlerinin Tarihsel Gelişimi
- 1.6. UNIX Türevi Sistemlerin Tarihsel Gelişimi
- 1.7. Mac OS X (macOS) Türevi Sistemler
- 1.8. GNU Projesi ve Özgür Yazılım
- 1.9. Linux’un Tarihsel Gelişimi
- 1.10. Linux Dağıtımları
- 1.11. POSIX Standartları
- 1.12. Linux Çekirdeğinin Kaynak Kod Yapısı
- 1.13. İşletim Sistemlerinin Boot Süreci
- 2. Çekirdeğin Derlenmesi
- 2.1. Çekirdek Davranışını Değiştirme Yöntemleri
- 2.2. Çekirdek Komut Satırı Parametreleri
- 2.3. Çekirdeği Yeniden Derlemenin Gerektiği Durumlar
- 2.4. Çekirdek Derlemesi Hakkında
- 2.5. Çekirdek Versiyon Numaralandırması
- 2.6. Derleme Araçları
- 2.7. Çekirdek Derleme Adımları
- 2.8. make modules_install Komutu ile İlgili Ayrıntılar
- 2.9. Manuel Kurulum
- 2.10. GRUB Yapılandırması
- 2.11. Çekirdek Derleme Süreci Özeti
- 2.12. Çekirdeğin Sistemden Kaldırılması
- 2.13. Çekirdek Kodları Üzerinde Değişiklik Yapma Yöntemleri
- 2.14. KBuild Sistemi ve GNU Make
- 2.15. Makefile Dosyalarının Güncellenmesi
- 2.16. Kconfig Dosyaları
- 2.17. Konfigürasyon Seçeneklerinin Kaynak Kodlara Yansıtılması
- 2.18. Konfigürasyon Seçeneklerinin Makefile Dosyalarına Yansıtılması
- 2.19. Yeni Dizin için Makefile ve Kconfig Dosyaları
- 2.20. Örnek: Çekirdeğe Yeni Modül Ekleme
- 2.21. Yeniden Derleme Sonrası Güncellemeler
- 2.22. Çekirdek ve Modül İmzalama
- 2.23. Çekirdek İmjasının İmzalanması
- 2.24. Kök Dosya Sisteminin Oluşturulması
- 2.25. Çekirdek Başlık Dosyalarının Kurulumu
- 3. Linux Çekirdeğinde Bağlı Listeler ve Hash Tabloları
- 3.1. Bağlı Listeler
- 3.2. Bağlı Listelere Neden Gereksinim Duyulmaktadır?
- 3.3. Linux Çekirdeğindeki Bağlı Liste Gerçekleştirimi
- 3.4. Çekirdek Bağlı Listelerinin Örnek Gerçekleştirimi
- 3.5. Eski Çekirdek Sürümlerindeki list.h Dosyası
- 3.6. Arama Algoritmaları ve Sözlük Tarzı Veri Yapıları
- 3.7. Hash Tabloları
- 3.8. Linux Çekirdeğinde Hash Tablosu Gerçekleştirimi
- 3.9. RCU’lu Hash Tablosu Fonksiyonları
- 4. Proses Kontrol Bloğu ve task_struct Yapısı
- 4.1. Proses Kavramı
- 4.2. Proses Kontrol Bloğu
- 4.3. task_struct Yapısı
- 4.4. Proseslerin ID Değerleri (PID)
- 4.5. Thread Kavramı
- 4.6. Prosesler Arasındaki Altlık-Üstlük İlişkisi
- 4.7. task_struct Yapısının Dallı Budaklı Tasarımı
- 4.8. current Makrosu
- 4.9. fork ve pthread_create Çağrı Zincirleri
- 4.10. task_struct Nesneleri Arasındaki Bağ İlişkileri
- 4.11. task_struct Yapısına İlişkin Bağlı Listeler Üzerinde Gezinmelere Örnekler
- 4.12. PID Tahsisatı
- 4.13. PID’den task_struct Nesnesine Hızlı Erişim
- 5. Dosya Sistemi - I. Bölüm
Temeller- 5.1. Giriş
- 5.2. Temel Kavramlar
- 5.3. Okuma ve Yazma İşlemleri
- 5.4. task_struct İçerisindeki Dosya Sistemine İlişkin Veri Yapıları
- 5.5. Dosya Nesnesi ve Dosya Betimleyici Tablosu
- 5.6. Dosya Sistemine İlişkin Üç Önemli Yapı: file, inode ve dentry
- 5.7. Dentry ve Inode Önbellekleri
- 5.8. Açık Dosyalara İlişkin Alıştırmalar
- 5.9. Çekirdekte Dosyaların Açılması ve Kapatılması Süreci
- 5.10. Yol İfadelerinin Çözümlenmesi ve Dentry Önbelleğinin Organizasyonu
- 5.11. Inode Kavramının ve Inode Nesnelerinin Ayrıntılı Bir Biçimde Ele Alınması
- 5.12. Inode Önbelleği
- 5.13. Süper Blok Nesneleri
- 5.14. Dosya Sisteminin Mount Edilmesi
- 5.15. Dosya Sistemlerinin Çekirdeğe Kaydettirilmesi
- 5.16. Linux Çekirdeğinde Sanal Dosya Sistemi ve Sanal Fonksiyon Mekanizması
- 5.17. Çekirdeğin VFS Soyutlaması
- 5.18. Sıfırdan Dosya Sistemi Oluşturma Adımları
- 6. Dosya Sistemi - II. Bölüm
simplefs Dosya Sisteminin Gerçekleştirilmesi - 7. Çekirdek Senkronizasyonu
- 7.1. Kritik Kod Blokları
- 7.2. Mutex Nesneleri
- 7.3. Semaphore Nesneleri
- 7.4. Spinlock Nesneleri
- 7.5. Okuma Yazma Kilitleri
- 7.6. UMA ve NUMA Mimarileri
- 7.7. Çok İşlemcili Sistemlerde Senkronizasyon Sorunları
- 7.8. Atomik İşlemler
- 7.9. Komutların Yer Değiştirmesi
- 7.10. Bellek Bariyerleri
- 7.11. RCU (Read-Copy-Update) Mekanizması
- 7.12. Kullanıcı Modu Senkronizasyonları ve Futex Mekanizması
- 8. Bekleme Kuyrukları
- 9. Bellek Yönetimi - I. Bölüm
Temeller- 9.1. İşlemcilerin Sayfalama Mekanizması
- 9.2. Sayfa Tabloları ve Sanal Adreslerin Fiziksel Adreslere Dönüştürülmesi
- 9.3. Sanal Bellek Mekanizması
- 9.4. Proseslerin Bellek Alanlarının Sayfa Tabloları Yoluyla İzole Edilmesi
- 9.5. Sayfa Tablolarının İçeriğine İlişkin Ayrıntılar
- 9.6. Proseslerin Sanal Adres Alanları
- 9.7. NUMA Düğümlerinin Çekirdek Temsili
- 9.8. Fiziksel Bellek Bölgeleri
- 9.9. Fiziksel Sayfaların page Yapısıyla Temsil Edilmesi
- 9.10. Çekirdeğin Fiziksel Adresler Yoluyla Belleğe Erişimi
- 10. Bellek Yönetimi - 2. Bölüm
Tahsisat İşlemleri - 11. Kaynaklar