본문 바로가기
프로그래밍/OS

x86 CPU 메모리맵

by 사악신 2014. 4. 17.




Low Memory

(1MB 미만)


아래의 설명 중 사용할 수 없다는 뜻은 코드를 배치하거나 임의의 데이터를 배치하는 등의 용도로 사용할 수 없다는 뜻입니다.


0x00000000 부터 0x0009FFFF 까지의 640KB 는 Conventional Memory 라고 불립니다.  앞 부분의 0x00000000 부터 0x000003FF 까지의 1 KB 의 영역에는 IVT 가 존재하며, 0x00000400 부터 0x000004FFh 까지의 256 바이트는 BDA 로서 사용할 수 없습니다.(리얼모드에서 IRQ가 활성화된 경우, BDA 영역의 일부 값들을 overwrite 하기 때문. 하지만 보호 모드로 넘어간 후~ IVT 와 BDA 영역을 지우고 사용할 수도 있습니다.)


0x0009FC00 부터 0x0009FFFF 까지 1KB는 EBDA 로서 사용할 수 없습니다.(보호 모드로 넘어가면 CPU 의 SMM 이 활성화되는데 이 녀석에 의해 EBDA 영역이 사용됩니다. 따라서 어떤 경우에도 이 영역은 사용할 수 없습니다.)


또한 0x000A0000 부터 0x000FFFFF 까지 384KB 는 ROM 과 Video RAM 영역으로 사용할 수 없습니다. 이 부분을 UMB 라고 부르고 1MB 이상 영역을 High Memory 라고 부르기도 합니다.



OS 커널 작업 중... 멀티부트 정보에서 mem_lower 값이 639KB 인 이유는 이 EBDA 영역이 빠져있기 때문입니다.

(아래는 3GB 물리 메모리를 잡았을 경우입니다.)




BDA 는 부분적으로 표준화되었고 1KB 영역의 거의 대부분의 값들은 용도 폐기 되거나 사용되지 않습니다. 하지만, 아래 값들은 중요합니다.



FPC 의 키보드 유닛들 소스를 보면, 키보드의 shift 상태를 확인하기 위하여 BDA 에 접근하는 놈들이 상당수 존재하는데... 최근 이를 활용할지 고민 중에 있습니다.^^


다음은 EBDA 영역입니다. 콘솔 화면 출력을 위하여 비디오 메모리 영역을 사용하곤 합니다.




Upper Memory

(1MB 이상)


보통 커널 이미지를 0x00100000 (1MB) 에 많이 위치시킵니다.





반응형

'프로그래밍 > OS' 카테고리의 다른 글

A20 게이트  (0) 2014.04.20
포트 I/O  (0) 2014.04.18
x86 CPU 메모리맵  (0) 2014.04.17
FPC 로 OS 커널 만들기... - 2 -  (0) 2014.04.11
FPC 로 OS 커널 만들기... - 1 -  (1) 2014.04.09
CodeTyphon 으로 FPC 크로스 컴파일러 생성하기...  (0) 2014.04.08

댓글0