2011-08-26 6 views
3

제 질문은 리눅스 커널이 가상 메모리를 사용할 수 있는지 또는 항상 고정 메모리를 사용합니까? 또 다른 질문은 소프트 오류로 인해 커널 메모리가 손상된 경우 다음에 어떤 일이 발생합니까? 리눅스는 그러한 결함으로부터 스스로를 보호 할 수있는 메커니즘을 가지고 있습니까?커널에서 가상 메모리를 사용할 수 있습니까? Linux에서

답변

3

커널은 가상 주소를 사용합니다. 할당 된 메모리, 함수 포인터 등은 모두 가상 주소입니다. 일부 장치에 말하거나 특정 종류의 DMA를 수행 할 때만 물리적 주소를 조작 할 수 있습니다.

"Linux"또는 "The Linux kernel"은 많은 아키텍처에서 실행됩니다. 이러한 아키텍처 중 일부는 메모리 오류 감지 또는 수정 하드웨어를 가질 수 있습니다. 이 장치가 어떻게 지원되는지 모르겠습니다. 그러나 대부분의 아키텍처에서는 메모리 손상에 대한 보호 기능이 없습니다.

하지만 당신은 부드러운 오류에 대해 말하기가 있습니다. 임의의 주소에서 커널 코드 작성을 보호하지 않습니다. 일부 함수는 버그를 잡기 위해 매개 변수를 테스트하지만 버퍼 나 커널 모드에서 스택을 오버플로하면 여러 가지 재미있는 일이 발생할 수 있습니다.

Const 데이터와 코드는 일반적으로 쓰기가 감지 될 수 있도록 읽기 전용 페이지에 배치됩니다. 커널의 메모리 보호는 다음과 같이 제한됩니다.

  • 일부 지역에서는 매개 변수를 확인합니다.
  • 일부 구조에서는 마법 값입니다.
  • 코드 및 const 섹션의 읽기 전용 속성입니다. 전용 속성 읽기

커널이

+0

당신이 "어떤 구조의 마법 값"무엇을 의미합니까 가상 메모리를 사용하기 때문에 만 가능? – MetallicPriest

관련 문제