가상 메모리는 실제로 메모리 공간을 어떻게 늘리고 있습니까?


70

가상 메모리가 실제로 사용 가능한 것보다 많은 메모리를 표시하여 프로그램을 속이는 것으로 알고 있습니다.

그러나 궁극적으로 논리적 주소를 실제 물리적 주소에 매핑해야합니다. 이제 어떻게 메모리를 늘리고 있습니까?


12
그것은 오래된 개념입니다. 가상 메모리에 대한 원래 동기는 물리적 메모리보다 큰 주소 공간을 제공하기위한 일종의 메모리 관리입니다. 그러나 그때는 메모리가 저밀도이고 매우 비쌌습니다. 오늘날 가상 메모리를 사용하는 주요 이유는 프로세스 보안입니다.
톱밥

2
"이제 어떻게 메모리가 증가하고 있습니까?" 그렇지 않습니다. 응용 프로그램은 시스템의 실제 메모리를 인식하지 못합니다. 가상 메모리 만 인식하기 때문에 응용 프로그램이 메모리가 부족하여 가상 메모리에 대해 이야기하고 물리적 메모리가 아니라고 불평하는 이유
Ramhound

2
가상 메모리 시스템은 매우 영리합니다. n 개의 프로세스가 동일한 읽기 전용 페이지를 갖는 경우 모든 n 개의 프로세스는 동일한 한 페이지의 실제 메모리를 사용할 수 있습니다.
Eric Lippert 2012 년

65
가상 메모리를 장난 으로 생각하지 마십시오 . 메모리는 데이터를 저장하고 검색하는 추상 기능 입니다. 가상 메모리는 해당 추상화에 대한 구현을 제공합니다. 해당 추상화의 일부는 RAM에 의해 지원되고 일부는 디스크에 의해 지원된다는 것은 추상화의 구현 세부 사항입니다.
Eric Lippert 2012 년

4
@HagenvonEitzen 페이지가 스왑 아웃되지 않는 한, 디스크에서 원래 읽은 페이지를 제외하고 디스크에서 메모리가 "항상" "어떻게"있는지 확실하지 않습니다. 페이지의 내용이 디스크에 있을 수 없으며 , 특히 메모리에 고정 된 페이지의 경우에 해당됩니다. 커널 기능에 중요하기 때문입니다.
Michael

답변:


116

실제 메모리 가 전혀 증가하지 않습니다 . 그 목적은 전적으로 다른 것입니다. 할 수있는 것은 프로그램이 물리적으로 사용 가능한 것보다 더 많은 메모리를 사용할 수 있도록하는 다른 백업 저장소를 사용 가능하게하는 것입니다.

가상 메모리는 프로세스를 서로 분리하고 분리하는 데 사용되며 메모리 액세스가 대체 위치로 전환 될 수 있도록합니다.

가상 메모리를 통해 시스템은 모든 프로세스에 다른 프로세스와 분리 된 자체 메모리 공간을 제공 할 수 있습니다. 자체 공간에서 효과적으로 작동하는 프로그램을 사용하면 "동일한"주소를 사용해야하는 다른 프로그램에서 작업 할 필요없이 전체 주소 공간에 완전히 액세스 할 수 있습니다. 프로세스가 서로 쉽게 간섭 할 수 없으므로 안정성과 보안이 향상되는 부작용이 있습니다.

응용 프로그램의 가상 메모리 공간은 필요에 따라 구축됩니다. 응용 프로그램은 하나의 연속 된 메모리 블록에있는 것처럼 보이지만 실제로는 실제 메모리에 완전히 분산 될 수 있습니다.

가상 메모리는 또한 메모리 액세스를 포착하고 전환하여 스왑 파일과 같은 기능을 사용할 수 있도록합니다. 이것이 의미하는 바는 최근에 사용되지 않은 메모리 부분을 디스크로 푸시하고 "이 메모리 블록은 파일 x 위치 y에 있습니다"라는 포인터를 설정 한 다음 물리적 메모리를 해제 할 수 있다는 것입니다. 다른 응용 프로그램에서 사용하기위한 영역. 응용 프로그램에 해당 메모리가 필요한 경우 디스크에서 다시 읽을 수 있으며 실제 RAM의 일부 위치 (이전 위치와 다를 수 있음)에 배치되고 이전과 동일한 가상 메모리 위치로 다시 매핑 될 수 있습니다.

