이해가 제대로 안되었던 부분인데 다행히도 지난 시간에 코드에 나와서 정리를 해봅니다.
1. 메모리에 대한 태스크의 접근권한을 관리하기 위한 몇 가지 제어 방법이 있다. 주요한 제어 방법은 도메인이고,
보조 제어 방법은 페이지 테이블 안에 설정되어 있는 접근 권한이다.
2. 도메인은 공통의 가상 메모리 맵을 공유할 때 한 메모리 영역을 다른 것으로부터 고립시켜 가상 메모리에 대한
기본적인 액세스를 제어하는 것이다. 가상 메모리 1MB 섹션으로 할당할 수 있는 도메인에는 16가지가 있다.
(교재 P.574)
즉, 페이지 테이블 엔트리에서 4비트 크기의 도메인 비트 필드를 통해 서로 다른 가상 메모리 영역에 0 ~ 15까지 도메인을
설정 할 수 있습니다. 도메인을 설정하는 이유는 각각의 가상 메모리 영역마다 고유의 접근 권한을 설정하기 위함입니다.
예를 들어 커널의 주소 변환을 위해 사용하는 페이지 테이블 엔트리들의 도메인 값을 0b0000 으로 설정을 하게 되면
MMU는 CP15:C3 (아래 그림 14.12 참조) 레지스터의 D0 필드의 값을 참조하게 됩니다.
D0 비트 필드에 들어가는 값과 그 의미는 표 14.5에 나와있습니다. 값이 b01(Client)인 경우 다시 페이지 테이블 엔트리의
AP 비트 필드를 참조하게 됩니다. AP 비트 필드의 값과 의미는 표 14.6에 나와있습니다.
AP 비트 필드의 의미를 해석 하자면 b11인 경우 이 페이지 테이블 엔트리가 나타내는 가상주소 영역은 유저모드, 특권모드에서
모두 읽기,쓰기가 가능하다는 것입니다.
표 14.5의 b11(Manager)의 의미가 잘 이해가 안되는데 무슨 뜻일까요?
일단 AP 비트 필드는 참조를 하지 않는다는것 같습니다.
댓글 3
-
이종인
2011.10.11 22:45
-
이종인
2011.10.15 08:17
와우 자세한 설명 감사합니다. :D
-
홍문화
2011.10.11 23:18
pagefault는 이와 경우가 다릅니다. 특정 메모리 영역에 대한 접근 권한이 있어서 가상주소를 물리주소로
변환 하고자 페이지 테이블에 접근 했는데 페이지 테이블에 해당 가상주소와 매치 되는 물리주소가
없는 경우에 발생 합니다. 이런 경우 요구 페이징 과정을 거쳐 물리주소에 접근을 하게 됩니다.
여기서 얘기하는 abort는 애시당초 특정 메모리 영역에 대한 접근 권한이 없는데 이 메모리 영역에 대한 접근을
시도 한 경우 MMU가 H/W적인 시그널을 프로세서에 날려주는 매커니즘 입니다. data abort, prefetch abort가
이에 해당 하구요. 개발자는 segmentation fault가 콘솔에 찍히고 프로그램이 뻗은 것을 발견하게 될 것입니다.
"access is uncontrolled" 글자 그대로 해석 하자면 접근이 제어되지 않는다. 즉, 이러한(domain과 AP를 사용한)
접근 권한 제어 매커니즘을 사용하지 않는다고 해석을 하는 것이 맞지 않을까 생각합니다. 그런데 이해가 되지
않는 것은 지난시간에 분석한 코드에서 커널의 domain access control register의 값이 바로 이 0b11 이었다는
것입니다. 이를 어떻게 해석 해야 할지가 상당히 난감한데 한가지 분명한 것은 특권모드에서만 커널 메모리
영역에 접근 가능하도록 해야 한다는 것입니다. 뭔가 다른 방법을 사용할거 같은데 시간이 지나면 알게 되겠죠. ㅋ
.
오 잘 정리해주셨네요 감사합니다.
Manager(b11) 액세스는 제어가 불가능하며 abort가 발생하지 못한다.
-> 혹시 abort가 pagefault 이야기 하는 것 아닐까요? 액세스 제어가 불가능이라는 의미가 애매하네요.....