Post

모드에 대한 이해 - 2

리얼 모드(Real mode)

앞서 포스팅한 내용에 따르면 리얼 모드의 특성은 아래와 같다.

  1. 16bit 프로세서와 동일하게 사용되며 BIOS의 여러 기능을 사용가능하다.
  2. 페이징을 지원하지 않는다.
  3. 640KB 메모리 제한이 있다 (실 사용 가능한 메모리 기준)
  4. 디바이스 드라이버 없이 장치 제어가 가능하다.

이러한 특성을 하나하나 세부적으로 살펴보겠다.

리얼 모드는 16bit 프로세서를 쓰던 시절의 동작을 모사한 모드이다. 이러한 16bit 프로세서는 CPU의 내부 버스 너비가 16bit이기에 16bit 프로세서라고 부른다. 또한 이러한 시스템에서 16비트 정수, 메모리 주소, 다른 데이터 장치들은 16 비트 너비의 영역을 갖는다

메모리 주소는 0부터 1MB까지 지원하는데, 이를 이해하기 위해서는 리얼 모드에서의 주소 지정방식을 알아야한다. 리얼 모드에서는 페이징이 아닌 세그멘테이션만 지원한다. 세그멘테이션이란 주소 공간을 특정 영역으로 나누는 것인데 이렇게 나눠진 영역을 세그먼트라고 부르며 리얼 모드에서는 세그먼트의 크기가 64kB로 고정되어있다. 이는 리얼모드에서 범용 레지스터가 16bit이기 때문인데 16bit로 접근 할수 있는 범위가 0xffff이기에 세그먼트 크기가 64KB인 것이다. 이러한 세그먼트의 시작 주소는 세그먼트 레지스터라는 레지스터에 저장되는데 이 세그먼트 레지스터의 값을 기준으로 각 세그먼트의 위치를 찾게된다.

세그먼트 값을 찾을때 세그먼트 레지스터 값에 범용 레지스터의 값을 더하는 방식으로 실제 메모리의 물리 주소를 찾게 되는데 이때 세그먼트 레지스터의 값은 16을 곱한 값을 기준 주소로 사용하게 되므로 최대값은 2^20 - 16이고 범용 레지스터 값까지 더한 값이 되므로 사실상 메모리의 범위는 1MB에 달하게 되는 것이다

위에 특성에서는 640KB 메모리의 제한이 있다고 했는데 왜 1MB 이야기를 꺼내는 것일까? 이건 이미 사용이 예약된 메모리 주소가 있기 때문인데 0x7C00부터 512KB의 영역은 MBR이 로드되는 위치 0xA000부터 0xC000는 비디오 메모리 영역등 지정된 영역이 있다 그렇기 때문에 이러한 예약된 메모리 영역을 다 빼고 나면 약 360KB 정도가 제외되게 되고 그래서 가용한 메모리만 따져보면 약 640KB 정도인 것이다.

디바이스 드라이버가 없이 기기의 제어가 가능하다고 했는데 이는 레지스터와 BIOS에서 제공하는 int(인터럽트 서비스) 명령어로 가능하다. 가령 HDD 제어의 경우 AH에 서비스 번호를 지정하고, AL에 읽을 섹터수를 지정한 다음에 CH에는 읽을 트랙 번호, CL에는 읽을 섹터번호, DH에는 읽을 헤드 번호, DL에는 읽을 드라이브 번호를 설정한 뒤 인터럽트 서비스를 호출하면 읽을 수가 있다.

참고 문헌

  1. 64Bit 멀티코어 OS의 구조 - 한승훈 저
This post is licensed under CC BY 4.0 by the author.