2012-02-09 4 views

답변

12

정확히 가상 메모리 란 무엇입니까? 운영 체제는 각 프로그램에 고유 한 개인 주소 공간을 제공합니다. 실제로 운영 체제는 응용 프로그램이 알지 못하는 사이에 가상 주소를 다시 실제 주소 공간에 매핑하는 작업을 담당합니다.

두 개의 응용 프로그램이 서로 다른 데이터를 프로그램의 동일한 가상 주소에 둘 수 있다는 것을 알았습니다.

가상 메모리 here에 대해 자세히 알아보십시오.

+0

고맙습니다. 그러나 당신이 제공하는 위키를 읽은 후에 더 많은 질문이 나에게 혼란을줍니다. 각 프로세스가 2G를 완전히 소유하고 있다고 생각한다는 의미입니다 (또는 각 프로세스에 새롭고 비어있는 깨끗한 VAS가 있다고 말했습니까?). 그렇다면 4 가지 프로그램이 동일한 VAS 주소에서 시작하는 이유입니까? 또 다른 질문은 DLL (제 3 자)이 각 프로세스의 VAS에 ".data"및 ".code"를 복사한다는 것입니다. 너무 많은 질문을하는 것에 대해 유감스럽게 생각합니다 <3 – John

+0

@ 존 : 그것은 복잡합니다. 각 프로세스에는 자체 VAS가 있습니다. 시작시 각 DLL (프로세스 실행 파일과 함께)은 프로세스에 매핑 된 메모리입니다. 공유 DLL은 일반적으로 모든 프로세스에서 동일한 주소에서 시작됩니다 (따라서 사용 된 페이지가 공유됩니다). 가상 주소가 접촉 (실행, 읽기 또는 쓰기)되면 메모리 관리는 해당 가상 주소의 내용을 메모리에 복사 (페이지)합니다. –

+0

이전 답변의 추가 정보 : 때때로 DLL 주소가 충돌합니다.이 경우 로더가 DLL을 새 주소로 재배치합니다. 이렇게하면 DLL 페이지가 더 이상 DLL을 사용하는 다른 프로세스와 공유되지 않습니다. –

3

실제 주소와 가상 주소를 혼동하고 있습니까? 각 프로세스는 자체 가상 메모리 공간을 보게되므로 두 프로세스가 동일한 가상 주소에 액세스하는 것이 좋습니다. 반면에 모든 프로세스는 머신의 동일한 물리적 메모리 공간을 공유하므로 각 프로세스는 동일한 실제 주소를 다른 물리적 주소에 매핑합니다 (공유 메모리가 없다고 가정).

0

다른 방법으로 설명하겠습니다. 프로세스 X가 시스템 A에서 실행 중이고 동일한 프로그램이 시스템 B에서 프로세스 Y로 실행 중입니다. 프로그램의 일부 전역 변수가 두 시스템에서 동일한 메모리 주소를 사용하는 경우 중요합니까? 그들은 다르다! 같은 방법으로, 전역 변수가 프로세스의 한 인스턴스에 대해 XYZ 위치에 저장되는 경우, 프로세스의 또 다른 인스턴스는 해당 전역 변수에 대해 (XYZ)과 동일한 가상 주소를 가질 수 있습니다.

관련 문제