>

- A20 게이트 

과거 8086 CPU는 어드레스 라인이 20개 뿐이라서 최상위 1비트는 표현되지 않는다. 

80286이 도입되면서 CPU는 Protected Mode 라는 기능을 가지게 되고 어드레스 라인도 24개로 늘어났다. 하지만 여전히 8086 소프트웨어와 호환될 필요가 있었기 때문에 Real Mode라는 방식을 두어 8086과 호환이 가능하게 했고 8086에서도 1MB 이상의 주소를 지정하기 위해 20번 어드레스를 키보드 컨트롤러 칩인 8042의 하나의 핀과 AND 게이트로 묶었다.

이러한 방법은 Pentium 4 까지 오면서도 사용되고 있다. 즉 A20 게이트를 켜준다는 말의 의미는 키보드 컨트롤러의 특정 핀을 1로 세트해주는 것이라고 할 수 있다.

A20 게이트를 키면 1MB 이상의 주소 지정도 무리없이 할 수 있다.


- 페이징

세그멘테이션 기법과 더불어 페이징 기법을 사용하면 한 프로그램이 4GB 의 메모리 영역을 사용하게 할 수 있다.

논리주소 -> 선형주소 -> 물리주소

이런 식으로 물리주소에 매핑이 되고 선형주소를 분해하여 물리주소를 찾아 매핑하는 기법이 페이징이다.



CR3 레지스터는 페이지 디렉토리의 주소를 갖고 있다. 

선형주소의 상위 10비트는 페이지 디렉토리 엔트리의 오프셋을 나타낸다.

중간 10비트는 페이지 테이블에서의 페이지 테이블 엔트리 오프셋을 나타낸다.

하위 12비트는 해당 페이지의 오프셋 즉 물리 주소의 오프셋을 나타낸다.

CR3레지스터에 있는 페이지 디렉토리 주소와 디렉토리 엔트리 주소를 참조하여 각 페이지 테이블을 찾고 마찬가지로 페이지 테이블과 테이블 엔트리 주소를 참조하여 해당 페이지를 찾는다. 그 후에 그 페이지에 오프셋을 더하여 물리 주소에 접근하게 된다.



* 이미지 출처 : http://viralpatel.net/taj/tutorial/paging.php

페이지 디렉토리는 시스템 상에 하나이며 1024개의 페이지 디렉토리 엔트리를 갖는다.

페이지 디렉토리 엔트리는 페이지 테이블의 주소를 10비트로 갖고있다. (나머지는 Flags)

페이지 테이블 또한 1024개의 페이지 테이블 엔트리를 갖으며 페이지 주소를 10비트로 갖는다. (나머지는 Flags)

각 페이지는 4kb 크기이며 1024 * 1024 * 4096 = 4294967296 즉, 4GB 의 메모리를 가상으로 사용할 수 있게 한다.

'Study > Kenrel' 카테고리의 다른 글

여러개의 Task 일때 Task Switching  (0) 2015.10.01
유저모드 Task Switching  (0) 2015.10.01
Protected Mode에서의 보호  (0) 2015.09.30
Task Switching in Kernel  (0) 2015.09.25
PIC 초기화  (0) 2015.09.24
Posted by Mungsul
,