Bağlantı noktası eşlemeli ve hafıza eşlemeli erişim arasındaki fark?


17

Port haritalama ile hafıza haritalama arasındaki farkın ne olduğunu ve ikisinin de neyin başardığını açıklayabilir miyim? Neden haritalanmış bir liman var, yapıda bellek haritalarından farkı nedir ve birçok mimarinin ikisini de kullanmasının bir nedeni var mı? Ayrıca, bu anlamda bir "liman" nedir, çünkü liman farklı bağlamlarda farklı anlamlara gelebilir mi?

Örnek: Bağlantı noktası iletme, iletişim uç noktası olarak bağlantı noktası, "bağlantı noktası eşleme".

Diyelim ki OUT çıkışını 400h (kurgusal; sadece örneğin) (x86-64, vb.).

Hafızada değilse neye ya da nereye yazıyorum? Bir "liman" nasıl haritalandırılır ve bu anlamda nedir?



Yanıtlar:


21

Bellek eşlemeli G / Ç ve port eşlemeli G / Ç, G / Ç için iki tamamlayıcı yöntemdir.

Bellek Eşlemeli G / Ç

Bellek eşlemeli sistemlerde, G / Ç cihazına belleğin bir parçası gibi erişilir. Loadve Storekomutlar G / Ç aygıtlarından okumak ve yazmak için, tıpkı hafıza için kullanıldığı gibi yürütülür (port eşlemesinde G / Ç için özel komutlar vardır). Bu, G / Ç aygıtlarının bellekle aynı adres yolunu kullandığı anlamına gelir; bu, CPU'nun adres değerini temel alarak belleği veya G / Ç aygıtını gösterebileceği anlamına gelir . Bu yaklaşım, adres alanında izolasyon gerektirir: yani, G / Ç için ayrılan adreslerin fiziksel belleğe uygun olmaması gerekir.

Aşağıda basit, basit bir bilgisayar sisteminin bir görüntüsü . Durum çağdaş sistemlerde çok daha karmaşık.

görüntü tanımını buraya girin


Port Haritalı G / Ç

Wikipedia'ya göre

Port eşlemeli G / Ç, genellikle G / Ç işlemi gerçekleştirmek için özel bir CPU talimatı sınıfı kullanır. Bu, Intel mikroişlemcilerinde, IN ve OUT yönergeleriyle bulunur. Bu talimatlar bir G / Ç aygıtına bir ila dört bayt okuyabilir ve yazabilir (çıkış, çıkış, çıkış). G / Ç aygıtları, işlemcinin fiziksel arabiriminde fazladan bir "G / Ç" pimi ile yapılan genel bellekten veya G / Ç'ye adanmış bir veriyolunun tamamıyla ayrı bir adres alanına sahiptir. G / Ç için adres alanı ana bellek için olandan izole edildiğinden, buna bazen yalıtılmış G / Ç olarak da adlandırılır.


Avantaj ve dezavantajlara gelince: çevresel aygıtlar bellekten daha yavaş olduğundan, veri ve adres veriyollarının paylaşılması bellek erişimini yavaşlatabilir. Öte yandan, G / Ç basitliği ile bellek haritalı sistemler, CPU'nun daha az dahili mantık gerektirmesini sağlar ve bu, daha hızlı, daha ucuz, daha az güç tüketen CPU'ların uygulanmasına yardımcı olur. Mantık, RISC sistemlerine benzer: karmaşıklığı azaltmak, örneğin gömülü sistemler için oldukça kullanışlı olan daha özel ve sağlam bir sistem elde etmek.

