가상 메모리 란 무엇입니까?


27

'가상 메모리'에 대한 메모를 두 번 확인했으며 교과서의 정의는 다음과 같습니다.

주 메모리의 일부로 작동하도록 보조 스토리지 섹션을 할당하는 프로세스

어디로 위키 백과는 말합니다 :

가상 메모리는 응용 프로그램에 인접한 작업 메모리 (주소 공간)가 있다는 인상을주는 컴퓨터 시스템 기술입니다.

그리고 (Wikipedia도 말합니다)

"가상 메모리"는 "디스크 공간을 사용하여 실제 메모리 크기를 확장하는 것"이상의 의미를 갖습니다.

누구든지 어느 것이 정확한지 설명 할 수 있습니까?


Wikipedia의 메모에는 인접한 것들에 사용되는 것에 대한 자격이 포함되어 있다고 생각합니다.
JB King

이 질문은 아마도 SO에 대한 더 나은 대답을 얻을 것입니다.
함장 Segfault

2
가상 메모리가 무엇인지, 어떻게 사용되는지 혼동하지 마십시오. Wikipedia의 첫 번째 문장은 그것이 무엇인지 정의하는 것입니다. 책에서 일반적으로 사용되는 방식에 대해 이야기하고 있습니다. 사람들이 "페이지"에 대해 이야기하면 가상 메모리의 특정 구현에 대해 이야기합니다.
Tony Lee

2
교과서가 잘못되었습니다. 가상 메모리가 있고 보조 스토리지가 전혀없는 많은 시스템이 있습니다. 마찬가지로 보조 메모리를 주 메모리의 일부로 사용할 수 있지만 가상 메모리를 지원하지 않는 많은 컴퓨터가있었습니다. "가상 메모리"는 메모리가 아니라 메모리처럼 액세스되는 것입니다. 교과서에서 스와핑 또는 페이징을 정의하고 있습니다.
David Schwartz

1
교과서는 그것을 완전히 잘못 정의하고 보조 저장 장치는 정의의 일부가 아닙니다. 그리고 "디스크 공간 이상"에 대한 Wikipedia의 진술조차도 디스크를 전혀 포함하지 않을 수 있기 때문에 오해의 소지가 있습니다.
켈빈

답변:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

가상 메모리는 각 프로세스에 제공되는 추상화 계층입니다. 컴퓨터에는 0에서 2G까지 주소가 지정된 2GB의 물리적 RAM이 있습니다. 프로세스는 4GB의 주소 공간을 볼 수 있으며, 그 공간은 전적으로 그 자체입니다. 가상 주소에서 실제 주소로의 매핑은 운영 체제에서 관리하는 메모리 관리 장치에 의해 처리됩니다. 일반적으로이 작업은 4KB "페이지"로 수행됩니다.

이것은 여러 가지 기능을 제공합니다.

  1. 프로세스가 다른 프로세스에서 메모리를 볼 수없는 경우 (OS가 원하지 않는 한)
  2. 지정된 가상 주소의 메모리가 동일한 실제 주소에 있지 않을 수 있습니다
  3. 가상 주소의 메모리는 디스크에 "페이징"한 다음 다시 액세스하면 "페이징"될 수 있습니다.

교과서는 가상 메모리를 잘못 # 3으로 정의합니다.

