Hafıza Yönetimi (Memory Management)

 

Fiziksel adres: Bilgisayarın birincil hafızası (primary memory) veya RAMdir.

 

Yüksek adres alanı: İşletim sistemleri, gerçekte donanımın sahip olduğu alandan daha fazla alanı adresleyebilmelidirler. Sanal bellek (Virtual Memory) fiziksel adresten fazla olabilir.

 

Koruma (Protection) : Her işlem (process) kendi adres alanında (address space) çalışır.

 

Hafıza Haritası (Memory Mapping) Hafızadaki her process’e ilgili alanın atanması işlemi

 

Adil Hafıza dağılımı (Fair Physical Memory Allocation) Çalışan her process’in, fiizksel adrese adil bir sırayla erişmesini sağlar

 

Paylaşılmış Sanal Bellek: Her ne kadar her işlem (process) kendi adres alanına sahip olsa da, işlemler arası paylaşılmış bellek gereksinimi olabilmektedir. Bu durum işlemler arası iletişim (Inter process communication ) olarak bilinir.

 

Virtual Memory örneği:

 

Yukarıdaki grafikte iki ayrı işlem (process)’in gerçek hafızayı virtual memory üzerinden kullanması gösterilmiştir.

Ofset ve virtual page frame number bir adrese erişim için gerklidir (her işlem kendi adres alanını kullandığı için gerçek adresin bulunması sırasında)

 

Bu grafikte X’n virtual page frame number 0’ı fiziksel adreste 1 numaraya, Y’nin 1 numaralı page frame number’ı fiziksel adreste 4’e bağlanmıştır. Her pagetable’da aşağıdaki bilgiler bulunmalıdır:

 

 

Bir sanal adresin fiziksel adrese çevirilmesi:

Örneğin her page boyutu (page size) 2000 byte’tan oluşsun. Bu durumda Y’nin 0x194 numaralı adrese erişimi:

Gerçek hafızada (physical address) 4. page karşılık geldiği için 4 x 0x2000 = 0x8000 adresi olmaktadır.

Üzerine ofset değeri 0x194 eklenince = 0x8194 gerçek hafızdaki erişilen adres olmaktadır.

 

Page talebi (Page demand).

 

Sanal hafıza (Virtual Memory)’den çok daha az gerçek hafıza olduğu için işletim sistemi bu hafızayı kullanırken dikkatli olmalıdr.

 

Hafızada her zaman için en çok kullanılma ihtimali olan sanal bölmeler bulundurulmalıdır.

 

Bir işlemin (process) hafıza erişimi sırasında bir sanal bölgeye erişme isteğine (page demand veya demanding page) denilir.

 

Bu durum üç farklı şekilde karşılanır.

 

  1. işlem (process) erişmemesi gereken bir bölmeye erişmeye çalışıyorsa bu bir hata olarak algılanmalıdır.
  2. işlem (process) zaten fiziksel hafızaya yüklü bir alana erişmeye çalışıyorsa bu talep yönlendirme ile karşılanmalıdır.
  3. işlemin eriştiği hafıza talebi fiziksel hafızada yüklü değilse bu durumda hafızaya yüklenerek işleme cevap verilmelidir. Bu sırada gerçek hafızada yüklü olan hangi bilginin yerine yeni alanın yükleneceği bir problem oluşturur.

 

Yukarıdaki 3. ihtimalde hafızada bulunan bilginin diskte bulunan bilgi ile yer değiştirmesi işlemine swapping denilir. Swapping kısaca hafızada bulunmayan bilginin hafızaya yüklenmesi veya hafızada bulunan ve zaman içinde değişen (bunlara dirty page denilir) bilgileirn disk ile güncellenmesi işine verilen addır.

 

Swapping işleminin verimli seçilmemesi durumunda sürekli olarak disk ile hafıza arasında okuma yazma ilişkisi başlatılmış olur. Bu durum sistemin yavaşlamasına sebep olur. Bu duruma thrashing denilir.

 

Linux LRU (least recently used) algoritmasını kullanır. Basitçe hafızaya yeni bir page yüklenirken eski page’lerden en az kullanılanı silme mantığına dayanır.

 

Windows’un sunucu çözümlerinde (NT 2000 veya XP gibi ) diskte tuttuğu pagefile.sys dosyası bu işe yarar ve diskin virtual memory olarak kullanılan alanına işaret eder:

yukarıdaki dosyalar arasında görülen pagefile.sys dosyası buna bir örnektir.

 

Görüldüğü üzere Windows random Access olan bir hafıza alanını ardışık (Sequential) erişimi olan disk üzerinde tek bir dosya olarak tutması çeşitli problemlere yol açabilmektedir. Örneğin bu dosya üzerinde fragmentation (parçalanma) olabilir. Yani çalışan ve ölen işlemler zaman içinde dosyada boşluklar oluşturmakta bu durumda performans kaybına sebep olmakatıdr. Bunun için bu dosyanın deframent edilmesini de içeren bir takım yöntemler geliştirilmiştir. Ancak hafıza yoğun işlemlerde performans artışını sağlayan en kesin yöntem fiziksel hafızanın arttırılmasıdır.

 

