Hafıza Yönetimi (Memory Management)
Yazan : Şadi Evren ŞEKER
Bir işletim sisteminin (operating system) birden fazla işlem çalıştırması durumunda (multi process) bu işlemlerin hafızayı nasıl paylaşacakları ve hafızanın nasıl daha verimli kullanıcağı hafıza yönetiminin konusudur.
Şayet işletim sisteminde tek işlem (process) çalışıyorsa bu çözülmesi çok daha kolay bir durumdur. İşlemler derlendikten (compile) sonra hafızaya yükleyici (loader) ismi verilen bir programla yüklenir ve işlemci (CPU) bu işlemi çalıştırmaya başlar. İşlem bitene kadar bilgisayar bu işlemin kontrolünde olur ve ancak işlem tamamen bittikten sonra hafızadan kaldırılarak yerine yenisi konulabilir ve farklı bir işlem çalıştırılabilir.
Ancak bir işletim sistemi birden fazla işlemi çalıştırmak gerekiyorsa burada bir iki problem ortaya çıkar.
İşlemlerin hafıza adresleri: Çalışan işlemler programlanır veya derlenirken hafızayla ilgili işlemleri gereği adres bilgileri içerirler. Örneğin bir program hafızadaki sabit bir adrese (sözgelimi 150 numaralı adres olsun) erişmek isteyebilir.
Bilindiği üzere hafızada aynı adrese sahip tek yer bulunmaktadır. Dolayısıyla örneğin 150 numaralı adrese erişme talebi tek bir yerdir oysaki programların adres erişme talepleri genelde yine programın farklı bir alanına erişmek içindir. Buradaki problem hafızada birden fazla işlemin yüklenmesi durumunda aynı adrese sadece bir işlemin yüklenecek olması ve her işlemin farklı adreslerde çalışacak olmasıdır. Dolayısıyla hafızadaki adresler hareketli olacak (dinamic, dynamic addressing) ve her işlem artık farklı bir adres aralığına yüklenecektir.
Örneğin yukarıdaki şeklin hafızayı (RAM) temsil ettiğini farz edelim. Bu resimde de görüldüğü üzere iki işlem aynı anda hafızya yüklenmiş bu işlemlerden ilki 100-400 aralığında yüklü ikincisi ise 500-800 aralığında yüklüdür.
Örneğimize geri dönecek olursak 150 numaralı hafıza adresi 1. işlemin yüklü olduğu adrestir. 2. işlemin buraya erişmesi ise risklidir. Bunun çok basit iki temel sebebi vardır.
- Güvenlik ihlali olabilir. Yani örneğin bu adreste bir kullanıcının şifresi yazılı olabilir ve başka bir işlem buraya erişirse (ki bu başka bir işlem başka birisinin işlemi de olabilir) bu şifreyi ele geçirebilir
- çalışan işlemlerin birbirine müdahalesinin sonucu kestirilemez. Yani siz işletim sisteminde bir kelime işlem programı çalıştırdığınızı düşünün (örneğin word) herhangi birisi girip sizin wordde yazıklarınızı daha kaydetmeden ekranda yazılıyken değiştirebilir, sonuçlar her zaman bu örnek kadar masum da olmak zorunda değildir. Pek çok ihtimalde sistemin çökmesi veya kalıcı olarak zarar görmesi mümkündür.
İşte hafıza yönetimi kapsamında
- bir işlemin talep ettiği (demanding address) ile RAM’in gerçek adresi (fiziksel adres, physical address) arasındaki bağın kurulması (ki bu işlem için mantıksal adres (Logical address) ismi verilen bir yöntem kullanılmaktadır. )
- Aynı anda çalışan birden fazla programın hafızayı daha verimli kullanması için hafızada oluşan boşlukların (fragmentation) azaltılması.
- İşlemler arası haberleşme ve senkronizasyon ihtiyaçları giderilerek her işlemin kendi ardes alanında (own address space) çalışmasının garanti edilmesi
gibi problemler çözülmektedir. Bu problemlerin çözülmesi için sayfalama (Paging) ve kıtalama (bölütleme, segmentation) ismi verilen yöntemler kullanılmaktadır.
Daha fazla bilgi için hafıza yönetiminde güvenlik başlıklı yazıyı okuyabilirsiniz.
Çalışmanız için çok teşekkürler