롱 모드

x86-64 컴퓨터 구조에서 롱 모드(long mode)는 64비트 운영체제가 64비트 명령어와 레지스터에 접근할 수 있는 모드이다. 64비트 프로그램은 64비트 모드라는 하위 모드에서 실행되며, 32비트 프로그램과 16비트 보호 모드 프로그램은 호환성 모드라는 하위 모드에서 실행된다. 리얼 모드 또는 가상 86모드 프로그램은 롱 모드에서 네이티브로 실행될 수 없다.

 개요 
x86-64 프로세서는 롱 모드가 아닌 상태에서 지원되는 모드인 리얼 모드나 보호 모드에서 실행될 때 IA-32 프로세서와 동일하게 동작한다.

CPUID 확장 속성 필드의 비트는 리얼 모드나 보호 모드에 있는 프로그램에 프로세서가 롱 모드로 전환할 수 있는지 여부를 알려주며, 이를 통해 프로그램이 x86-64 프로세서를 감지할 수 있게 한다. 이는 인텔 IA-64 프로세서가 IA-32 에뮬레이션 하에서 실행 중인지 프로그램이 감지할 수 있도록 사용하는 CPUID 속성 비트와 유사하다.

레거시 바이오스를 사용하는 컴퓨터의 경우, 바이오스와 부트로더는 리얼 모드에서 실행된다. 실행 권한이 x86-64를 지원하는 운영체제 커널로 넘어간 후, 커널은 CPU의 롱 모드 지원 여부를 확인하고 이를 활성화하기 위한 명령어를 실행한다. UEFI를 사용하는 컴퓨터의 경우, UEFI 펌웨어(CSM 및 레거시 옵션 ROM 제외)와 모든 UEFI 부트로더, 운영체제 커널은 모두 롱 모드에서 실행된다.

 메모리 제한 

이전의 x86 아키텍처에 비해 레거시 크기는 64비트로 증가했지만, 메모리 주소 지정은 아직 전체 64비트까지 확장되지 않았다. 당분간은 컴퓨터에 전체 64비트가 필요할 정도의 충분한 메모리를 장착하는 것이 비현실적이다. 이러한 상황이 유지되는 한, 로드/스토어 유닛, 캐시 태그, MMU 및 TLB는 가용 메모리의 손실 없이 단순화될 수 있다. 이러한 제한에도 불구하고 소프트웨어는 전체 64비트 포인터를 사용하여 프로그래밍되므로, 향후 프로세서와 운영체제에서 지원함에 따라 점진적으로 더 큰 주소 공간을 사용할 수 있게 된다.

 현재의 한계 
x86-64 아키텍처를 구현한 최초의 CPU인 AMD 애슬론 64 / 옵테론 (K8) CPU는 48비트 가상 주소 및 40비트 물리 주소 지정을 가졌다.

이 프로세서들의 가상 주소 공간은 두 개의 47비트 영역으로 나뉘는데, 하나는 가능한 가장 낮은 주소에서 시작하고 다른 하나는 가장 높은 주소에서 아래로 확장된다. 이 범위를 벗어나는 주소를 사용하려고 시도하면 일반 보호 실패가 발생한다.

물리 주소 지정의 한계는 컴퓨터가 액세스할 수 있는 설치된 RAM의 양을 제한한다. ccNUMA 멀티프로세서 시스템(옵테론)에서는 CPU가 로컬 노드인지 원격 노드인지에 관계없이 모든 메모리를 직접 주소 지정(및 캐싱)할 수 있으므로 원격 노드에 설치된 메모리도 여기에 포함된다. K8의 물리 메모리에 대한 1 TB 제한(40비트)은 일반적인 개인용 컴퓨터 기준으로는 엄청나게 크지만, 슈퍼컴퓨터 용도에서는 제한이 될 수 있었다. 따라서 K10 (또는 "10h") 마이크로아키텍처는 48비트 물리 주소를 구현하여 최대 256 TB의 RAM을 주소 지정할 수 있다.

필요할 때 소프트웨어의 부작용 없이 마이크로아키텍처를 단계적으로 확장할 수 있으며, 동시에 구현 비용을 절감할 수 있다. 향후 확장을 위해 아키텍처는 가상 주소 공간을 64비트로, 물리 메모리 주소 지정을 52비트로 확장하는 것을 지원한다(페이지 테이블 항목 형식에 의해 제한됨). 이는 프로세서가 264바이트(16 엑사바이트)의 가상 주소 공간과 252바이트(4 페타바이트)의 물리 주소 공간을 주소 지정할 수 있게 해준다.

 같이 보기 
 x86-64

 각주 

 외부 링크 
 AMD 롱 모드의 새로운 기능 안내

분류:프로그래밍 언어 구현