| Telif Hakları | Cem Yılmaz | Erotik Hikayeler | MP3 İndir Sanal Bellek Kullanımı | Açık bilgi paylsım alanı

Sanal Bellek Kullanımı

Aslında bir exe programının %10-20'lik bir kısmı çok fazla çalıştırılmaktadır. Programın
büyük kısmı belki yalnızca bir kez işlem gören ya da hiç işlem görmeyen parçalara sahiptir.
Programın yalnızca bir kısmının RAM'e yüklenerek çalıştırıldığı bir sistemde program kod ya da
data bakımından RAM'de olmayan bir bölgeyi kullanmak istediğinde ne olacaktır? Bu durumda
programın RAM'de olan bir kısmı diske çalıştırılmak üzere gereksinim duyulan diskteki bölümü
ise RAM'e alınır ve çalışma kesintisiz olarak devam ettirilir. Bu işleme yer değiştirme(swap)
işlemi denir. Yer değiştirme miktarı toplam RAM büyüklüğüyle doğrudan ilişkilidir. Ancak fiyat
bakımından bir optimum noktası vardır. Programın RAM'de olmayan parçası diskten RAM'e
yüklenirken RAM'deki hangi parçasının tekrar diske yazılacağı işletim sisteminin yaptığı bir
istatisktik sonucunda belirlenir. Programın sayfa denilen 4 K'lık bölümlerine her erişildiğinde
sayaç bir arttırılır. Böylece programın en az işlem gören sayfaları tespit edilmiş olur. Programın
diskteki kısmının organizasyonu için çeşitli yöntemler kullanılmaktadır. Örneğin bazı sistemler
her program için ayrı bir swap dosyası oluştururlar, bazı sistemler bütün programların swap
dosyalarını tek bir dosya biçiminde tutarlar. Bazı sistemler ise exe dosyanın kendisiyle birlikte
başka bir dosyayı da swap amaçlı kullanırlar.


Korumalı Modda Doğrusal ve Fiziksel Adresler
Korumalı modda bir programın fiziksel RAM'de ardışıl olarak yüklenmesi zorunlu
değildir. Programın 4'er K'lık parçalarına sayfa denir. Fiziksel RAM de 4'er K'lık sayfalara
ayrılmıştır. Böylece programın sayfaları RAM'deki rastgele sayfalarda bulunabilir. Örneğin 10

sayfalık bir RAM söz konusu olsun. 4 sayfalık bir program RAM'e şöyle yerleşebilir:
Programın hangi parçalarının hangi RAM sayfalarında bulunduğu bir tabloda tutulur. Bu tabloya
sayfa tablosu denir.

Sayfalama İşlemi ve Sayfa Tabloları Korumalı modda bir adres bilgisi 32 bit uzunluğundadır. 32 bit uzunluğundaki bu adres
bilgisine doğrusal adres denir. Windows ve UNIX sistemlerinde programcının kullanıdğı bütün
adresler doğrusal adreslerdir. Örneğin C'de bir değişkenin adresini aldığımızda biz gerçekte
doğrusal adresini elde ederiz. Doğrusal adresler işlemci tarafından RAM'deki gerçek fiziksel
adreslere dönüştürülür. Programcı programını sanki program RAM'e ardışıl bir biçimde
yerleşecekmiş gibi doğrusal adresler kullanarak yazar. Örneğin bir dizinin elemanları doğrusal
adresler dikkate alındığında ardışıldır. Ancak fiziksel RAM'de ardışıl olmayabilir. Doğrusal bir
adres 20 ve 12 bitlik iki kısıma ayrılır. Doğrusal adresin yüksek anlamlı 20 biti sayfa tablosu
denilen bir tablosa indeks belirtir. Sayfa tablosu şuna benzer bir biçimdedir:



