Süreçor-Peripheral İletişimin Vakfı

Yüksek seviyeli bir yazılım mühendisi için, bir bellek adresi veya değişkene yazmak basit, atomik bir işlemdir. Ancak, bu basit maskeler tüm modern hesaplamalara temel olan sofistike bir donanım mekanizmasıdır.Bir işlemcinin sert bir sürücüyü kontrol etme, bir ağ kartında bir ekrandaki bir görüntüyü tamamen karmaşık bir şekilde ele alma yeteneği, iki temel konsept arasında karmaşık bir ilişki sağlar:0CPU kayıtları:0) ve DÖRT:2.

CPU Registers'ın Mikroaritesi

Kayıtlar, depolama hiyerarşisinde en yüksek hafıza seviyesini temsil eder, doğrudan CPU çekirdeği içinde bulunurlar ve CPU'nun saat frekansına erişim için gerekli olan tek yönlü erişim için tasarlanmıştır. DRAM veya NAND flash gibi daha yavaş bellek türlerinden farklı olarak, kayıtlar hızlı statik RAM (SRAM) hücreleri veya yüzücükler kullanılarak yapılır ve CPU'nun saat frekansına erişim için tasarlanmıştır.

Genel olarak Purpose Registers ve Execution Paths

Sisteme kayıtların en görünür seti, ALU'nun özel kaynağı ve hedefidir (ALU) ARM64 (AArch64), programcının X1 ve X2'ye erişimi vardır.Bu kayıtlar, X0-X30) kayıt altına alındıktan sonra kayıt altına alındı.

Özel-Purpose Registers and System Control

GPR'lerin ötesinde, bir işlemci, devlet korumak ve yürütme akışını yönetmek için özel amaçlı kayıtların bir paketine dayanıyor. Bunlar genellikle uygulama düzeyinde koda görünmez, ancak işletim sistemi ve donanıma sürekli erişim sağlar.

  • [FONT:0]Program Counter (PC): [Dönetici: Bu kayıt şu anda eğitim uygulama talimatlarının hafıza adresini tutar ve şube talimatları ile değiştirilebilir.
  • [FONT=0)Stack Pointer (SP): ), mevcut yığın çerçevenin üst kısmından gelen çağrıyı yönetmek için kullanılır.
  • [FONT=0)Status Register (PSR / FLAGS): [Dönetici: 1) ALU operasyonlarından kaynaklanan mağazalar, sıfır, taşıma, aşırı akış ve negatif. Bu bayraklar kontrol koşullu şube talimatları ve ifadeler uygulamak için gereklidir.
  • [03.2015:0)Link Register (LR) / X30:) ARM mimarlıklarında, bu özel GPR, bir işlev çağrısı için geri dönüş adresi tutar, geri dönüş adresini hemen zorlamadan geri çağırmanıza izin verir.

Modern Kayıt Yönetimi: Renaming and Speculation

Modern out-of-order işlemciler, fiziksel kayıt dosyası, birden fazla ilişkili değer için belirlenen mimari kayıttan önemli ölçüde daha büyük (ISA) CPU, ISA'nın veri tehlikelerini ortadan kaldırması için bir teknik kullanır. Örneğin, bir derleyici yeniden kullanım mimarisi kayıt X0'ı birden fazla ilişkili olmayan değerler için yapılandırırsa, donanım bu mantıksal referansları doğrudan fiziksel kayıt altına alır.Bu, CPU'nun ISA'nın talimatları paralel olarak yürütmesine olanak sağlar.

Memory-Mapped I/O (MMIO)

Memory-mapped I/O, standart yük (LDR) ve mağaza (STR) talimatları kullanarak cihazlarla etkileşim kurmanın bir donanım metodolojisidir.

Birleşik Adres Uzay Mimarisi

Bir MMIO sisteminde, fiziksel adres alanı sistem RAM, ROM/flash ve periferik kayıtlar arasında paylaşılır. Belirli bir adres yelpazesi, CPU sorunları bu aralığında bir adrese yük veya mağaza talimat verirken, bellek bus decodes adresi ve rotalar uygun periferik otobüslere (örneğin AMBA AXI veya PCI Express) işlemden ziyade bellek kontrolörü için yapılır.

Örneğin, tipik bir ARM Cortex-M mikrokontrolörde, hafıza haritası kesinlikle uygulanır: her bölge için katı erişim izinleri ve zamanlama özelliklerini tanımlamak için bu bölüm.

MMIO ve Port-Mapped I/O (PMIO) ile Karşılaştırmak