스와핑이 없어도 DMA (직접 메모리 액세스)를 수행하는 장치의 장치 드라이버를 작성하는 경우 특히 가상 메모리를 알고 있어야합니다. 드라이버 코드는 CPU에서 실행되므로 메모리 액세스는 MMU (가상)를 통해 이루어집니다. 이 장치는 아마도 않습니다 되지 는 원시 물리적 주소를 볼 수 있도록 MMU를 통해 이동합니다. 따라서 드라이버 작성자는 다음을 확인해야합니다.

  1. 하드웨어에 전달하는 모든 원시 메모리 주소는 가상이 아니라 물리적입니다.
  2. 전송하는 큰 (다중 페이지) 메모리 블록은 물리적으로 연속적입니다. 8K 어레이는 MMU를 통해 사실상 연속적이지만 물리적으로 분리 된 2 개의 페이지 일 수 있습니다. 장치가 해당 어레이의 시작에 해당하는 물리적 주소에 8K의 데이터를 쓰도록 지시하면 첫 번째 4K를 예상 위치에 쓰지만 두 번째 4K는 어딘가의 일부 메모리를 손상시킵니다. :-(

4

천천히 시작한 다음이 모든 것을 하나로 모을 것입니다. 다음과 같습니다.

일반적으로 사용되는 가상 메모리는 "페이징"을 나타냅니다. 이름에서 알 수 있듯이 페이징은 사람의 메모장과 같습니다.

간단한 합계를 작성하거나 간단한 정보를 학습 할 때는 모든 정보를로드하고 처리하고 답변을 얻으면됩니다. 이것은 하드 드라이브에서 파일을로드하는 컴퓨터와 같습니다. 프로그램이나 그림 또는 기타 실제 정보를 "실제 메모리"(또는 "실제 메모리")에로드하고 "brain"( 프로세서).

그러나 복잡한 정보를 배우거나 복잡한 합계를 사용하는 경우 한 번에 모든 것을 머리에 맞추지 못할 수도 있습니다. 혼란스러워하고 속도가 느려지기 시작하고 한 번에 모두 유지하지 못하고 다른 것을 기억하기 위해 무언가를 잊어 버려야합니다.

휴먼 솔루션은 메모장을 사용하는 것입니다. 한 번에 기억할 수없는 모든 내용을 페이지에 기록하지만 합계를 수행하는 동안 참조하십시오. 우리는 한 달 동안 거대한 판매량 목록을 기억하지 못할 수도 있지만 페이지를보고 한 번에 조금씩 정보를 얻고 각 비트를 처리 할 수 ​​있습니다. 이것은 컴퓨터가 메모리를 "페이징"하는 것과 같습니다. 정보로 가득 찬 페이지를 작성하고 나중에 참조 할 수 있도록 "가상 메모리"에 저장하고 페이지가 필요하다는 것을 인식하고 해당 페이지를 가상 메모리에서 실제 메모리로 다시로드합니다. 리눅스와 유닉스에서,이 페이지들이 저장되는 장소는 말 그대로 "pagefile"이라고하며, 메모리의 데이터 페이지는 말 그대로 "pages"라고합니다. 시스템마다 이름이 다르지만 일반적인 개념은 거의 동일합니다.

실제로 페이징은 매우 간단합니다. 모든 정보 페이지가 메모리에 맞지 않기 때문에 일부 페이지는 디스크에 저장되고 나중에 다시로드됩니다.

현대 시스템은 메모리 매핑 및 메모리 보호 기능을 갖추고 있으며, 이는 일반적으로 컴퓨터의 동일한 하드웨어 시스템 인 메모리 관리 장치 (MMU)에서 처리합니다.

한 번에 많은 프로그램을 실행할 수 있고 메모리 보호 기능이있는 (현대) 멀티 태스킹 컴퓨터에서 각 프로그램은 일반적으로 동일한 시스템에서 실행되는 다른 프로그램과 분리됩니다. 이런 방식으로 한 프로그램은 단순히 메모리에 액세스하여 다른 프로그램을 변경할 수 없습니다. MMU는 한 프로그램의 주소 공간을 다른 프로그램의 주소 공간과 물리적으로 분리합니다. 즉, 사용자의 프로그램은 다른 사용자의 프로그램이나 다른 프로그램을 볼 수 없습니다. 그들은 "실제 메모리"를 보지 않고 자신의 "가상 메모리"를 보았습니다.

이제이 메모리 격리 개념과 페이지 파일 개념은 개념적으로 다른 두 가지 요소이므로 혼동 될 수 있습니다. 그러나 핵심은 메모리 관리 기능인 MMU (메모리를 페이지로 분할하고 페이지를 가상 주소 공간에 매핑)를 사용하여 작동한다는 것입니다.

따라서 프로그램이 특정 "메모리 주소"에서 메모리를 요청할 때 실제로 발생하는 것은 해당 프로그램의 메모리 페이지와 해당 주소 (프로그램의 "주소 공간")가 조회되고 해당 페이지가 그 메모리 블록이 발견되었습니다. 해당 페이지는 실제 메모리에로드 될 수 있으며,이 경우 프로그램에 액세스 권한이 부여되거나 디스크로 페이징 될 수 있습니다. 페이징 아웃되면 "페이지 폴트"를 트리거합니다. 디스크에 액세스하면 페이지가 메모리에로드됩니다. 따라서 메모리가 충분하지 않은 경우에도 프로그램이 작동하지만 일반적으로 매우 빠른 메모리 액세스를 위해 디스크를 사용해야하는 경우 느리게 실행됩니다.

이제 해당 페이지를 메모리에로드 할 공간이 충분하지 않으면 문제가있는 것입니다. 이 경우 이미 메모리에있는 일부 OTHER 페이지를 디스크에 "스왑"해야하므로 첫 번째 프로그램 페이지를로드 할 수 있습니다. 또는 동일한 프로그램의 페이지 일 수도 있습니다. 그래픽 프로그램 (예 :로드가 많은 시스템)에서 그림의 일부가 느리게로드되고 빠르게 그려지는 경우 다음 부분이 똑같이 느리게로드되고 빠르게 그려지며 처음으로 작업을 다시 시작하면 부분적으로, 그것은 다시 느리다. 작업을 위해로드 된 후 다시 교체되어 다른 작업을 수행 할 수 있기 때문입니다. 분명히 이것은 작동하는 매우 느린 방법이며 실제로 필요한 것은 더 많은 실제 메모리입니다.


이 답변에 100 % 동의하지 않습니다. "가상 메모리"가 페이징을 참조하는 경우, 페이지가없는 시스템 (예 : 스왑 또는 페이지 파일이없는 시스템)은 가상 메모리를 지원할 수 없습니다. 그러나 그것은 분명히 미쳤다.
David Schwartz

@DavidSchwartz-나는 처음에 당신과 비슷한 반응을 보였지만 대답을 더 자세히 읽으면 그렇게 나쁘지 않다고 생각합니다. 고려 위키 백과 / 가상 메모리 / 페이징은 "가상 메모리 분할의 거의 모든 구현을 페이지, 연속 가상 메모리 주소의 블록으로 가상 주소 공간"을 말한다. 즉, 넓은 의미에서 "페이징" 은 페이지 파일이 필요 하지 않지만 가상 주소를 실제 주소로 매핑하는 것을 말합니다.
ToolmakerSteve

1
흠, 반면, 리는 "모든 정보 페이지가 메모리에 맞지 않기 때문에 일부 페이지가 디스크에 저장되고 나중에 다시로드됩니다"라고 David는 옳습니다. 페이징단순히 디스크로 페이징하는 것이 아닙니다 . 또한, Lee는 가상 메모리 (메모리 격리)의 다른 이점에 대해 언급합니다. 이 대답이 "디스크로 페이징"과 함께 "가상 메모리의 페이지 매핑"을 방해하지 않으면 더 유용 할 것입니다.
ToolmakerSteve

@ToolmakerSteve 문제는 이것이 매우 일반적인 오해이며 그 오해를 강화시키는 것은 IMO라는 나쁜 것입니다. 이 답변이 매우 간단한 개념으로 매우 기본적인 개념을 설명하려고 할 때 특히 나쁩니다. 공통적 인 오해를 기반으로 기초를 세우지 않는 것이 가장 중요합니다!
David Schwartz 17

@DavidSchwartz-동의합니다. 그는 "가상 메모리"를 정의 하지 않고 "페이지 파일의 작동 방식"을 정의하고 있습니다. 첫번째 I에 문제가 리 대 "실제 가상의 메모리 페이징 = 매핑 페이지" "페이지 파일 = 디스크에 매핑 페이지"를 구별하지 못했음에 불과했지만, 다시 읽은 후, 그가 정말 말하고 생각했다 디스크에 매핑 (교과서 인용문, 캡틴을 제외한 다른 모든 답변 및 Google 검색에서 볼 수 있듯이이 두 가지 개념의 조합은 매우 널리 퍼져 있습니다. 제가 유죄라고 확신합니다.)
ToolmakerSteve

0

너무 늦었다는 것을 알고 있지만 여전히 유용하다고 생각했습니다.

  • 서로 다른 관점에 따라 모두 정확합니다.
  • 가상 메모리는 메모리 관리 기술인 반면 스왑 메모리는 디스크 드라이브의 영역이었습니다. 스왑 메모리는 일반적으로 스왑 공간이라고합니다. 스왑 공간은 임시 저장 위치로 예약 된 가상 메모리 부분을 나타냅니다. 사용 가능한 RAM이 시스템 메모리 요구 사항을 충족 할 수없는 경우 스왑 공간이 사용됩니다.
  • 자세한 내용 은 아래 링크 를 참조하십시오

-2

우리가 virtual이라는 단어를 이해한다면 그것이 메모리와 어떻게 관련되는지 이해할 수 있다고 생각합니다.

Dictionary.com에 정의 된 "가상": "컴퓨터 소프트웨어에 의해 일시적으로 시뮬레이션 또는 확장 됨 : RAM의 가상 디스크, 하드 디스크의 가상 메모리."

가상 메모리의 경우 시스템은 느린 메모리 리소스 (예 : 하드 드라이브, 썸 드라이브 등)를 사용하여 시스템 메모리를 시뮬레이트합니다. 추가 메모리가 필요한 경우 시스템 메모리에서 필요없는 데이터를 시스템 메모리에서 스왑합니다. 설정 한 드라이브 또는 리소스 이렇게하면 응용 프로그램이 수행중인 작업을 계속할 수 있도록 시스템 메모리가 비워집니다.

스와핑은 연속적인 프로세스이므로 메모리를 업그레이드하면 시스템이 메모리를 느리게 교체하기 위해 스와핑하지 않아도되므로 성능이 향상됩니다.


-2

가상 메모리는 운영 체제 (OS)의 기능으로, 컴퓨터가 RAM (임의 액세스 메모리)에서 디스크 저장소로 데이터 페이지를 일시적으로 전송하여 실제 메모리 부족을 보완 할 수 있도록합니다.

이는 컴퓨터를 포맷하지 않고 운영 체제를 시험하기 위해 가상 컴퓨터 또는 가상 상자에서 사용되는 미러 또는 샘플 메모리와 같습니다.


아니, 그건 페이징이야
David Schwartz

-4

가상 메모리는 시스템이 물리적 RAM 외에 페이징 파일로 사용하는 하드 드라이브의 블록입니다.

Windows가 하드 드라이브 의이 부분을 조각 모음하지 않기 때문에 까다 롭고 때로는 느려집니다.

내가 제공 할 수있는 가장 좋은 2 가지 팁 : 1) Virt Mem은 실제 메모리의 약 1.5 배로 최소 및 최대로 설정해야합니다. 전의. 2GB RAM = 3070MB Virt. 2) 조각 모음을 수행 할 때 페이징 파일을 끄십시오. 2x 조각 모음을 수행하고 원래 번호로 다시 설정하십시오. 이렇게하면 드라이브 조각이 깨끗해져 페이징 파일의 속도가 빨라집니다.


