1. 64비트 프로세서의 이모저모

들어가기

실질적인 OS 개발에 앞서 간단하게 책에 나온 운영 모드를 정리.

본론

1.1 운영 모드

  • 총 다섯 가지 운영 모드를 지원하지만, 꼭 필요한 리얼 모드, 보호 모드, IA-32e 모드 를 중심으로 진행.

1.1.1 64비트 OS가 갖추어야 할 필수 운영 모드

리얼 모드

  • 프로세서가 전원이 켜지거나 리셋되면 프로세서는 리얼 모드로 진입.
  • 16 비트 프로세서와 동일하게 동작, BIOS(Basic Input Output System)의 기능 사용.
  • OS 이미지를 디스크에서 메모리로 복사하여 보호 모드로 변경.

보호 모드

  • 리얼 모드에서 IA-32e 모드로 전환시 반드시 보호 모드를 거쳐야 함.
  • 32 비트, 기본 동작 모드로 여러 기능(보호, 멀티태스킹, 세그먼테이션, 페이징)을 하드웨어적으로 지원.

IA-32e 모드

  • 서브 모드로 32비트 호환 모드와 64비트 모드 존재.
  • 32비트 코드를 그대로 실행 가능.

1.1.2 운영 모드 사이의 관계와 운영 모드의 전환

  • 화살표 위에 표시된 내용은 해당 모드로 전환하는데 필요한 조건을 나타냄.

1.2 운영 모드와 레지스터

  • 운영 모드 앞에 붙은 숫자는 레지스터의 크기와 관계 -> 숫자가 커질수록 레지스터 개수 증가.
  • OS를 개발하는 과정에서 큰 비중을 차지하는 레지스터는 범용 레지스터, 세그먼트 레지스터, 컨트롤 레지스터.

1.2.1 범용 레지스터

  • 범용 레지스터는 계산, 메모리 어드레스 지정, 임시 저장 공간 등의 목적으로 사용.
  • 범용 레지스터의 수가 늘어날수록 수행속도는 증가.
  • 다양한 목적으로 사용 가능하지만, 특정 명령어는 특정 레지스터와 같이 사용
  • 운영 모드별로 레지스터가 개별적으로 존재하지 않고 접두사나 접미사를 붙여 접근하는 크기를 표시.

1.2.2 세그먼트 레지스터

  • 16 비트 레지스터로 어드레스 영역을 다양한 크기로 구분.
  • 리얼 모드에서는 고정된 크기의 어드레스 영역을 지정, 보호 모드와 IA-32e 모드에서는 접근 권한과 세그먼트의 시작 어드레스를 지정하는데 사용되기도 함.
  • 세그먼트 레지스터 접두사를 통해 명시적으로 특정 세그먼트를 설정 가능.

1.2.3 컨트롤 레지스터

  • 운영 모드를 변경하고, 운영 중인 모드의 특정 기능을 제어하는 레지스터.
  • 컨트롤러 레지스터는 운영 모드와 확장 기능을 제어하는 만큼 다소 복잡, 운영 모드에 따라 필수 필드와 옵션 필드가 달라짐.

1.3 운영 모드와 메모리 관리 기법

  • 메모리 관리 기법은 크게 세그멘테이션과 페이징.
  • 세그멘테이션은 세그멘트 레지스터에 세그먼트의 시작 주소 혹은 디스크립터 위치를 설정.
  • 페이징은 컨트롤 레지스터 중 CR3 레지스터에 물지 주소를 설정.

1.3.1 리얼 모드의 메모리 관리 방식

  • 리얼 모드는 최대 1MB까지 주소 공간을 사용, 세그멘테이션만 지원.
  • 세그멘테이션에서 세그먼트의 시작 어드레스는 기준 어드레스로 사용.
  • 리얼 모드의 세그먼테이션은 세그먼트 레지스터 값 + 범용 레지스터 값.
  • 세그먼트 레지스터 크기 16 비트로 1MB 영역 접근??(2^16 = 65536)
    – 세그먼트 레지스터 값 * 16을 기준 주소로하고 범용 레지스터와 더함.

1.3.2 보호 모드의 메모리 관리 방식

  • 보호 모드는 세그먼테이션과 페이징 모두 지원.
  • 보호 모드의 세그먼테이션은 레지스터에 기준 주소를 직접 설정하는 대신 디스크립터 자료구조의 위치를 설정.
  • 세그먼트 레지스터의 명칭도 세그먼트 디스크립터를 선택한다는 의미에서 세그먼트 셀렉터로 변경.
  • 세그먼트에 대한 정보를 나태내는 세그먼트 디스크립터.
    – 시작 어드레스와 크기, 권한, 타입 등의 정보 저장.
  • 보호 모드에서 세그먼트 레지스터는 세그먼트 디스크립터의 위치를 가르킴.
  • 세그먼트 디스크립터는 GDT(Global Descriptor Table)에 저장.
  • 주소를 계산하는 방법은 기준 주소에 범용 레지스터 값을 더함 -> 선형 주소.
    – 선형 주소를 기반으로 물리 주소를 계산.
  • 선형 주소는 페이징의 입력 값이되어 물리 주소로 변환.
  • 페이징, 물리 메모리를 페이지로 나누고 선형 주소를 물리 주소로 페이지로 연결하는 방식 -> 주소 공간을 더 넓게 사용 가능.

1.3.3 IA-32e 모드의 메모리 관리 방식

  • 세그먼트 디스크립터에 설정된 기준 주소와 크기에 관계없이 모든 기준 주소는 0, 크기는 64 비트.
  • 주소 공간이 늘어난 만큼 변환 단계도 늘어나지만 기본적인 원리는 보호 모드 페이징과 같음.

마치며

막상 OS 개발을 시작해보려니 어렵다. 지속적인 공부가 필요할듯….
부족한 부분이나 이해가 가지 않은 부분은 뒷 장을 진행하면서 보충하자!!

Share