Yazan : Şadi Evren ŞEKER
Bu yazının amacı, işletim sistemlerinde, özellikle de birden fazla işlemin çalıştığı ve aynı hafızayı paylaştığı çok işlemli (multiprocessed) sistemlerde, hafızadaki güvenlik çözümlerini açıklamaktır.
Birden fazla işlemcinin çalıştığı ortamlarda karşılaşılan en kritik hafıza problemi, bir işlemin diğer işlemlerin hafızada (RAM) tutulan bilgilerini okuması veya değiştirmesidir. Bir işlem (prcocess) tanım itibariyle kendi hafıza alanında çalışır. Dolayısıyla kendisine ayrılan yer dışında bulunan, işletim sisteminin temel bilgilerine (ki işletim sisteminin kendisi de bir işlemdir (process)) veya diğer programlara eriştiği anda bir güvenlik ihlali olur. Bu ihlal veri çalınması, veri değiştirilmesi veya sistemin bozulması olarak karşımıza çıkabilir. (İngilizcedeki security ve reliability kelimelerinin ikisi için de Türkçede kullanılan güvenlik, buradaki iki durumu da karşılıyor, yani hem verinin korunması anlamında security, hem de sistemin sağlıklı çalışması anlamında reliability)
Çit Koruması (Fence)
Hafızayı korumak için kullanılan en basit yöntemdir. İşletim sisteminin kendisini koruması için kullanılır. Bu yöntemde, işletim sistemi ile kullanıcı programları arasında bir çit varmış gibi kabul edilir ve çitin bir tarafındaki kullanıcı programlarının, diğer tarafa geçmesi engellenir.
Yukarıdaki şekilde örneğin 12022 adresinde bir çit bulunmaktadır. Bu durumda kullanıcı programları 12023 numaralı adresten başlamakta ve daha büyük değerlere sahip olmaktadır. İşletim sistemi, herhangi bir işlemin (process) daha düşük değerdeki bir adrese erişmesine izin vermemektedir.
Bu yaklaşımda tek amaç, işletim sisteminin kendisini, kullanıcı programlarından korumasıdır. Kullanıcı programları arasında bir güvenlikten bahsedilemez.
Taban Sınır Yazmaçları (Base Bound Registers)
Bu yaklaşımda, sistemde çalışan işlemler arasında güvenlik sağlanması amaçlanır. Buna göre sistemde bulunan bütün işlemlerin bir başlangıç (base) bir de sınır (bounds) değeri bulunur. Bu değerlerin dışına erişimleri yasaktır ve erişim talepleri, işletim sistemi tarafından engellenir.
Örneğin, yukarıdaki şekilde iki programın sistemde çalışıyor olduğunu kabul edelim. Program A’nın başlangıç değeri 16384 ve Program B’nin başlangıç değeri 24576 olarak verilmiş.
Programların her birisi için ayrı ayrı olmak üzere taban ve sınır değerleri belirlenmiştir. Örneğin yukarıdaki şekilde, Program A’nın taban ve sınır değerleri görülmektedir. Bu durumda Program A’nın belirtilen taban değerinden düşük ve belirtilen sınır değerinden yüksek adreslere erişimi engellenmiştir.
Ayrıca işletim sisteminde, kıtalama (segmentation) veya sayfalama (paging) kullanılması durumlarında, kullanılan yöntem, hafızadaki programın başlangıç ve bitiş değerlerini de tutmaktadır. Bu yönteme göre sistemde hafıza erişim politikası kullanılabilir.
Ayrıca hafıza üzerinde yapılan bazı işlemler için de güvenlikten bahsedilebilir.
İşlem Taşıma (Relocation)
Bir işlemin, hafızadaki bir konumdan farklı bir konuma taşınması işlemidir.
Yukarıdaki şekilde görüldüğü üzere, Program A, eski konumundan yeni konumuna taşınır. Taşıma işleminden sonra tasarıma bağlı olarak, programın adres erişimleri güncellenebilir veya yeni adrese göre kaydırma değeri eklenebilir.
Etiketleme (Tagging)
Hafızaya yüklü bir programın, kendisine tanınan alanların dışında bir yere erişip erişmediğini kontrol etmeye yarayan bir yöntemdir. Öncelikle programda bulunan komutlar aşağıdaki üç değerden birisine göre etiketlenir.
- Veri (Data)
- Gösterici (Pointer)
- Kontrol (Control)
Bu değerlere göre işaretlemenin ardından, ilgili adres değerleri kontrol edilir ve erişim haklarının olup olmadığı sınanır.
Yukarıdaki şekilde, programın her satırında ilgili işaretleme işlemleri yapılmıştır. Bu işaretleme işlemlerine göre erişilmek istenen hafıza alanı kontrol edilebilir.
hocam işletim sistemlerinde yaşlandırma(aging) nedir ne iş yapar açıklayabilir misiniz …ALLAH razı olsun engin bilgilerinizi bizimle paylaştığınız için
Aging basitçe kıtlık (starvation) ihtimaline karşı işletim sistemlerinde geliştirilen bir çözüm yöntemidir. Genelde bekleme sırasında (ready queue) bekleyen işlerin (process) hiçbir zaman sıra gelmemesi ihtimali bulunmaktadır (hep daha öncelikli bir işin bekliyor olması ve daha az öncelikli işlerin hep bir ümitle hiç çalıştırılmaması durumu). Bu duruma kıtlık (starvation) ismi verilir. Çözüm olarak belirli bir sürenin üzerinde bekleyen işlemler (process) öncelikleri arttırılır, örneğin işletim sisteminde 100 saniye bekleyip hiç çalıştırılmamış bir işlemin önceliği arttırılarak sırada beklemeye devam etmesi, yine sıra gelmezse belirli bir süre sonra yine önceliği arttırılması ve hiç sıra gelmediği sürece önceliğin arttırılarak en öncelikli işlem olana kadar devam etmesi (veya herhangi bir aşamada sıra gelirse çalıştırılması) olarak düşünebilirsiniz.