1
현대 메모리 관리자는 모든 시스템 메모리를 가상화합니다. 이것이 프로세스 분리를 ​​가능하게하는 것입니다-각 프로세스는 자신의 메모리에만 닿을 수 있습니다. 메모리 관리자는 이러한 가상 페이지를 실제 스토리지 및 선택적으로 고정 디스크에 맵핑합니다.
Anthony Giorgio

1
"Windows는 하드 드라이브의이 부분을 조각 모음하지 않습니다." pagefile.sys를 핵으로 복구하고, 재부팅하고, 디스크 조각 모음을 수행하고, 페이징, 음성, 새롭고 연속적인 페이지 파일을 다시 활성화하십시오! 그러나 Sysinternals의 PageDefrag는 더 나은 성능을 위해 페이지 파일을 드라이브 / 파티션의 시작 부분에 배치하므로 더 나은 작업을 수행합니다.

1
이 답변이 맞으면 페이지 파일이 구성되지 않은 Windows 시스템에서 가상 메모리 지원을 제공 할 수 없었습니다. 그러나 이것은 분명히 잘못되었습니다. 예를 들어, 이러한 시스템은 여전히 ​​물리적 메모리를 초과하는 프로세스 주소 공간에 파일을 매핑 할 수 있는데, 이는 가상 메모리의 예입니다.
David Schwartz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.