web-dev-qa-db-de.com

Unterschied zwischen logischen Adressen und physischen Adressen?

Ich lese das Betriebssystemkonzept und bin im 8. Kapitel! Ich könnte jedoch eine Klarstellung oder Bestätigung gebrauchen, dass mein Verständnis korrekt ist.

Logische Adressen: Logische Adressen werden von der CPU gemäß dem Buch generiert. Was genau bedeutet das? (In einem von Execute generierten Adressensystem.) Ich gehe davon aus, dass das Programm beim Kompilieren von Code für ein Programm no Ahnung hat, wo der Code in den Speicher geladen wird. Der Compiler erstellt lediglich eine allgemeine Skizze des Programmlayouts und legt fest, wie das Bild angeordnet werden soll, weist ihm jedoch keine realen Adressen zu. Wenn das Programm ausgeführt wird, nimmt die CPU dieses vom Compiler erstellte Layout-Image und teilt einige Adressen (logische Adressen) an die aus dem Code generierten Adressen aus.

Physikalische Adressen: Die physikalischen Adressen werden erst generiert, nachdem die CPU einen Satz logischer Adressen generiert hat (bestehend aus einer Basisadresse und einem Offset). Die logischen Adressen gehen durch das MMU oder ein anderes Gerät und irgendwo entlang der Linie werden die logischen Adressen physischen RAM Adressen zugeordnet.

Was ist dann der tatsächliche Unterschied? Ich kann einen Vorteil sehen. Die Verwendung logischer Adressen bietet den Anwendungen mehr Freiheit. Wenn die physischen Adressen fest codiert wären, würde der Programmerfolg stark von der physischen Computer-Maschine abhängen, die RAM Adressen usw.) zur Verfügung steht.

Bedeutet die Verwendung von logischen Adressen, die in physische Adressen konvertiert werden, nicht zwei Schritte anstelle von eins zu eins und daher mehr Overhead?

Wo befinden sich dann die logischen Adressen nach der Generierung? Sie können in einem Register auf der CPU vorhanden sein, während die CPU einen Prozess bedient, aber davor und danach, wohin gehen sie? Ich verstehe, dass dies von der Implementierung abhängt. Ich gehe davon aus, dass sie möglicherweise in einem speziellen Register oder Puffer auf der CPU wie einem TLB gespeichert sind, richtig? Wenn nicht, kann die Tabelle im eigentlichen RAM selbst vorhanden sein, und die CPU enthält nur einen Zeiger/eine Adresse zur Basisadresse der Tabelle im RAM, richtig?

Es scheint, als ob das Speichern der Adressen in RAM ist für den Zweck von logischen Speicheradressen kontraproduktiv. Ich kann nur annehmen, dass mein Verständnis falsch ist.

38
user427390

Diese Antwort ist keineswegs erschöpfend, erklärt sie aber möglicherweise genug, um die Dinge zum Klicken zu bringen.

In virtuellen Speichersystemen besteht eine Trennung zwischen logischen und physischen Adressen.

Einer Anwendung kann ein virtueller Adressraum von (sagen wir mal) 4G zugewiesen werden. Dies ist der nutzbare Speicher und er kann nach Belieben verwendet werden. Es ist ein schöner zusammenhängender Speicherblock (aus Sicht der Anwendung).

Es ist jedoch nicht die nur Anwendung, die ausgeführt wird, und das Betriebssystem muss zwischen ihnen allen vermitteln. Unter diesem zusammenhängenden Modell von Nice wird eine Menge Mapping ausgeführt, um logische in physikalische Adressen zu konvertieren.

Mit dieser Zuordnung können das Betriebssystem und die Hardware (ich bezeichne diese hier nur als die unteren Ebenen) die Anwendungsseiten an einer beliebigen Stelle ablegen (entweder im physischen Speicher oder im sekundären Speicher).

Wenn die Anwendung versucht, auf den Speicher unter der logischen Adresse 50 zuzugreifen, können die niedrigeren Ebenen dies unter Verwendung von Übersetzungstabellen in eine physikalische Adresse übersetzen. Und wenn versucht wird, auf den logischen Speicher zuzugreifen, der auf die Festplatte ausgelagert wurde, wird ein Seitenfehler ausgelöst, und die niedrigeren Ebenen können die relevanten Daten an einer beliebigen physischen Adresse zurück in den Speicher bringen.

