2014-05-13 4 views
2

나는 리눅스의 기억에 구멍을 내놓았다. 나는이 메모리가 I/O가 다시 매핑 된 것이라고 생각한다. 내 이해가 맞습니까? 시스템 RAM의 모든는 역사적 부팅 달아서 이유로, "표준 PC"에 (86) 아키텍처 :메모리 Linux의 구멍이란 무엇입니까?

1)은 주소의 실제 메모리를 참조 할 수 있습니다 : 메모리에

답변

7

구멍은 다른 것을 의미 할 수있다 인접하지 않습니다. 메모리 매핑 I/O가 상주하는 주소 공간에는 "구멍"이 있습니다. 예를 들어, 초기부터 부팅 ROM (BIOS) 및 비디오 메모리 용으로 예약 된 영역이있었습니다. 또한 PCI (및 PCI-X 또는 PCI-Express) 주변 장치에 대한 동적 할당을 위해 예약 된 많은 주소 공간이 있습니다. 이러한 영역은 장치 드라이버 ("I/O 재 매핑"이라고도 함)에 의해 커널 가상 주소 공간에 필요에 따라 매핑되는 경우가 많습니다.

마더 보드에 내장 된 메모리 컨트롤러를 사용하면 RAM의 실제 주소를 구성 할 수 있습니다 (일반적으로 표준 PC 아키텍처의 BIOS가 처리합니다). 다른 [non-x86] 아키텍처는 종종 물리적 주소 공간에 유사한 구멍을 가지고 있습니다.

2.) 용어는 가상 주소 공간의 할당되지 않은 영역을 나타낼 수도 있습니다. 커널 가상 주소 공간과 사용자 프로세스의 가상 주소 공간에는 일반적으로 "구멍"이 있습니다. 예를 들어, linux는 가상 주소 0에 해당하는 실제 메모리를 매핑하지 않습니다. 즉, 주소 공간의 첫 번째 페이지에는 유효한 메모리가 없습니다. 즉, null 포인터 참조가 트랩 될 수 있습니다.

일부 종류의 메모리 할당에서 Linux 커널은 올바르게 할당 된 가상 메모리 영역 사이의 매핑되지 않은 영역을 유지 관리하여 잘못된 메모리 참조 (즉, 할당 된 공간의 끝을 벗어난 것)를 트래핑합니다.