Günümüzde depolama aygıtlarının ardındaki teknoloji oldukça gelişmiş olmasına karşın aklımızdan çıkartmamamız gereken bir nokta var: Yeterli ram diye bir şey yoktur :) Bilgisayarlarımızda işlemcilerimizin kullanımına ayrılmış 32 ya da 64 mb ram vardır. Fakat bu miktar çoğu kullanıcının aynı anda çalıştırmak istediği programlar için yeterli değildir. Bu son derece fiziksel problemi çözmek için de bir yol elbette var, o da sanal bellek uygulaması. Bu ayki yazımızda sanal bellek kavramını ve işleyiş mekanizmasını anlatacağız.

SANAL BELLEK TANIMI

Sanal bellek, çalışan bir programa fiziksel belleğin boyutundan bağımsız ve sürekli bir bellek alanı sağlanıyormuş izlenimini veren bilgisayar tekniğidir. Sürekli sanılan bu hafıza, genelde fiziksel olarak ram üzerindeki farklı hafıza bloklarına dağılmış durumdadır ve hatta kimi zaman da aktif olmayan program kısımları disk üzerine taşınmış haldedir, ram üzerinde bile değildir. Sanal bellek tekniğinde, bilgisayarımız ram üzerinde yeni kullanılmamış, yani aktif olmayan alanlara bakar ve o kısımları hard diske kopyalar. Böylece yeni programımız için ya da programımızın o anda çalışması gereken kısımları için ram üzerinde yer açılmış olur. Bu, sanal belleğin temel çalışma prensibidir ve sanki sonsuz bir rame sahipmişiz gibi hissedilir.

SANAL BELLEĞİN GERÇEKLEŞTİRİMİ

Başlangıç olarak sanal adres alanı kavramından bahsedelim. Eğer bir program tüm hafızaya ihtiyaç duyuyorsa, o programın adres alanına sanal adres alanı denir. Buradaki sanal kelimesi, eşsiz olarak adreslenebilen hafıza alanları anlamına gelir ve herhangi bir anda o uygulamaya adanmış fiziksel hafıza demek değildir. Bunu bir örnekle açıklayalım. Elimizde teorik bir uygulama olsun ve makine kodu için 10000 bayt hafıza gerekli olsun. Aynı zamanda 5000 bayt da veri depolama ve girdi/çıktı için gerekli olsun. Bu durumda bizim sanal adres alanımız 15000 bayt olmuş olur. Buradaki teorik uygulamamızda 15000 bayta aynı anda ihtiyacımız yoktur. Belirli bir andaki hafıza ihtiyacı bundan çok daha azdır çünkü uygulamamızın işlem basamakları sıralı bir yapıdadır. Önce biri, sonra bir başkası yapılır. Bu sebeple ramde uygulamamızın o anda ihtiyacımız olan kısmı tutulur. Ve aktif olmayan kısımlar da hard disk üzerine yazılır. Bu ilişki önbellek ile ram arasındaki ilişkiye benzer. Az miktarda hızlı ulaşılabilen depolama ve çok miktarda yavaş ulaşılabilen depolama.

Peki hangi kısımların ne zamanlarda hangi depolama aygıtında olması gerektiğine nasıl karar veriliyor? Bunun cevabı ise işletim sistemimizin sağladığı bir yazılım ve bilgisayarımızın yapısındaki özel bir donanım olan hafıza yönetim biriminin ortak çalışması oluyor. Sanal bellek kullanıldığında ya da işlemci tarafından ram üzerinde bir yerde okuma veya yazma işlemi yapıldığında, hafıza yönetim birimi (MMU) dediğimiz donanım sanal bellek alanının fiziksel hafızadaki karşılığını bulur. Bunu da işletim sisteminin tuttuğu çeviri tabloları sayesinde yapar. Sanal bellek sistemleri, programları sayfa adını verdiğimiz hafıza öbekleri halinde tutmaktadır. Eğer gerekli olan program sayfasının fiziksel hafızada o anda karşılığı yoksa sayfalama hatası dediğimiz durum gerçekleşir. Bu durumda ise işletim sisteminin devreye girmesi gerekir. İhtiyaç olunan kısım disk üzerine yazılı olabilir, takas dosyası denilen bir dosyada olabilir ya da takas bölümü denilen ayrı bir hard disk bölümünde olabilir. İşletim sistemimiz ramde aktif olmayan bölgeler üzerine, gerekli olan kısımları bu yerlerden bulup yazar. Çeviri tabloları da buna uygun olarak yenilenir. Biz de programımız kesintisiz çalışıyormuş sanarız. Fakat, sayfalama hatası sonrası, takas dediğimiz bu durum çok sık gerçekleşirse programımızın performansı düşer.

Sanal Bellekle İlgili Linux Notları:

Linux'ta bütün bir hard disk bölümünü (partition), takas alanı olarak ayırabiliriz. Bunun performansı, takas dosyasınınkinden daha iyi olacaktır. Çünkü programımızın ramde olmayan kısımlarının farklı farklı yerlere yazılıp performansının düşmesi durumundan kurtulmuş oluruz. Buna ek olarak takas alanını hard diskin başında oluşturmak da tavsiye edilebilir. Bunun sebebi ise transfer hızının hard diskin sonuna göre başında daha yüksek olmasıdır. Takas alanı mkswap dosya_adı/aygıt komutuyla oluşturulabilir. swapon ve swapoff komutlarıyla da burayı kullanıp kullanmama durumumuzu ayarlayabiliriz.

Daha sonraki sayılarda görüşmek üzere..

Referanslar: