언리얼 모드

Unreal mode

x86 컴퓨팅에서 언리얼 모드, 빅 리얼 모드, 거대 리얼 모드, 플랫 리얼 모드 또는 부두 모드는 리얼 모드[1] 변형으로, 1개 이상의 세그먼트 기술자가 32비트 제한과 같은 비표준 값으로 로드되어 메모리 전체에 액세스 할 수 있습니다.이름과 달리 x86 프로세서가 동작할 수 있는 별도의 어드레싱 모드가 아닙니다.80286 이후의 x86 프로세서에서 사용됩니다.

개요

효율성을 위해 80286 이후의 모든 x86 프로세서는 실제 모드에서도 유효한 메모리 주소를 계산할 때마다 내부 세그먼트 기술자 캐시에 저장된 기본 주소, 크기 및 기타 속성을 사용합니다.따라서 내부 세그먼트 기술자를 수정하면 주소 지정 가능한 메모리의 크기 등 실제 모드에서 세그먼트의 속성을 변경할 수 있습니다.이 기술은 널리 사용되고 있으며 모든 인텔 [2]프로세서에서 지원됩니다.

HIMEM.SYS 는, DOS 가 언리얼 모드와 호환성이 없는 가상 8086 모드로 동작하도록 스위칭 되지 않는 한, 이 기능을 사용해 확장 [3]메모리를 처리합니다.

비현실적인 모드를 사용한 몇 안 되는 게임 중 하나는 Ultima [4][5]VII였다.

언리얼 모드는 최신 인텔 [6]프로세서의 초기 모드이기 때문에 BIOS 코드에 사용됩니다.또, 인텔 386SL 이후의 프로세서의 시스템 매니지먼트 모드(SMM)에 의해, 프로세서는 리얼 [7]모드가 됩니다.

언리얼 모드의 프로그램은, 리얼 모드(BIOS, DOS 커널, 및 드라이버)용으로 프로그램 된 16비트 코드를, 하는 일 없이 호출할 수 있습니다.이것에 의해, 비현실적인 모드 드라이버가 DPMI 드라이버보다 심플하게 됩니다.단, 비현실 모드는 Windows 3.x/9x/NT 및 OS/2와 같은 보호 모드 운영 체제와 호환되지 않습니다.

빅 리얼 모드에서는 1 MiB 코드 세그먼트와 4 GiB 데이터 [8][9]세그먼트가 있습니다.

일부 부트 로더(LILO 등)는 unreal 모드를 사용하여 최대 4 GiB의 메모리에 액세스합니다.

언리얼 모드 활성화

80386 이상의 마이크로프로세서를 비현실 모드로 만들려면 프로그램이 먼저 보호 모드로 들어가 GDT 또는 LDT에서 플랫 디스크립터를 찾거나 생성하고 데이터 세그먼트 레지스터 중 일부를 각각의 보호 모드 "셀렉터"로 로드한 후 다시 리얼 모드로 전환해야 합니다.리얼 모드로 돌아간 후에도 프로세서는 보호 모드로 설정된 캐시된 디스크립터를 계속 사용합니다.이로 인해 [9]리얼 모드에서4 GiB의 확장 메모리에 액세스 할 수 있게 됩니다.

80286 마이크로프로세서는 1MiB 이상의 [3]소스 또는 타깃 메모리 위치를 가리키도록 숨겨진 세그먼트 베이스 레지스터를 수정하는 문서화되어 있지 않은 명령 LOADALL을 통해서만 비현실 모드로 전환할 수 있습니다.

80386부터 리얼모드 프로그램은 주소 크기 오버라이드 프리픽스를 [10]가진 32비트 레지스터를 사용할 수 있습니다.이것에 의해, 프로그램은 DS:[EBX]와 같은 주소를 사용할 수 있습니다.통상 리얼 모드에서는 EBX가 0xFFFF를 넘으면 장애가 발생합니다.unreal 모드에서는 액세스가 허용됩니다.

비현실적인 모드의 변형

