요즘도 쓰는 언어 어셈블리

x86_64, AMD64, 64bit

Protected mode와 Long mode

Protected mode와 Long mode에 대해서는 설명을 하자면 문서 하나가 아니라 새 강좌 전체를 만들어야 합니다. 역사적인 배경 설명만 하겠습니다.

8086은 Real mode입니다. 우리가 실습한 것처럼 어떤 메모리 주소에 접근하든 제약이 없습니다. 너무 제약이 없으니 한 프로그램이 동작할때 다른 프로그램은 실행되지 못합니다. 즉 지금처럼 여러 프로그램이 동시에 실행되는게 아니라 한 프로그램을 실행하면 끝날때까지 다른 프로그램은 아무것도 실행을 못합니다.

그런데 80286부터 Protected mode 보호모드라는걸 지원하기 시작했습니다. 보호모드의 장점이 여러가지지만 크게 2가지입니다.

  • 가상 메모리
  • 보안

둘다 결국 여러개의 프로그램을 동시에 실행시키기 위한 방법입니다.

가상메모리란 프로그램마다 마치 컴퓨터의 모든 메모리를 혼자 쓰고 있는 것처럼 보이도록 실제 모메리에 접근시키지 않고 가상 주소로만 동작하도록 만드는 것이고, 보안 기능들은 다른 프로그램이 쓰는 주소 공간에 접근하지 못하도록 하는 페이징, 링 레벨 등을 말합니다. 80286에서 선보였고 80386에서 완성된 기능들입니다. 그래서 80386이 프로세서 역사에 중요하게 거론되는 것입니다. 유닉스의 기능을 80386에서 동작하도록 리눅스가 만들어질 수 있었던것도 80386이 가상메모리를 제대로 지원하기 때문입니다. 유닉스의 가장 중요한 기능이 멀티프로그래밍이니까요. 지금은 안되는게 이상한 일이지만 그때는 그랬습니다.

그래서 보호모드가 마치 32비트로 변환하는 과정인것처럼 설명되지만 사실은 80286에서 16비트 보호모드가 있었습니다. 프로세서를 보호모드로 동작시키는 것과 32비트로 동작시키는 것은 다른 개념입니다.

어쨋든 32비트 보호모들로 오랫동안 컴퓨터 게임을 즐기던 우리는 좀더 크고 그래픽좋은 게임이 하고 싶었고, 64비트를 달라고 아우성치기 시작했습니다. 그래서 결국 프로세서 제작사들은 IA-64니 AMD64같은 64비트 모드를 만들었습니다. Long mode로 동작한다는 것은 64비트로 동작한다는 것과 같은 의미라고 생각하시면 됩니다. 같이 개발된 개념이니까요. 32비트로 동작하는 Long mode는 없습니다.

역사적인 설명은 흥미로만 들으시고 자세한 사항은 제가 만든 long mode 변환 코드나 관련 문서들을 참고하세요. 운영체제를 만들게 아니라면 굳이 알필요없는 것들이니 소개만 합니다.

"64비트 멀티코어 OS 원리와 구조 1권: OS 개발 60일 프로젝트"

http://wiki.osdev.org/Setting_Up_Long_Mode

https://gurugio.kldp.net/wiki/wiki.php/gurugio/longmode_bootsect

https://github.com/gurugio/caos/blob/master/src/setup.asm

 

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
gurugio
현재 버전
선택 버전
graphittie 자세히 보기