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 Boot Süreci
      • 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ına İlişkin 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. 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.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 Tablolarının 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. Güncel Çekirdeklerde pid Araması (4.20+)
      • 4.13.6. XArray Gerçekleştirimi
  • 5. Dosya Sistemi - I. Bölüm
    Temeller
    • 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. Ç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
    • 6.1. Hazırlık İşlemleri
      • 6.1.1. Linux Çekirdeğinde Kullanılan Belli Uzunluklardaki Tamsayı Türlerine İlişkin typedef İsimleri
      • 6.1.2. Loop Aygıtları
        • 6.1.2.1. Loop Aygıtına İlişkin Diskin Formatlanması ve Mount Edilmesi
        • 6.1.2.2. Geri Alma İşlemleri
      • 6.1.3. Little-Endian/Big Endian Sorunu
    • 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. İlk İşlemler
      • 6.3.2. super_block Nesnesinin İçinin Doldurulması
      • 6.3.3. Süper Bloğun Diskten Okunması ve sb_bread Fonksiyonu
      • 6.3.4. Dosya Sisteminde Güncellenen Disk Bloklarının Aygıta Yazılması
      • 6.3.5. simplefs Süper Bloğunun ve Bitmap Bloklarının Diskten Okunması
      • 6.3.6. Kök Dizine İlişkin Inode Nesnesinin Oluşturulması
      • 6.3.7. Inode Nesnesine inode_operations İşlevlerinin Atanması
      • 6.3.8. simplefs_fill_super Fonksiyonunun Tamamlanması
      • 6.3.9. Unmount İşlemi Sırasında Boşaltımların Yapılması
      • 6.3.10. simplefs Dosya Sisteminin Test Edilmesi
      • 6.3.11. Dizin Girişlerinin Elde Edilmesi
      • 6.3.12. simplefs Dosya Sistemi İçin Diğer inode_operations Fonksiyonlarının Yazımı
      • 6.3.13. Inode Nesnelerinin Diske Aktarılması
      • 6.3.14. Dizinlerin Silinmesi
      • 6.3.15. Dosyaların Yaratılması
      • 6.3.16. Dosyaların Silinmesi
      • 6.3.17. Okuma Yazma İşlemleri
        • 6.3.17.1. Dosyalarlarla İlgili Okuma ve Yazma İşlemlerinde Eski ve Yeni Arayüzler
      • 6.3.18. Dosya Göstericisinin Komumlandırılması
      • 6.3.19. Dosyalara İlişkin inode_operations Nesnesi
      • 6.3.20. simplefs Dosya Sisteminin Gerçekleştirilmesinde Kullanılan Çekirdek Fonksiyonları
    • 6.4. simplefs Dosya Sisteminin İyileştirilmesi İçin Öneriler
      • 6.4.1. Çok Bloklu Dosya Desteği
      • 6.4.2. inode Bitmap ve Data Bitmap Boyutlarının Ayarlanması
      • 6.4.3. Değişken Uzunluklu Dizin Girişleri
  • 7. Çekirdek Senkronizasyonu
    • 7.1. Kritik Kod Blokları
      • 7.1.1. Kritik Kod Bloklarının Manuel Oluşturulmasındaki Sorunlar
      • 7.1.2. Blokeye Yol Açabilen ve Blokeye Yol Açmayan Senkronizasyon Nesneleri
    • 7.2. Mutex Nesneleri
      • 7.2.1. Mutex Kullanımına Bir Örnek
      • 7.2.2. Çekirdekteki Mutex Kodları
    • 7.3. Semaphore Nesneleri
      • 7.3.1. Binary Semaphore Örneği
      • 7.3.2. Mutex ile Binary Semaphore Arasındaki Farklar
    • 7.4. Spinlock Nesneleri
      • 7.4.1. Spinlock ile Mutex Nesnelerinin Karşılaştırılması
    • 7.5. Okuma Yazma Kilitleri
    • 7.6. UMA ve NUMA Mimarileri
      • 7.6.1. SMP Mimarisi
      • 7.6.2. NUMA Mimarisi
      • 7.6.3. UMA ve NUMA Mimarilerinin Avantaj ve Dezavantajları
    • 7.7. Çok İşlemcili Sistemlerde Senkronizasyon Sorunları
    • 7.8. Atomik İşlemler
      • 7.8.1. C’de Atomik Değişkenler
      • 7.8.2. Linux Çekirdeğinde Atomik İşlemler
        • 7.8.2.1. Atomik Okuma, Artırım ve Eksiltim Fonksiyonları
        • 7.8.2.2. Compare-Exchange (Compare-And-Swap) Fonksiyonları
        • 7.8.2.3. Koşullu Atomik İşlemler
        • 7.8.2.4. Test-And-Set Atomik İşlemleri
        • 7.8.2.5. Atomik Bit İşlemleri
      • 7.8.3. ARM Mimarilerinde Atomik İşlemler
        • 7.8.3.1. ARM’daki LDREX, STREX ve Exclusive Monitor Mekanizması
        • 7.8.3.2. ARM V8.1 ile Gelen Atomik Makine Komutları
    • 7.9. Komutların Yer Değiştirmesi
    • 7.10. Bellek Bariyerleri
      • 7.10.1. Derleyici Bariyerleri
      • 7.10.2. volatile Erişimler
        • 7.10.2.1. READ_ONCE ve WRITE_ONCE Makroları
      • 7.10.3. İşlemci Düzeyinde İşlev Gören Bariyer Makroları
      • 7.10.4. Acquire/Release Semantiği
        • 7.10.4.1. smp_load_acquire Makrosu
        • 7.10.4.2. smp_store_release Makrosu
        • 7.10.4.3. Atomik Acquire/Release Fonksiyonları
        • 7.10.4.4. C ve C++ Standartlarında Bariyerler ve Acquire/Release İşlemleri
    • 7.11. RCU (Read-Copy-Update) Mekanizması
      • 7.11.1. RCU’nun Temel Fikri
      • 7.11.2. rcu_read_lock ve rcu_read_unlock
      • 7.11.3. rcu_dereference
      • 7.11.4. rcu_assign_pointer
      • 7.11.5. synchronize_rcu ve call_rcu Fonksiyonları
      • 7.11.6. RCU Mekanizmasının Kullanımına Örnek
      • 7.11.7. call_rcu Fonksiyonu ve kfree_rcu Makrosu
      • 7.11.8. RCU’lu Bağlı Listeler
    • 7.12. Kullanıcı Modu Senkronizasyonları ve Futex Mekanizması
      • 7.12.1. Futex Mekanizması
        • 7.12.1.1. Futex Mekanizmasının Çalışma Biçimi
        • 7.12.1.2. Futex İşlem Kodları
        • 7.12.1.3. Futex’in Çekirdek Gerçekleştirimi
        • 7.12.1.4. Futex Yoluyla Kullanıcı Modunda Mutex Gerçekleştirimi Örneği
  • 8. Bekleme Kuyrukları
    • 8.1. Çalışma Kuyrukları ve Thread’lerin Çizelgelenmesi
      • 8.1.1. Thread’lerin Bloke Olması
      • 8.1.2. Thread’lerin Yaşam Döngüsü
        • 8.1.2.1. IO Yoğun ve CPU Yoğun Thread’ler
    • 8.2. Bekleme Kuyruklarına İlişkin Veri Yapıları ve Temel Çekirdek Fonksiyonları
      • 8.2.1. Bekleme Kuyruklarının Yaratılması
      • 8.2.2. Thread’lerin Uykuya Yatırılması: wait_event Makroları
        • 8.2.2.1. wait_event Makrolarının Gerçekleştirimleri
      • 8.2.3. Thread’lerin Uykudan Uyandırılması: wake_up Makroları
        • 8.2.3.1. wakeup Makrolarının Gerçekleştirimleri
      • 8.2.4. Bekleme Kuyruklarına İlişkin Yalın Bir Örnek
        • 8.2.4.1. Yalnızca Tek Bir Thread’in Uyandırılması
      • 8.2.5. Bekleme Kuyruklarının Çekirdek İçerisindeki Kullanımları
      • 8.2.6. Bekleme Kuyruklarına İlişkin Daha Karmaşık Bir Örnek: Boru Aygıt Sürücüsü
      • 8.2.7. Bekleme Kuyruklarına İlişkin Ayrıntılar
        • 8.2.7.1. Sahte Uyanma (Spurious Wakeup) Durumu
        • 8.2.7.2. prepare_to_wait ve finish_wait Fonksiyonları
    • 8.3. Bekleme Kuyrukları Kullanılmadan Thread’lerin Uykuya Yatırılması ve Uyandırılması
      • 8.3.1. wake_up_process Fonksiyonu
  • 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.2.1. Page Fault Mekanizması
    • 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.5.1. Çok Kademeli Sayfa Tabloları
      • 9.5.2. Translation Lookaside Buffer (TLB)
    • 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.9.1. Tüm Fiziksel Sayfalara İlişkin Bilgilerin Tutulması
        • 9.9.1.1. CONFIG_FLATMEM Organizasyonu
        • 9.9.1.2. CONFIG_SPARSEMEM_VMEMMAP Organizasyonu
        • 9.9.1.3. CONFIG_SPARSEMEM Organizasyonu
        • 9.9.1.4. Üç Konfigürasyonun Karşılaştırılması
      • 9.9.2. page Nesneleri ile İlgili Erişim Makroları ve Fonksiyonları
    • 9.10. Çekirdeğin Fiziksel Adresler Yoluyla Belleğe Erişimi
      • 9.10.1. 32 Bit Sİstemlerde HIGHMEM Alanına Erişim
        • 9.10.1.1. kmap, kmap_atomic ve kmap_local_page Fonksiyonları
      • 9.10.2. Doğrudan Haritalanan Fiziksel Belleğe Erişim Makroları ve Fonksiyonları
  • 10. Bellek Yönetimi - 2. Bölüm
    Tahsisat İşlemleri
    • 10.1. İkiz Blok Tahsisat Sistemi (Buddy Allocator)
      • 10.1.1. İkiz Blok Tahsisat Sisteminin Algoritmik Yapısı
      • 10.1.2. Bellek Bölgeleri ve Göç Türleri
      • 10.1.3. Sayfa Tahsisat Fonksiyonları
      • 10.1.4. Sayfa Tahsisatlarında Fallback Mekanizması
        • 10.1.4.1. Fallback Mekanizmasına İlişkin Veri Yapıları
        • 10.1.4.2. Bölgelerdeki Boş sayfa Listelerinin Başlangıç Durumu
        • 10.1.4.3. Fallback Mekanizmasında NUMA Düğümlerinin Dolaşım Sırası
    • 10.2. Dilimli Tahsisat Sistemi (Slab Allocator)
      • 10.2.1. Klasik Tahsisat Algoritması: Boş Blokların Bağlı Listede Saklanması
      • 10.2.2. Dilimli Tahsisat Sisteminin Ana Fikri
      • 10.2.3. Dilimli Tahsisat Sistemine İlişkin Veri Yapıları ve Algoritmalar
        • 10.2.3.1. Dilim Önbelleği ve kmem_cache Yapısı
        • 10.2.3.2. kmem_cache_node Yapısı
        • 10.2.3.3. Dilimler ve slab Yapısı
      • 10.2.4. Dilim Önbelleklerinin Yaratılması
        • 10.2.4.1. Dilim Önbelleklerinin Birleştirilmesi
        • 10.2.4.2. Önceden Yaratılmış Dilim Önbellekleri
      • 10.2.5. Dilim Önbelleklerinden Tahsisat İşlemleri
      • 10.2.6. kmalloc Fonksiyonu ve Türevleri
  • 11. Kaynaklar
    • 11.1. İşletim Sistemleri Teorisi
    • 11.2. Understanding the Linux Kernel
    • 11.3. Linux Device Drivers
    • 11.4. Kernel Internals ve Genel Mimari
    • 11.5. Linux Kernel Programming
    • 11.6. Linux Kernel Debugging
    • 11.7. Sistem Programlama ve Kullanıcı Alanı Kaynakları
    • 11.8. Çevrimiçi Kaynaklar
Linux Kernel - İşletim Sistemlerinin Tasarımı ve Gerçekleştirilmesi
  • Ara


© Copyright C ve Sistem Programcıları Derneği (1993).

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