페이지 파일이 사용되는 것과 같은 방식으로 가상 메모리는 운영 체제가 프로그램에 대한 공유 라이브러리의 "지연"로딩을 효과적으로 수행 할 수있게합니다. 기본 프로그램이 운영 체제에 특정 라이브러리를 사용하려고한다고 지시하면 운영 체제는 라이브러리 요구 사항을 확인하여 애플리케이션의 가상 메모리 영역에 공간을 할당하지만 전체 라이브러리를로드하는 대신 시간을 절약 할 수 있습니다. 라이브러리에서 페이지가 실제로 필요할 때까지 디스크에서로드하는 것을 지연시킬 수 있습니다. 이런 식으로 RAM에로드되는 라이브러리의 유일한 부분은 실제로 프로그램에서 사용하는 부분이며, 사용되지 않은 부분은로드되지 않으므로 RAM을 낭비하지 않습니다.

이러한 기술을 사용하여 시스템의 안정성을 향상시키고 서로 영향을주지 않으면 서 제한된 공간에서 더 많은 프로세스를 실행할 수 있습니다. "메모리 증가"가 아니라, 우리가 가진 것을보다 효과적으로 사용할 수 있습니다.

스왑 파일은 가상 메모리 시스템으로 활성화되어 있지만, 과거에 혼동 된 것을 가상 메모리.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Sathyajith Bhat

21

레이맨의 설명

메모리가 사용될 때 시스템은 각 가상 주소를 물리적 주소에 매핑해야하지만 모든 메모리가 동시에 사용되는 것은 아닙니다 . 예를 들어, 브라우저에 20 개의 탭이 있고 각각 1GB의 메모리를 사용한다고 가정하십시오. 가상 메모리가 지원되지 않는 OS에서는 20GB의 RAM이 필요합니다. 트릭은 동시에 20 개의 탭을 모두 탐색하지 않으므로 가상 메모리가있는 OS를 사용하면 몇 GB의 RAM만으로 브라우저를 사용하여 비활성 탭을 디스크로 교체 할 수 있습니다.

더 복잡한 측면

가상 메모리는 스와핑에 독점적으로 사용되지 않습니다. RAM의 단편화를 피하는 것이 주된 목적입니다. 가상 메모리 관리가없는 시스템에서는 큰 문제입니다. 1GB의 RAM을 사용할 수 있지만 10MB의 청크 인 경우 100MB를 요청하는 응용 프로그램은 작동하지 않습니다. .

시간이 지남에 따라 가상 메모리는 더 많은 용도, 특히 임의의 파일 액세스를 발견했습니다. 데이터베이스와 같은 많은 응용 프로그램은 파일을 순차적으로 읽게되면 고통스럽게 느려지고 OS가 전체 파일이있는 곳을 가장한다고 가정하면 훨씬 더 빠르게 작동합니다 (가상 ) 메모리 및 액세스 패턴에 따라 디스크 IO 및 캐싱을 최적화합니다.


9
각 브라우저 탭에 1GB의 메모리가 필요한 세상에 사는 것은 슬프다
tbodt

9
@ tbodt 나는 고대 이집트인을 비난합니다. 그 성가신 고양이를 길 들여서 그들이 무엇을하고 있는지 알았다면!
Dmitry Grigoryev

@tbodt 그것은 약간의 과장이기도합니다. 8 개의 탭이 열려있는 브라우저는 500MB의 메모리 만 사용합니다.
Random832

2
@ Random832 과장과 미래 보장의 경계에 대해서는 확실하지 않지만 과장된 것입니다. 첫 번째 PC에는 32MB의 RAM이 있었고 눈에 띄는 교환없이 Opera에서 8 개의 탭을 쉽게 열 수있었습니다. 이제는 500MB가 걸리므로 20 년 후에는 8GB에 도달 할 수 있습니다.
Dmitry Grigoryev

5

