Vés al contingut

Espai d'adreces virtuals

De la Viquipèdia, l'enciclopèdia lliure

En informàtica, un espai d'adreces virtuals (VAS) o espai d'adreces és el conjunt d'intervals d'adreces virtuals que un sistema operatiu posa a disposició d'un procés.[1] L'interval d'adreces virtuals sol començar a una adreça baixa i es pot estendre fins a l'adreça més alta permesa per l'arquitectura del conjunt d'instruccions de l'ordinador i compatible amb la implementació de la mida del punter del sistema operatiu, que pot ser de 4 bytes per a 32 bits o 8 bytes per a 32 bits. Versions de SO de 64 bits. Això proporciona diversos avantatges, un dels quals és la seguretat mitjançant l'aïllament del procés, assumint que cada procés té un espai d'adreces independent.

Exemple

[modifica]
A la descripció següent, la terminologia utilitzada serà particular del sistema operatiu Windows NT, però els conceptes són aplicables a altres sistemes operatius de memòria virtual.

Quan s'executa una nova aplicació en un sistema operatiu de 32 bits, el procés té un VAS de 4 GiB: cadascuna de les adreces de memòria (de 0 a 2³²−1) en aquest espai pot tenir un únic byte com a valor. Inicialment, cap d'ells té valors ('-' no representa cap valor). L'ús o l'establiment de valors en aquest VAS provocaria una excepció de memòria.

A Microsoft Windows de 32 bits, de manera predeterminada, només 2 GiB estan disponibles per als processos per al seu propi ús.[2] Els altres 2 GiB són utilitzats pel sistema operatiu. A les edicions posteriors de 32 bits de Microsoft Windows, és possible ampliar l'espai d'adreces virtuals en mode d'usuari a 3 GiB, mentre que només queda 1 GiB per a l'espai d'adreces virtuals en mode nucli marcant els programes com a IMAGE_FILE_LARGE_ADDRESS_AWARE i activant el commutador /3GB al fitxer boot.ini.[3][4]

A Microsoft Windows de 64 bits, en un procés que executa un executable que estava enllaçat amb /LARGEADDRESSAWARE:NO, el sistema operatiu limita artificialment la part del mode d'usuari de l'espai d'adreces virtuals del procés a 2 GiB. Això s'aplica tant a executables de 32 com a 64 bits.[5][6] Els processos que executen executables que estaven enllaçats amb l'opció /LARGEADDRESSAWARE:YES, que és el valor predeterminat per a Visual Studio 2010 de 64 bits i posteriors,[7] tenen accés a més de 2 GiB d'espai d'adreces virtuals: fins a 4 GiB per a 32- executables de bits, fins a 8 TiB per a executables de 64 bits a Windows a Windows 8 i fins a 128 TiB per a executables de 64 bits a Windows 8.1 i posterior.[8][9]

Per a les CPU x86, Linux de 32 bits permet dividir els intervals d'adreces de l'usuari i el nucli de diferents maneres: usuari/nucli 3G/1G (per defecte), usuari/nucli 1G/3G o usuari/nucli 2G/2G.[10]

Referències

[modifica]
  1. IBM Corporation. «What is an address space?» (en anglès). [Consulta: 24 agost 2013].
  2. «Virtual Address Space» (en anglès). MSDN. Microsoft.
  3. «LOADED_IMAGE structure» (en anglès). MSDN. Microsoft.
  4. «4-Gigabyte Tuning: BCDEdit and Boot.ini» (en anglès). MSDN. Microsoft.
  5. «/LARGEADDRESSAWARE (Handle Large Addresses)» (en anglès). MSDN. Microsoft.
  6. «Virtual Address Space» (en anglès). MSDN. Microsoft.
  7. «/LARGEADDRESSAWARE (Handle Large Addresses)» (en anglès). MSDN. Microsoft.
  8. «4-Gigabyte Tuning: BCDEdit and Boot.ini» (en anglès). MSDN. Microsoft.
  9. «/LARGEADDRESSAWARE (Handle Large Addresses)» (en anglès). MSDN. Microsoft.
  10. «Linux kernel - x86: Memory split» (en anglès).