본문 바로가기

Reverse Engineering/Reversing 이론 설명

[CPU] 80286과 80386 마이크로프로세서

1. 80286

  80286은 외부적으로 8086에 비해 더 빠른 속도와 더 많은 어드레스(24비트의 주소선)를 다룰 수 있게 된 것 외에 내부적으로 보호모드(Protected Mode)라는 새로운 소프트웨어 아키텍처를 출현시켰다. 80286은 전원을 넣으면 이전의 8086과 같은 실제모드로 출발하여 하위 20비트의 주소선만을 사용하여 최대 1MByte까지의 메모리를 다룰 수 있었고, 이와 같이 실제모드에서 동작하는 80286은 단지 클록속도가 빨라진 8086과 같았으며, 과거 8086 소프트웨어가 아무런 수정 없이 돌아갈 수 있었다. 하지만 프로그램에서 보호모드의 전환을 수행하게 되면80286은 멀티태스킹 환경을 지원하게 된다.

  이는 각 프로그램에 독립적인 일정한 양의 메모리를 할당할 수 있게 해주며 프로그램은 물리주소(physical address)를 사용하지 않고 세그먼트 셀렉터(segment selector)를 통하여 가상주소를 가지게 된다.

  80286에서 이 방식을 사용하면 각 프로그램은 최대 16MByte의 메모리를 사용할 수 있으며, 여러 프로그램은 자신이 사용하는 메모리를 다른 프로그램으로부터의 침입으로부터 보호할 있었다.

2. 80386

  인텔은 1985년 80386 마이크로프로세서를 발표했다. 이 80386은 어드레스 버스, 데이터 버스, 레지스터 등의 모든 접근이 32비트로 이루어졌으며, 이는 진정한 32비트 프로세서의 출현이라고 할 수 있었다.

  이 32비트의 레지스터와 32비트의 데이터 버스의 확장은 한 번에 다룰 수 있는 정수 데이터 사이즈가 40억(2^32= 4,294,967,295)을 넘어간다는 사실 외에 실수 연산에서도 매우 중요한 의미를 가지는데, 단일 정밀 부동 소수점의 숫자를 표현하는 실수가 32비트의 메모리를 필요로 하기 때문이다. 즉, 8086에서 두 번에 나누어 전송해야 했던 실수 데이터를 한 번에 전송할 수 있게 되었고, 이는 실수를 조작하는 프로그램의 속도를 크게 향상시켰다. 그리고 32비트의 어드레스 버스의 확장은 4GByte의 물리적 메모리를 액세스할 수 있게 되었다. 하지만 80386의 위와 같은 버스들의 용량 확장이나 클록 속도 증가 외에아주 중요한 변화가 생겼는데, 그것은 오퍼레이팅 시스템이 메모리 자원을 할당하고 관리할 수 있도록
메모리 관리 장치(MMU; Memory Management Unit)가 포함되었다는 사실이다. 이것은 이전의 마이크로프로세서가 메모리 관리를 위해 완전히 소프트웨어가 담당하였던 것을 80386에서는 메모리 관리 및 메모리 할당을 하드웨어에서 어느 정도 제공하여 줌으로써 운영체제를 만들 때 소프트웨어적인 부담을 훨씬 덜어주게 되었다.

80386에서의 레지스터들



  위 그림은 80386의 레지스터들을 나타낸 것이며, 위 그림에서 알 수 있듯이 80386은 기존의 프로세서에 있던 범용 레지스터에 대해서는 32비트로의 확장이 이루어졌으며, 플래그 레지스터에 대해서는 아래와 같은 새로운 플래그가 추가되었다.

 IOPL(I/O 특권 수준)  2Bit로 구성된 이 보호모드 제어비트는 I/O 명령어를 실행하는 데 필요한 현재의 특권수준(0~3)까지를 나타낸다.
 NT(내포 태스크 플래그)  이 상태 플래그는 보호모드에서 현재 태스크가 다른 태스크에 의해 호출되었음을 나타내는 데 사용되어지며, 내포 태스크가 끝났을 때 리턴 명령어의 형태에 영향을 미친다.
 RF(재시작 플래그) 이 플래그는 디버그 레지스터와 함께 사용되어 이 플래그가 세트되면 디버그 Fault를 무시하고 다음 명령어가 실행되도록 한다. 
 VM(가상모드) 이 플래그는 가상 8068모드로 전환시키는 데 사용되는 보호모드 제어 플래그이다. 

 
  80386 이외에 시스템 레지스터라는 새로운 그룹의 레지스터가 나타나게 되었는데, 이 레지스터들은 보호모드에서의 프로세서 제어와 검사를 위한 목적으로 만들어졌으며, 일반적인 응용 프로그램은 사용하지 못하며 운영체제에서 시스템의 작업을 위하여 사용되어질 수 있다.

  80386에 있는 두 번째 시스템 레지스터 그룹은 디버그 레지스터들인데, 이 레지스터 그룹은 하드웨어 브레이크 포인터를 가능하게 하는 레지스터들로서 4개의 원하는 메모리 주소에 대하여 브레이크 포인터를 정하게 되며, 해당 메모리 주소가 프로그램에 의하여 액세스되었을 때 프로그램이 멈추어 디버깅 루틴으로 제어가 넘어갈 수 있도록 해준다.

  이 외에 시스템 레지스터 그룹으로 TR6, TR7의 두 레지스터가 있는데, 이들 레지스터는 프로세서의 페이징 장치가 가상 메모리 주소를 물리적 주소로 변활할 때 보다 빠르게 하기 위하여 사용하는 TLB(Translation Lookaside Buffer) 버퍼의 내용을 RAM으로부터 검사하는 데 사용된다.