Mikro işlemci adresin yüksek anlamlı 20 bitini alır ve sayfa tablosuna başvurarak gerçekte kaç
numaralı fiziksel sayfayla ilişkili olduğunu hesap eder. Örneğin doğrusal adresin yüksek anlamlı
20 biti 3 olsun, bu durumda tablodan çekilen değeer 89'dur. Fiziksel RAM'de 89 * 4096 adresini
belirtir. Düşük anlamlı 12 bit ise geçek fiziksel sayfada bir ofset belirtmektedir. Bu durumda
mikro işlemci doğrusal adresi fiziksel adrese şöyle dönüştürür:
1. Yüksek anlamlı 20 bit hesaplanır. Sayfa tablosuna index yapılarak fiziksel sayfa numarası
çekilir.
2. Fiziksel sayfa numarası 4096 ile çarpılır. Sayfanın fiziksel RAM'deki başlangıç adresi bulunur
ve bu değere doğrusal adresin düşük anlamlı 12 biti eklenir. Sayfa tablosu işletim sistemi
tarafından task switch işlemiyle birlikte yeni değerlerle doldurulur. Yani Windows'da örneğin 20
ms'lik quanta süresi dolup diğer bir proses çalıştırılacağı zaman önce Windows sayfa tablosunu
yeni proses için kurar. Sayfa tablosunun her proseseler arası geçişte yeniden düzenlenmesi
önemli bir performans kaybına yol açmamaktadır. Yani her prosesin ayrı bir sayfa tablosu
vardsır. Task switch oluştuğunda önce sayfa tablosu yeni değerler için düzenlenir, sonra proses
çalıştırılır. Her prosesin sayfa tablosu değerleri işletim sistemi tarafından program yüklenirken
belirlenir.
Bu sistemin Win32 programlama açısından iki önemli sonucu vardır:
1. İki farklı proseste aynı iki doğrusal adres aslında fiziksel RAM'de aynı adrese karşılık
gelmeyebilir. Çünkü prosesler arası geçiş sırasında sayfa tablosu değerleri değiştirildiği için
adresin yüksek anlamlı 20 bit değerlerine karşın farklı fiziksel sayfalar eşlenmektedir.
2. Bu sistem sayesinde proseslerin fiziksel bellek alanları tam olarak birbirlerinden ayrılabilir.
Böylece bir programda bir gösterici hatası yapıldığında diğer programların RAM'deki kısımlarını
etkilemez.
Şimdi işletim sisteminin sayfa tablosunu nasıl kurduğuna gelelim. Örneğin 10 * 4096 byte
uzunluğunda bir dizi açılmış olsun. Bir karakter dizisi olabilir. Dizinin 0-4095 numaralı byte'ları
fiziksel RAM'de süreklidir(Dizinin bir fiziksel sayfanın başından itibaren yerleştirildiğini
düşünelim). Dizinin 4096'ıncı elemanına erişildiğinde bu eleman 4095'inci elemanından farklı bir
fiziksel sayfadadır. Yani aslında 4095'inci elemanıyla 4096'ıncı elemanının fiziksel adresleri
ardışıl değildir. Tabii doğrusal adresleri ardışıldır.
İşletim sistemi sayfa tablosunu kurar, işlemci otomatik olarak bu sayfa tablosuna bakarak
çalışır. Sonuç olarak programcı hiç bu dönüşümü bilmese de bundan olumsuz yönde etkilenmez.
Tabii bazı sistem programlama faaliyetleri ancak bu çalışma mekanizmasının bilinmesiyle
anlaşılabilir.

Sayfalama ve Sanal Bellek İlişkisi

