[Linux] Re: MAIL-SEMINER: SWAPPING II

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Sat 06 Jul 2002 - 21:45:20 EEST


Selamlar..

MMU, mevzusunu ben biraz acayim. Cok basit:

Memory Management Unit. Yani, bellek yonetim unitesi. Neden uzerine gidiyorum ? MultiTasking sistemlerin olmazsa olmaz bilesenidir de ondan.

Bunu anlamak icin once bilgisayarin nasil calistigini anlamak gerekiyor. Sizin isleyeceginiz bilgilere DATA diyoruz. Adiniz, internetten gelen paket, paketteki resim vs. hepsi birer data. Bunlar, bellekte bulunur. Diger yandan bunlarin islenmesi mevzusu vardir. Yani resmi olusturan verinin ekranda nasil goruneceginin belirlenmesi, bellekteki sayilarin toplanmasi vs. bunlara komutlar deriz. Bunlar bellekte TEXT olarak adlandirilirlar. TEXT olarak tutulan bilgiler, CPU'nun ne zaman hangi islemi yapacagini belirtirler. DATA olan bilgiler ise, islenecek verilerdir.

Bunlarin CPU tarafindan islenebilmesi icin, yani TEXT dedigimiz komutlarin DATA'yi isleyebilmesi icin her ikisininde Bellegimizde olmasi gerekir. CPU bellege cok iyi planlanmis bir sehir gibi bakar. Bu planda evlerin herbirinde bir DATA veya bir TEXT oturmaktadir. CPU bir evden TEXT'i alir, komut olarak ne anlama geldigini bulur. Sonra onun isleyecegi DATA'yi oturdugu evden alir, isler ve konulmasi gereken eve koyar. Iste hangi evde kimin oturdugu, verinin hangi eve konuldugu bilinmelidir. Bunun icin postacilarin mektubun uzerindeki adresleri kullandigi gibi bu evciklerin adresleri kullanilir. Mektuptaki sokak vs. olmaz burada. Sadece kapi numaralari vardir. Ilk kapi 0, son kapi 4GB'a denkgelen 4 Milyarlik sayi. Bazi kapi numaralarina isabet eden degerler bos olabilir, yani buralarda ev yoktur. x86 mimarisinde, TEXT icerikli evler ve DATA icerikli evler icice gecmistir. Yani herhangi bir ev, hem TEXT, hem DATA olabilir. Baska bazi mimarilerde TEXT'ler fiziksel olarak farkli tellerle erisilen, farkli chiplerl
e tutulur.

Iste biz bu evlerin topuna birden RAM diyoruz. CPU'nun erisebilecegi maksimum ev sayisini gosteren degere ise Adres araligi diyoruz. Bir 386, 4GB adres araligina sahiptir. Yani siz 4 Milyar tane TEXT veya VERI evine sahip olabilirsiniz. Eger 256MB RAM'iniz varsa, 0 ... 250 milyon kusur tane mevcut ev var demek oluyor. Bunlar ise x86 mimarisinde, 0 numarali adresten baslayarak, 640 bininciye kadar bir yerlesiyorlar. Sonra 1 milyonuncu adresten sonra bir daha yerlesiyorlar. Aradaki bosluk, resmen bosluk. Buraya, BIOS, Ekran karti BIOS'u filan giriyor. Mesela bir yere kadar geliyor, orada ekran kartinin RAM'i basliyor. O bitince tekrar RAM..

Ama, RAM chipleri boyle degil. Onlarin adresleri 0'dan baslayip gittigi yere kadar gidiyor. Bu noktada ya araya isabet eden RAM bolgesini yok farzedeceksiniz, ya da biraz kulaginizi tersten gostereceksiniz, takla filan atacaksiniz..

Ne yapiliyor ? Bellek fiziksel olarak tek bir parca iken, ona uzanan adresi gosteren telleri CPU'dan ayirip ozel bir devreye bagliyorsunuz. Bu devre belirttigimiz araliklara yapilan istekleri ROM'lara, ekran kartina vs. yolluyor. Diyelimki 2 MB bellek olunca, 0-640K araligindaki istekleri RAM'in 0-640 adreslerine, 640K-1M Arasindaki istekleri ROM'lara vs.ye, 1M-2640K arasindaki istekleri RAM'in 640K-2M arasindaki adreslere yonlendiriyor. Boylece siz CPU'dan ziyade sistemin (PC/XT/AT/386..) sundugu bellek haritasini gercek bellege yonlendiriyorsunuz. Iste MMU'nun temel fonksiyonu bu. CPU'nun istedigi 1M-2640K arasindaki bellek bolgesini RAM uzerindeki dogru adreslere cevirmek.. En temel ve baslangic gayesi olarak, MMU'nun fonksiyonu bu.

