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.
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.
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.
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.
Þ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.