가상 주소 공간
Virtual address space![]() |

컴퓨팅에서 가상 주소 공간(VAS)은 운영 체제가 [1]프로세스에서 사용할 수 있도록 하는 가상 주소 범위의 집합입니다.가상 주소의 범위는 일반적으로 낮은 주소에서 시작하며 컴퓨터의 명령 집합 아키텍처에서 허용하고 운영 체제의 포인터 크기 구현에서 지원하는 가장 높은 주소로 확장될 수 있습니다. 32비트의 경우 4바이트, 64비트의 경우 8바이트입니다.이는 여러 가지 이점을 제공하며, 그 중 하나는 각 프로세스에 별도의 주소 공간이 제공된다고 가정할 때 프로세스 격리를 통한 보안입니다.
예
32비트 OS에서 새 응용 프로그램이 실행될 때 프로세스는 4Gb VAS를 갖습니다. 이 공간의 각 메모리 주소(032 ~ 2 - 1)는 값으로 단일 바이트를 가질 수 있습니다.처음에는 값('-'은 값이 없음을 나타냅니다.이러한 VAS에서 값을 사용하거나 설정하면 메모리 예외가 발생합니다.
04 GiB VAS -----------------------------------------
그런 다음 응용 프로그램의 실행 파일이 VAS에 매핑됩니다.프로세스 VAS의 주소는 exe 파일의 바이트에 매핑됩니다.OS가 매핑을 관리합니다.
04 GiBVAS ---vvv--------------------------------------------------------------------------------------------------------------------------
v는 매핑된 파일의 바이트 값입니다.그런 다음 필요한 DLL 파일이 매핑됩니다(사용자 정의 라이브러리 및 다음과 같은 시스템 라이브러리 포함).kernel32.dll
그리고.user32.dll
):
04 GiBVAS ---vvvv------vvvvvv------------------------------------------------------------------------------------------------------------------------------
그러면 프로세스가 EXE 파일의 바이트 실행을 시작합니다.그러나 프로세스가 VAS에서 '-' 값을 사용하거나 설정할 수 있는 유일한 방법은 OS에 파일의 바이트에 매핑하도록 요청하는 것입니다.이러한 방식으로 VAS 메모리를 사용하는 일반적인 방법은 페이지 파일에 매핑하는 것입니다.페이지 파일은 단일 파일이지만 연속된 여러 바이트 집합을 VAS에 매핑할 수 있습니다.
04 GiBVAS ---vvvv----vvvvvv----vvvvv----vvv----vvvv-----vvvv---vvv---mapp 커널 사용자 system_page_file
페이지 파일의 다른 부분은 다른 프로세스의 VAS에 매핑할 수 있습니다.
04 GiB VAS 1 ---vvvvvv-----vvvvv-----vvvv-----vvv---vvv--매핑 파일 바이트 app1 app2 커널 사용자 시스템_페이지_파일 매핑 VAS 2 ------vvvvvvvvvv---------------------------vvvvvvvvvvvvvv--------------------------------------------------------------------------------------
마이크로소프트 윈도우즈 32비트에서는 기본적으로 프로세스에서 [2]2Gb만 사용할 수 있습니다.나머지 2Gb는 운영 체제에서 사용됩니다.이후 32비트 버전의 마이크로소프트 윈도우즈에서는 프로그램을 IMAGE_FILE_LARGE_ADDRESS_AWARE로 표시하고 사용자 모드 가상 주소 공간을 3Gb로 확장할 수 있으며 커널 모드 가상 주소 공간을 3 GiB로 확장할 수 있습니다./3GB
boot.ini [3][4]파일을 전환합니다.
마이크로소프트 윈도우즈 64비트에서 다음과 연결된 실행 파일을 실행하는 프로세스/LARGEADDRESSAWARE:NO
운영 체제는 프로세스의 가상 주소 공간에서 사용자 모드 부분을 2Gb로 인위적으로 제한합니다.이는 32비트 및 64비트 실행 [5][6]파일 모두에 적용됩니다.에 연결된 실행 파일을 실행하는 프로세스/LARGEADDRESSAWARE:YES
64비트 Visual Studio 2010 [7]이상의 경우 기본값인 옵션은 2Gb 이상의 가상 주소 공간에 액세스할 수 있습니다. 32비트 실행 파일의 경우 최대 4Gb, 윈도우즈 8을 통해 윈도우즈 64비트 실행 파일의 경우 최대 8TiB, 윈도우즈 8.[4][8]1 이상의 경우 64비트 실행 파일의 경우 최대 128TiB입니다.
C의 malloc를 통해 메모리를 할당하면 페이지 파일이 새 가상 주소 공간의 백업 저장소로 설정됩니다.그러나 프로세스는 파일 바이트를 명시적으로 매핑할 수도 있습니다.
리눅스
x86 CPU의 경우 Linux 32비트를 사용하면 3G/1G 사용자/커널(기본값), 1G/3G 사용자/커널 또는 2G/2G 사용자/[9]커널과 같은 다양한 방법으로 사용자 및 커널 주소 범위를 분할할 수 있습니다.
참고 항목
메모들
- ^ IBM Corporation. "What is an address space?". Retrieved August 24, 2013.
- ^ "Virtual Address Space". MSDN. Microsoft.
- ^ "LOADED_IMAGE structure". MSDN. Microsoft.
- ^ a b "4-Gigabyte Tuning: BCDEdit and Boot.ini". MSDN. Microsoft.
- ^ "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
- ^ "Virtual Address Space". MSDN. Microsoft.
- ^ "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
- ^ "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
- ^ "Linux kernel - x86: Memory split".
레퍼런스
- 마이크로소프트 프레스, 제프리 리히터의 "고급 윈도우"