"가상 메모리"와 "스왑 공간"의 차이점은 무엇입니까?


85

누구든지 가상 메모리스왑 공간 의 차이점이 무엇인지 분명히 해줄 수 있습니까 ?

32 비트 시스템의 경우 액세스 가능한 최대 가상 메모리가 4GB라고 말하는 이유는 무엇입니까?



@startblue 당신에 의해 주어진 링크는 내 질문에 대한 대답은 .. 얼마나
너 한테 괴짜

@ algo-geeks-실제로 답변은 아니지만이 주제에 대해 매우 유용 할 수있는 답변에 연결되어 있다고 생각합니다. 그리고 그것이 있어야 할 정확한 위치, imho에 주석에 기록됩니다. :)
Muhamed Huseinbašić 2017 년

답변:


113

수퍼 유저 에 대한 가상 메모리의 뛰어난 이식이 있습니다.

간단히 말해서 가상 메모리는 실행중인 프로세스가 사용할 수있는 RAM과 디스크 공간의 조합입니다.

스왑 공간은 RAM이 꽉 찼을 때 사용되는 하드 디스크에있는 가상 메모리의 일부입니다.

32 비트 CPU가 4GB 가상 메모리로 제한되는 이유는 다음과 같습니다.

정의에 따라 32 비트 프로세서는 32 비트를 사용하여 메모리의 각 바이트 위치를 참조합니다. 2 ^ 32 = 42 억, 이는 32 비트 길이의 메모리 주소가 42 억 개의 고유 위치 (예 : 4GB) 만 참조 할 수 있음을 의미합니다.


1
그렇다면 실제 RAM = 가상-스왑입니까?
user48956

4
이 대답은 완전히 틀 렸습니다. 사람은 1GB 파일을 100 번 메모리 매핑하고 1GB RAM이있는 머신에서 100GB의 가상 메모리를 사용할 수 있습니다. 사용중인 100GB의 가상 메모리를 확보하기 위해 RAM 및 디스크 공간을 추가 할 방법이 없습니다.
David Schwartz

@DavidSchwartz 정말 아닙니다. 파일의 메모리 매핑은 파일을 메모리로로드하지 않습니다. 따라서 단순히 1GB 파일을 100 번 mmap-ing하면 100GB가 사용되지 않습니다.
Felix

1
@Felix 당신이 틀 렸습니다. "메모리에로드하지 않습니다"라고 말하면 "메모리"라는 단어를 사용하여 실제 메모리, 즉 RAM을 의미합니다. 우리는 물리적 메모리가 아닌 가상 메모리 에 대해 이야기하고 있습니다. 가상 메모리는 일반적으로 물리적 메모리처럼 고정 풀에서 가져 오지 않고 필요할 때 생성됩니다.
데이비드 슈워츠

그럼 그냥보고 질문일까요? mmapped 메모리 양을 계산하는 것이 합리적입니까? 실제로 그렇게 많이 사용하지 않으므로 RAM 또는 스왑에 있습니다.
Felix

60

가상 메모리라는 용어에 대해 약간의 혼동이 있으며 실제로 다음 두 가지 매우 다른 개념을 나타냅니다.

  1. 디스크 페이지를 사용하여 컴퓨터에있는 물리적 메모리의 개념적 양을 확장-정확한 용어는 실제로 페이징입니다.
  2. 별도의 인접 주소 공간에서 실행되는 각 프로세스의 환상을 만들기 위해 다양한 OS / CPU에서 사용하는 추상화입니다.

스왑 공간, OTOH는 사용하지 않을 때 추가 RAM 페이지를 저장하는 데 사용되는 디스크 부분의 이름입니다.

중요한 인식은 후자의 하드웨어 및 OS 지원으로 인해 전자가 투명하게 가능하다는 것입니다.

이 모든 것을 더 잘 이해하려면 CPU 및 OS에서 "가상 메모리"(정의 2 참조)를 지원하는 방법을 고려해야합니다.

32 비트 포인터가 있다고 가정합니다 (64 비트 포인트는 비슷하지만 약간 다른 메커니즘을 사용합니다). "가상 메모리"가 활성화되면 프로세서는이 포인터를 세 부분으로 간주합니다.

  • 가장 높은 10 비트는 페이지 디렉토리 항목입니다.
  • 다음 10 비트는 페이지 테이블 항목입니다.
  • 마지막 12 비트는 페이지 오프셋을 구성합니다.

이제 CPU가 포인터의 내용에 액세스하려고 할 때 먼저 1024 개의 항목으로 구성된 테이블 인 페이지 디렉토리 테이블을 참조합니다 (X86 아키텍처에서 위치는 CR3 레지스터에 의해 지정됨). 10 비트 페이지 디렉토리 엔트리는 테이블의 인덱스의 물리적 인 위치를 가리키는 페이지 테이블 . 차례로 이것은 각각 물리적 메모리의 포인터 인 1024 개의 항목과 몇 가지 중요한 제어 비트로 구성된 또 다른 테이블입니다. (나중에 다시 설명하겠습니다). 페이지가 발견되면 마지막 12 비트가 해당 페이지 내에서 주소를 찾는 데 사용됩니다.

있습니다 많은 더 세부 사항 (TLB를, 대형 페이지, PAE, 선택기, 페이지 보호)하지만 일의 요점 캡처 위의 짧은 설명.

이 변환 메커니즘을 사용하여 OS는 각 프로세스에 대해 서로 다른 물리적 페이지 세트를 사용할 수 있으므로 각 프로세스가 자체적으로 모든 메모리를 가지고 있다는 환상을 갖게됩니다 (각 프로세스가 자체 페이지 디렉토리를 가져옴).