가상 메모리는 실제로 더 많은 주 메모리 하드웨어를 추가한다는 의미에서 메모리를 늘리지 않습니다. 그러나 사용 가능한 주소의 범위를 늘릴 수 있습니다. 따라서 코드 세그먼트와 데이터 (스택 및 힙) 세그먼트로 구성된 실행중인 프로그램이있을 수 있으며, 둘 다 실제 실제 스토리지 공간에서 제공하는 실제 주소 범위보다 큰 가상 주소 범위를 차지할 수 있습니다 . 기계. 비결은 가상 주소의 일부만이 물리적 주 메모리에 의해 언제든지 백업된다는 것입니다 (그러나 모든 것은 궁극적으로 디스크 스토리지에 의해 백업됩니다) . 이것은 참조지역성 현상 때문에 작동합니다: 언제든지 프로그램 세그먼트의 하나 이상의 작은 연속 섹션에있는 명령어 만 실행되고 있으며 데이터 세그먼트의 하나 이상의 작은 연속 섹션에있는 데이터 만 작동됩니다 . , 그러나 그것은 시간의 큰 부분 동안이 패턴을 따른다]


4

가상 메모리가 실제로 사용 가능한 것보다 많은 메모리를 표시하여 프로그램을 속이는 것으로 알고 있습니다.

가상 메모리에 대한 원래 동기는 물리적 메모리보다 큰 주소 공간을 제공하기위한 일종의 메모리 관리입니다.
소프트웨어는 CPU의 전체 주소 공간 (예 : 2 ^ 32 주소 공간)을 활용할 수 있지만 실제 설치된 실제 메모리는 그 수의 일부에 불과합니다.
큰 (설치된) 메모리 요구 사항을 부과하지 않고 가상 메모리를 사용하는 컴퓨터간에 큰 프로그램을 이식 할 수 있습니다.
이러한 가상 메모리 사용은 메인 프레임 컴퓨터와 페라이트 코어 메모리 (물리적, 고밀도의 저밀도) ​​시대로 거슬러 올라갑니다.

그러나 궁극적으로 논리적 주소를 실제 물리적 주소에 매핑해야합니다. 이제 어떻게 메모리를 늘리고 있습니까?

가상 메모리는 프로그램에 더 많은 주소 공간을 제공하는 기술에서 발전했습니다.
가상 메모리는 최신 운영 체제에서 각 프로세스에 보안을 제공하는 핵심 구성 요소이므로 프로세스가 다른 프로세스를 방해하거나 다른 프로세스에 의해 손상 될 수 없습니다.
그러나 멀티 프로세싱 (multiprocess ors 와 혼동하지 마십시오 )과 가상 메모리는 여전히 실제 메모리보다 시스템에 더 명확한 메모리를 제공합니다.

생성 된 각 프로세스에는 자체 가상 주소 공간, 즉 자체 가상 메모리가 제공됩니다.
각 프로세스에 실제로 사용되고 가상 메모리에 매핑되는 실제 메모리의 양은 동적입니다. 일반적으로 프로세스 실행을 수행하기 위해 코드 (일명 텍스트)와 데이터 페이지 / 세그먼트가 포함 된 가상 메모리 만 실제 메모리 (일명 메모리에 상주)에 매핑됩니다.

중요하지 않은 코드 (현재 실행되지 않았기 때문에)와 데이터 (참조 / 처리되지 않았기 때문에)는 항상 메모리 상주 일 필요는 없습니다. 코드 및 / 또는 데이터 페이지 / 세그먼트를 백업 저장소 (예 : HDD 또는 SSD의 스왑 공간 또는 페이지 파일)로 "스왑"하고 나중에 필요에 따라 "스왑"( "온 디맨드") ).

가상 메모리는 각각 자체 보호 된 가상 주소 공간이있는 수많은 프로세스 중에서 유한 한 물리적 메모리를 효율적으로 사용하도록합니다. 이러한 가상 메모리의 합은 일반적으로 설치된 실제 메모리보다 큽니다.
"증가 된 메모리"는 이제 프로그램 관점뿐만 아니라 시스템 관점에서도 나타납니다.


