Bellek Yönetimi
Bellek Yönetimi Belleğin birden fazla prosese yer verilebilecek şekilde alt birimlere ayrılması işlemidir.
Nasıl olmalı? Bellekteki herhangi bir işlemi başka bir yere aktarabilmelidir. (Relocation) Birden fazla işlem veya kullanıcı olduğunda bir kullanıcının diğer kullanıcını alanlarına girmeleri önlenmelidir. (Koruma) Kullanıcılar arası kaynak paylaşımını sağlamalıdır. (Paylaşma) Belleğin mantıksal alanlara bölünmesini sağlayarak bilgiye erişimi kolaylaştırmalıdır. Belleğin yetmediği durumlarda fiziksel başka bellek alanlarını yani hard diskleri/flash bellekleri kullanabilmelidir.
Adres Türleri Fiziksel Adres: Bellek üzerindeki gerçek adres Mantıksal Adres: İşlemci üretir Göreceli Adres: Adres bir referans noktasına göre ifade edilir. (Genelde proses başlangıç adresi+değer) Bellek Yönetim Birimi: Mantıksal adres->Fiziksel adres
Bellek Yönetim Birimi
Proses Yükleme Türleri Mutlak Yükleme: Her zaman aynı sabit adres Yeniden Yerleşebilir Yükleme: Adres=başlangıç noktası+sabit adres Dinamik Yükleme: Adres yükleme aşamasında dinamik olarak atanır
Yeniden Yerleştirme Takas (Swap) İşlemi: önce RAM->ROM sonra ROM->RAM Bitiştirme (DEFRAG/Sıkıştırma) İşlemi: Kaydırarak boşlukları doldur. Bu işlemler sonrası fiziksel adres değişir; ama mantıksal adresler değişmeyebilir
Bellek Adres Kayıtlıkları (Registerler) Taban Kayıtlığı prosesin başlangıç adresi Sınır Kayıtlığı prosesin son adresi Bu değerler saklayıcılara proses belleğe yüklendiğinde yazılır
Bellek Bölümleme (Tahsisi) Bölmeleme (Partitioning) – Sabit – Dinamik Basit sayfalama (Paging) Basit segmanlama (Segmentation) Sayfalamalı görüntü bellek (Virtual Memory) Segmanlamalı görüntü bellek
Sabit Bölümleme Eşit Parçalara Bölme – boş bölmeye, boyu bölme boyundan küçük ya da eşit prosesler yüklenebilir – tüm bölmeler doluysa proseslerden biri bellekten atılır – program bölmeye sığmayabilir ⇒ Program kod dosyalarına bölünür, çalışacak kısım çalışanın üzerine yazılır (overlay)
Sabit Bölmeleme (2) Bellek kullanımı etkin değil: – Her program ne kadar boyu küçük de olsa tam bir bölmeyi elinde tutar ⇒ iç parçalanma (internal fragmentation) – Eşit boyda olmayan bölmeler kullanılması sorunu bir derece çözer Maksimum aktif proses sayısı sınırlı İşletim sistemi tarafından gerçeklenmesi kolay Getirdiği ek yük az.
Yerleştirme Algoritmaları (Sabit Bölümleme) Bölme boyları eşit – prosesin hangi bölmeye yerleştirileceği fark etmez Bölme boyları eşit değil – her prosesi sığacağı en küçük bölmeye – her bölme için kuyruk – bölme içi boş kalan yer miktarını en aza indirmek
Dinamik Bölmeleme (1) Bölme sayısı ve bölme boyları sabit değil Proseslere sadece gerektiği kadar bellek atanır Kullanılmayan boş yerler yine de oluşur (dış parçalanma) Tüm boş alanın bir blok halinde olması için sıkıştırma kullanılır Hangi boş bloğa hangi prosese atanacağına işletim sistemi karar verir
Yerleştirme Algoritmaları (Dinamik Bölmeleme (1) En-İyi-Sığan Algoritması (Best-Fit) – Boyu istenene en yakın olan boşluk seçilir – Olası en küçük bölme bulunduğundan artan boş alan az ⇒ sıkıştırmanın daha sık yapılanması gerekir
Yerleştirme Algoritmaları (2) İlk-Sığan Algoritması (First-fit) – En hızlı – Prosesler baş bölgelere yığılır ⇒ boş yer ararken üst üste taranır
Yerleştirme Algoritmaları (3) Bir-Sonraki-Sığan Algoritması (Next-fit) – Son yerleştirilen yerden itibaren ilk sığan yeri bulur – Genellikle atamalar belleğin son kısımlarında yer alan büyük boşluklardan olur En büyük boşluklar küçük parçalara bölünmüş olur Sıkıştırma gerekir
Yerleştirme Algoritmaları (4) En Kötü Uyan Algoritması (Worst-fit) Listeden araştırma yapıldıktan sonra en büyük boşluğun seçilerek işlemin yerleştirilmesidir.
5. “Buddy” Yöntemi Tüm boş alan 2U boyutunda tek bir alan olarak ele alınır s boyutundaki bir istek eğer 2U-1 < s <= 2U ise tüm blok atanır Aksi halde blok 2U-1 boyutunda iki eş bloğa bölünür (buddy) s’den büyük veya eşit en küçük birim blok oluşturulana kadar işlem devam eder
Buddy Sistem Örneği
Buddy Yönteminin Ağaç ile Temsili