가상 메모리 위에 OS는 페이징 개념을 추가 할 수도 있습니다 . 앞에서 설명한 제어 비트 중 하나를 사용하면 항목이 "현재"인지 여부를 지정할 수 있습니다. 존재하지 않는 경우 해당 항목에 액세스하려고하면 페이지 오류 예외가 발생합니다. OS는이 예외를 캡처하고 그에 따라 작동 할 수 있습니다. 따라서 스와핑 / 페이징을 지원하는 OS는 스왑 공간 에서 페이지를로드 하고 변환 테이블을 수정 한 다음 메모리 액세스를 다시 실행 하도록 결정할 수 있습니다 .

이것은 두 용어가 결합 된 곳입니다. 가상 메모리와 페이징을 지원하는 OS는 스왑 영역 안팎으로 페이지를 페이징 (스와핑)하여 실제로 존재하는 것보다 더 많은 메모리를 프로세스에 제공 할 수 있습니다.

마지막 질문에 관해서는 (32 비트 CPU가 4GB 가상 메모리로 제한되는 이유는 무엇입니까?) 이것은 정의 2의 "가상 메모리"를 나타내며 포인터 크기의 즉각적인 결과입니다. CPU가 32 비트 포인터 만 사용할 수있는 경우 다른 주소를 표현하는 데 32 비트 만 있으면 2 ^ 32 = 4GB의 주소 지정 가능 메모리가됩니다.

이것이 일이 좀 더 명확 해지기를 바랍니다.


12

IMHO 스왑 공간 개념을 가상 메모리와 동일하게 사용하는 것은 몹시 오해의 소지가 있습니다. VM은 스왑 공간보다 훨씬 일반적인 개념입니다. 무엇보다도 VM을 사용하면 프로세스가 실행 중에 가상 주소를 참조 할 수 있으며, 이는 하드웨어 및 페이지 테이블을 지원하여 물리적 주소로 변환됩니다. 따라서 프로세스는 시스템에있는 실제 메모리의 양이나 명령 또는 데이터가 실제 메모리 계층 구조에서 실제로 상주하는 위치에 대해 관심이 없습니다. VM은이 매핑을 허용합니다. 참조 된 항목 (명령 또는 데이터)은 L1, L2 또는 RAM에 상주하거나 마지막으로 디스크에있을 수 있으며,이 경우 주 메모리에로드됩니다.

스왑 공간은 페이지가 비활성 상태 일 때 저장되는 보조 메모리의 위치입니다. RAM이 충분하지 않으면 OS는 다른 프로세스 페이지를위한 공간을 만들기 위해 프로세스의 페이지를 교체하기로 결정할 수 있습니다. 프로세서는 스왑 공간에서 직접 명령을 실행하거나 데이터를 읽거나 쓰지 않습니다.

VM이없는 시스템에서 스왑 공간을 가질 수 있습니다. 즉, 물리적 주소에 직접 액세스하는 프로세스는 여전히 디스크의 일부를 가질 수 있습니다.


5

스레드가 꽤 오래되었고 이미 답변을 받았습니다. 지금까지 찾은 가장 간단한 설명이므로이 링크를 공유하고 싶습니다. 아래 링크에는 더 나은 시각화를위한 다이어그램이 있습니다.

주요 차이점 : 가상 메모리는 주 메모리의 추상화입니다. 콘텐츠 RAM의 비활성 부분을 디스크에 저장하여 컴퓨터의 사용 가능한 메모리를 확장합니다. 콘텐츠가 필요할 때마다 RAM으로 다시 가져옵니다. 스왑 메모리 또는 스왑 공간은 가상 메모리에 사용되는 하드 디스크 드라이브의 일부입니다. 따라서 둘 다 같은 의미로 사용됩니다.

가상 메모리는 실제 메모리와는 다릅니다. 프로그래머는 실제 메모리가 아닌 가상 메모리에 직접 액세스 할 수 있습니다. 가상 메모리는 주 메모리의 추상화입니다. 시스템의 실제 물리적 메모리 정보를 숨기는 데 사용됩니다. RAM 콘텐츠의 비활성 부분을 디스크에 저장하여 컴퓨터의 사용 가능한 메모리를 확장합니다. 콘텐츠가 필요한 경우 RAM으로 다시 가져옵니다. 가상 메모리는 주소가 0으로 시작하는 전체 주소 공간의 환상을 만듭니다. 공간 요구 사항을 줄이는 최적화 기능으로 주로 선호됩니다. 사용 가능한 RAM과 디스크 공간으로 구성됩니다.

스왑 메모리는 일반적으로 스왑 공간이라고합니다. 스왑 공간은 임시 저장 위치로 예약 된 가상 메모리 부분을 나타냅니다. 스왑 공간은 사용 가능한 RAM이 시스템 메모리 요구 사항을 충족하지 못할 때 사용됩니다. 예를 들어, Linux 메모리 시스템에서 커널은 물리적 메모리 또는 스왑 공간에서 각 페이지를 찾습니다. 커널은 또한 스왑 아웃 된 페이지 및 실제 메모리의 페이지에 관한 정보가 보관되는 테이블을 유지합니다. 오랫동안 액세스하지 않은 페이지는 스왑 공간 영역으로 전송됩니다. 이 프로세스를 스왑 아웃이라고합니다. 동일한 페이지가 필요한 경우 다른 페이지를 교체하여 실제 메모리에서 교체됩니다. 그러므로,

가상 메모리와 스왑 메모리 간의 차이


이 링크가 질문에 답할 수 있지만 여기에 답변의 필수 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 무효화 될 수 있습니다. - 검토에서
무 코팅

감사합니다. 게시물을 개선했습니다.
ram619

0

"가상 메모리"는 일반적인 용어입니다. Windows에서는 페이징 또는 페이지 매김이라고합니다. Linux에서는 Swap이라고합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.