In den schlechten alten Zeiten, in denen nur physische Adressen vorhanden waren, musste Code verlagert (oder beim Laden repariert) werden können, da er überall geladen werden konnte. Bei einem virtuellen Speicher können sich dieser Code (und diese Daten) in einem Dutzend verschiedener Prozesse gleichzeitig auf dem logischen Speicherplatz 50 befinden - die tatsächliche physikalische Adresse ist jedoch unterschiedlich.

Es kann sogar gemeinsam genutzt werden, sodass eine physische Kopie gleichzeitig im Adressraum vieler Prozesse vorhanden ist. Dies ist der springende Punkt bei gemeinsam genutztem Code (daher verwenden wir nicht mehr physischen Speicher als erforderlich) und gemeinsam genutztem Speicher, um eine einfache Kommunikation zwischen Prozessen zu ermöglichen.

Es ist natürlich weniger effizient als eine reine Umgebung mit physischen Adressen, aber die CPU-Hersteller versuchen, es so wahnsinnig effizient wie möglich zu gestalten, da es stark genutzt wird. Die Vorteile weit überwiegen die Nachteile.

46
paxdiablo

die logische Adresse ist die Adresse relativ zum Programm. Es gibt an, wie viel Speicher ein bestimmter Prozess beansprucht, und nicht, wie der genaue Speicherort des Prozesses und dieser genaue Speicherort mithilfe einer Zuordnung ermittelt werden soll. Dies wird als physikalische Adresse bezeichnet.

9
pallavi nigam
  1. Eine von der CPU erzeugte Adresse wird üblicherweise als logische Adresse bezeichnet. Die Menge aller von einem Programm generierten logischen Adressen wird als logischer Adressraum bezeichnet. Während eine Adresse, die von der Speichereinheit gesehen wird, dh diejenige, die in das Speicheradressenregister des Speichers geladen wird, allgemein als physikalische Adresse bezeichnet wird. Die Menge aller physikalischen Adressen, die den logischen Adressen entsprechen, wird als physikalischer Adressraum bezeichnet.
  2. Die Adressbindungsmethoden zum Kompilieren und Laden generieren identische logische und physische Adressen. Im Adressbindungsschema zur Ausführungszeit unterscheiden sich jedoch der logische und der physikalische Adressraum.
  3. Das Anwenderprogramm sieht niemals die physikalischen Adressen. Das Programm erstellt einen Zeiger auf eine logische Adresse, z. B. 346, speichert sie im Speicher, manipuliert sie und vergleicht sie mit anderen logischen Adressen - allesamt mit der Nummer 346. Nur wenn eine logische Adresse als Speicheradresse verwendet wird, wird sie relativ zu verschoben das Basis-/Umzugsregister. Das als Speicherverwaltungseinheit (MMU) bezeichnete Speicherzuordnungs-Hardwaregerät wandelt logische Adressen in physikalische Adressen um.
  4. Logische Adressen reichen von 0 bis max. Das Benutzerprogramm, das die logische Adresse generiert, geht davon aus, dass der Prozess an den Positionen 0 bis max ausgeführt wird. Logische Adressen müssen vor der Verwendung physischen Adressen zugeordnet werden. Die physikalischen Adressen reichen von (R + 0) bis (R + max) für einen Basis-/Verschiebungsregisterwert R.
  5. Beispiel: enter image description here Zuordnung von logischen zu physischen Adressen mit Memory Management Unit (MMU) und Relocation/Base Register Der Wert in Relocation/Base Register wird zu jeder logischen Adresse addiert, die von einem Benutzerprozess zum Zeitpunkt des Sendens in den Speicher an generiert wird entsprechende physikalische Adresse generieren. In der obigen Figur ist der Basis-/Umsiedlungswert 14000, dann wird ein Versuch des Benutzers, auf den Ort 346 zuzugreifen, auf 14346 abgebildet.
4
Elyor

Logische Adresse: - Von der CPU erzeugte logische Adresse. Wenn wir das Problem an den Computer weiterleiten, leitet unser Computer das Problem über eine logische Adresse an den Prozessor weiter. Diese Adresse wird jedoch nicht als logische Adresse bezeichnet.

Physische Adresse: - Wenn unser Prozessor einen Prozess erstellt und unser Problem löst, speichern wir Daten im Sekundärspeicher über eine Adresse, die als physikalische Adresse bezeichnet wird

4
JAINATH GUPTA

Eine logische Adresse ist eine Referenz auf den Speicherort, unabhängig von der aktuellen Zuordnung von Daten zum Speicher. Eine physikalische Adresse oder absolute Adresse ist ein tatsächlicher Ort im Hauptspeicher.

