Die meisten modernen Systeme unterteilen den Speicher in Seiten mit einer Größe von 4-64 KB, oft mit der Möglichkeit, so genannte Riesenseiten von 2 MB oder 1 GB Größe zu verwenden (oft sind beide Varianten möglich). Die Seitenübersetzungen werden in einem Translation Lookaside Buffer (TLB) zwischengespeichert. Einige Systeme, vor allem ältere RISC-Designs, stellen dem Betriebssystem eine Falle, wenn eine Seitenübersetzung nicht im TLB gefunden wird. Die meisten Systeme verwenden einen hardwarebasierten Tree Walker. Die meisten Systeme erlauben es, die MMU zu deaktivieren, aber einige deaktivieren die MMU beim Trapping in den Betriebssystemcode.
VAXEdit
VAX-Seiten sind 512 Bytes, was sehr klein ist. Ein Betriebssystem kann mehrere Seiten so behandeln, als wären sie eine einzige größere Seite. Linux auf VAX beispielsweise fasst acht Seiten zusammen. Daher wird das System als 4-KB-Seiten angesehen. Die VAX unterteilt den Speicher in vier Bereiche mit fester Zweckbestimmung, die jeweils 1 GB groß sind. Diese sind:
P0-Speicherbereich Wird für allgemeinen prozessbezogenen Speicher wie Heaps verwendet. P1-Speicher (oder Kontrollspeicher), der ebenfalls prozessabhängig ist und typischerweise für Supervisor-, Exekutiv-, Kernel-, Benutzer-Stacks und andere vom Betriebssystem verwaltete prozessabhängige Kontrollstrukturen verwendet wird. S0-Bereich (oder Systembereich), der für alle Prozesse gilt und Betriebssystemcode und -daten speichert, unabhängig davon, ob sie ausgelagert sind oder nicht, einschließlich Pagetables. S1-Speicherplatz, der ungenutzt und „für Digital reserviert“ ist.
Seitentabellen sind große lineare Arrays. Normalerweise wäre dies sehr verschwenderisch, wenn Adressen an beiden Enden des möglichen Bereichs verwendet werden, aber die Seitentabelle für Anwendungen ist selbst im ausgelagerten Speicher des Kernels gespeichert. Somit gibt es effektiv einen zweistufigen Baum, der es den Anwendungen ermöglicht, ein spärliches Speicherlayout zu haben, ohne viel Platz für ungenutzte Seitentabelleneinträge zu verschwenden. Die VAX MMU zeichnet sich durch das Fehlen eines Zugriffsbits aus. Betriebssysteme, die Paging implementieren, müssen einen Weg finden, das Zugriffsbit zu emulieren, wenn sie effizient arbeiten sollen. Normalerweise hebt das Betriebssystem regelmäßig die Zuordnung von Seiten auf, so dass „page-not-present“-Fehler verwendet werden können, damit das Betriebssystem ein Zugriffsbit setzen kann.
ARMEdit
Auf der ARM-Architektur basierende Anwendungsprozessoren implementieren eine MMU, die durch die Architektur des virtuellen Speichersystems von ARM definiert ist. Die aktuelle Architektur definiert PTEs zur Beschreibung von 4-KB- und 64-KB-Seiten, 1-MB-Abschnitten und 16-MB-Superabschnitten; frühere Versionen definierten auch eine 1-KB-Tiny-Page. ARM verwendet eine zweistufige Seitentabelle, wenn 4-KB- und 64-KB-Seiten verwendet werden, oder nur eine einstufige Seitentabelle für 1-MB-Abschnitte und 16-MB-Abschnitte.
TLB-Aktualisierungen werden automatisch von der Hardware für die Seitentabelle durchgeführt. PTEs enthalten Lese-/Schreibzugriffsrechte auf der Grundlage von Privilegien, Cacheability-Informationen, ein NX-Bit und ein nicht sicheres Bit.
IBM System/360 Modell 67, IBM System/370 und NachfolgerBearbeiten
Das IBM System/360 Modell 67, das im August 1965 eingeführt wurde, enthielt eine MMU, die als DAT-Box (Dynamic Address Translation) bezeichnet wurde. Sie hat die ungewöhnliche Eigenschaft, Zugriffs- und Dirty-Bits außerhalb der Seitentabelle zu speichern (zusammen mit dem Vier-Bit-Schutzschlüssel für alle S/360-Prozessoren). Sie beziehen sich auf den physischen Speicher und nicht auf den virtuellen Speicher und werden durch spezielle Befehle angesprochen. Dies reduziert den Overhead für das Betriebssystem, das andernfalls die Zugriffs- und Dirty-Bits aus den Seitentabellen in eine stärker physisch orientierte Datenstruktur übertragen müsste. Dies erleichtert die Virtualisierung auf Betriebssystemebene, die später als Paravirtualisierung bezeichnet wurde.
Ab August 1972 verfügte das IBM System/370 über eine ähnliche MMU, obwohl es anfangs nur einen virtuellen 24-Bit-Adressraum unterstützte und nicht den virtuellen 32-Bit-Adressraum des System/360 Model 67. Sie speichert auch die Zugriffs- und Dirty-Bits außerhalb der Seitentabelle. Anfang 1983 erweiterte die System/370-XA-Architektur den virtuellen Adressraum auf 31 Bit, und im Jahr 2000 wurde die 64-Bit z/Architektur eingeführt, bei der der Adressraum auf 64 Bit erweitert wurde; diese speichern die Zugriffs- und Dirty-Bits weiterhin außerhalb der Seitentabelle.
DEC AlphaEdit
Der DEC Alpha-Prozessor unterteilt den Speicher in 8 KB-Seiten. Nach einem TLB-Miss durchläuft der Low-Level-Firmware-Maschinencode (hier PALcode genannt) eine dreistufige, baumstrukturierte Seitentabelle. Die Adressen sind wie folgt aufgeteilt: 21 ungenutzte Bits, 10 Bits für die Indizierung der Stammebene des Baums, 10 Bits für die Indizierung der mittleren Ebene des Baums, 10 Bits für die Indizierung der Blattebene des Baums und 13 Bits, die ohne Änderung in die physikalische Adresse übergehen. Volle Lese-/Schreib-/Ausführungsberechtigungsbits werden unterstützt.
MIPSEdit
Die MIPS-Architektur unterstützt einen bis 64 Einträge in der TLB. Die Anzahl der TLB-Einträge ist bei der CPU-Konfiguration vor der Synthese konfigurierbar. TLB-Einträge sind dual. Jeder TLB-Eintrag ordnet eine virtuelle Seitennummer (VPN2) entweder einer von zwei Kachelnummern (PFN0 oder PFN1) zu, je nach dem niederwertigsten Bit der virtuellen Adresse, das nicht Teil der Seitenmaske ist. Dieses Bit und die Kachelmaskenbits werden nicht in der VPN2 gespeichert. Jeder TLB-Eintrag hat seine eigene Seitengröße, die einen beliebigen Wert zwischen 1 KB und 256 MB in Vielfachen von vier annehmen kann. Jede PFN in einem TLB-Eintrag hat ein Caching-Attribut, ein Dirty- und ein Valid-Status-Bit. Eine VPN2 hat ein globales Statusbit und eine vom Betriebssystem zugewiesene ID, die am Abgleich der virtuellen Adresse mit dem TLB-Eintrag teilnimmt, wenn das globale Statusbit auf Null gesetzt ist. Eine PFN speichert die physikalische Adresse ohne die Seitenmaskenbits.
Eine TLB refill exception wird erzeugt, wenn es keine Einträge in der TLB gibt, die mit der zugeordneten virtuellen Adresse übereinstimmen. Eine TLB invalid exception wird erzeugt, wenn es eine Übereinstimmung gibt, aber der Eintrag als ungültig markiert ist. Eine TLB Modified Exception wird erzeugt, wenn ein Speicherbefehl auf eine zugeordnete Adresse verweist und der Dirty-Status des passenden Eintrags nicht gesetzt ist. Wenn eine TLB-Ausnahme bei der Verarbeitung einer TLB-Ausnahme, einer Doppelfehler-TLB-Ausnahme, auftritt, wird sie an ihren eigenen Ausnahme-Handler weitergeleitet.
MIPS32 und MIPS32r2 unterstützen 32 Bit virtuellen Adressraum und bis zu 36 Bit physikalischen Adressraum. MIPS64 unterstützt bis zu 64 Bits virtuellen Adressraum und bis zu 59 Bits physikalischen Adressraum.
Sun 1Edit
Die ursprüngliche Sun 1 ist ein Einplatinencomputer, der um den Motorola 68000-Mikroprozessor herum gebaut und 1982 eingeführt wurde. Er enthält die ursprüngliche Sun 1 Speicherverwaltungseinheit, die Adressübersetzung, Speicherschutz, Speicherfreigabe und Speicherzuweisung für mehrere auf der CPU laufende Prozesse bietet. Der gesamte Zugriff der CPU auf den privaten On-Board-RAM, den externen Multibus-Speicher, die On-Board-E/A und die Multibus-E/A läuft über die MMU, in der die Adressübersetzung und der Speicherschutz auf einheitliche Weise erfolgen. Die MMU ist in Hardware auf dem CPU-Board implementiert.
Die MMU besteht aus einem Kontextregister, einer Segment-Map und einer Page-Map. Virtuelle Adressen von der CPU werden von der Segment-Map in Zwischenadressen übersetzt, die wiederum von der Page-Map in physikalische Adressen übersetzt werden. Die Seitengröße beträgt 2 KB und die Segmentgröße 32 KB, was 16 Seiten pro Segment ergibt. Es können bis zu 16 Kontexte gleichzeitig abgebildet werden. Der maximale logische Adressraum für einen Kontext beträgt 1024 Seiten oder 2 MB. Die maximale physikalische Adresse, die gleichzeitig abgebildet werden kann, beträgt ebenfalls 2 MB.
Das Kontextregister ist in einem Multitasking-Betriebssystem wichtig, weil es der CPU ermöglicht, zwischen Prozessen zu wechseln, ohne alle Informationen über den Übersetzungsstatus neu zu laden. Das 4-Bit-Kontextregister kann unter der Kontrolle des Supervisors zwischen 16 Abschnitten der Segmentkarte umschalten, wodurch 16 Kontexte gleichzeitig abgebildet werden können. Jeder Kontext hat seinen eigenen virtuellen Adressraum. Die gemeinsame Nutzung des virtuellen Adressraums und die Kommunikation zwischen den Kontexten kann durch das Schreiben der gleichen Werte in die Segment- oder Page-Maps verschiedener Kontexte erfolgen. Zusätzliche Kontexte können gehandhabt werden, indem die Segment-Map als Kontext-Cache behandelt wird und veraltete Kontexte nach dem Prinzip der geringsten Nutzung ersetzt werden.
Das Kontextregister unterscheidet nicht zwischen Benutzer- und Supervisor-Zuständen. Interrupts und Traps wechseln nicht den Kontext, was erfordert, dass alle gültigen Interrupt-Vektoren immer auf Seite 0 des Kontexts abgebildet werden, ebenso wie der gültige Supervisor-Stack.
PowerPCEdit
In PowerPC G1, G2, G3 und G4 sind die Seiten normalerweise 4 KB groß. Nach einem TLB-Miss beginnt die Standard-PowerPC-MMU mit zwei gleichzeitigen Suchvorgängen. Eine Suche versucht, die Adresse mit einem von vier oder acht Datenblock-Adressübersetzungsregistern (DBAT) oder vier oder acht Befehlsblock-Adressübersetzungsregistern (IBAT) abzugleichen, je nach Bedarf. Die BAT-Register können lineare Speicherabschnitte bis zu einer Größe von 256 MB abbilden und werden normalerweise von einem Betriebssystem verwendet, um große Teile des Adressraums für die eigene Verwendung durch den Betriebssystemkern abzubilden. Wenn die BAT-Suche erfolgreich ist, wird die andere Suche angehalten und ignoriert.
Die andere Suche, die nicht von allen Prozessoren dieser Familie direkt unterstützt wird, erfolgt über eine so genannte „invertierte Seitentabelle“, die als eine gehashte Off-Chip-Erweiterung der TLB fungiert. Zunächst werden die oberen vier Bits der Adresse verwendet, um eines von 16 Segmentregistern auszuwählen. Dann werden diese vier Bits durch 24 Bits aus dem Segmentregister ersetzt, wodurch eine 52-Bit-Adresse entsteht. Die Verwendung von Segmentregistern ermöglicht es mehreren Prozessen, dieselbe Hash-Tabelle gemeinsam zu nutzen.
Die 52-Bit-Adresse wird gehasht und dann als Index für die Off-Chip-Tabelle verwendet. Dort wird eine Gruppe von achtseitigen Tabelleneinträgen nach einem übereinstimmenden gescannt. Wenn aufgrund übermäßiger Hash-Kollisionen keine übereinstimmen, versucht der Prozessor es erneut mit einer etwas anderen Hash-Funktion. Wenn auch dieser Versuch fehlschlägt, schaltet die CPU das Betriebssystem ein (mit deaktivierter MMU), damit das Problem behoben werden kann. Das Betriebssystem muss einen Eintrag aus der Hash-Tabelle verwerfen, um Platz für einen neuen Eintrag zu schaffen. Das Betriebssystem kann den neuen Eintrag aus einer normaleren baumartigen Seitentabelle oder aus Datenstrukturen pro Mapping erzeugen, die wahrscheinlich langsamer und platzsparender sind. Die Unterstützung für die No-Execute-Steuerung befindet sich in den Segmentregistern, was zu einer Granularität von 256 MB führt.
Ein Hauptproblem bei diesem Design ist die schlechte Cache-Lokalität, die durch die Hash-Funktion verursacht wird. Baumbasierte Designs vermeiden dies, indem sie die Seitentabelleneinträge für benachbarte Seiten an benachbarten Stellen platzieren. Ein Betriebssystem, das auf dem PowerPC läuft, kann die Größe der Hash-Tabelle minimieren, um dieses Problem zu verringern.
Es ist auch etwas langsam, die Seitentabelleneinträge eines Prozesses zu entfernen. Das Betriebssystem kann die Wiederverwendung von Segmentwerten vermeiden, um dies zu verzögern, oder es kann sich dafür entscheiden, die mit prozessbezogenen Hash-Tabellen verbundene Speicherverschwendung in Kauf zu nehmen. G1-Chips suchen nicht nach Seitentabelleneinträgen, aber sie erzeugen den Hash, in der Erwartung, dass ein Betriebssystem die Standard-Hashtabelle per Software durchsucht. Das Betriebssystem kann in die TLB schreiben. G2-, G3- und frühe G4-Chips verwenden Hardware zum Durchsuchen der Hash-Tabelle. Bei den neuesten Chips kann das Betriebssystem zwischen beiden Methoden wählen. Bei Chips, bei denen dies optional ist oder gar nicht unterstützt wird, kann sich das Betriebssystem dafür entscheiden, ausschließlich eine baumbasierte Seitentabelle zu verwenden.
IA-32 / x86Edit
Die x86-Architektur hat sich über eine sehr lange Zeit entwickelt, wobei die volle Softwarekompatibilität, auch für den Betriebssystemcode, erhalten blieb. Daher ist die MMU äußerst komplex und bietet viele verschiedene Betriebsmodi. Der normale Betrieb der traditionellen 80386-CPU und ihrer Nachfolger (IA-32) wird hier beschrieben.
Die CPU teilt den Speicher hauptsächlich in 4-KB-Seiten ein. Segmentregister, die für die älteren 8088- und 80286-MMU-Designs von grundlegender Bedeutung sind, werden in modernen Betriebssystemen nicht verwendet, mit einer wichtigen Ausnahme: dem Zugriff auf Thread-spezifische Daten für Anwendungen oder CPU-spezifische Daten für Betriebssystem-Kernel, der unter expliziter Verwendung der FS- und GS-Segmentregister erfolgt. Jeder Speicherzugriff erfolgt über ein Segmentregister, das entsprechend dem auszuführenden Code ausgewählt wird. Das Segmentregister fungiert als Index in einer Tabelle, die einen Offset liefert, der zur virtuellen Adresse hinzugefügt wird. Außer bei Verwendung von FS oder GS stellt das Betriebssystem sicher, dass der Offset Null ist.
Nach der Addition des Offsets wird die Adresse maskiert, damit sie nicht größer als 32 Bit ist. Das Ergebnis kann über eine baumstrukturierte Seitentabelle nachgeschlagen werden, wobei die Bits der Adresse wie folgt aufgeteilt werden: 10 Bits für den Zweig des Baums, 10 Bits für die Blätter des Zweigs, und die 12 niedrigsten Bits werden direkt in das Ergebnis kopiert. Einige Betriebssysteme, wie OpenBSD mit seiner W^X-Funktion und Linux mit den Patches Exec Shield oder PaX, können auch die Länge des Codesegments begrenzen, wie durch das CS-Register angegeben, um die Ausführung von Code in veränderbaren Regionen des Adressraums zu verhindern.
Kleine Revisionen der MMU, die mit dem Pentium eingeführt wurden, haben sehr große 4-MB-Seiten ermöglicht, indem die unterste Ebene des Baums übersprungen wurde (dadurch bleiben 10 Bits für die Indizierung der ersten Ebene der Seitenhierarchie übrig, wobei die restlichen 10+12 Bits direkt in das Ergebnis kopiert werden). Kleinere Überarbeitungen der MMU, die mit dem Pentium Pro eingeführt wurden, ermöglichten die physikalische Adresserweiterung (PAE), die 36-Bit physikalische Adressen mit 2+9+9 Bits für dreistufige Seitentabellen und 12 untersten Bits, die direkt in das Ergebnis kopiert werden. Große Seiten (2 MB) sind ebenfalls verfügbar, indem die unterste Ebene des Baums übersprungen wird (was zu 2+9 Bits für eine zweistufige Tabellenhierarchie führt und die verbleibenden 9+12 niedrigsten Bits direkt kopiert werden). Außerdem ermöglichte die Seitenattribut-Tabelle die Spezifizierung der Cache-Fähigkeit durch Nachschlagen einiger hoher Bits in einer kleinen Tabelle auf der CPU.
Die Unterstützung für die Nicht-Ausführung wurde ursprünglich nur pro Segment bereitgestellt, was ihre Verwendung sehr umständlich machte. Neuere x86-Chips bieten ein seitenweises No-Execute-Bit im PAE-Modus. Die oben beschriebenen W^X-, Exec Shield- und PaX-Mechanismen emulieren die seitenweise Nichtausführungsunterstützung auf Maschinen mit x86-Prozessoren, denen das NX-Bit fehlt, indem sie die Länge des Codesegments festlegen, was zu Leistungseinbußen und einer Reduzierung des verfügbaren Adressraums führt.
x86-64Edit
x86-64 ist eine 64-Bit-Erweiterung von x86, die die Segmentierung fast vollständig zugunsten des flachen Speichermodells aufhebt, das von fast allen Betriebssystemen für 386er oder neuere Prozessoren verwendet wird. Im langen Modus werden alle Segment-Offsets ignoriert, mit Ausnahme der FS- und GS-Segmente. Bei Verwendung von 4 KB-Seiten hat der Seitentabellenbaum vier statt drei Ebenen.
Die virtuellen Adressen sind wie folgt aufgeteilt: 16 Bits unbenutzt, je neun Bits für vier Baumebenen (insgesamt 36 Bits), und die 12 niedrigsten Bits werden direkt in das Ergebnis kopiert. Bei 2-MB-Seiten gibt es nur drei Ebenen der Seitentabelle, so dass insgesamt 27 Bits für das Paging und 21 Bits für den Offset verwendet werden. Einige neuere CPUs unterstützen auch 1-GB-Seiten mit zwei Ebenen der Seitentabelle und 30 Bits Offset.
CPUID kann verwendet werden, um festzustellen, ob 1-GB-Seiten unterstützt werden. In allen drei Fällen müssen die 16 höchsten Bits gleich dem 48. Bit sein, oder anders ausgedrückt, die niedrigen 48 Bits werden mit Vorzeichen auf die höheren Bits erweitert. Dies geschieht, um eine zukünftige Erweiterung des adressierbaren Bereichs zu ermöglichen, ohne die Rückwärtskompatibilität zu beeinträchtigen. In allen Ebenen der Seitentabelle enthält der Seitentabelleneintrag ein No-Execute-Bit.
Unisys MCP Systems (Burroughs B5000)Edit
Der Burroughs B5000 aus dem Jahr 1961 war das erste kommerzielle System, das virtuellen Speicher unterstützte (nach dem Atlas), obwohl es keine MMU besitzt. Es bietet die beiden Funktionen einer MMU – virtuelle Speicheradressen und Speicherschutz – mit einem anderen architektonischen Ansatz.
Erstens sind die MCP-Systeme bei der Zuordnung virtueller Speicheradressen deskriptorbasiert, anstatt eine MMU zu benötigen. Jeder zugewiesene Speicherblock erhält einen Master-Deskriptor mit den Eigenschaften des Blocks (d.h. Größe, Adresse und ob er im Speicher vorhanden ist). Wenn auf den Block lesend oder schreibend zugegriffen werden soll, prüft die Hardware sein Vorhandensein anhand des Präsenzbits (pbit) im Deskriptor.
Ein pbit von 1 zeigt das Vorhandensein des Blocks an. In diesem Fall kann auf den Block über die physikalische Adresse im Deskriptor zugegriffen werden. Ist das pbit Null, wird ein Interrupt für das MCP (Betriebssystem) erzeugt, um den Block verfügbar zu machen. Ist das Adressfeld Null, so ist dies der erste Zugriff auf diesen Block, und er wird zugewiesen (ein init pbit). Ist das Adressfeld ungleich Null, handelt es sich um eine Festplattenadresse des Blocks, die zuvor ausgerollt wurde, so dass der Block von der Festplatte geholt und das pbit auf Eins gesetzt wird und die physische Speicheradresse aktualisiert wird, um auf den Block im Speicher zu zeigen (ein weiteres pbit). Damit sind Deskriptoren gleichwertig mit einem Eintrag in einer Seitentabelle in einem MMU-System. Die Systemleistung kann anhand der Anzahl der pbits überwacht werden. Init-Pbits weisen auf anfängliche Zuweisungen hin, aber eine hohe Anzahl anderer Pbits deutet darauf hin, dass das System möglicherweise überlastet ist.
Die gesamte Speicherzuweisung erfolgt daher völlig automatisch (eines der Merkmale moderner Systeme), und es gibt keine andere Möglichkeit, Blöcke zuzuweisen als diesen Mechanismus. Es gibt keine Aufrufe wie malloc oder dealloc, da Speicherblöcke auch automatisch verworfen werden. Das System ist außerdem träge, da ein Block erst dann zugewiesen wird, wenn er tatsächlich referenziert wird. Wenn der Speicher fast voll ist, untersucht der MCP die Arbeitsmenge und versucht, sie zu verdichten (da das System segmentiert und nicht ausgelagert ist), die Zuweisung schreibgeschützter Segmente aufzuheben (z. B. Codesegmente, die aus ihrer ursprünglichen Kopie wiederhergestellt werden können) und als letzten Ausweg schmutzige Datensegmente auf die Festplatte zu verschieben.
Eine weitere Möglichkeit, wie der B5000 eine Funktion einer MMU bietet, ist der Schutz. Da alle Zugriffe über den Deskriptor erfolgen, kann die Hardware überprüfen, ob alle Zugriffe innerhalb der Grenzen liegen und, im Falle eines Schreibzugriffs, ob der Prozeß die Schreibberechtigung hat. Das MCP-System ist von Natur aus sicher und benötigt daher keine MMU, um diese Ebene des Speicherschutzes zu gewährleisten. Deskriptoren sind für Benutzerprozesse nur lesbar und können nur vom System (Hardware oder MCP) aktualisiert werden. (Wörter, deren Tag eine ungerade Zahl ist, sind schreibgeschützt; Deskriptoren haben ein Tag von 5 und Codewörter ein Tag von 3.)
Blöcke können zwischen Prozessen über Kopierdeskriptoren im Prozessstapel gemeinsam genutzt werden. So können einige Prozesse Schreibrechte haben, während andere keine haben. Ein Codesegment ist nur lesbar, also reentrant und wird von Prozessen gemeinsam genutzt. Copy-Deskriptoren enthalten ein 20-Bit-Adressfeld, das den Index des Master-Deskriptors im Master-Deskriptor-Array angibt. Dadurch wird auch ein sehr effizienter und sicherer IPC-Mechanismus implementiert. Blöcke können leicht verschoben werden, da nur der Master-Deskriptor aktualisiert werden muss, wenn sich der Status eines Blocks ändert.
Der einzige andere Aspekt ist die Leistung – bieten MMU-basierte oder nicht-MMU-basierte Systeme eine bessere Leistung? MCP-Systeme können auf Standard-Hardware implementiert werden, die über eine MMU verfügt (z.B. ein Standard-PC). Selbst wenn die Systemimplementierung die MMU in irgendeiner Weise nutzt, wird dies auf der MCP-Ebene überhaupt nicht sichtbar sein.