본문 바로가기

Security/Kernel & OS

[Operation System] 5. OS 만들기 - BootStrap - 4

1. 8086

 - 1978년 인텔에서 제작된 CPU로서 처음으로 x86 아키텍처를 적용한 제품이다.

 - 내부적으로는 16 bit 레지스터를 사용한다. 하지만......

 - 어드레스 버스가 20 bit 였으므로 1024 * 1024 = 1048576 (byte) = 1 MB 만큼의 메모리를 사용할 수 있다.

 - 바이오스에서 사용하는 영역인 384 KB 를 제외하면 640 KB 만을 실제로 사용할 수 있다.

 - 8086 에서 사용하는 1MB 의 Memory Map

 

 - 0x000 ~ 0x3FF 까지 0x400(1 KB)은 IVT로 사용, 0x400 ~ 0x4FF 까지 BDA로 사용한다.

 - 0x500 ~ 0x9FFFF 까지는 자유롭게 사용할수 있다고 나와 있다. 하지만....

 - 0x7C00 ~ 0x7DFF 의 512 Byte 에는 부트코드가 있어야 한다. 

 - 또한 0x9FC00 ~ 0x9FFFF 의 1KB 영역은 EDBA ( Extended BIOS Area ) 가 있으므로 사용할수 없다.

 - IVT, BDA 부분등을 제외하면  약 640 KB 정도가 된다.

 - 상위의 0xA0000 ~ 0xFFFFF 까지의 0x60000 ( 384 KB ) 는 ROM 영역이다.

 

2. 세그먼트와 오프셋 개념 및 등장 배경

  - 등장 배경

 x86의 초기모델인 8086은 총 1 MB(20 Bit)의 메모리를 사용하도록 설계도어 있었지만, CPU 내부 구조는 16bit 레지스터를 사용하고 있었으므로 최대 2^16dls 65536 Byte, 즉 64 KB의 메모리밖에 사용할 수 없었습니다. 이에 인텔은 세그먼트와 오프셋 개념을 도입해서 16 Bit 레지스터를 이용해 20 Bit를 가리킬 수 있도록 하였습니다.

 

 - 개념

 Segment:Offset 과 같이 쓰며, 이렇게 표시되어 있는 논리주소는 세그먼트를 4 Bit 시프트 하고, 거기에 오프셋을 더해 물리주소로 변환 합니다. 예를들어 0x0700:0x0C00 이라면 4 Bit 왼쪽으로 시프트(16진수로는 0을 하나더 추가하는 것)하고 거기에 오프셋 값을 더해서 0x7000 + 0x0C00 = 0x7C00 이 됩니다. 이 방법을 통해서 0x00000 부터 최대 0xFFFFF 까지 1MB의 메모리를 사용할수 있게 되었습니다. 따라서 하나의 세그먼트는 64 KB가 되며, 이 세그먼트로부터 다음 세그먼트 사이에 존재하는 주소에 접근하기 위해서 오프셋을 사용합니다.

 

3) 리얼모드 와 보호모드

 - 리얼모드 ( Real Mode )

 80286 이전의 인텔 프로세서 이다.  16 Bit 시스템 체계이고, DOS 에서 사용되며 메모리의 어디에도 접근이 가능하다. 현재 인텔 프로세서 와 호환성을 유지하기 위해 존재한다.

 

 - 보호모드 ( Protected Mode )

 80386 이후부터 최근까지읜 인텔 프로세스 이다. 32 Bit 시스템 체계이고, 많은 기술(테스킹, 페이징, 유저/ 커널 모드등)이 적용 되었다. 메모리에 직접적인 접근을 제어하여 시스템을 보호하는 모드이다.

 

 

 

http://blog.naver.com/hyuga777/80125665178  퍼왔습니다~