누구든지 가상 메모리 와 스왑 공간 의 차이점이 무엇인지 분명히 해줄 수 있습니까 ?
32 비트 시스템의 경우 액세스 가능한 최대 가상 메모리가 4GB라고 말하는 이유는 무엇입니까?
누구든지 가상 메모리 와 스왑 공간 의 차이점이 무엇인지 분명히 해줄 수 있습니까 ?
32 비트 시스템의 경우 액세스 가능한 최대 가상 메모리가 4GB라고 말하는 이유는 무엇입니까?
답변:
수퍼 유저 에 대한 가상 메모리의 뛰어난 이식이 있습니다.
간단히 말해서 가상 메모리는 실행중인 프로세스가 사용할 수있는 RAM과 디스크 공간의 조합입니다.
스왑 공간은 RAM이 꽉 찼을 때 사용되는 하드 디스크에있는 가상 메모리의 일부입니다.
32 비트 CPU가 4GB 가상 메모리로 제한되는 이유는 다음과 같습니다.
정의에 따라 32 비트 프로세서는 32 비트를 사용하여 메모리의 각 바이트 위치를 참조합니다. 2 ^ 32 = 42 억, 이는 32 비트 길이의 메모리 주소가 42 억 개의 고유 위치 (예 : 4GB) 만 참조 할 수 있음을 의미합니다.
가상 메모리라는 용어에 대해 약간의 혼동이 있으며 실제로 다음 두 가지 매우 다른 개념을 나타냅니다.
스왑 공간, OTOH는 사용하지 않을 때 추가 RAM 페이지를 저장하는 데 사용되는 디스크 부분의 이름입니다.
중요한 인식은 후자의 하드웨어 및 OS 지원으로 인해 전자가 투명하게 가능하다는 것입니다.
이 모든 것을 더 잘 이해하려면 CPU 및 OS에서 "가상 메모리"(정의 2 참조)를 지원하는 방법을 고려해야합니다.
32 비트 포인터가 있다고 가정합니다 (64 비트 포인트는 비슷하지만 약간 다른 메커니즘을 사용합니다). "가상 메모리"가 활성화되면 프로세서는이 포인터를 세 부분으로 간주합니다.
이제 CPU가 포인터의 내용에 액세스하려고 할 때 먼저 1024 개의 항목으로 구성된 테이블 인 페이지 디렉토리 테이블을 참조합니다 (X86 아키텍처에서 위치는 CR3 레지스터에 의해 지정됨). 10 비트 페이지 디렉토리 엔트리는 테이블의 인덱스의 물리적 인 위치를 가리키는 페이지 테이블 . 차례로 이것은 각각 물리적 메모리의 포인터 인 1024 개의 항목과 몇 가지 중요한 제어 비트로 구성된 또 다른 테이블입니다. (나중에 다시 설명하겠습니다). 페이지가 발견되면 마지막 12 비트가 해당 페이지 내에서 주소를 찾는 데 사용됩니다.
있습니다 많은 더 세부 사항 (TLB를, 대형 페이지, PAE, 선택기, 페이지 보호)하지만 일의 요점 캡처 위의 짧은 설명.
이 변환 메커니즘을 사용하여 OS는 각 프로세스에 대해 서로 다른 물리적 페이지 세트를 사용할 수 있으므로 각 프로세스가 자체적으로 모든 메모리를 가지고 있다는 환상을 갖게됩니다 (각 프로세스가 자체 페이지 디렉토리를 가져옴).
이 가상 메모리 위에 OS는 페이징 개념을 추가 할 수도 있습니다 . 앞에서 설명한 제어 비트 중 하나를 사용하면 항목이 "현재"인지 여부를 지정할 수 있습니다. 존재하지 않는 경우 해당 항목에 액세스하려고하면 페이지 오류 예외가 발생합니다. OS는이 예외를 캡처하고 그에 따라 작동 할 수 있습니다. 따라서 스와핑 / 페이징을 지원하는 OS는 스왑 공간 에서 페이지를로드 하고 변환 테이블을 수정 한 다음 메모리 액세스를 다시 실행 하도록 결정할 수 있습니다 .
이것은 두 용어가 결합 된 곳입니다. 가상 메모리와 페이징을 지원하는 OS는 스왑 영역 안팎으로 페이지를 페이징 (스와핑)하여 실제로 존재하는 것보다 더 많은 메모리를 프로세스에 제공 할 수 있습니다.
마지막 질문에 관해서는 (32 비트 CPU가 4GB 가상 메모리로 제한되는 이유는 무엇입니까?) 이것은 정의 2의 "가상 메모리"를 나타내며 포인터 크기의 즉각적인 결과입니다. CPU가 32 비트 포인터 만 사용할 수있는 경우 다른 주소를 표현하는 데 32 비트 만 있으면 2 ^ 32 = 4GB의 주소 지정 가능 메모리가됩니다.
이것이 일이 좀 더 명확 해지기를 바랍니다.
IMHO 스왑 공간 개념을 가상 메모리와 동일하게 사용하는 것은 몹시 오해의 소지가 있습니다. VM은 스왑 공간보다 훨씬 일반적인 개념입니다. 무엇보다도 VM을 사용하면 프로세스가 실행 중에 가상 주소를 참조 할 수 있으며, 이는 하드웨어 및 페이지 테이블을 지원하여 물리적 주소로 변환됩니다. 따라서 프로세스는 시스템에있는 실제 메모리의 양이나 명령 또는 데이터가 실제 메모리 계층 구조에서 실제로 상주하는 위치에 대해 관심이 없습니다. VM은이 매핑을 허용합니다. 참조 된 항목 (명령 또는 데이터)은 L1, L2 또는 RAM에 상주하거나 마지막으로 디스크에있을 수 있으며,이 경우 주 메모리에로드됩니다.
스왑 공간은 페이지가 비활성 상태 일 때 저장되는 보조 메모리의 위치입니다. RAM이 충분하지 않으면 OS는 다른 프로세스 페이지를위한 공간을 만들기 위해 프로세스의 페이지를 교체하기로 결정할 수 있습니다. 프로세서는 스왑 공간에서 직접 명령을 실행하거나 데이터를 읽거나 쓰지 않습니다.
VM이없는 시스템에서 스왑 공간을 가질 수 있습니다. 즉, 물리적 주소에 직접 액세스하는 프로세스는 여전히 디스크의 일부를 가질 수 있습니다.
스레드가 꽤 오래되었고 이미 답변을 받았습니다. 지금까지 찾은 가장 간단한 설명이므로이 링크를 공유하고 싶습니다. 아래 링크에는 더 나은 시각화를위한 다이어그램이 있습니다.
주요 차이점 : 가상 메모리는 주 메모리의 추상화입니다. 콘텐츠 RAM의 비활성 부분을 디스크에 저장하여 컴퓨터의 사용 가능한 메모리를 확장합니다. 콘텐츠가 필요할 때마다 RAM으로 다시 가져옵니다. 스왑 메모리 또는 스왑 공간은 가상 메모리에 사용되는 하드 디스크 드라이브의 일부입니다. 따라서 둘 다 같은 의미로 사용됩니다.
가상 메모리는 실제 메모리와는 다릅니다. 프로그래머는 실제 메모리가 아닌 가상 메모리에 직접 액세스 할 수 있습니다. 가상 메모리는 주 메모리의 추상화입니다. 시스템의 실제 물리적 메모리 정보를 숨기는 데 사용됩니다. RAM 콘텐츠의 비활성 부분을 디스크에 저장하여 컴퓨터의 사용 가능한 메모리를 확장합니다. 콘텐츠가 필요한 경우 RAM으로 다시 가져옵니다. 가상 메모리는 주소가 0으로 시작하는 전체 주소 공간의 환상을 만듭니다. 공간 요구 사항을 줄이는 최적화 기능으로 주로 선호됩니다. 사용 가능한 RAM과 디스크 공간으로 구성됩니다.
스왑 메모리는 일반적으로 스왑 공간이라고합니다. 스왑 공간은 임시 저장 위치로 예약 된 가상 메모리 부분을 나타냅니다. 스왑 공간은 사용 가능한 RAM이 시스템 메모리 요구 사항을 충족하지 못할 때 사용됩니다. 예를 들어, Linux 메모리 시스템에서 커널은 물리적 메모리 또는 스왑 공간에서 각 페이지를 찾습니다. 커널은 또한 스왑 아웃 된 페이지 및 실제 메모리의 페이지에 관한 정보가 보관되는 테이블을 유지합니다. 오랫동안 액세스하지 않은 페이지는 스왑 공간 영역으로 전송됩니다. 이 프로세스를 스왑 아웃이라고합니다. 동일한 페이지가 필요한 경우 다른 페이지를 교체하여 실제 메모리에서 교체됩니다. 그러므로,