ARM11 Translation Lookaside Buffer (TLB) Verwendung?

8

Gibt es eine anständige Anleitung, die erklärt, wie die TLB-Tabellen ( Translation Lookaside Buffers ) auf einem ARM1176JZF-S -Kern verwendet werden?

Nachdem ich mir die technische Dokumentation für die ARM-Plattform angeschaut habe, weiß ich immer noch nicht, was ein TLB ist oder wie er aussieht. Soweit ich weiß, ordnet jeder TLB-Eintrag eine virtuelle Seite einer physischen Seite zu, die eine Neuzuordnung und Steuerung der Speicherberechtigungen ermöglicht.

Abgesehen davon habe ich absolut keine Ahnung, wie man sie benutzt.

  • Welche Struktur hat ein TLB-Eintrag? Wie erstelle ich neue Einträge?
  • Wie handhabe ich VM in Kontextwechsel für User-Space-Threads? Wie stelle ich sicher, dass diese Threads nur auf bestimmte Seiten zugreifen können, die ihren übergeordneten Prozessen zugewiesen sind ( Speicherschutz erzwingen )? Speichere ich den TLB-Status für jeden Kontext?
  • Warum gibt es zwei TLBs? Wofür kann ich das MicroTLB verwenden, wenn es nur 10 Einträge haben kann? Sicher, ich brauche mehr als 10.
  • Es besagt, dass einer der Teile des Haupt-TLB "ein voll assoziatives Array von acht Elementen ist, das absperrbar ist". Was ist das? Bekomme ich nur 8 Einträge für den Main TLB?

Vielen Dank im Voraus. Ich werde mich wirklich freuen, wenn jemand eine Erklärung dafür liefert, was TLBs sind. Ich arbeite gerade an einem Speicher-Mapper für meinen Kernel, und ich habe ziemlich eine Sackgasse getroffen.

    
Kristina Brooks 24.01.2012, 18:49
quelle

1 Antwort

15

Das technische Referenzhandbuch für ARM1176JZF-S scheint DDI 0301 zu sein. Dieses Dokument enthält alle spezifischen Details für diesen speziellen ARM-Kern.

Ich habe immer noch keine Ahnung, was ein TLB ist oder wie es aussieht. Soweit ich weiß, ordnet jeder TLB-Eintrag eine virtuelle Seite einer physischen Seite zu, die eine Neuzuordnung und Steuerung der Speicherberechtigungen ermöglicht.

Ein TLB ist ein Cache der Seitentabelle. Einige Prozessoren erlauben direkten Zugriff auf den TLB, während sie nichts über Seitentabellen (z. B. MIPS) wissen, während andere über Seitentabellen Bescheid wissen und intern TLBs verwenden, die der Programmierer meistens nicht sieht (z. B. x86). In diesem Fall wird der TLB durch Hardware verwaltet, und der Systemprogrammierer muss nur darauf achten, dass die TTB-Register (Translation Table Base) auf die Seitentabelle zeigen und den TLB an geeigneten Stellen ungültig machen.

Welche Struktur hat ein TLB-Eintrag? Wie erstelle ich neue Einträge?

Fertig von der Hardware. Bei einem TLB-Fehler durchläuft die MMU die Seitentabelle und füllt den TLB von dort aus.

Wie handhabe ich VM in Kontextwechsel für User-Space-Threads?

Einige Plattformen haben TLBs, die virtuelle Adressen einfach physischen Adressen zuordnen (z. B. x86). Auf diesen Plattformen müssen Sie einen vollständigen TLB-Flush für jeden Kontextwechsel ausführen. Andere Plattformen (MIPS, diese spezifische ARM-Kernkarte) (ASID, virtuelle Adresse) werden mit physischen Adressen verknüpft. Eine ASID ist eine anwendungsspezifische Kennung, d. H. Eine Kennung für einen Prozess. Die MMU verwendet ein Register, um zu wissen, welche ASID zu verwenden ist (ich denke, dass es das Kontext-ID-Register in diesem Fall ist). Da möglicherweise mehr Prozesse als ASIDs vorhanden sind, müssen Sie möglicherweise gelegentlich eine ASID (die einem anderen Prozess zugewiesen wird), wiederverwenden und einen TLB-Flush ausführen (dies ist der Zweck der TLDB durch ASID-Operation).

Warum gibt es zwei TLBs? Wofür kann ich das MicroTLB verwenden, wenn es nur 10 Einträge haben kann? Sicher, ich brauche mehr als 10.

Genau aus dem gleichen Grund haben Sie kleine separate Level-1-Caches für Anweisungen und Daten. Da es sich um Caches handelt, brauchen Sie nicht mehr als 10 (obwohl mehr die Performance verbessern könnte).

Es besagt, dass einer der Teile des Haupt-TLB "ein vollständig assoziatives Array von acht Elementen ist, das gesperrt werden kann". Was ist das? Bekomme ich nur 8 Einträge für den Main TLB?

Auf einige Speicherseiten (z. B. einige Teile des Kernels) wird sehr oft zugegriffen. Es macht Sinn, sie zu sperren, damit sie nicht vom TLB abgeworfen werden. Auch auf Echtzeit-Systemen kann ein TLB-Fehltreffer oder ein Cache-Fehltreffer eine unerwünschte Unberechenbarkeit verursachen. Daher gibt es eine Option zum Sperren einer Anzahl von TLB-Einträgen. Der Haupt-TLB hat mehr Einträge, aber nur diese sind abschließbar.

    
ninjalj 24.01.2012, 20:42
quelle

Tags und Links