Swappingin tamamen kapatılması için :

Linux sistemlerde /proc/sys/vm/swappiness parametresinin değişmesi

Windowsta ise DisablePagingExecutive registry ayarının değiştirilmesi mümkündür.

 

Sanal hafızanın paylaşılması.

İki işlemin aynı hafıza bölmesini paylaşabilmesi durumudur. Örneğin yukarıdaki şekilde X ve Y işlemleri fiziksel adres 4’ü paylaşmışlardır.

 

Unutulmaması gereken bir nokta işletim sistemlerinin çok büyük çoğunluğunun fiziksel adres üzerinde direk çalışıyor olduklarıdır.

 

Karşılaşılan problemler:

 

Premature free veya dangling pointer

Çoğu programın hafızaya erişmeyi bırakması ve tekrar erişmeye çalışaması durumudur. Bu durum rasgele bir düzen içerisinde olabilir. Bu erişim belirsizliğine premature free denilir ve çözüm için önerilen yöntem danling pointer’dır.

Memory leak

Bazı programlar hafıza ihtiyaçlarını çalışma sırasında arttırmakta ve giderek sistemin ayırabileceği hafızanın üzerinde talepte bulunmaktadırlar. Bu duruma memory leak (hafıza sızması) denilir.

External fragmentation

Hafıza ayrılması sırasında yanlış bir uygulama ile işletim sistemi elinde yeterli boş alan bulunsa da yeni programları çalıştıracak kadar büyük tek bir hafıza bölmesine sahip olamayabilir. Elinde olan alan mevcutta çalışan programlar tarafından ufak parçalara bölünmüşse bu duruma external fragmentation denilir.

Poor locality of reference

Şayet hafızada erişim yapılan bölmeler birbirine yakınsa bu performans artışı sağlar. Bölmelerin biribirinden uzak olması bir problem sebebidir ve zayıf yerel referans (poor locality of reference) olarak adlandırılır.

Inflexible design

Hafıza yönetimini iyileştirmek için işletim sistemlerinde yapılan yeniliklerin çok büyük çoğunluğu bazı kabuller üzerine kurulmaktadır. Örneğin programın kullanacağı hafıza, en verimli blok boyutları, erişim sıklığı veya objelerin yaşam süreleri konusunda tahminler yapılmaktadır. Bu şekilde tasarlanmış bir hafıza yönetiminin beklentilerinin karşılanmaması durumunda performansta kötüleşme olabilir ve bu probleme inflexible design (esnek olmayan tasarım) adı verilir.

 

Cache

 

Ram ile CPU arasında buluna ve ram’e göre çok daha hızlı olan hafız bölmesidir. Bu bölmenin varlık sebebi CPU’nun ihtiyaç duyduğu bilgilerin RAM’e göre nispeten daha hızlı olan bir bölmeden karşılanarak sistemin hızlandırılmasının hedeflenmiş olmasıdır. Bu hedef ile doğan cache bellek, günümüzde hemen her birim için kullanılmaktadır. Aşağıda bu kullanımlardan bazı örnekler verilmiştir:

 

Buffer Cache.

Aygıt sürücüleri(device drivers) için tasarlanmıştır. Örnek olarak hard disk veya printer gibi aygıtlarda bulunabilir ve bilgisayar ile arasında olan iletişim sırasında bilgiler bu alana depolanarak hız kazanmak amaçlanmıştır.

 

Page Cache

Disk ile ram arasında page için yapılan işlemlerin tutulduğu hafıza bölmesidir, böylelikle çok erişilen page’ler bu bölmede tutularak hızlanma hedeflenmiştir.

 

Swap Cache

Sadece kirlenmiş (dirty) pagelerin durduğu cache tipidir.

 

Hardware Caches

One commonly implemented hardware cache is in the processor; a cache of Page Table Entries. In this case, the processor does not always read the page table directly but instead caches translations for pages as it needs them. These are the Translation Look-aside Buffers and contain cached copies of the page table entries from one or more processes in the system.

When the reference to the virtual address is made, the processor will attempt to find a matching TLB entry. If it finds one, it can directly translate the virtual address into a physical one and perform the correct operation on the data. If the processor cannot find a matching TLB entry then it must get the operating system to help. It does this by signalling the operating system that a TLB miss has occurred. A system specific mechanism is used to deliver that exception to the operating system code that can fix things up. The operating system generates a new TLB entry for the address mapping. When the exception has been cleared, the processor will make another attempt to translate the virtual address. This time it will work because there is now a valid entry in the TLB for that address.