Espai d'adreces virtuals

conjunt d'intervals d'adreces virtuals que un sistema operatiu posa a disposició d'un procés

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).