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ğindeki 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. Kitap ile benzer içeriklere sahip kaynaklar Kaynaklar bölümünde listelenmiştir.
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 temel Linux komut satırını kullanabildiği 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 Sistemlerinin Boot Edilmesi
- 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. Bağlı Listelerin ve Hash Tablolarının Çekirdek Gerçekleştirimleri
- 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
- 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. Sıfırdan Dosya Sistemi Oluşturma Adımları
- 6. Dosya Sistemi - II. Bölüm
- 7. Kaynaklar