TLDP의 가상 메모리에 대한 잘못된 설명

TLDP의 가상 메모리에 대한 잘못된 설명

TLDP의 가상 메모리에 대한 설명이 완전히 혼란스럽습니다.

http://www.tldp.org/LDP/tlk/kernel/processes.html#tthFtNtAAB

그들은 말했다:

각 개별 프로세스는 자체 가상 주소 공간에서 실행되며 보안 커널 관리 메커니즘을 통하지 않고는 다른 프로세스와 상호 작용할 수 없습니다.

나에게 있어 "자체 가상 주소 공간"은 32비트 모드의 4GB RAM(0000:0000 - FFFF:FFFF)입니다. 하지만 그 뜻은 그게 아니지 않습니까? 두 프로세스가 가상 주소 1111:1111을 가리키는 경우 동일한 물리적 주소를 의미하므로 모든 프로세스가 동일한 4Gb 가상 주소 공간을 공유합니까?

또한 Windows에 대한 내용도 읽었습니다.여기, 그들을진짜각 프로세스에는 별도의 가상 주소 공간이 있고, 사용자 모드에는 별도의 2Gb RAM이 있으며, 커널 모드에는 2Gb RAM이 공유되므로 2개의 서로 다른 프로세스가 1111:1111을 가리키고 서로 다른 물리적 메모리에 매핑될 수 있습니다. 그들? :)

업데이트: 내 질문에 대한 그림입니다. Linux용 그림은 무엇입니까?

사례 1: 여기에 이미지 설명을 입력하세요.

사례 2 여기에 이미지 설명을 입력하세요.

답변1

Linux와 Windows는 여기서 거의 동일하게 작동합니다. 각 프로세스에는 고유한 "가상" 주소 공간이 있습니다. 이는 메모리가 실제로 물리적으로 사용 가능하다는 의미는 아니며(분명히 대부분의 32비트 시스템에는 메모리가 충분하지 않음) 이것이 가상인 이유입니다.

게다가 거기에 사용된 주소는 물리적 주소와 일치하지 않습니다. 따라서 AAAA:0000의 물리적 메모리 세그먼트는 9128:2af2에 해당할 수 있습니다. 요점은 신경 쓸 필요가 없다는 것입니다. 애플리케이션이 관심을 갖는 모든 것은 관심 있는 콘텐츠가 자체 메모리 세그먼트에 있는 위치입니다. 예, 이는 또한 두 애플리케이션이 자체 메모리 보기에서 동일한 주소를 가리키고 서로 다른 것을 얻을 수 있음을 의미합니다.

프로세스의 실제 물리적 메모리 페이지 외에도 장치(예: 비디오 카드)에 속하는 주소, 동적 링크 라이브러리 또는 프로세스 간에 공유되는 메모리(이것은 "보안 커널 관리" "메커니즘"은 무엇을 의미합니까?

가상 메모리와 프로세스 주소 공간 레이아웃에 대해 더 깊이 알고 싶거나 쉽게 이해할 수 없다면 "Tanenbaum" "Operating Systems" 같은 교과서를 추천해 드립니다.http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory또한 읽어볼 가치가 있습니다.

답변2

"자신의 가상 주소 공간"은 실제로 말하는 것과 반대입니다. 즉, 주소 11111111이 다음을 가리킨다는 의미입니다.다른실제 메모리에서 각 프로세스의 위치입니다. 가상 주소가 서로 다른 프로세스의 동일한 물리적 주소에 해당하는 경우 프로세스는 주소 공간을 공유합니다. 실제로 일부 주소 공간은 여러 프로세스 간에 공유됩니다(예를 들어 이후에는 fork거의 모든 페이지가 상위 프로세스와 하위 프로세스 간에 공유됩니다). 이는 "사례 2" 그림에 해당합니다. 이 점에서는 Linux와 Windows도 다르지 않습니다.

forkLinux는 실제로 일부 소형 임베디드 장치에서 실행될 수 있습니다(다운그레이드 모드에서는 이 모드가 지원되지 않음).메모리 관리 유닛, MPU(메모리 보호 장치)는 하나만 있습니다. 이러한 장치에는 가상 주소 공간이 없지만(사례 2) 각 프로세스에는 메모리 페이지에 대한 고유한 권한 집합이 있으므로 프로세스 간에는 여전히 분리되어 있습니다.

관련 정보