3

가상 메모리는 프로그램이 처리 할 수있는 데이터의 양을 증가시킵니다. 소프트웨어 관점에서 볼 때 일반적으로 데이터가 저장된 위치는 신경 쓰지 않습니다. 실제 DRAM 메모리에 저장하거나 머신에 연결된 플래시 드라이브에 저장하거나 회전 플래터에 저장할 수도 있습니다. 소프트웨어가 관심을 갖는 것은 해당 데이터에 대한 액세스를 요청하면 성공한다는 것입니다.

실제로, 우리는 또한 프로그램이 빠르게 실행되기를 원합니다. 대한 속도 데이터가 어디에 고려, 우리는 치료를 할. 우리는 가장 자주 액세스하는 데이터가 가장 빠른 액세스를 허용하는 하드웨어에 저장되기를 원합니다. 우리의 프로그램은 것 같은 DRAM에서 완전히 실행합니다. 그러나이 작업을 수행 할 DRAM이 부족한 경우가 많습니다. 가상 메모리는 솔루션입니다.

가상 메모리를 사용하면 운영 체제는 한동안 사용하지 않은 데이터를 "페이지"처리하여 하드 디스크에 저장합니다. 이것은 여전히 ​​느리게 액세스 할 수 있습니다. 프로그램이 하드 디스크에있는 데이터를 요청하면 운영 체제는 디스크에서 데이터를 읽고 DRAM으로 다시 이동해야합니다.

이론적으로 디스크에서 직접 데이터를 읽을 수 있습니다. 그러나 그렇게하지 않은 이유가 있습니다. 프로그램은 이러한 모든 합병증을 인식하지 않아도됩니다. 지능적으로 디스크에 데이터를 저장하는 소프트웨어를 작성할 수 있습니다 (캐싱이라고 함). 그러나 많은 추가 작업이 필요합니다. 코드에서 가장 빠른 속도는 다음과 같습니다.

if data is not in memory
    read data from disk into memory
operate on data

확실한 독자는 데이터가 메모리에 있더라도 데이터가 있는지 여부를 확인하기위한 조건이 있어야한다는 것을 알 수 있습니다. 이것은 메모리에서 직접 작동하는 것보다 훨씬 느립니다!

가상 메모리는 CPU에서 하드웨어 체크인을 수행하여이 문제를 해결합니다. CPU는 하드웨어를 전용으로 사용할 수 있기 때문에이 가상 메모리 작업을 매우 빠르게 수행 할 수있는 위치에 있습니다. 소프트웨어에서만이 작업을 수행하려면 CPU의 범용 부분을 사용해야합니다.이 부분은 전용 트랜지스터보다 느립니다.

이 때문에 디스크에서 데이터를 읽거나 그대로 두지 않고 항상 데이터를 메모리에 다시 페이징하는 이유가 있습니다. 메모리를 "페이지"로 나눕니다. 각 페이지는 메모리에 존재하거나 존재하지 않는 것으로 표시됩니다. 운영 체제는이 테이블을 CPU가 직접 사용하기 편리한 형식으로 유지 관리합니다. 프로그램이 존재하는 데이터에 액세스 할 때마다 CPU의 하드웨어가 DRAM의 데이터에 직접 액세스 할 수 있도록합니다. 데이터가 없으면 "페이지 오류"가 발생하여 운영 체제가 디스크에서 해당 페이지를 메모리의 실제 페이지로로드하고 테이블을 업데이트하여 CPU가이 새 실제 페이지를 가리 키도록 지시합니다.

이 전체 문제의 핵심은 사용량을 최소화하는 것입니다. 실제로 운영 체제는 메모리에 보관할 데이터와 디스크에 페이징 할 데이터를 선택하는 데 매우 능숙하므로 대부분의 메모리 액세스는 페이지 오류를 발생시키지 않고 발생합니다.


2

맵 항목을 임시로 작성하면됩니다.

