Internal fragmentation ile external fragmentation arasındaki fark nedir? Paging ve segmentation bunları nasıl etkiler?
Cevap
Internal fragmentation: bir process'e ihtiyacından büyük sabit boyutlu blok verildiğinde bloğun içinde kullanılmayan alan kalmasıdır. External fragmentation: toplamda yeterli boş bellek olduğu hâlde boş alanların dağınık ve bitişik olmaması yüzünden büyük bir isteğin karşılanamamasıdır.
Örnekler
- Internal: sayfa boyutu 4 KB, process 4097 byte istiyor -> 2 sayfa (8 KB) verilir, yaklaşık 4 KB boşa gider.
- External: bellekte 3 adet 10 KB'lık dağınık boşluk var (toplam 30 KB) ama 25 KB'lık bitişik istek karşılanamaz.
| Internal | External | |
|---|---|---|
| Nerede oluşur | Ayrılan bloğun içinde | Bloklar arasında |
| Nedeni | Sabit boyutlu ayırma | Değişken boyutlu ayırma ve serbest bırakma |
| Tipik kaynak | Paging, slab/size-class allocator'lar | Segmentation, contiguous allocation, heap'te malloc/free |
| Çözüm | Daha küçük blok/sayfa boyutu, size class'ları iyi seçmek | Compaction, paging, buddy/slab allocator |
Paging ve segmentation
- Paging: fiziksel bellek sabit boyutlu frame'lere bölünür; bir process'in sayfaları herhangi bir boş frame'e yerleşebilir. Bu external fragmentation'ı ortadan kaldırır, karşılığında son sayfada küçük bir internal fragmentation kalır.
- Segmentation: bellek mantıksal birimlere (code, stack, heap) değişken boyutta bölünür; internal fragmentation yoktur ama external fragmentation oluşur.
Uygulama düzeyinde
Uzun süre çalışan sunucularda heap fragmentation bellek kullanımını yavaşça büyütebilir. jemalloc / tcmalloc gibi allocator'lar size class ve arena yaklaşımıyla bunu azaltır. Java/.NET'teki compacting GC'ler nesneleri taşıyarak external fragmentation'ı temizler.
Compaction neden her zaman çözüm değil?
Bellekteki blokları kaydırmak pahalıdır ve adreslerin yeniden haritalanabilmesini (relocation) gerektirir; C gibi ham pointer kullanan dillerde heap compaction yapılamaz.
İlgili İşletim Sistemleri soruları
- Concurrency ile parallelism arasındaki fark nedir?
- Race condition nedir? Bir örnekle nasıl önleneceğini gösterin.
- Context switch nedir? Neden maliyetlidir?
- Virtual memory ve paging nasıl çalışır? Page fault nedir?
- Mutex ile semaphore arasındaki fark nedir?
- Deadlock nedir? Oluşması için gereken dört koşul nelerdir ve nasıl önlenir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.