2023-2024 Final Sınavı
Tek işlemcili bir sistemde birden fazla sürecin aynı anda çalışıyor gibi görünmesi, işletim sisteminin çoklu görev (multitasking) ve bağlam anahtarlama (context switching) mekanizmaları sayesinde sağlanır. Bu süreç, CPU'nun süreçler arasında hızlı geçiş yapmasıyla mümkün olur ve kullanıcıya süreçlerin paralel çalıştığı izlenimi verir. Aşağıda bu mekanizma detaylı bir şekilde açıklanmıştır:
Çoklu görev, işletim sisteminin birden fazla süreci aynı anda yönetmesini sağlar. Tek işlemcili sistemlerde, CPU aynı anda yalnızca bir süreci çalıştırabilir. Ancak işletim sistemi, süreçlere kısa süreli CPU zaman dilimleri (time slices veya quantum) atayarak, hepsinin çalıştığı illüzyonunu yaratır. Bu, genellikle önleyici çoklu görev (preemptive multitasking) ile gerçekleştirilir:
Bağlam anahtarlama, CPU'nun bir süreçten diğerine geçiş yapması için gereken işlemdir. İşletim sistemi, mevcut sürecin durumunu kaydeder ve yeni bir sürecin durumunu yükler:
Bağlam anahtarlama, mikro veya nanosaniye mertebesinde gerçekleşir, bu nedenle kullanıcı geçişlerin farkına varmaz.
İşletim sistemi, hangi sürecin ne zaman çalışacağını belirlemek için çizelgeleme algoritmaları kullanır:
Kesmeler, bağlam anahtarlamasını tetikler. Örneğin, bir zamanlayıcı kesmesi (timer interrupt), bir sürecin zaman diliminin dolduğunu bildirir ve başka bir sürece geçiş yapılır.
Bir sistemde üç süreç çalışıyor: metin editörü (P1), web tarayıcı (P2), müzik çalar (P3). İşletim sistemi:
Kullanıcı, tüm süreçlerin aynı anda çalıştığını düşünür, ancak CPU her seferinde bir süreci çalıştırır.
Bağlam anahtarlamasının hızı ve çizelgelemenin etkinliği, çoklu görev illüzyonunu sağlar. Ancak, sık bağlam anahtarlamaları ek yük (overhead) yaratabilir. Performans, CPU zamanının süreçler arasında adil ve verimli paylaşılmasına bağlıdır.
Fiziksel bellek (RAM) miktarından daha fazla bellek tahsisi, sanal bellek (virtual memory) mekanizmasıyla sağlanır. Sanal bellek, süreçlere fiziksel bellekten bağımsız, geniş bir adres alanı sunar ve sabit diskteki takas alanı (swap space) ile desteklenir. Aşağıda bu süreç detaylı bir şekilde açıklanmıştır:
Sanal bellek, her sürece kendi sanal adres alanını tahsis eder. Bu adres alanı, fiziksel belleğin boyutundan bağımsızdır ve süreçlerin büyük bellek taleplerini karşılar:
Sanal bellek, genellikle sayfalama ile uygulanır:
Fiziksel bellek yetersizse, yalnızca o an ihtiyaç duyulan sayfalar belleğe yüklenir:
Takas alanı, sabit diskte ayrılmış bir bölümdür ve fiziksel belleğin uzantısı gibi çalışır. Kullanılmayan sayfalar buraya taşınır, böylece fiziksel bellekten daha fazla bellek sağlanır.
İşletim sistemi, süreçlere ihtiyaç duydukları anda fiziksel bellek tahsis eder. Örneğin, bir süreç 1 GB talep etse bile, sadece bir kısmını kullanıyorsa, kalan alan fiziksel bellekte tutulmaz.
4 GB RAM ve 8 GB takas alanı olan bir sistemde:
Sanal bellek, fiziksel bellek sınırlarını aşar, ancak sayfa hataları performansı etkileyebilir (disk erişimi yavaş). TLB ve etkili sayfa değiştirme algoritmaları, performansı optimize eder. Yoğun takas alanı kullanımı (thrashing), sistem yavaşlamasına neden olabilir.
Kilitlenme (deadlock), birden fazla sürecin, birbirlerinin serbest bırakmasını beklediği kaynaklar nedeniyle süresiz olarak bekleme durumunda kalmasıdır. Hiçbir süreç ilerleyemez ve sistem tıkanır. Kilitlenme, paylaşılan kaynakların (örneğin, bellek, kilitler) kullanıldığı sistemlerde yaygındır.
Kilitlenme, aşağıdaki dört koşulun aynı anda sağlanmasıyla oluşur:
Tanım: Kaynak, yalnızca bir süreç tarafından kullanılabilir; diğer süreçler bekler.
Trafik Örneği: Bir dar köprü, aynı anda yalnızca bir yönden araç geçişine izin verir. Bir kamyon köprüyü kullanıyorsa, karşı yönden gelen araçlar bekler.
Açıklama: Köprü (kaynak), karşılıklı dışlama özelliğine sahiptir. Eğer kaynak paylaşılamazsa, kilitlenme riski artar, çünkü süreçler kaynak için sırayla bekler.
Tanım: Bir süreç, bir kaynağı tutarken başka bir kaynağı talep eder.
Trafik Örneği: Bir kavşakta, araç A doğu-batı şeridini tutuyor ve kuzey-güney şeridini bekliyor. Araç B, kuzey-güney şeridini tutuyor ve doğu-batı şeridini bekliyor.
Açıklama: Her araç, bir şeridi tutarak diğerini beklerse, ilerleyemezler, bu da kilitlenmeye yol açar.
Tanım: Kaynaklar, süreç tarafından gönüllü olarak bırakılmadıkça alınamaz.
Trafik Örneği: Bir kavşakta, bir otobüs dar bir yolu kapatarak ilerliyor ve taksinin geçmesini engelliyor. Trafik polisi, otobüsü zorla geri çekemez.
Açıklama: Otobüs yolu bırakmazsa, taksi bekler ve kilitlenme oluşabilir.
Tanım: Süreçler, dairesel bir zincir oluşturacak şekilde birbirlerinin kaynaklarını bekler.
Trafik Örneği: Dört yönlü bir kavşakta:
Açıklama: Her araç, bir sonraki aracın şeridini bekler, bu da dairesel beklemeye ve kilitlenmeye neden olur.
Dört koşulun tamamı sağlanmadıkça kilitlenme oluşmaz. İşletim sistemleri, bir koşulu ortadan kaldırarak kilitlenmeyi önler. Örneğin, dairesel beklemeyi önlemek için kaynak sıralaması kullanılabilir. Ancak, her strateji performans ve esneklik açısından trade-off’lar içerir.
Kilitlenmeyi önlemek için, dört koşuldan (karşılıklı dışlama, tut ve bekle, önleme yok, dairesel bekleme) herhangi birini ortadan kaldıran bir strateji uygulanabilir. Aşağıda her koşulu önlemek için bir strateji önerilmiştir:
Strateji: Kaynakların eşzamanlı erişime izin verecek şekilde tasarlanması.
Açıklama: Kaynaklar, birden fazla sürecin aynı anda kullanabileceği şekilde yapılandırılır. Örneğin, bir yazıcı için bir spooler sistemi, yazdırma işlerini sıraya koyar ve doğrudan erişimi engeller.
Avantajlar: Bekleme süresi azalır, kilitlenme riski sıfıra iner.
Dezavantajlar: Tüm kaynaklar paylaşılamaz (örneğin, veritabanı yazma işlemleri). Veri tutarlılığı için senkronizasyon gerekir.
Strateji: Süreçlerin tüm kaynakları yürütme öncesi alması zorunlu kılınır.
Açıklama: Bir süreç, ihtiyaç duyacağı tüm kaynakları baştan talep eder. Eğer kaynaklar mevcut değilse, süreç hiç başlatılmaz.
Avantajlar: Tut ve bekle durumu ortadan kalkar.
Dezavantajlar: Kaynak israfı, süreçlerin kaynak ihtiyaçlarını önceden bilme zorunluluğu, uzun bekleme süreleri.
Strateji: Kaynakların işletim sistemi tarafından zorla alınması (preemption).
Açıklama: Bir süreç, ihtiyaç duyduğu kaynağı alamıyorsa, tuttuğu kaynaklar geri alınır ve başka süreçlere tahsis edilir.
Avantajlar: Süreçlerin kaynakları süresiz tutması engellenir.
Dezavantajlar: Süreç durumu bozulabilir, fiziksel cihazlar için zor uygulanır, ek hesaplama yükü.
Strateji: Kaynaklara bir sıralama atanır ve süreçler kaynakları bu sırayla talep eder.
Açıklama: Örneğin, yazıcı (R1), disk (R2), tarayıcı (R3) sıralanır. Süreçler, yalnızca bu sırayla talep edebilir.
Avantajlar: Dairesel bekleme imkansız hale gelir, uygulama basit.
Dezavantajlar: Süreçlerin doğal akışını kısıtlar, ek bekleme süreleri yaratabilir.
Dairesel beklemeyi önleme, en yaygın ve pratik stratejidir. Karşılıklı dışlama, kaynak doğası gereği genellikle kaldırılamaz. Tut ve bekle, kaynak israfına yol açar; önleme, fiziksel cihazlar için zordur. Sistem tasarımında, performans ve esneklik arasındaki denge dikkate alınmalıdır.
Bellek yönetimi, işletim sisteminin fiziksel ve sanal belleği süreçler arasında verimli, güvenli ve etkili bir şekilde tahsis eden bileşenidir. Çoklu süreç sistemlerinde, sınırlı bellek kaynaklarının paylaşılması gerektiğinden, bellek yönetimi vazgeçilmezdir. Aşağıda ihtiyaç nedenleri detaylı bir şekilde açıklanmıştır:
Süreçler, kod, veri ve yığın için bellek gerektirir. Bellek yönetimi, fiziksel belleği süreçlere adil bir şekilde tahsis eder.
Örnek: 8 GB RAM’de üç süreç (tarayıcı, editör, oyun) 10 GB talep ederse, bellek yönetimi sanal bellekle bu talebi karşılar.
Her süreç, kendi bellek alanında çalışmalı ve diğer süreçlerin verilerine erişmemelidir. Bellek yönetimi, sanal adres alanları ve sayfa tablolarıyla izolasyon sağlar.
Örnek: Bir tarayıcı, bankacılık uygulamasının verilerine erişemez.
Dahili (tahsis edilen bloğun kullanılmayan kısmı) ve harici (dağınık boş alanlar) parçalanma, belleğin verimsiz kullanılmasına yol açar. Bellek yönetimi, sayfalama veya birleştirme ile bu sorunları azaltır.
Fiziksel bellek yetersizse, sanal bellek, takas alanıyla süreçlere daha büyük adres alanları sunar.
Örnek: 4 GB RAM’de 8 GB talep eden bir süreç, takas alanıyla çalışabilir.
Süreçler, ortak verilere (örneğin, kütüphaneler) erişebilir. Bellek yönetimi, kopya üzerine yazma (copy-on-write) ile paylaşımı optimize eder.
TLB, önbellekleme ve etkili tahsis algoritmaları (örneğin, best-fit), bellek erişimini hızlandırır.
Geçersiz bellek erişimleri (örneğin, segmentasyon hatası), bellek yönetimi tarafından tespit edilir ve sistem çökmesi önlenir.
Bellek yönetimi, performans, güvenlik ve kaynak verimliliği arasında denge kurar. Sayfalama ve sanal bellek, modern sistemlerde temel araçlardır. Yetersiz bellek yönetimi, sistem kaosuna, güvenlik açıklarına ve düşük performansa yol açar.
Bellek yönetiminde mantıksal adres (logical address) ve fiziksel adres (physical address), sanal bellek sisteminin temel kavramlarıdır. Süreçlerin bellekle etkileşimini sağlarlar.
Tanım: Sürecin kendi sanal adres alanında kullandığı adrestir. Süreç, fiziksel belleğin detaylarını bilmez; yalnızca mantıksal adreslerle çalışır.
Tanım: Belleğin (RAM) gerçek, donanımsal konumunu temsil eden adrestir.
İşletim sistemi, mantıksal adresleri fiziksel adreslere çevirir:
İki süreç (P1, P2) ve 8 GB RAM:
Sayfa tablosu, her sürecin adresini farklı fiziksel konumlara eşler.
Mantıksal adresler, süreç izolasyonu ve esneklik sağlar. Fiziksel adresler, donanımla doğrudan iletişim kurar. Adres çevirisi, sayfa hataları ve TLB isabet oranı, sistem performansını etkiler.
Bellekte boş alanların izlenmesi için kullanılan veri yapıları, belleğin verimli tahsisini sağlar. Başlıca veri yapıları şunlardır:
Açıklama: Boş bellek blokları, bağlı listede düğümler olarak tutulur. Her düğüm, başlangıç adresini, boyutunu ve bir sonraki bloğa işaretçiyi içerir.
Açıklama: Bellek, sabit boyutlu birimlere bölünür; her birim bir bit ile temsil edilir (`0`: boş, `1`: tahsisli).
Açıklama: Boş bloklar, ikili ağaç veya kırmızı-siyah ağaç gibi hiyerarşik yapılarla tutulur.
Açıklama: Bellek, ikinin katları boyutunda bloklara bölünür; her boyut için bir liste tutulur.
Bağlı liste esnek, ancak yavaştır. Bit haritası kompakt, ancak sabit boyutlara uygundur. Ağaçlar hızlı ve esnek, kumpas sistemi düzenli ancak dahili parçalanma yaratır. Modern sistemler, bu yapıların kombinasyonunu kullanır.
Dahili parçalanma (internal fragmentation) ve harici parçalanma (external fragmentation), bellek tahsisinde ortaya çıkan ve belleğin verimsiz kullanılmasına yol açan sorunlardır. Aşağıda farkları açıklanmıştır:
Tanım: Bir sürece tahsis edilen bellek bloğunun, ihtiyaç duyulandan büyük olması ve kullanılmayan kısmın boşa gitmesidir.
Tanım: Toplamda yeterli boş bellek olmasına rağmen, bu alanların dağınık ve ardışık olmaması nedeniyle tahsis edilememesidir.
Özellik | Dahili Parçalanma | Harici Parçalanma |
---|---|---|
Yer | Tahsis edilmiş blok içinde | Boş bloklar arasında |
Etkiler | Bellek israfı | Tahsis engeli |
Çözüm | Küçük sayfalar, dinamik tahsis | Birleştirme, sayfalama |
Sayfalama, harici parçalanmayı çözer, ancak dahili parçalanma yaratır. Değişken tahsis, dahili parçalanmayı önler, ancak harici parçalanmaya yol açar. Modern sistemler, sayfalama ve kumpas sistemiyle bu sorunları dengeler.
Fiziksel bellekte olmayan bir sayfaya erişildiğinde, bir sayfa hatası (page fault) oluşur ve işletim sistemi, talebe bağlı sayfalama ile sayfayı yükler. Süreç adım adım şöyledir:
Süreç, bir mantıksal adrese (örneğin, 0x1234) erişmeye çalışır. Bu adres, sanal adres alanındaki bir sayfa numarası ve ofset içerir.
Bellek Yönetim Birimi (MMU), sayfa tablosuna bakar. Eğer sayfanın varlık biti `0` ise, sayfa fiziksel bellekte değildir.
MMU, bir sayfa hatası kesmesi üretir. CPU, mevcut talimatı durdurur ve kontrol işletim sistemine geçer.
İşletim sistemi, hatanın türünü analiz eder:
Fiziksel bellek doluysa, bir sayfa (örneğin, LRU ile) çıkarılır:
Sayfa, diskten (takas alanı veya dosya) fiziksel belleğe yüklenir. Sayfa tablosu güncellenir (varlık biti `1`).
Süreç durumu geri yüklenir, talimat tekrar yürütülür ve erişim tamamlanır.
Süreç, 0x1234’e (sayfa 1, ofset 0x234) erişir:
Sayfa hataları, disk I/O nedeniyle yavaştır (ms vs. ns). Düşük sayfa hatası oranı, TLB ve etkili algoritmalar performans için kritik. Yoğun sayfa değiştirme (thrashing), sistemi yavaşlatır.
Sayfa yer değiştirme algoritmaları, fiziksel bellek dolu olduğunda hangi sayfanın çıkarılacağını belirler. Üç yaygın algoritma şunlardır:
Açıklama: En uzun süredir bellekte olan sayfa çıkarılır. Bellek, bir kuyruk gibi yönetilir.
Açıklama: En uzun süredir kullanılmayan sayfa çıkarılır. Lokalite ilkesine dayanır.
Açıklama: LRU’nun basit bir yaklaşık versiyonudur. Sayfalar dairesel bir listede tutulur, referans biti kullanılır.
LRU ve saat algoritması, lokaliteye uygunluklarıyla yüksek performans sunar. FIFO basit, ancak etkisizdir. Algoritma seçimi, sistem ihtiyaçlarına ve donanım desteğine bağlıdır. Sayfa hatası oranı, performansı belirler.