프로그램이 논리 주소에 액세스하면 CPU는 맵에서 해당 물리 주소를 찾습니다. 발견되면 메모리 액세스가 예상대로 진행됩니다. 찾을 수없는 경우 실제 주소를 할당하고 다른 저장소 ( "스왑 공간")에서 내용을로드해야합니다. 모든 물리적 주소가 이미 일부 논리적 주소에 할당 된 경우 물리적 주소를 사용 가능하게하려면 일부 논리적 주소를 "스왑 아웃"(스왑 공간으로 다시 저장)해야합니다.

할당 된 최대 메모리는 스왑 공간의 크기이며 설치된 메모리보다 훨씬 클 수 있습니다. 스왑 공간을 "실제"메모리로, RAM을 스왑 공간의 고속 캐시로 생각하면 도움이 될 수 있습니다.

(이것은 철저한 설명과는 거리가 멀고, 관련이 있지만 불필요한 세부 사항을 얻지 않고 즉각적인 질문에 대답하기위한 것입니다.)


1

기본 개념은 최신 CPU가 "어떤 프로세스가 할당 된 주소 범위와 어떤 물리적 주소 (메모리 버스에 A00..Axx 라인을 생각하는지)"를 추적하는 변환 테이블을 관리 할 수 ​​있다는 사실에 의존합니다. 현재는 실제로 데이터를 저장하는 데 사용됩니다. "없음"은 가능하고 수용 가능한 상태이므로 "IF ANY":이 경우 하드웨어 수준에서 오류 조건 ( "페이지 결함")이 발생합니다. -이 오류는 스왑 파일에 기록 된 메모리 내용을 실제 메모리의 사용 가능한 위치 (읽기의 경우)로 다시로드하거나 실제 위치를 찾을 수있는 OS 레벨 처리기를 트리거합니다 ( 쓰기의 경우), 위에서 언급 한 번역 테이블을 업데이트하십시오.그리고 오직 그 손만이 그 메모리에 접근을 시도한 프로세스로 되돌아갑니다.


1

가상 메모리 :

1) 대용량 가상 주소 공간을 디스크 나 SSD에 초과 "스왑 아웃"하거나 NVRAM 및 기타 장치에 잠재적으로 더 적은 양의 물리적 메모리에 매핑 할 수 있습니다.

2) 더 큰 가상 주소 공간 (예 : 64 비트)을 더 작은 물리적 주소 공간 (예 : 32 또는 64 비트)에 매핑 할 수 있습니다.

3) 더 작은 가상 어드레스 공간 (예를 들어, 32 비트)이 더 큰 물리적 어드레스 공간 (예를 들어, 40 비트)에 매핑 될 수있게하여, 더 오래된 애플리케이션이 더 많은 물리적 DRAM을 이용할 수있게한다.

4) 물리 어드레스 공간에서 단편화되고 비 연속적인 물리 메모리가 가상 어드레스 공간에서 연속적으로 렌더링되게한다.

5) 프로세스에 자체 가상 주소 공간을 부여하여 서로 분리 할 수 ​​있습니다.

6) 동일한 데이터 값을 공유하는 서로 다른 가상 주소가 단일 물리적 페이지를 할당하도록 허용합니다.

이것은 단일 프로세스 또는 OS 내에서 발생할 수 있습니다. 대부분의 BSD UNIX 파생 OS에는 단일 읽기 전용 페이지 0이 있습니다.이 페이지는 0으로 채워진 가상 페이지, 일반적으로 COW (Copy On Write-Read only zeros, writes trapped)로 채워질 수 있습니다. 페이지를 공유하지 않고 쓸 수있게 만들었습니다).

프로세스간에 발생할 수 있습니다. 예를 들어 UNIX fork ()는 거의 모든 가상 메모리를 COW 방식으로 공유하는 자식 프로세스를 만듭니다.

OS간에 발생할 수 있습니다. 예를 들어 가상 머신 호스트의 게스트 OS에는 중복 제거 된 페이지, 공유 COW 등이있을 수 있습니다 (일부 최근의 보안 공격이이를 활용했습니다).

7) 가상 메모리는 가상 주소 공간의 일부가 파일에 매핑되거나 동일한 멀티 프로세서 시스템 또는 인터넷을 통해 다른 프로세서에 매핑 된 메모리에 허용 될 수 있습니다.

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