Linux Kernel - İşletim Sistemlerinin Tasarımı ve Gerçekleştirilmesi Logo

İç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.4.1. Proses Yönetimine Göre
      • 1.4.2. Kullanıcı Sayısına Göre
      • 1.4.3. Çekirdek Yapısına Göre
      • 1.4.4. Dışsal Olaylarla Yanıt Verebilme Özelliğine Göre
      • 1.4.5. Dağıtıklık Durumuna Göre
      • 1.4.6. Donanım Özelliğine Göre
      • 1.4.7. Kaynak Kod Lisansına Göre
      • 1.4.8. Kaynak Kodun Özgünlüğüne Göre
      • 1.4.9. GUI Çalışma Desteğine Göre
      • 1.4.10. Ağ Üzerinde Hizmet Alıp Verme Rollerine Göre
    • 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
      • 1.13.1. Reset Vektörü ve BIOS/Firmware
      • 1.13.2. Önyükleyici (Bootloader) Programlar
      • 1.13.3. Genel Boot Akışı
      • 1.13.4. Boot Aşamaları Terminolojisi
      • 1.13.5. PC Sistemlerinde Boot Süreci (Klasik BIOS)
  • 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.4.1. Çapraz Derleme
      • 2.4.2. Çekirdek Kaynak Kodlarının İndirilmesi ve Açılması
        • 2.4.2.1. Sıkıştırma Formatları ve tar Komutu
      • 2.4.3. Dağıtıma Özgü Çekirdek Kaynak Kodları
    • 2.5. Çekirdek Versiyon Numaralandırması
    • 2.6. Derleme Araçları
    • 2.7. Çekirdek Derleme Adımları
      • 2.7.1. Adım 1: Gerekli Araçların Kurulması
      • 2.7.2. Adım 2: Kaynak Kodların İndirilmesi ve Açılması
      • 2.7.3. Adım 3: Çekirdeğin Konfigüre Edilmesi
      • 2.7.4. Adım 4: Konfigürasyon Değişikliklerinin Yapılması
      • 2.7.5. Adım 5: Derleme
      • 2.7.6. Adım 6: Modüllerin Kurulması
      • 2.7.7. Adım 7: Aygıt Ağacı Dosyalarının Derlenmesi
      • 2.7.8. Adım 8: Kurulum
        • 2.7.8.1. Geçici Kök Dosya Sistemi (initrd)
    • 2.8. make modules_install Komutu ile İlgili Ayrıntılar
      • 2.8.1. modules.dep
      • 2.8.2. modules.alias
      • 2.8.3. modules.order
    • 2.9. Manuel Kurulum
      • 2.9.1. Çekirdek Sürüm Yazısının Belirlenmesi
    • 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.24.1. debootstrap ile Kök Dosya Sistemi Oluşturma
      • 2.24.2. Geçici 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.3.1. Bağlı Listenin Başlatılması
      • 3.3.2. Düğüm Ekleme
      • 3.3.3. Bağlı Listenin Dolaşılması
      • 3.3.4. Bağlı Listeden Düğüm Silme
      • 3.3.5. Bağli Listede Araya Düğüm Ekleme
      • 3.3.6. Bağli Listelerin Yok Edilmesi
      • 3.3.7. Bağlı Listelere RCU Desteği
    • 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.6.1. İndeksli Arama
    • 3.7. Hash Tabloları
      • 3.7.1. Çakışma Çözümleme Stratejileri
        • 3.7.1.1. Ayrı Zincir Oluşturma (Separate Chaining)
        • 3.7.1.2. Açık Adresleme ve Doğrusal Yoklama
        • 3.7.1.3. Hash Fonksiyonlarının Tasarımı
    • 3.8. Linux Çekirdeğinde Hash Tablosu Gerçekleştirimi
      • 3.8.1. hlist_head ve hlist_node Yapıları
      • 3.8.2. Hash Tablosunun Oluşturulması
      • 3.8.3. Hash Tablosundan Düğüm Silme
      • 3.8.4. Insert Fonksiyonları
      • 3.8.5. Hash Tabloları için Döngü Makroları
      • 3.8.6. Hash Tablosu Gerçekleştirimine Bir Örnek
    • 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.10.1. Thread Listesi: thread_head ve thread_node
      • 4.10.2. pid ve tgid Elemanları
      • 4.10.3. group_leader Göstericisi
      • 4.10.4. real_parent ve parent Göstericileri
      • 4.10.5. Alt Proses Listesi: children ve sibling Elemanları
      • 4.10.6. Tüm Proseslerin Listesi: tasks
      • 4.10.7. Özet: task_struct İlişkileri
      • 4.10.8. Sık Sorulan Sorular
    • 4.11. task_struct Yapısına İlişkin Bağlı Listeler Üzerinde Gezinmelere Örnekler
      • 4.11.1. Geliştirme Ortamının Hazırlanması
      • 4.11.2. Derleme ve Yükleme
      • 4.11.3. Çekirdek Modülü ve Aygıt Sürücü Kavramları
      • 4.11.4. Aygıt Dosyaları
      • 4.11.5. Aygıt Sürücülerin Majör ve Minör Numaraları
      • 4.11.6. İskelet Karakter Aygıt Sürücüsü Örneği
      • 4.11.7. RCU Mekanizması ile task_struct Listelerinin Dolaşılması
      • 4.11.8. Tüm Prosesleri Dolaşan Çekirdek Modülü Örneği
      • 4.11.9. Thread Listesini Dolaşan Aygıt Sürücü Örneği
      • 4.11.10. Tüm task_struct Nesnelerinin Dolaşılması
      • 4.11.11. Alt Proses Listesininin Dolaşılması
    • 4.12. PID Tahsisatı
      • 4.12.1. PID Üretim Mekanizmasının Tarihsel Gelişimi
      • 4.12.2. Maksimum PID Değeri
    • 4.13. PID’den task_struct Nesnesine Hızlı Erişim
      • 4.13.1. 2.6 Versiyonu: pid Nesnesi ve Bağlı Listeler
      • 4.13.2. pid_type Enum Değerleri ve Bağlı Listeler
      • 4.13.3. 4.20 Versiyonu: Hash Tablosundan XArray’e Geçiş
      • 4.13.4. Radix Ağaçlarının Kullanılması
      • 4.13.5. Yapraklarda Değer Saklama Yöntemi
      • 4.13.6. Dallanma Faktörü: n-li Ağaç
      • 4.13.7. Güncel Çekirdeklerde pid Araması (4.20+)
      • 4.13.8. XArray Gerçekleştirimi
  • 5. Dosya Sistemi - I. Bölüm
    • 5.1. Giriş
    • 5.2. Temel Kavramlar
      • 5.2.1. Disk Aktarımına İlişkin Temel Bilgiler
      • 5.2.2. Sektörler ve Disk Denetleyicisi
      • 5.2.3. DMA (Direct Memory Access)
      • 5.2.4. Blok Kavramı
      • 5.2.5. Sayfa Önbelleği (Page Cache)
    • 5.3. Okuma ve Yazma İşlemleri
      • 5.3.1. Yazma İşleminin Ayrıntıları
      • 5.3.2. Gecikmeli Yazım ve Flush Thread’leri
      • 5.3.3. Gecikmeli Yazımın Gerekçeleri
      • 5.3.4. Kirlenmiş Sayfaların Erken Flush Edilmesi
      • 5.3.5. Standart C Kütüphanesinin Süreçteki Yeri ve İşlevi
    • 5.4. task_struct İçerisindeki Dosya Sistemine İlişkin Veri Yapıları
      • 5.4.1. fs_struct Yapısı
      • 5.4.2. files_struct Yapısı
    • 5.5. Dosya Nesnesi ve Dosya Betimleyici Tablosu
      • 5.5.1. Dosya Betimleyici Tablolarının clone ve fork İşlemleri Sırasında Kopyalanması
    • 5.6. Dosya Sistemine İlişkin Üç Önemli Yapı: file, inode ve dentry
      • 5.6.1. file Yapısı
        • 5.6.1.1. file Yapısının Elemanları
      • 5.6.2. inode Yapısı
      • 5.6.3. dentry Yapısı
      • 5.6.4. file, inode ve dentry Nesneleri Arasındaki İlişki
    • 5.7. dentry ve inode Önbellekleri
    • 5.8. Açık Dosyalara İlişkin Alıştırmalar
      • 5.8.1. f_pos Elemanının Elde Edilmesi
      • 5.8.2. dup Fonksiyonunun Gerçekleştirimi
      • 5.8.3. Alıştırmalara İlişkin Aygıt Sürücünün Kaynak Kodu
    • 5.9. Çekirdekte Dosyaların Açılması ve Kapatılması Süreci
      • 5.9.1. sys_open Sistem Fonksiyonunun Çekirdek Gerçekleştirimi
      • 5.9.2. Çekirdeğin 0.01 Versiyonundaki sys_open Fonksiyonu
      • 5.9.3. sys_close Sistem Fonksiyonunun Çekirdek Gerçekleştirimi
    • 5.10. Yol İfadelerinin Çözümlenmesi ve Dentry Önbelleğinin Organizasyonu
      • 5.10.1. dentry Yapısının Dentry Önbelleği İle İlgili Elemanları
        • 5.10.1.1. Dentry Nesnelerinde Dizin Girişi İsminin Saklanması
        • 5.10.1.2. Dentry Nesnelerindeki Hiyerarşik İlişkiler: d_parent, d_sib ve d_children
        • 5.10.1.3. Dentry Nesnelerinin Sayaçları ve Kilitlenmesi: d_lockref
        • 5.10.1.4. Dentry Nesnelerinde Dosya Sistemi Bilgisinin Saklanması: d_sb
      • 5.10.2. Dentry Önbelleğinin Yapısı
        • 5.10.2.1. Dentry Hash Değerinin Hesaplanması
        • 5.10.2.2. Dentry Hash Tablosunun Uzunluğu
        • 5.10.2.3. Dentry Nesnelerinin Grupları
        • 5.10.2.4. Dentry Nesnelerinin Dentry Önbelleğinden Atılması
        • 5.10.2.5. Dentry Önbelleğinin proc ve sys Dosya Sistemleri Yoluyla İzlenmesi
    • 5.11. Inode Kavramının ve Inode Nesnelerinin Ayrıntılı Bir Biçimde Ele Alınması
      • 5.11.1. Inode Tabanlı Dosya Sistemlerinin Disk Organizasyonu
      • 5.11.2. Inode Tabanlı Dosya Sistemlerinde Dizin Girişlerinin Diskteki Organizasyonu
        • 5.11.2.1. Aynı Inode Nesnesini Gösteren Dentry Nesneleri
    • 5.12. Inode Önbelleği
      • 5.12.1. Inode Önbelleğinin Organizasyonu
      • 5.12.2. Inode Önbelleğine İlişkin Hash Tablosunun Yapısı ve LRU Listeleri
      • 5.12.3. Inode Nesnelerinin Önbellekten Atılması
      • 5.12.4. Örnek Senaryolar
      • 5.12.5. Inode Önbelleği İzleme Araçları
    • 5.13. Süper Blok Nesneleri
    • 5.14. Dosya Sisteminin Mount Edilmesi
    • 5.15. Dosya Sistemlerinin Çekirdeğe Kaydettirilmesi
      • 5.15.1. file_system_type Nesnesinin İçinin Doldurulması
        • 5.15.1.1. Süper Blok Nesnesini Oluşturan Yüksek Seviyeli Fonksiyonlar: mount_nodev ve mount_bdev
        • 5.15.1.2. Kök Dizine İlişkin inode ve dentry Nesnelerinin Yaratılması
        • 5.15.1.3. Yeni Çekirdeklerdeki Yüksek Seviyeli Mekanizma: init_fs_context
      • 5.15.2. Mount İşleminin Özet Akışı
    • 5.16. Linux Çekirdeğinde Sanal Dosya Sistemi ve Sanal Fonksiyon Mekanizması
      • 5.16.1. xxx_operations Yapıları
      • 5.16.2. super_operations ve inode_operations Yapılarının İşletilmesi
    • 5.17. Sıfırdan Dosya Sistemi Oluşturma Adımları
  • 6. Dosya Sistemi - II. Bölüm
    • 6.1. Hazırlık İşlemleri
      • 6.1.1. Linux Çekirdeğinde Kullanılan Temel Türlere İlişkin typedef İsimleri
      • 6.1.2. Loop Aygıtları
        • 6.1.2.1. Loop Aygıt Dosyaları
        • 6.1.2.2. Loop Aygıtları İçin Dosya Oluşturma
        • 6.1.2.3. Loop Aygıtlarını Yapılandırma
        • 6.1.2.4. Loop Aygıtına İlişkin Diskin Formatlanması ve Mount Edilmesi
        • 6.1.2.5. Geri Alma İşlemleri
        • 6.1.2.6. Loop Aygıtlarının Kullanım Akışı
    • 6.2. simplefs Dosya Sisteminin Tasarımı
      • 6.2.1. simplefs Dosya Sisteminin Disk Organizasyonu
        • 6.2.1.1. Inode Blok Yapısı
        • 6.2.1.2. Süper Blok Yapısı
        • 6.2.1.3. Disk Inode Elemanının Yapısı
        • 6.2.1.4. Dizin Girişleri
      • 6.2.2. Formatlama Programı: mkfs.simplefs
    • 6.3. simplefs Dosya Sistemi Aygıt Sürücüsünün Gerçekleştirimi
      • 6.3.1. super_block Nesnesinin İçinin Doldurulması
      • 6.3.2. Dosya Sisteminde Güncellenen Disk Bloklarının Aygıta Yazılması
      • 6.3.3. Little-Endian/Big Endian Sorunu
      • 6.3.4. simplefs Süper Bloğunun ve Bitmap Bloklarının Diskten Okunması
      • 6.3.5. Kök Dizine İlişkin Inode Nesnesinin Oluşturulması
  • 7. Kaynaklar
    • 7.1. Kaynak Listesi
    • 7.2. İşletim Sistemleri Teorisi
    • 7.3. Understanding the Linux Kernel
    • 7.4. Linux Device Drivers
    • 7.5. Kernel Internals ve Genel Mimari
    • 7.6. Linux Kernel Programming
    • 7.7. Linux Kernel Debugging
    • 7.8. Sistem Programlama ve Kullanıcı Alanı Kaynakları
    • 7.9. Çevrimiçi Kaynaklar
Linux Kernel - İşletim Sistemlerinin Tasarımı ve Gerçekleştirilmesi
  • Ara


© Copyright 2025, Kaan Aslan.

Built with Sphinx using a tema kullanılarak Read the Docs tarafından sağlanmasıyla oluşturuldu.