MMIO'nun alternatifi, I/O veya port-mapped I/O (PMIO), tarihsel olarak x86 mimarisi tarafından kullanılır.O, ayrı bir I / O adresi alanına erişmek için özel donanım pins ve özel talimatlar kullanır.

  • [FONTIO Avantajları: [Dönetici: CPU'nun hafıza talimatının tam gücünü yeniden kullanır. C/C++'da noktalı kesintiler kullanabilirsiniz, biraz alan işlemleri uygulayın ve tüm adresleme modları gerektirmez. MMIO mevcut hafıza yönetimi ünitesinin (MMU).
  • [FONT=0)PMIO Avantajları:[Dönetici:[Dönetici:0)[değiştir | kaynağı değiştir] Özel I/O alanı, belirli miras sistemlerinde donanım tasarımı ile ilgili temiz bir ayrım sağlar. ancak port-based I/O genellikle hafıza transferleri için değerli adres alanı tüketemez.

Modern x86 sistemleri hala mirasın uyumluluk için (örneğin, mirası PS/2 klavye kontrolörü) kullanıyor, ancak GPU ve NVMe SSDs gibi yüksek performanslı cihazlar sadece MMIO'ya PCI Express otobüsleri aracılığıyla güveniyor.

Accessing Device Registers from High-Level Code

C veya C++'daki cihaz sürücüleri yazarken, MMIO kayıtlarının erişimi, donanım durum değişikliklerini önlemek için belirli bir semantik gerektirir. Örneğin: 03.D: 16. Anahtar kelimeler olmadan, bir derleme bilgisi olmadan değişebilir.

Kayıtların ve MMIO'nun Konsülasyonu

Gerçek "interplay" her zaman bir programdan veri göndermeli veya ondan veri almak gerekir. Süreç, CPU kayıtları ve MMIO cihazı kayıtları ile yükleme/kapı talimatları kullanarak veri taşımayı içerir, ancak donanım ve protokol sonuçları benzersizdir.

Load/ store Semantics on Device Memory

X1'in bir cihazın veri kaydının adresinin bulunduğu yerdeki bir talimata etkisi, CPU'nun genel amaçlı kayıt (W0) veri otobüsüne yerleştirilir.The bus Kumaşı kodlayan ve onu bir MMIO bölgesi olarak tanımlar. Crucially, bu bölgenin bellek türü, CPU'nun genel amaçlı notu iletilebilir.[D)[Döneticileri birleştirin.[D)

Kirlilik, Yolsuzluklar ve Kayıt Durumu Bayraklar

En temel etkileşim modeli ankete girer. CPU bir cihazın durumu kaydı (an MMIO adresi) bir GPR'ye okur ve belirli bir miktar biraz fazla bir miktar biraz fazla sayıdaki donanıma sahip olduğunda, dosyaların belirtilmesine kadar kayıt defterini (diğer bir MMIO adresi) okur ve sonra veri kaydının kaynağını bulmak için.Bu, yedeklenen bir cihazın veriye dayalı olarak geri yüklemesini sağlar. CPU'nun içeriğine eklediği zaman.

Doğrudan bellek Erişimi (DMA) ve Kayıt Koordinasyonu

Ağ kartları veya depolama kontrolörleri gibi yüksek bant genişliği cihazlar için, CPU'nun GPR'leri aracılığıyla verileri hareket ettirin. Doğrudan Memory Access (DMA) bunu, periferik verileri her kelime için CPU'yu dahil etmeden doğrudan sisteme RAM'ı transfer ederek çözüyor.

  • CPU, kaynak adresi, varış adresi ve transfer uzunluğu belirlemek için DMA kontrolörünün kayıtlarını yazar.
  • CPU, transferi başlatmak için ayrı bir MMIO "başlangıç" kaydına yazar.
  • DMA ilerlemede olsa da, CPU diğer kodu uygulamak için ücretsizdir.
  • Transfer tamamlandıktan sonra, DMA kontrolör kendi statüsü kayıtlarına yazar ve bir kesinti ortaya koyar. CPU, işlemin başarılı olduğunu doğrulamak için bu kayıtları okumak zorundadır.

CPU'nun sistem yapılandırdığı bu elhake, DMA motorları ağır kaldırmayı gerçekleştirir ve MMIO rapor statüsünü kaydeder, yüksek performanslı I/O'nun arka kemiğidir.

Modern Uygulamalarda Gelişmiş Tahminler

Sistem karmaşıklığı büyüdükçe, MMIO'nun özelliklerini ve CPU'nun kayıt durumuyla olan etkileşimlerini yönetmek için birkaç sofistike özellik ortaya çıktı.

Caching ve Memory Coherency

Cihaz kayıtları doğal olarak bağımsız değildir; Bir kayıt okumak bir kesinti bayrağını açıklayabilir ve MMU'nun sayfa masalarında bir motor başlatabilir.Bu nedenle, MMIO bölgeleri doğrudan L1 ve L2 önbellekleri ile erişim için her zaman işaretlenir.Bu, bir sabit cihaz kaydına ulaşmadan önce bir tıkış noktası olabilir.

Cebrail'de

PCI Express (PCIe) standardı, PC'lerde, sunucularda ve gömülü sistemlerde bulunan hakim yüksek hızlı bağlantıdır. PCIe cihazları, bir cihazın içinde adresi veya OS taramaları sırasında, PCIe kök kompleksleri her bir cihazın Base Address Registers (BARs) ile kontrol kayıtlarını ve MMIO pencerelerini tanımlar. Cihazın boyutunu ve tipini gerektirir. CPU'nun bir cihazda bir adrese yazdığında, bir PCIe kök kompleksleri tarar ve işlemden son ayarlandığında, son ayarını ve yüksek çözünürlükte bir şekilde kaydetmesine izin verir.

Sanallaştırma Challenges ve IOMMU

Sanallaştırılmış ortamlarda, misafir işletim sistemi, MMIO kayıtlarına doğrudan fiziksel erişim sağlayamaz, çünkü bu devre dışı bırakılmalıdır. hipervizör, bellek otobüsü arasında otururken doğrudan bir cihazı kontrol etmeye olanak sağlar.Bu, konukdaki MMIO kayıtlarını doğrudan bir araya getirir:0).Input-Output Memory Management Unit (IOMMU)).

Kayıtların ve MMIO'nun Pratik Uygulamaları

Bu kavramları anlamak sadece akademik değildir. Linux, Windows veya RTOS için yazılmış her periferik sürücü bu temel üzerinde inşa edilmiştir.

Universal Asynchronous Alıcı / Transmitter (UART)

Bir UART, bir karakter iletmesi için, bir sürücü bir statü kaydı (MMIO) ile kayıt (THR) ile UART'ın geçişine devam ederse, bu değeri bir GPR'ye okur ve döngüler.THR boş olduğunda, sürücü bu kaydın durumunu tekrarladığı zaman, bu kayıt altına almak için bir GPR'den gelen verileri kontrol etmek ve UART'ın geçişini kabul eder.

Grafik İşleme Birimleri (GPUs)

GPU'lar, MMIO'ya çok güvenen büyük paralel işlemciler. CPU, GPU sürücüsü ile komut yüzüğü tampon ve bir dizi MMIO kaydı ile etkileşime girer.İş sunmak için, CPU'nun tüm etkileşimini hafızada bir ringe yatırır ve tek bir MMIO kaydına yazar, karmaşık işleme başlatmak için adres alanına girer.

Network Interface Controllers (NICs)

Modern NICs benzer bir ilke kullanır. Kontrol için bir dizi MMIO kaydı vardır ve ana bellekte tanımlayıcı halkalar kümesi.Bir paket geldiğinde, NIC, paketin veriyi önceden belirlenmiş bir bellek tamponuna yerleştirmek ve bu sürecin verimliliği tamamen CPU'nun "taraflı" kayıtlarını güncelletir ve opsiyonel olarak bir araya getirir. CPU sürücüsü, MMIO'nun güncelleme noktalarına kontrol etmeyi ve MMIO'nun hangi tamponları kontrol etmeyi kullanır.

Hafızayı Evaluating I/O

MMIO modern periferiklar için baskın paradigma olsa da, farklı pros ve eksilerle bir tasarım ticaretidir.

Sistem Tasarımında Avantajları

MMIO, ayrı bir I/O talimat setini ortadan kaldırmak için programlama modelini basitleştirir. CPU'nun hafıza koruma ünitesi (MMU) ile kolay entegrasyon sağlar ve AXI ve PCIe gibi standart C kodu kullanımını sağlar.

Potansiyel Çekiler ve Pitfalls

Önemli bir dezavantaj fiziksel adres alanı tüketimidir. 32-bit sistemlerde, kullanılmayan veya yavaş cihazlara yönelik geniş bir adres alanı belirtmek hafıza haritasını parçalayabilir. Ek olarak, MMIO erişimi doğal olarak 32-bit ve güvenilmez, cihazınıza erişmekten daha yavaş hale getirmek; sürücü geliştirmede yaygın bir hata daha küçük işlemlere bölünmüş olabilir.

Sistem Mimarisinde Simbiyotik İlişkisi

CPU kayıtları ve hafıza ile I / O arasındaki etkileşim, tüm bilgisayar korsanlarını yönlendiren mekanik sempatidir. Kayıtlar işlemci tarafından gerekli olan bir hız ve acil veri manipülasyonu sağlarken, MMIO, fiziksel çevrecilerle etkileşim için gerekli standart, esnek arayüz sunar ve MMIO, yüksek performanslı bir yazılım oluşturma programına dayanan basit bir sistemli sistemli bir programcının ne kadarını verir.