请输入您要查询的百科知识:

 

词条 Virtual address space
释义

  1. Example

  2. Linux

  3. See also

  4. Notes

  5. References

{{redirect2|Virtual address|virtual addressing}}{{multiple issues|{{one source|date=August 2012}}{{undue weight|date=August 2012}}}}

In computing, a virtual address space (VAS) or address space is the set of ranges of virtual addresses that an operating system makes available to a process.[1] The range of virtual addresses usually starts at a low address and can extend to the highest address allowed by the computer's instruction set architecture and supported by the operating system's pointer size implementation, which can be 4 bytes for 32-bit or 8 bytes for 64-bit OS versions. This provides several benefits, one of which is security through process isolation assuming each process is given a separate address space.

Example

In the following description, the terminology used will be particular to the Windows NT operating system, but the concepts are applicable to other virtual memory operating systems.

When a new application on a 32-bit OS is executed, the process has a {{nowrap|4 GiB}} VAS: each one of the memory addresses (from 0 to 232 − 1) in that space can have a single byte as a value. Initially, none of them have values ('-' represents no value). Using or setting values in such a VAS would cause a memory exception.

            0                                           4 GiB VAS        |----------------------------------------------|

Then the application's executable file is mapped into the VAS. Addresses in the process VAS are mapped to bytes in the exe file. The OS manages the mapping:

            0                                           4 GiB VAS        |---vvvvvvv------------------------------------| mapping        |-----| file bytes     app.exe

The v's are values from bytes in the mapped file. Then, required DLL files are mapped (this includes custom libraries as well as system ones such as kernel32.dll and user32.dll):

            0                                           4 GiB VAS        |---vvvvvvv----vvvvvv---vvvv-------------------| mapping        |||||||    ||||||   |||| file bytes     app.exe    kernel   user

The process then starts executing bytes in the exe file. However, the only way the process can use or set '-' values in its VAS is to ask the OS to map them to bytes from a file. A common way to use VAS memory in this way is to map it to the page file. The page file is a single file, but multiple distinct sets of contiguous bytes can be mapped into a VAS:

            0                                           4 GiB VAS        |---vvvvvvv----vvvvvv---vvvv----vv---v----vvv--| mapping        |||||||    ||||||   ||||    ||   |    ||| file bytes     app.exe    kernel   user   system_page_file

And different parts of the page file can map into the VAS of different processes:

            0                                           4 GiB VAS 1      |---vvvv-------vvvvvv---vvvv----vv---v----vvv--| mapping        ||||       ||||||   ||||    ||   |    ||| file bytes     app1 app2  kernel   user   system_page_file mapping             ||||  ||||||   ||||       ||   | VAS 2      |--------vvvv--vvvvvv---vvvv-------vv---v------|

On Microsoft Windows 32-bit, by default, only {{nowrap|2 GiB}} are made available to processes for their own use.[2] The other {{nowrap|2 GiB}} are used by the operating system. On later 32-bit editions of Microsoft Windows it is possible to extend the user-mode virtual address space to {{nowrap|3 GiB}} while only {{nowrap|1 GiB}} is left for kernel-mode virtual address space by marking the programs as IMAGE_FILE_LARGE_ADDRESS_AWARE and enabling the /3GB switch in the boot.ini file.[3][4]

On Microsoft Windows 64-bit, in a process running an executable that was linked with /LARGEADDRESSAWARE:NO, the operating system artificially limits the user mode portion of the process's virtual address space to 2 GiB. This applies to both 32- and 64-bit executables.[4][5] Processes running executables that were linked with the /LARGEADDRESSAWARE:YES option, which is the default for 64-bit Visual Studio 2010 and later,[6] have access to more than {{nowrap|2 GiB}} of virtual address space: Up to {{nowrap|4 GiB}} for 32-bit executables, up to {{nowrap|8 TiB}} for 64-bit executables in Windows through Windows 8, and up to {{nowrap|128 TiB}} for 64-bit executables in Windows 8.1 and later.[7][8]

Allocating memory via C's malloc establishes the

page file as the backing store for any new virtual address space. However, a process can also explicitly map file bytes.

Linux

For x86 CPUs, Linux 32-bit allows splitting the user and kernel address ranges in different ways: 3G/1G user/kernel (default), 1G/3G user/kernel or 2G/2G user/kernel.[9]

See also

  • Linear address space

Notes

1. ^{{cite web|last=IBM Corporation|title=What is an address space?|url=http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.zos.zconcepts/zconcepts_82.htm|accessdate=August 24, 2013}}
2. ^{{cite web|url=https://msdn.microsoft.com/en-us/library/aa366912(VS.85).aspx|title=Virtual Address Space|publisher=Microsoft|work=MSDN}}
3. ^{{cite web|url=https://msdn.microsoft.com/en-us/library/ms680349(v=VS.85).aspx|title=LOADED_IMAGE structure|publisher=Microsoft|work=MSDN}}
4. ^{{cite web|url=https://msdn.microsoft.com/en-us/library/wz223b1z%28v=VS.100%29.aspx|title=/LARGEADDRESSAWARE (Handle Large Addresses)|publisher=Microsoft|work=MSDN}}
5. ^{{cite web|url=https://msdn.microsoft.com/en-us/library/aa384271%28VS.85%29.aspx|title=Virtual Address Space|publisher=Microsoft|work=MSDN}}
6. ^{{cite web|url=https://msdn.microsoft.com/en-us/library/wz223b1z(v=vs.100).aspx|title=/LARGEADDRESSAWARE (Handle Large Addresses)|publisher=Microsoft|work=MSDN}}
7. ^{{cite web|url=https://msdn.microsoft.com/en-us/library/bb613473(v=VS.85).aspx|title=4-Gigabyte Tuning: BCDEdit and Boot.ini|publisher=Microsoft|work=MSDN}}
8. ^{{cite web|url=https://msdn.microsoft.com/en-us/library/wz223b1z(VS.80).aspx|title=/LARGEADDRESSAWARE (Handle Large Addresses)|publisher=Microsoft|work=MSDN}}
9. ^{{cite web|url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/Kconfig#n1410|title=Linux kernel - x86: Memory split}}

References

  • "Advanced Windows" by Jeffrey Richter, Microsoft Press
{{Data types}}Virtueller Adressraum

1 : Virtual memory

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/9/21 3:34:28