Aksine (yine Wiki'den):

Port eşlemeli G / Ç komutları genellikle çok sınırlıdır; çoğu zaman yalnızca CPU kayıtları ve G / Ç portları arasında basit yükleme ve saklama işlemleri sağlar; Talimatlar: portu bir CPU register'a oku, sabiti CPU register'a ekle ve sonucu tekrar portuna yaz.

Daha fazla bilgi için bu wiki makalesini okumanızı şiddetle tavsiye ederim.


Sorularınızdan birini cevaplamak için:

Hafızada değilse neye ya da nereye yazıyorum?

Veri yolu üzerinden I / O arayüzünün kayıt defterlerine yazıyorsunuz, daha sonra (hazır olduğunda) verileri gerçek I / O cihazına gönderiyor. Aşağıda örnek bir G / Ç cihaz arayüzünün bir görüntüsü bulunmaktadır.

görüntü tanımını buraya girin


Bu, haritalanmış hafıza için yazdığınız ne anlama geliyor? "Bu yaklaşım adres alanında izolasyon gerektirir: yani, G / Ç için ayrılmış adreslerin fiziksel hafızaya uygun olmaması gerekir." G / Ç için ayrılan adreslerin ana bellekte olduğunu ve G / Ç olmayan için kullanılamadığını mı kastediyorsunuz? Açıkçası, IO adresleri ve IO olmayan adresler fiziksel bellektir. Fiziksel olmayan hafıza diye bir şey yoktur. (william Lane craig'in argümanlarına inanmıyorsanız, yani bir şeyin fiziksel olmayan bir beyni ve hafızası olabilir!).
barlop

1
ve bunu yazdığınızda, "Daha sonra (hazır olduğunda) verileri gerçek I / O cihazına gönderen veri yolu üzerinden I / O arayüzünün kayıt defterlerine yazıyorsunuz. Aşağıda örnek bir G / Ç örneği verilmiştir. cihaz." IO "register" ın cihazda olup olmadığını bilmiyorsunuz, sanırım cihaz olarak adlandırıyorsanız onu çağırıyorsunuz. Ama sonra ".. sonra (hazır olunca) verileri gerçek I / O cihazına gönderir" yazarsınız. Bu nedenle, bu hafıza konumlarının nerede olduğunu söylediğiniz net değil. Cihazın içinde mi yoksa cihazın dışında mı yoksa cihazın dışında mı olduğu.
barlop

1
Heads up: Bunları Mikroişlemciler dersinde öğrendiklerimden bazıları da Wiki'den derledim. Bunu söyledikten sonra, ilk yorumunuzda sormak istediğim şey şudur: "GÇ adresleri ve GÇ olmayan adresler fiziksel hafızadır", düşündüğünüz gibi net değildir . Aslında (bildiğim kadarıyla, bana öğretildiği kadarıyla), adres kodu kod çözücüsü, IO adresi belirtildiğinde IO arayüzünü etkinleştirir, yani bir adres verdiğinizde , fiziksel adres aralığında olmamalıdır ; , $ 0000 - fiziksel için $ 00FF ve G / Ç için 0100 - - $ 01FF (miktarı yok sayın, yalnızca sınırları dikkate alın).
Varaquilex

@ barlop İkinci sorunuz için, tam buradasınız, demek istediğim "Aşağıda örnek bir G / Ç cihaz arayüzünün görüntüsü" dür . Bunu az önce yaptığım düzenlemede düzelttim. Umarım bu düzenleme karışıklığı ortadan kaldırmıştır. Değilse, daha fazla sorun. En iyi cevap vermeye çalışacağım.
Varaquilex

1
@ barlop Karşılaştığım yayınların ve edebiyatın çoğunda hafızanın yeri belirsizdir. Ya zaten bildiğini varsayıyorlar ya da gerçekten bilmiyorlar. Cevabın LDD3 ch'den bu sözlerle olduğuna inanıyorum. 9: "G / Ç belleği, cihazın işlemciye veri yolu üzerinden erişebilmesini sağlayan RAM benzeri konumların bir bölgesidir ." (italik eklendi) Yani hafıza ve / veya kayıtlar cihazdadır. G / Ç bağlantı noktası ve G / Ç belleği, sistemin bu konumları yazılıma uygun hale getirmesinin yalnızca 2 yoludur.
orodbhen

1

Bellek Haritalı G / Ç'de (sadece MMIO), cihazlara gerçekten belleğe erişmesi gereken talimatlar yoluyla erişilir. Her cihaz belirli hafıza adreslerini alır. Ancak, hafızanın bu bölümünü okumaya veya yazmaya çalıştığınızda, belli bir cihaz (muhtemelen kuzey köprüsü) bunun yerine ilgili cihaza gönderir. Bilgisayar böyle bir adres için yeterli belleğe sahip olmasa bile (MMIO adresleri genellikle çok yüksektir), fiziksel bellek (ana kartına baktığınızda, RAM olarak da bilinirse gördüğünüz olan) önemli değildir. ) ilişkili bile değil. Adres için yeterli RAM’iniz varsa, bu daha yüksek bir G / Ç olmayanla eşleştirilir veya oraya okuyamayacağınız veya yazamayacağınız anlamını kaybetti.

Port Haritalı G / Ç (sadece PMIO) çok farklı. Bağlantı noktalarını okumak ve yazmak için kullanılan farklı talimatlarınız var. Tıpkı adreslerle aygıtlarla iletişim kuran veya geçersiz olan adreslerin ya G / Ç adresleri olduğu bellek adres alanı gibi bir bağlantı noktası adres alanı var. PMIO aslında sadece G / Ç için ayrı bir bellek adres alanına sahip bir MMIO olarak düşünülebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.