Sanal bellek sisteminde programın bütün hepsi fiziksel RAM'e yerleştirilmediği için sayfa
tablosunun yalnızca programın RAM'e yerleştirildiği kadar kısmı doldurulur. Sayfa tablosunun
diğer elemanları boş bırakılır. Tabii bu durumda programın çalışması kod ve data bakımından
sayfa tablosunda karşılığı bulunmayan bir doğrusal adrese gelebilir. Bu durumda işlemci "page
fault" denilen özel bir içsel kesme oluşturur. Bu kesme işletim sistemi tarafından hook edilmiştir.
İşletim sistemi önce habngi doğrusal adresten dolayı böyle bir hatanın çıktığını tespit eder. Sonra
bu adresin swap dosyasındaki yerini bulur. Programın o sayfasını fiziksel RAM'e yükler.
Yüklediği RAM'in fiziksel sayfa numarasını sayfa tablosuna yazar. Artık ilgili adres fiziksel
RAM'dedir, çalışma devam edebilir. Son olarak programcı gösterici hatası yaparak öyle bir
doğrusal adrese erişmiştir ki bu adresin sayfa tablosunda karşılığı olmadığı gibi swap dosyasında
da karşılığı yoktur(Yani commit edilmemiştir). Bu durumda işletim sistemi erişimin geçersiz
3
olduğunu bildirir ve prosesi sonlandırır. Tabii Windows'da malloc ile örneğin 100MB yer tahsis
edilebilir. Bu durumda işletim sistemi bu alan için swap dosyasında yer ayırır(Yani commit eder).
Şimdi bu alan kullanılmaya çalışıldığında kesme oluşur, ancak o adresin swap alanında karşılığı
olduğu için swap işlemi yapılır.

Handle Kavramı

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe
ilişkin bilgileri depolayacağı bir alan yaratması gerekir. Bu alan dinamik olarak yaratılır. Alanın
yaratıldığı bölge Windows'un kendi içerisindeki heap bölgesidir. Genellikle ismi CreateXXXX
biçiminde olan bir fonksiyon ile bu alan yaratılır. Bu tür yaratıcı fonksiyonlar oluşturdukları veri
yapısına ilişkin bir değeri handle değeri olarak verirler. Bu değer konu ile ilgili işlem yapan diğer
fonksiyonlara parametre olarak geçirilir. Tabii çalışma bittikten sonra tahsis edilen bu alanın
uygun bir fonksiyonla geri bırakılması gerekir. Bu alanın geri bırakılması unutulmuşsa problem
ortaya çıkmaz. Çünkü Windows proses sonlandığında o prosesin açmış olduğu handle alanlarını
sisteme otomatik olarak iade eder. Handle yaratan CreateXXX isimli bir fonksiyon çağırıldığında
verilen handle değerinin türü H ile başlayan türlerdendir. Örneğin:
HINSTANCE
HICON
HWND
Bu türlerin hepsi aslında void * biçimindedir. Yani örneğin:
void *hWnd;
hWnd = CreateWindow(...);
işleminde herhangi bir hata söz konusu olmaz. Fonksiyonların geri verdiği handle değerleri tahsis
edilmiş olan alana erişmek için kulanılır fakat doğrudan o alanı gösteren bir adres değildir. Yani
handle değeri olarak veriln adres ile gerçek alana ulaşabilmek için bazı işlemler gerekebilir.
CreateXXX fonksiyonlarıyla tahsis edilen dinamik alanlara Windows sistem programlama
terminolojisinde nesne(object) denir(Buradaki nesnenin nesne yönelimkli programlamadaki
nesneyle alakası yoktur). Windows'da sistem nesneleri 3 grup halinde incelenebilir:
1. KERNEL
2. USER
3. GDI

Share this article :

Yorum Gönder

 
Gora İzle | İletişim | Sitemap
Destek : Cem Yılmaz Filmleri | Telif VB... Telif Hakkı © 2013. cem yılmaz filmleri - Tüm Hakkları Saklıdır.. Sitemizde yer alan tüm videolar, kaynak kodları ile video paylaşım sitelerinden alınmaktadır. Telif hakları sorumluluğu bu sitelere aittir videoların hiç biri sunucularımızda yüklü değildir. Hak sahiplerinin iletişim adresimizden talep etmesi halinde UYAR-KALDIR yöntemi işletilerek, istenen içerik iki iş günü içerisinde siteden kaldırılır.