Linux Kernel - İşletim Sistemlerinin Tasarımı ve Gerçekleştirilmesi
İç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
Dizin
Dizin