1->MMU'nun tam olarak görevi sanal bellek ile fiziksel bellek arasında dönüşüm yapmak mı?Mesela ben benim bir programım var bu program için bir sanal bellek oluşturuluyo ve ben de programda ADC den veriler okuyorum ve aslında burada okuduğum veriler gerçekte ADC register ının adresi değil ve bu noktada MMU devreye giriyo bu sanal adresi fiziksel adrese mi çeviriyo.Doğru mu biliyorum?
2->MMU'lu sistemlerde MMU her zaman kullanılır mı?Yani mmu'ya ihityaç duyulmama durumu var mı?Tabi işin için bir işletim sisteminin var olduğu durumlardan bahsediyorum.
3-> Mesela BeagleBone üzerinden konuşursam kart üzerinde harici olarak 256 mb lık ram var.Bu ram de artık işlemcinin belleğinin bir uzantısı mı oluyo.Yani fiziksel bellekten kastedilen şey bu harici Ram'i de kapsıyo mu?Yoksa sanal bellek bu ram üzerinde mi oluşturuluyo.
Biraz karışık anlattım gibi geldi bana ama kusuruma bakmayın...
Sanal bellek bildiğim kadarıyla programların bellekte aynı alanı kullandıklarında oluşan çakışmaları ortadan kaldırılmak için var.Yani iki farklı program çalışıyor ve ikisi de aynı adresi kullanmak isterse çakışma olacak ve bu durumda sistem kilitlenecek.Bunun önüne geçmek için var diye biliyorum.Yanlış biliyorsam düzeltin lütfen.
Kullanmadim ve detaylarini bilmiyorum. MMU unitesini dusununce asagidaki sorunu cozmesi gerekiyor.
Bizler MCU da tek program kosturan projeler gelistiriyoruz.
Ornegin asagidaki gibi cok basit bir dongu programini dusunun
Label: Goto Label
Bu programi derleyince derleyici Labeli atiyorum 0 adresi olarak tespit edildiyse
Goto 0 gibi bir kod uretilir.
Peki biz islemciye isletim sistemi gibi bir sey yazsaydik bunun da uzerinde iki program kostursaydik ne olurdu.
1. Program
Label Goto Label
2. Program
Label Goto Label
Derleyici bu programlari ayri ayri derlediginde
Label Adresleri gene sifir olarak tespit edilecektir.
Bu programlar roma yada rama atildiginda
adresleri farkli olmalidir. Aksi halde ustu uste ezilirler.
1. Program 0 adresine, 2. program da 100 adresine kopyalanmis olsun. (Buna isletim sistemi karar verecek)
1. program
0 Goto 0
2. program
100 goto 0 olur.
Burada 2. program 100 goto 100 olmaliydi. Ancak derleyici Label adresini 0 hesaplamisti.
Iste burda MMU bu soruna cozum getirir.
MMU unitesi bir butun olan rami parcali kullanmaya izin verir ve tanimlanan ram araligi 0 adresinden baslamis gibi davrandirir.
Boylece programi sanki tek islemci icin yazmisiz gibi adresleme hatasi olusmaz. Programi ramda hangi bolgeye tasirsaniz tasiyin dogru olarak calisacaktir.
CPU 0 adresine git dediginde aslinda romda 100 adresine gidirilir.
Aslında her program (process) kendini cpu nun ilk göz ağırısı sanar, tüm adreslerin onun olduğunu düşünür halbuki bilmiyordurki MMU arkasından ne işler çeviriyor :)
MMU hangi programa hangi fiziksel adresin atandığını hatırlamak için Translation lookaside buffer denilen (http://en.wikipedia.org/wiki/Translation_lookaside_buffer) bir tablo kullanır.
Yani bu olayların hepsi ram üzerinde gerçekleşiyo.Peki burdaki ram den kastedilen şey sadece mcu nun kendi ram'i mi yoksa harici olarak bağlanan ramler de buna dahil mi?
Alıntı yapılan: yamak - 25 Temmuz 2013, 13:36:17
Yani bu olayların hepsi ram üzerinde gerçekleşiyo.Peki burdaki ram den kastedilen şey sadece mcu nun kendi ram'i mi yoksa harici olarak bağlanan ramler de buna dahil mi?
MMU olan sistemler ucu mu yoksa upu (micro processor unit) mu?upu içerisinde ram var mı?
Alıntı yapılan: yldzelektronik - 25 Temmuz 2013, 13:50:13
MMU olan sistemler ucu mu yoksa upu (micro processor unit) mu?upu içerisinde ram var mı?
Hocam ne demek istediğinizi anlamadım
Alıntı yapılan: yamak - 25 Temmuz 2013, 13:56:30
Hocam ne demek istediğinizi anlamadım
Yahu elli kere sildim tekrar yazdım nasıl ifade etsem kendimi diye :D
Alıntı yapılan: yamak
Yani bu olayların hepsi ram üzerinde gerçekleşiyo.Peki burdaki ram den kastedilen şey sadece mcu nun kendi ram'i mi yoksa harici olarak bağlanan ramler de buna dahil mi?
Ben buradan şöyle söylediğini anladım;
Mikrodenetleyici dediğimiz vatandaş mmu yapısını barındırır.O yüzden anlatılan ramin mcunun kendi rami mi bağlanan harici ram mi olduğunu anlamadın.Ki buradan mmunun mcularda da olduğu gibi bir intibaya kapıldım.Ancak ben mmu yu sadece mikroişlemcilerde var zannediyordum.Ayrıca eğer bu yapı sadece mikroişlemcilerde olursa burada sadece bir tek ramdan bahsedilebilir o da veri yoluna bağlanan harici ram.Çünkü mikroişlemci kendi içinde ram bulundurmaz.Ben yanlış mı biliyorum?
Mikroişlemci ve denetleyici arasındaki farklılıklara dair bir yazı; http://www.elektrikport.com/teknik-kutuphane/mikroislemci-ve-mikrodenetleyici-arasndaki-farklar-elektrikport-akademi/8139#ad-image-0 (http://www.elektrikport.com/teknik-kutuphane/mikroislemci-ve-mikrodenetleyici-arasndaki-farklar-elektrikport-akademi/8139#ad-image-0)
Hocam mesela AM3359 cortex-A8 cpu kullanan bi mcu olmuyo mu?Cortex-A8'de de MMU var.
Siyah kutucuğa aldıklarım ilk gözüme çarpanlar.
(http://img29.imageshack.us/img29/6981/g9ts.jpg)
Bir de hatırladığım kadarıyla arm a serisi coreları uygulama serisi olarak üretmiş.Yani bazı özel işler için.Onlar mculara uygun değil.Mcu için uygun olan core m serisi diye biliyorum.Daha önce kendi sayfasında benzeri bir şey okuduğumu hatırlıyorum ancak sayfanın şimdiki hali böyle belkide başka bir yerde okudum hatırlamıyorum;
http://www.arm.com/products/processors/index.php (http://www.arm.com/products/processors/index.php)
Bu söylediklerim hatalı olabilir.Ben daha evvel okuduğum yazılardan hatırladıklarımı aktarıyorum.Doğruluğunu teyit edin lütfen.
Ekleme:
https://www.google.com.tr/search?q=memory+management+unit+tutorial&oq=memory+management+unit&aqs=chrome.3.69i57j69i60l2j0l2j69i60.16055j0&sourceid=chrome&ie=UTF-8 (https://www.google.com.tr/search?q=memory+management+unit+tutorial&oq=memory+management+unit&aqs=chrome.3.69i57j69i60l2j0l2j69i60.16055j0&sourceid=chrome&ie=UTF-8)
İlk sıradaki dökümanda bir şeyler var.
https://www.google.com.tr/search?q=memory+management+unit+tutorial&oq=memory+management+unit&aqs=chrome.3.69i57j69i60l2j0l2j69i60.16055j0&sourceid=chrome&ie=UTF-8#gs_rn=20&gs_ri=psy-ab&tok=te3CrMNIrOgb-jGroqX4jw&pq=memory%20management%20unit%20tutorial&cp=3&gs_id=c&xhr=t&q=mmu+nedir&es_nrs=true&pf=p&sclient=psy-ab&oq=mmu&gs_l=&pbx=1&bav=on.2,or.r_cp.r_qf.&bvm=bv.49784469,d.Yms&fp=38bc2140b79deff5&biw=1366&bih=683 (https://www.google.com.tr/search?q=memory+management+unit+tutorial&oq=memory+management+unit&aqs=chrome.3.69i57j69i60l2j0l2j69i60.16055j0&sourceid=chrome&ie=UTF-8#gs_rn=20&gs_ri=psy-ab&tok=te3CrMNIrOgb-jGroqX4jw&pq=memory%20management%20unit%20tutorial&cp=3&gs_id=c&xhr=t&q=mmu+nedir&es_nrs=true&pf=p&sclient=psy-ab&oq=mmu&gs_l=&pbx=1&bav=on.2,or.r_cp.r_qf.&bvm=bv.49784469,d.Yms&fp=38bc2140b79deff5&biw=1366&bih=683)
İşletim sistemlerine giriş isimli dökümanda türkçe güzel şeyler var gibi.
MMU = Memory Mangment Unit
MPU = Memory Protection Unit
Cortex M = Microcontroller için
Cortex A = Aplication (uygulama) için OS vb koşturmak için
Cortex R = Real Time işlemler için
Alıntı yapılan: MC_Skywalker - 25 Temmuz 2013, 16:00:38
...
MPU = Memory Protection Unit
...
Ben o detayı fark edememişim.
@yldzelektronik
Hocam MCU tabiri yanlış olmuş olabilir.Arm Cortex-A8 mimarili işlemci desem daha doğru olurdu.
Z nin anlattıklarına ek olara, MMU aynı zamanda yetkilendirmede yapar. Bazı RAM alanlarındaki kodların çalışması sırasında başka bir ram alanına erişmek istendiğinde MMU izni varsa erişir, yoksa da hata döndürür(Windows taki eski mavi ekranlar)
Bu niye gereklidir dersek, örneğin bir işletim sisteminde seriporta erişmeye çalışan bir programımız olsun. Bu program gelen verileri veya yollamak istediği verileri direkt seriportun adresinde değilde , işletim sistemine yazılımsal bir sinyal ile haber verir-yollar(Sistem Çağrıları) . İşletim sistemide bu işi düzenleyerek seriporta kendisi erişir ve üst katmandaki programa aracılık eder veri akışını yapar.