위에서 설명한 바와 같이 비현실 모드에서는 일반적으로 메모리 내의 데이터를 보다 효율적으로 처리하기 위해 하나 이상의 데이터 셀렉터를 사용합니다.이는 일반적인 관행으로 종종 "플랫 리얼 모드"[11] 또는 "빅 리얼 모드"[12]라고 불립니다."대규모 실제 모드"는 코드 세그먼트가 4 [13][9]GiB까지 확장되는 변형입니다.

또한 32비트 속성("D" 비트)이 1로 설정된 기술자에서 코드 셀렉터(CS)를 로드함으로써 비현실 모드의 특별한 경우를 얻을 수 있다.이 거의 사용되지 않는 변형은 주로 16비트코드 세그먼트에서 32비트어드레싱을 사용할 때 일반적으로 필요한 Operand Size Override Prefix를 피할 수 있지만 셋업이 더 어렵기 때문에 몇 가지 장점이 있습니다.리얼 모드 인터럽트는 Extended Instruction Pointer(EIP; 확장 명령 포인터)의 상위 16비트를 자동으로 유지하지 않기 때문에 코드는 코드 세그먼트의 하위 부분에 적합하거나 어떤 방식으로든 EIP의 상위 비트를 유지 및 복원할 수 있어야 합니다.또한 16비트 코드를 사용하는 BIOS 또는 DOS 인터럽트 함수를 호출하려면 "D" 비트를 앞뒤로 전환해야 합니다.일부 에뮬레이터는 이 비현실 모드에서 [14]실행되는 프로그램의 에뮬레이션을 지원하지 않습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Salihun, Darmawan (2013-09-16). "System Address Map Initialization in x86/x64 Architecture Part 1: PCI-Based Systems" (PDF). Retrieved 2019-08-19.
  2. ^ Gutmann, Peter (2004) [2003]. Cryptographic Security Architecture: Design and Verification. Springer Science & Business Media. p. 58. ISBN 978-0-387-95387-8. Retrieved 2017-01-04. […] Unreal mode became so widely used […] that Intel was forced to support it in all later processors, although its presence was never documented […]
  3. ^ a b Necasek, Michal (2011-03-18). "HIMEM.SYS, unreal mode, and LOADALL". OS/2 Museum. Archived from the original on 2017-01-03. Retrieved 2017-01-03.
  4. ^ Riiser, Haakon. "HIMEM.SYS and unreal/flat real mode, EMM386 and UMBs". Newsgroup: comp.os.msdos.programmer. Archived from the original on 2019-04-21. Retrieved 2017-10-14.
  5. ^ "A Brief History of Unreal Mode OS/2 Museum".
  6. ^ Pelner, Jenny; Pelner, James. "Minimal Intel Architecture Boot Loader". Retrieved 2017-10-14.
  7. ^ Domas, Christopher (2015). "The Memory Sinkhole: An architectural privilege escalation vulnerability" (PDF). Battelle Memorial Institute. Archived (PDF) from the original on 2017-01-04. Retrieved 2017-01-04. The processor loads an architecturally defined system state "Unreal" mode
  8. ^ https://images2015.cnblogs.com/blog/363515/201512/363515-20151204133744658-1001794631.jpg[베어 URL 이미지 파일]
  9. ^ a b c "Unreal Mode". Archived from the original on 2017-01-03. Retrieved 2015-02-18.
  10. ^ "X86-64 Instruction Coding". Archived from the original on 2017-01-03. Retrieved 2015-02-18.
  11. ^ "Flat Real Mode". 1998-03-16. Archived from the original on 2017-10-14.
  12. ^ Brown, Ralf D. "Interrupt List". INT 80 (AMI BIOS). Retrieved 2017-10-14.
  13. ^ Brown, Ralf D. "Interrupt List". INT 78 (HugeRealMode Driver). Retrieved 2017-10-14.
  14. ^ Grysztar, Tomasz (2010-09-17). "unREAL Mode". Retrieved 2017-10-14.

추가 정보