Nøgleforskellen mellem logisk adresse og fysisk adresse er, at CPU genererer logisk adresse under programafvikling, mens den fysiske adresse er en placering i hukommelsesenheden.
I enkle vendinger genererer CPU den logiske adresse eller virtuelle adresse. Fra perspektivet af et program, der kører, ser et element ud til at være placeret på den adresse, som den logiske adresse giver. Hukommelsesenheden observerer den fysiske adresse. Desuden giver den adgang til en bestemt hukommelsescelle i hovedhukommelsen via databussen.
Hvad er logisk adresse?
CPU genererer logisk adresse. Fra perspektivet af et program, der kører, ser et element ud til at være placeret på den adresse, som den logiske adresse giver. Applikationsprogrammer, der kører på computeren, kan ikke se de fysiske adresser. De arbejder altid med de logiske adresser. Det logiske adresserum er det sæt af logiske adresser, et program genererer. Det er nødvendigt at kortlægge de logiske adresser til fysiske adresser, før du bruger dem. Hardwareenheden Memory Management Unit (MMU) håndterer denne kortlægningsproces.
MMU-kortlægningsskemaer
MMU følger flere kortlægningsskemaer. I det enkleste kortlægningsskema tilføjes værdien i flytningsregisteret til hver logisk adresse produceret af applikationsprogrammer, før de sendes til hukommelsen. Der er også nogle andre komplekse metoder til at generere kortlægningen. Adressebinding (dvs. allokering af instruktioner og data til hukommelsesadresser) kan ske på tre forskellige tidspunkter.
Figur 01: Logisk og fysisk adresse
For det første kan det ske i kompileringstiden, hvis de faktiske hukommelsesplaceringer er kendt på forhånd, og dette ville generere den absolutte kode i kompileringstiden. Det kan også ske ved indlæsningstid, hvis hukommelsesplaceringerne ikke er kendt på forhånd. Til dette skal der genereres en genplacerbar kode på kompileringstidspunktet. Endvidere kan adressebinding ske på udførelsestidspunktet. Dette kræver hardwareunderstøttelse til adressekortlægning. Ved kompileringstid og indlæsningstidsadressebinding er logiske og fysiske adresser de samme. Men denne procedure er anderledes, når adressebinding sker i eksekveringstiden.
Hvad er fysisk adresse?
Hukommelsesenheden observerer den fysiske adresse eller den rigtige adresse. Det giver databussen adgang til en bestemt hukommelsescelle i hovedhukommelsen. MMU knytter den logiske adresse til fysisk adresse. For eksempel, ved at bruge det enkleste kortskema, som tilføjer omplaceringsregisteret (antag, at værdien i registeret er y) til den logiske adresse, vil en logisk adresse spænder fra 0 til x tilknyttes et fysisk adresseområde y til x+ y.
Yderligere kaldes dette også det fysiske adresseområde for det pågældende program. Alle de logiske adresser skal tilknyttes fysiske adresser, før de kan bruges.
Hvad er forskellen mellem logisk adresse og fysisk adresse?
Logisk adresse vs. fysisk adresse |
|
Logisk adresse er den adresse, hvor et element ser ud til at ligge fra et kørende applikationsprograms perspektiv. | Fysisk adresse er en hukommelsesadresse, der er repræsenteret i form af et binært tal på adressebuskredsløbet for at gøre det muligt for databussen at få adgang til en bestemt lagercelle i hovedhukommelsen eller et hukommelsesregister, der er kortlagt I /O enhed. |
Synlighed | |
Brugeren kan se den logiske adresse på et program. | Brugeren kan ikke se programmets fysiske adresse. |
Generationsmetode | |
CPU genererer den logiske adresse. | MMU beregner den fysiske adresse. |
Tilgængelighed | |
Brugeren kan bruge den logiske adresse til at få adgang til den fysiske adresse. | Brugeren kan ikke få direkte adgang til den fysiske adresse. |
Oversigt – logisk adresse vs fysisk adresse
Forskellen mellem logisk adresse og fysisk adresse er, at CPU genererer logisk adresse, når programmet udføres, mens den fysiske adresse er en placering i hukommelsesenheden. Alle de logiske adresser skal tilknyttes fysiske adresser, før MMU'en kan bruge dem. Fysiske og logiske adresser er de samme, når du bruger kompileringstid og adressebinding til indlæsningstid, men de adskiller sig, når du bruger adressebinding til udførelsestid.