정보공간_1

[6기 강북 홍진우] 64비트 멀티코어 OS#1 - 개발환경, 운영모드 본문

IT 놀이터/Elite Member Tech & Talk

[6기 강북 홍진우] 64비트 멀티코어 OS#1 - 개발환경, 운영모드

알 수 없는 사용자 2014. 8. 7. 14:31

안녕하세요!

엘리트멤버 6기, 강북멤버십 23-1기 홍진우입니다.

앞으로 엘리트멤버 활동간 64비트 멀티코어의 아키텍쳐, 운영체제에 관해 블로그포스팅을 할 예정입니다.

최근 임베디드 시장에서는 64비트 프로세서의 도입 및 상용화가 임박해 있습니다.

따라서 기존의 32비트 기반의 운영체제에 대한 컴퓨터 구조론과 개발방법론에서 나아가 64비트 프로세서, 그리고 다중 코어 운영에 익숙해지자는 취지로 포스팅을 결정하게 되었습니다.


기준이되는 코어는 인텔 64비트 호환프로세서(x86-64 프로세서)로 지정하였습니다.

그럼, 각설하고 바로 들어가도록 하겠습니다!!!


0. 개발환경

 먼저 앞으로 사용하게 될 주요 개발환경 및 툴에 대해 짚고 넘어가도록 하겠습니다.


         

 0-1. GCC (GNU Compiler Collection)



  GCC는 윈도우와 리눅스등의 다양한 플랫폼을 지원하는 무료 컴파일러 관련 프로그램 집합입니다. 32비트 64비트를 모두 지원하며 소스 파일이 공개되어 있으므로, 목적에 맞게 수정 가능합니다. 



 0-2. Cygwin


  시그너스 솔루션이 개발한 오픈 소프트웨어 모음으로, 윈도우 환경에서 유닉스 계열이 동작하도록 만들어진 가상 OS 에뮬레이터 입니다. GNU GPL로 배포되고 있기 때문에 자유롭게 무료로 사용 가능합니다..



 0-3. NASM(The Netwide Assembler)



  NASM은 윈도우와 리눅스를 모두 지원하는 무료 어셈블러 툴입니다. 마찬가지로 32비트, 64비트 모두 지원 가능하며, 오픈  소스이기에 무료로 소스를 구해 살펴볼수 있습니다.



 0-4. QEMU



  오픈소스 프로세서 에뮬레이터로, 다양한 종류의 프로세서를 소프트웨어적으로 구현한 가상 머신 소프트웨어입니다. x86, x86_64, ARM, SPARC, PowerPC등의 코어를 지원합니다. 특히나 멀티코어 에뮬레이션을 지원해주는 점이 가장 큰 장점 입니다.



1. 운영모드(Operating Mode)

 x86-64 프로세서에는 5가지의 운영모드가 존재합니다. 리얼모드, 보호모드, IA-32e 모드, 시스템 관리 모드, 가상 8086 모드가 해당 모드들입니다. 각 모드는 특징이 모두 다르며, 컨트롤 레지스터, 인터럽트 등의 이벤트 호출로 각 모드별 전환이 가능합니다. 이중 앞으로 다룰 64비트 멀티코어 OS는 전원 관리 기능이나 16비트 코드를 실행하는 기능을 배제하므로, 중요한 세가지 모드에 대해 설명하겠습니다.


운영 모드 

  특징

  리얼 모드

 프로세서의 초기 상태. 16비트 모드, 8086 호환 가능 

  보호 모드

 32비트 모드, 세그먼트, 페이징, 보호, 멀티태스킹 제공

  IA-32e 모드

 두 가지 서브모드(32비트 호환 모드/64비트 모드)

  시스템 관리 모드 

 전원 관리, 하드웨어 제어등의 특수 제어 모드

  가상 8086 모드

 보호 모드 내부에서 가상의 환경을 설정하여 리얼모드처럼 동작하는 모드 


 1-1. 리얼모드

 프로세서가 전원이 켜지거나 RESET되었을때 진입되는 초기모드입니다. 리얼모드는 BIOS의 여러 기능을 사용하는 것이 가능합니다. BIOS를 활용하는 것은 별도의 디바이스 드라이버를 이용하지 않고도 주요 장치의 기능을 사용하는 것이 가능합니다. (구체적인 BIOS활용 방법에 대해서는 추후 포스팅 하도록 하겠습니다.)

 또한 16비트 모드로 동작하며 8086프로세서와 호환이 가능한 모드입니다. 즉, 과거 단말부터 현재의 최신 프로세서까지 호환이 가능한 Low-level 특징을 가진 모드입니다. 따라서 리얼모드는 최대 1MB의 주소 공간을 지원하며, 대부분의 작업을 C언어가 아닌 어셈블리어로 처리해야한다는 특징이 있습니다.


 1-2. 보호모드

  보호 모드는 IA-32 모드로 전환하기 위해 반드시 거쳐야 하는 모드입니다. 또한 32비트 윈도우나 Linux가 동작하는 기본 모드로, 4GB의 주소공간을 지원 합니다. 또한 운영체제의 핵심 기능인 Protection, Multi-Tasking, Segmentation, Paging 등의 기능을 제공하는 모드입니다. 중요한 핵심기능이기에, 여러 기능을 제공하고, 복잡하고 다양한 레지스터와 자료구조를 가지고 있습니다. 보호 모드에서 사용하는 레지스터는 대부분 IA-32 모드에서도 함께 공유하게 됩니다.

 

 1-3. IA-32e 모드

 IA-32e 모드는 서브모드로서, 32비트 호환모드와 64비트 모드가 있습니다. 또한, 64비트 OS에서 매우 중요한 모드입니다. 64비트 OS의 가장 필수적인 요건은 '32비트 체제와의 호환성'이기 때문입니다. 최대 16EB 주소공간을 지원합니다.  따라서 32비트 호환 모드로 동작할때는 주요 응용프로그램의 32비트 코드를 그대로 실행할 수 있다는 점이 가장 큰 장점 입니다.


1-4. 운영 모드 사이의 관계 및 전환

 

  위 그림은 각 모드간의 전환동작을 간단히 나타낸 것입니다. 특정 모드에서 다른 모드로 전환하는 것은 현재 모드가 무슨 모드인지에 따라 차이가 있습니다. 만일 해당 모드로 전환하기 위한 조건을 만족하지 못하고 무리하게 명령을 내리게 된다면, 리셋이나 예외가 발생할수 있습니다. 구체적인 전환 조건은 다음과 같습니다.


 - 리얼모드(초기모드) : 전원 ON시 진입

 - 리얼모드 <-> 보호모드 : CR0레지스터 PE 비트

 - 리얼모드 <-> IA-32e 모드 : 리셋 (리얼 -> IA-32e로의 진입은 불가능합니다.)

 - IA-32e <-> 보호 모드 : CR0레지스터 PG 비트, CR4레지스터 PAE 비트, IA32_EFER_MSR 레지스터 LME 비트

 - 시스템 관리모드 <-> 리얼/IA-32e/보호 모드 : SMI 인터럽트

 - 가상 8086 모드 <-> 보호 모드 : EFLAG레지스터 VM 비트




다음 포스팅은 [64비트 멀티코어 OS - 레지스터, 메모리관리] 입니다!!




* 참조 자료 : '64비트 멀티코어 OS 원리와 구조' - 한승훈 저