RAM을 커널 공간과 사용자 공간으로 나누는 방법

RAM을 커널 공간과 사용자 공간으로 나누는 방법

내가 아는 한, Linux에서 RAM은 커널 공간과 사용자 공간으로 구분됩니다. 커널 공간은 커널 실행을 위해 예약되어 있으므로 사용자 공간 응용 프로그램은 그곳의 메모리에 직접 액세스해서는 안 됩니다.

이 메모리는 커널 공간과 사용자 공간으로 어떻게 나누어지나요? 커널을 빌드할 때 링커 스크립트에 정의되어 있나요?

답변1

여기에는 주로 세 가지 측면이 포함됩니다.

첫 번째는 주소입니다공간.

일부 아키텍처에서는 주소 공간 분할을 강력히 권장합니다. 예를 들어 x86-64에서는가상 주소 공간절반으로 분할되어 주소 공간의 양쪽 끝에서 커집니다. 이러한 아키텍처에서 커널은 x86-64의 권장 사항을 따르며 주소 공간의 아래쪽 절반은 사용자 공간 할당에 사용되고 위쪽 절반은 커널 할당에 사용됩니다. 바라보다Linux에서 64비트 프로세스의 가상 주소 공간은 어떻게 구분됩니까?

다른 아키텍처는 기본적으로 이 구조를 제공하지 않습니다. 예를 들어 Linux 커널(및 권한 수준을 가진 대부분의 다른 운영 체제)은 자체 주소 공간 분할을 설정합니다.x86에서, 3G/1G, 2G/2G, 1G/3G(사용자 공간/커널).

두 번째는 메모리 할당이다.

주소 공간 분할은 정적이지만 메모리 할당은 필요한 경우에만 할당됩니다. 주소 공간 분할은 가상 주소의 사용을 결정하지만 실제 메모리 사용에는 영향을 주지 않으며 사용 방법도 결정하지 않습니다.많은사용된 가상 주소 공간의 실제 양도 사용됩니다. 커널 자체는 자체 바이너리에 메모리를 할당하며 자체 목적에 필요한 추가 메모리는 교체할 수 없습니다.Linux 커널은 데이터용으로 가상 메모리를 사용합니까?).

세 번째는 메모리 매핑입니다.

이는 하드웨어(메모리 관리 장치)의 도움을 받아 커널에 의해 전적으로 관리됩니다. 다중 맵은 항상 유지됩니다. 커널에는 모든 프로세스가 공유하는 하나 또는 두 개의 자체 맵이 있으며 각 프로세스에는 자체 사용자 공간 맵이 있습니다. 이를 통해 프로세스가 서로 보호되고 커널이 사용자 공간으로부터 보호됩니다. 바라보다Linux 프로세스의 가상 메모리 공간의 커널 부분을 갖는 용도는 무엇입니까?그리고주소 공간의 커널 공간은 어떻게 우리를 위해 예약되어 있습니까?

관련 정보