Linux 프로그래밍 인터페이스는 프로세스의 가상 주소 공간 레이아웃을 보여줍니다.
커널이 물리적 메모리에 있는지 여부완전히또는부분적으로각 프로세스의 가상 주소 공간에서 0xC0000000부터 0XFFFFFFFF까지의 최상위 "커널" 부분에 매핑됩니까?
부분적이라면 물리적 메모리에 있는 커널의 어떤 부분이 각 프로세스의 가상 주소 공간에 있는 "커널" 부분에 매핑되고, 어떤 부분이 매핑되지 않습니까?
프로세스 가상 주소 공간의 "커널" 부분은 액세스할 수 없는 커널 코드 부분이 아니라 프로세스가 커널 모드에서 실행될 때 액세스할 수 있는 커널 코드 부분을 정확하게 저장합니까?
모든 프로세스의 가상 주소 공간이 "커널" 부분에 동일한 내용을 가지고 있습니까?
답변1
대답은 여부에 따라 다릅니다.커널 페이지 테이블 격리활성화됨(아키텍처 및 KPTI 지원 여부에 따라 다름)
KPTI가 없으면 커널은 각 프로세스의 주소 공간에 완전히 매핑되지만 표시된 것처럼 이러한 매핑은 사용자 공간에서 액세스할 수 없습니다(측면 채널 누출 제외).
KPTI를 사용하면 커널 페이지 테이블이 사용자 공간 페이지 테이블과 분리되고 최소한의 매핑 세트만 각 프로세스의 주소 공간에 유지되어 사용자 공간에서 커널을 호출하고 프로세서가 인터럽트나 예외를 처리할 때 제어를 전송할 수 있도록 합니다. .
두 경우 모두 모든 프로세스는 동일한 커널 맵을 갖습니다.
당신은 또한 볼 수 있습니다KAISER에 관한 LWN 기사.