Es ist in Kapitel 7.2 der Hengste.

1
mellodi

Logischer vs. physischer Adressraum

Eine von der CPU erzeugte Adresse wird üblicherweise als logische Adresse bezeichnet, wohingegen die von der Speichereinheit gesehene Adresse, die in das Speicheradressregister des Speichers geladen wird, üblicherweise als physikalische Adresse bezeichnet wird generiert die identischen logischen und physischen Adressen. Das Ausführungszeit-Adressbindungsschema führt jedoch zu unterschiedlichen logischen und physischen Adressen.

Die Menge aller von einem Programm generierten logischen Adressen wird als logischer Adressraum bezeichnet, wohingegen die Menge aller diesen logischen Adressen entsprechenden physikalischen Adressen der physikalische Adressraum ist. Die Laufzeitzuordnung von virtueller Adresse zu physikalischer Adresse erfolgt nun durch a Hardware-Gerät, das als Memory Management Unit bezeichnet wird. Im Fall der Zuordnung wird das Basisregister als Verschiebungsregister bezeichnet. Der Wert im Verschiebungsregister wird zu der Adresse addiert, die von einem Benutzerprozess zum Zeitpunkt des Versendens an den Speicher generiert wird Diese Situation anhand eines Beispiels: Wenn das Basisregister den Wert 1000 enthält, wird ein Versuch des Benutzers, den Ort 0 zu adressieren, dynamisch an den Ort 1000 verlagert, und ein Zugriff auf den Ort 346 wird dem Ort 1346 zugeordnet.

Das Anwenderprogramm sieht nie den realen physikalischen Adressraum, es handelt sich immer um die logischen Adressen. Da wir zwei unterschiedliche Adresstypen haben, liegen die logischen Adressen im Bereich (0 bis max) und die physikalischen Adressen im Bereich (R bis R + max). Wobei R der Wert des Umsetzregisters ist. Der Benutzer generiert nur logische Adressen und denkt, dass der Prozess an Ort und Stelle von 0 bis maximal abläuft. Da aus dem obigen Text hervorgeht, dass das Benutzerprogramm nur logische Adressen bereitstellt, müssen diese logischen Adressen zugeordnet werden an die physikalische Adresse, bevor sie verwendet werden.

1
gurdas singh

Nach meinem besten Wissen ist eine physikalische Adresse eine explizite, in Stein gemeißelte Adresse im Speicher, während eine logische Adresse aus einem Basiszeiger und einem Versatz besteht.

Der Grund ist, wie Sie im Grunde angegeben haben. Es ermöglicht nicht nur die Segmentierung von Programmen und Prozessen in Threads und Daten, sondern auch das dynamische Laden solcher Programme und die Berücksichtigung von zumindest Pseudo-Parallelität, ohne dass ein tatsächliches Verschachteln von Anweisungen im Speicher stattfinden muss.

0
Alex Hart

Ich fand ein Artikel über logische vs physikalische Adresse im Betriebssystem, das dies klar erklärt.

Die logische Adresse wird von der CPU generiert, während ein Programm ausgeführt wird. Die logische Adresse ist eine virtuelle Adresse, da sie physisch nicht vorhanden ist. Daher wird sie auch als virtuelle Adresse bezeichnet. Diese Adresse wird als Referenz für den Zugriff der CPU auf den physischen Speicher verwendet. Der Begriff Logischer Adressraum wird für die Menge aller logischen Adressen verwendet, die von einer Programmperspektive generiert werden. Das als Speicherverwaltungseinheit bezeichnete Hardwaregerät wird zum Zuordnen der logischen Adresse zu der entsprechenden physikalischen Adresse verwendet.

Physische Adresse identifiziert einen physischen Ort der erforderlichen Daten in einem Speicher. Der Benutzer befasst sich nie direkt mit der physischen Adresse, sondern kann über die entsprechende logische Adresse darauf zugreifen. Das Benutzerprogramm generiert die logische Adresse und denkt, dass das Programm unter dieser logischen Adresse ausgeführt wird, das Programm jedoch physischen Speicher für seine Ausführung benötigt. Daher muss die logische Adresse vor der Verwendung auf die physische Adresse bu MMU abgebildet werden . Der Begriff physischer Adressraum wird für alle physischen Adressen verwendet, die den logischen Adressen in einem logischen Adressraum entsprechen.

Logical and Physical Address comparision

Quelle: www.geeksforgeeks.org