@Wu Ja, man muss den virtuellen Speicher ein wenig verstehen, um Aliasing zu verstehen. Lassen Sie mich Ihnen zuerst ein paar Zeilen erklären:
Nehmen wir an, ich habe einen RAM (physischen Speicher) von 1 GB. Wenn ich meinem Programmierer eine Ansicht präsentieren möchte, dass ich 4 GB Speicher habe, dann verwende ich virtuellen Speicher. Im virtuellen Speicher denkt der Programmierer, dass er/sie 4 GB hat und schreibt sein Programm aus dieser Perspektive. Er braucht nicht zu wissen, wie viel physischer Speicher vorhanden ist. Der Vorteil ist, dass das Programm auf Computern mit unterschiedlich viel RAM läuft. Außerdem kann das Programm auf einem Computer zusammen mit anderen Programmen ausgeführt werden (die ebenfalls physischen Speicher verbrauchen).
So wird der virtuelle Speicher implementiert. Ich werde ein einfaches 1-stufiges virtuelles Speichersystem angeben (Intel hat ein 2/3-stufiges System, das es nur zur Erklärung kompliziert macht.
Unser Problem ist, dass der Programmierer 4 Milliarden Adressen hat und wir nur 1 Milliarde Plätze haben, um diese 4 Milliarden Adressen unterzubringen. Daher müssen die Adressen aus dem virtuellen Adressraum in den physischen Adressraum eingeordnet werden. Dies geschieht mit Hilfe einer einfachen Indextabelle, die Page Table genannt wird. Wenn Sie mit einer virtuellen Adresse auf eine Seitentabelle zugreifen, erhalten Sie die physische Adresse dieses Speicherplatzes.
Einige Details: Denken Sie daran, dass der physische Speicherplatz nur 1 GB groß ist, so dass das System nur die 1 GB, auf die zuletzt zugegriffen wurde, im physischen Speicher aufbewahrt und den Rest auf der Systemplatte. Wenn das Programm eine bestimmte Adresse anfordert, wird zunächst geprüft, ob sie sich bereits im physischen Speicher befindet. Wenn ja, wird sie an das Programm zurückgegeben. Wenn nicht, wird sie von der Festplatte in den physischen Speicher geholt und dann an das Programm zurückgegeben. Letzteres wird als Page Fault bezeichnet.
Zurück zu Aliasing im Zusammenhang mit virtuellem Speicher: Da es eine Zuordnung zwischen virtuellen -> physischen Adressen gibt, ist es möglich, zwei virtuelle Adressen auf dieselbe physische Adresse abzubilden. Adresse X und Y ansehe, erhalte ich in BEIDEN Fällen dieselbe physische Adresse.
Im Folgenden zeige ich ein einfaches Beispiel für eine Seitentabelle mit 8 Einträgen. Angenommen, es gibt 8 virtuelle Adressen und nur 3 physikalische Adressen. Die Seitentabelle sieht wie folgt aus:
0: 1
1: On disk
2: 2
3: 1
4: On disk
5: On disk
6: On disk
7: 0
This mean that if virtual address 4 is accessed, you will get a page fault.
If virtual addresses 3 is accessed, you will get the physical address 1
In this case, virtual addresses 0 and 3 are aliasing to the same physical address 1 for both of them
HINWEIS: Zur Vereinfachung des Konzepts habe ich überall die Begriffe physische und virtuelle Adressen verwendet. In einem realen System erfolgt die Zuordnung von virtueller zu physischer Adresse nicht auf der Basis einzelner Adressen. Stattdessen werden Teile des virtuellen Raums dem physischen Raum zugeordnet. Jedes Stück wird als Seite bezeichnet (deshalb heißt die Zuordnungstabelle auch Seitentabelle), und die Größe des Stücks ist eine Eigenschaft des ISA, z. B. hat Intel x86 4 KByte-Seiten.