Intel Microprocessor의 386DX급이상에서는 두가지 모드를 지원한다. 즉, 16 bit체계인 실 모드와 32 bit체계인 보호모드를 지원하는데 DOS가 실 모드를 이용하는 운영체제이며, OS/2, UNIX, WINDOWS-NT등이 보호모드를 이용하는 운영체제이다.
매킨토시에 장착된 M68계열 processor는 애초에 8 bit환경에서 32 bit환경으로 발전되었지만, INTEL의 8086계열은 같은시기에 16 bit체계를 선택했기 때문에 다시 32 bit체계를 덧붙이는 번거로움을 겪고 있는 것이다. DOS의 대중성때문에 Intel이 16 bit체계를 버릴수도 없는 것이 현실이다. DOS 응용소프트웨어를 완전하게 수용할수 있는 32 bit운영체제의 출현과 더불어 DOS 응용프로그램의 생산이 점진적으로 중단된다면, 어쩌면 그리 멀지않은 시기에 8086계열에서 실모드와 보호모드가 공존하는 지금과 같은 절름발이 형태의 CPU는 사라질지도 모른다. 이것은 리눅스가 지향하는 바이기도 하다.
부팅시 ROM의 POST(자기진단 프로그램)가 수행될때는 실 모드이나 32 bit운영체제의 경우 kernel에 의해 보호모드로 진입하게 된다. 보호모드에서는 실모드에 비해 다음과 같은 대표적인 장점을 가지고 있다. 이것은 DOS와 리눅스의 기능상의 차이이기도 하다.
1) 실 모드에서는 program의 코드부분은 반드시 1M byte memory내에 있어야 한다. 그것은 16 bit로 번지지정을 할수 있는 한계가 1M로 제한되어 있기 때문이다. 따라서 16 Mbyte의 RAM 을 장착하였더라도 코드부분으로는 상용메모리인 640kbyte밖에 사용하지 못한다. 다음은 DOS 상에서 mem 유틸리티를 사용하여 memory상태를 보았다.
D:\> MEM
Memory Type Total = Used + Free
---------------- ------ ------ ------
Conventional 640K 55K 585K
Upper 0K 0K 0K
Adapter RAM/ROM 384K 384K 0K
Extended (XMS) 7168K 6384K 784K
---------------- ------ ------ ------
Total memory 8192K 6823K 1369K
Total under 1 MB 640K 55K 585K
Total Expanded (EMS) 6528K (6684672 bytes)
Free Expanded (EMS) 6144K (6291456 bytes)
Largest executable program size 585K (599024 bytes) ◀
Largest free upper memory block 0K (0 bytes)
MS-DOS is resident in the high memory area.
아래에서 3번째 이탤릭체로 된부분에서 보듯이 640 kbyte내에만 실행파일이 들어갈수있다.
반면, 보호모드에서는 memory 전부를 코드를 위해 사용할수 있다. 따라서 RAM이 많이 깔려 있다면 상당히 큰 실행file도 수행시킬수 있는 것이다. 게다가 paging이란 기능을 사용하면 실 메모리보다도 훨씬 큰 실행file을 수행할수 있는데 paging에 대해서는 7장 메모리 관리에서 다 룬다.
2) 실 모드에서는 여러개의 program이 메모리에 올라와서 수행될수는 없다. 단지 interrupt를 이 용하는 RAM상주 프로그램만이 메모리를 같이 차지할수 있는 것이다. 만약에 실 모드에서 여 러개의 프로그램이 메모리에서 수행된다면 프로그램들이 다른 프로그램 영역을 침범해서 엉망 이 될것이다. 물론 소프트웨어적으로 이것을 처리해 주는 방법이 있지만 그렇게 하면 운영체제 의 부담이 커지게 된다. 보호모드에서는 이것을 processor가 처리해 줌으로써 메모리만 충분하 다면 아주 많은 프로그램들이 한꺼번에 수행될수 있게 된다. 즉 보호모드에서 메모리에 있는 프로그램들은 각자의 영역에서 수행되며 특별한 권한이 없이는 다른 프로그램영역을 침범하지 못한다.
위의 두가지 이유에 의해 보호모드에서는 여러명의 user가 수많은 program을 수행한다.
앞으로는 수행중인 program을 task 또는 process라고 부르겠다. 굳이 이들 둘의 용어들에 의미차이를 둘수도 있겠으나 내용의 간결성을 위해 본서에서는 같은 의미로 사용할것이다.
보호모드에서의 프로그래밍은 실모드에 비해 복잡한 편이다. kernel을 분석하기 위해서는 적어도 386 구조(architecture)와 관련된 책 한권쯤은 옆에 두고 보아야 할것으로 생각한다.