Diger yandan, multitasking yapilirken, bir program 5K bellek kullanir, onu serbest birakir, bellekteki bos alanlar parca parca olur. Diyelimki toplam bos bellek alani, 1 MB olmasina ragmen, en buyuk bos bellek blogu 100K olabilir. Bu durumda tek bir parca olarak, 250K bellek isterseniz, sistem size bunu saglayamayacaktir. TSR'ler ile ugrasirken DOS'ta bu soruna fazlasiyla toslardiniz. Burada MMU'ya bir gorev daha verilir. MMU yapilan istekleri oyle haritalarki, bellekteki bos bloklari, tek bir buyuk blok olarak gosterebilir. Diyelimki, 120K adresinde bos 10K, 560K adresinde bos 20K olsun. MMU, 130K'dan sonra gelen istekleri RAM'in 560K adresine yollayacak sekilde ayarlanabilir.

Gorulecegi uzere, MMU'nun gorevi, bellek adreslerini orijinal RAM uzerindeki dogru yere yonlendirmekten ibaret. Fakat UNIX ve OS/2 gibi cok gorevli sistemlerde bir diger sorunda sudur. Diyelimki, bir bellek bolgesinde A programinin bilgileri var. B programi bu bilgilerin uzerine yazmak isterse ne olur ? Ne olacak, isler karisir. A da yazdiginiz dokumanin uzerine B'nin yazdigi resme ait sacma sapan karakterler geliverir. Iste bunu onlemek uzere, korumali mod gelistirilmistir. MMU bu asamada gene kritik bir fonksiyon ustlenir. Bellekteki bilgilerin kime ait oldugunun kaydini tutar. A programinin calistigi (TEXT Bolgesi) adreslerden, B programinin herhangi bir yerine bilgi yazilmasini engeller. Bazen programlar sasirir, TEXT, yani kod uzerine veri (DATA) yazmak, veya aslinda DATA olan bir bellek bolgesini TEXT miscesine komut olarak kullanmak isteyebilir. MMU bu isede karisir. Bellek bolgelerini, yazilabilir, okunabilir, ve kod yurutulebilir olarak isaretler. Boylece, yurutulebilir olmayan bir bellek adresinin
calistirilmasi, yanlislikla TEXT uzerine yazilmasi engellenir. Peki ne yapilir ? Islemciye bir kesme gonderilir. BU kesme islemciye hatali bir bellek erisimi oldugunu gosterir ve islemci kesme tablosundan bu durumda calisacak kodu bulur. Mesela Windows'ta bu kod size bir mavi ekran cikarir. Her zaman durum bu kadar vahim degildir. Ornegin Linux'ta bu sayede calisan bi programin tek bir kopyasi birden fazla program gibi calisabilir. Diyelimki orijinal porgram 15K adresinde olsun. 42K adresinden kod calistirmak istenirse, MMU bir kesme uretir, OS programi MMU'yu 42K'yi 15K'ya yonlendirecek sekilde ayarlayip islemi devam ettirir. Laf aramizda, Windows'ta ayni isleri yapar..

SWAP ile alakali olan konu ise sudur. Eger bir program mevcut olmayan bir adrese erismek (yaz/oku farketmez) isterse, yani fiziksel RAM'in disina, MMU bir hata kesmesi uretir gene. OS, eger bos bellek varsa bunu MMU'ya set eder, program calismasina devam eder. Bos bellek yoksa, SWAP-OUT dedigimiz olay gerceklesir. Yani bellegin bir bolumu SWAP'a atilir. MMU bosalan yere set edilir, program gene calismaya devam eder. Diger yandan, program daha once SWAP'a konmus ve fiziksel olarak bosalmis (RAM'de mevcut olmayan) bir adrese erismek isterse, bu defada SWAP-IN gerceklesir, bellekteki bir alana, SWAP'taki veri konur, MMU gene set edilir ve islem devam eder.

Bu cok kaba cok yalin bir anlatim gerci. Ornegin SWAP-IN icin once biraz bellek bosaltilmasi (SWAP-OUT) gerekebilir vs. vs. Detaylarini SEMINER Dizisinde Murat Bey guzelce anlatiyor. Bu sadece konuyu kavramaniz acisindan ustunkoru bir yaklasim.

MMU bazi sistemlerde CPU'dan farkli bir donanimdir. Yani chipsetin uzerinde yeralir. Motorola 68000 oyle idi diye hatirliyorum. 68020 ve 386'lar ise, MMU'yu CPU'nun icersine gomduler. Gerci 286'da bir MMU'ya sahipti. Ama,onun Segmented MMU'su, yukarda belirttigimiz islevleri yapabilecek kabiliyette degildi.

Saygi ve sevgiler..

On Sat, 06 Jul 2002 21:11:39 +0300
Onur Yalazi <onuryalazi@mersin.edu.tr> wrote:

>
> Murat Koc wrote:
>
> >Selam,
> >
> >
> selam,
> swapping 3 te kızıyosun ama daha 2 yi okumamıştım :)
>
> >Fakat
> >linux burada 8086 larda bu algoritmayi uygulamada eksik olmaktadir neden
> >
> İyi hoş güzel ama.. Linux i386 ve üzeri için değil mi? 8086la riçin bir
> implementasyonu mu var yoksa?
> Beni bu konuda aydınlatırsan sevinirim.
> Bir de PTE nedir? ayrıca şu diğer maillerde geçiyordu sanırım MMU?
> Şimdi de 3 e geçiyorum azcık geç oldu ama olsun..
-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.

Listeden çıkmak için: 'linux-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.