언리얼 모드
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
언리얼 모드는 x86 프로세서에서 실제 모드에서 메모리 접근을 확장하는 기술이다. 이 기술은 세그먼트 디스크립터를 수정하여 주소 지정 가능한 메모리 크기를 변경하며, 16비트 코드가 thunking 없이 실제 모드 코드를 호출하도록 한다. 80286 및 이후 프로세서에서 지원되며, 빅 리얼 모드는 1 MiB 코드 세그먼트와 4 GiB 데이터 세그먼트를 가진다. 언리얼 모드를 활성화하려면 프로세서에 따라 LOADALL 명령어를 사용하거나, 보호 모드로 진입하여 GDT 또는 LDT에서 플랫 디스크립터를 생성한 후 다시 리얼 모드로 전환하는 과정이 필요하다. HIMEM.SYS와 울티마 VII 같은 프로그램에서 사용되었으며, BIOS 코드 및 부트 로더에서도 활용된다.
더 읽어볼만한 페이지
- X86 운영 모드 - 리얼 모드
리얼 모드는 x86 아키텍처에서 8086 프로세서의 동작을 에뮬레이트하는 모드로서, 8086/8088 소프트웨어 호환성을 위해 설계되었으며, 최신 CPU에서도 지원되지만 인텔은 향후 CPU에서 제거할 것을 제안했다. - X86 운영 모드 - 보호 모드
보호 모드는 x86 아키텍처 프로세서의 작동 모드 중 하나로, 시스템의 안정성과 보안을 위해 설계되었으며 권한 수준, 메모리 보호, 가상 메모리, 멀티태스킹 등의 기능을 제공한다. - 컴퓨터에 관한 - 고속 패킷 접속
고속 패킷 접속(HSPA)은 3세대 이동통신(3G)의 데이터 전송 속도를 높이는 기술 집합체로, 고속 하향/상향 패킷 접속(HSDPA/HSUPA)을 통해 속도를 개선하고 다중 안테나, 고차 변조, 다중 주파수 대역 활용 등의 기술로 진화했으나, LTE 및 5G 기술 발전으로 현재는 상용 서비스가 중단되었다. - 컴퓨터에 관한 - 데이터베이스
데이터베이스는 여러 사용자가 공유하고 사용하는 정보의 집합으로, 데이터베이스 관리 시스템을 통해 접근하며, 검색 및 갱신 효율을 높이기 위해 고도로 구조화되어 있고, 관계형, NoSQL, NewSQL 등 다양한 모델로 발전해왔다.
언리얼 모드 | |
---|---|
기본 정보 | |
종류 | 실제 주소 모드의 변종 |
개발자 | 톰 래퍼티 |
첫 출시 | 1992년 |
CPU | 80286 이상 |
운영 체제 | DOS |
개요 | |
설명 | 80286 이상의 x86 CPU에서 DOS 프로그램을 실행하기 위한 비표준적인 방법이다. 보호 모드로 전환한 다음, 실제 주소 모드로 돌아가지 않고도 DMA 전송을 수행할 수 있도록 실제 주소 모드와 유사한 메모리 레이아웃을 설정하는 방식으로 작동한다. |
기술적 세부 사항 | |
배경 | DOS 프로그램은 일반적으로 실제 주소 모드에서 실행되며, 이는 프로그램이 시스템의 모든 메모리와 하드웨어에 직접 접근할 수 있도록 한다. 이는 유연성을 제공하지만, 프로그램이 서로 충돌하거나 시스템을 불안정하게 만들 수 있다는 단점도 있다. 보호 모드는 메모리와 하드웨어에 대한 접근을 제한하여 이러한 문제를 해결하지만, DOS 프로그램과 호환되지 않는다. |
작동 방식 | 보호 모드로 전환하여 DMA 전송을 수행한 다음, 실제 주소 모드와 유사한 메모리 레이아웃을 설정한다. 이렇게 하면 DOS 프로그램이 보호 모드의 이점을 활용하면서도 실제 주소 모드에서 실행되는 것처럼 작동할 수 있다. |
장점 | DOS 프로그램이 보호 모드의 이점을 활용할 수 있다. 프로그램이 서로 충돌하거나 시스템을 불안정하게 만들 가능성이 줄어든다. DMA 전송을 수행할 수 있다. |
단점 | 비표준적인 방법이므로 모든 시스템에서 지원되지 않을 수 있다. 구현하기 어려울 수 있다. |
활용 | |
사용 사례 | 언리얼 모드는 DOS 게임 및 기타 프로그램에서 메모리 제한을 극복하고 성능을 향상시키는 데 사용되었다. |
예시 | 언리얼 모드를 사용한 게임으로는 《둠》, 《스타 컨트롤 2》, 《터보그래픽스》용 《카오스 엔진》 등이 있다. |
2. 작동 방식
80286 및 이후 모든 x86 프로세서는 효율성을 위해 실제 모드에서도 유효 메모리 주소를 계산할 때 내부 세그먼트 디스크립터 캐시에 저장된 기본 주소, 크기 및 기타 속성을 사용한다. 따라서 내부 세그먼트 디스크립터를 수정하면 실제 모드에서 주소 지정 가능한 메모리 크기와 같은 세그먼트의 일부 속성을 변경할 수 있다.
언리얼 모드의 프로그램은 thunking 없이 실제 모드(BIOS, DOS 커널 및 드라이버)용으로 프로그래밍된 16비트 코드를 호출할 수 있어 DPMI 드라이버보다 간단하다. 그러나 Windows 3.x/9x/NT 및 OS/2와 같은 보호 모드 운영 체제와는 호환되지 않는다.
빅 리얼 모드는 1MiB 코드 세그먼트와 4GiB 데이터 세그먼트를 가진다.
2. 1. 세그먼트 디스크립터 캐시
효율성을 위해, 80286 및 이후 모든 x86 프로세서는 실제 모드에서도 유효 메모리 주소를 계산할 때 내부 세그먼트 디스크립터 캐시에 저장된 기본 주소, 크기 및 기타 속성을 사용한다. 따라서 내부 세그먼트 디스크립터를 수정하면 실제 모드에서 주소 지정 가능한 메모리 크기와 같은 세그먼트의 일부 속성을 변경할 수 있다. 이 기술은 널리 사용되었으며 모든 인텔 프로세서에서 지원된다.2. 2. 언리얼 모드 활성화
80286 이후 모든 x86 프로세서는 실제 모드에서도 유효 메모리 주소를 계산할 때 내부 세그먼트 디스크립터 캐시에 저장된 기본 주소, 크기 및 기타 속성을 사용한다. 따라서 내부 세그먼트 디스크립터를 수정하면 실제 모드에서 주소 지정 가능한 메모리 크기와 같은 세그먼트의 일부 속성을 변경할 수 있는데, 이 기술은 널리 사용되었으며 모든 인텔 프로세서에서 지원된다.언리얼 모드의 프로그램은 thunking 없이 실제 모드(BIOS, DOS 커널 및 드라이버)용으로 프로그래밍된 16비트 코드를 호출할 수 있어 DPMI 드라이버보다 간단하다. 그러나 언리얼 모드는 Windows 3.x/9x/NT 및 OS/2와 같은 보호 모드 운영 체제와는 호환되지 않는다.
빅 리얼 모드는 1MiB 코드 세그먼트와 4GiB 데이터 세그먼트를 가진다.
2. 2. 1. 80286
80286 마이크로프로세서에서는 문서화되지 않은 LOADALL 명령어를 사용하여 1 MiB 이상의 소스 또는 대상 메모리 위치를 가리키도록 숨겨진 세그먼트 기준 레지스터를 수정해야만 언리얼 모드로 전환할 수 있다.2. 2. 2. 80386 이상
80386 이상의 마이크로프로세서에서 언리얼 모드로 전환하려면, 프로그램은 먼저 보호 모드로 진입해야 한다. 그 후 GDT 또는 LDT에서 플랫 디스크립터를 찾거나 생성하고, 일부 데이터 세그먼트 레지스터에 해당 보호 모드 "선택자"를 로드한 다음 다시 리얼 모드로 전환해야 한다. 리얼 모드로 돌아간 후에도 프로세서는 보호 모드에서 설정된 캐시된 디스크립터를 계속 사용하므로, 리얼 모드에서 4 GiB의 확장 메모리에 접근할 수 있다.80386부터 리얼 모드 프로그램은 주소 크기 재정의 접두사(Address Size Override Prefix)를 사용하여 32비트 레지스터를 사용할 수 있게 되었다. 이를 통해 프로그램은 DS:[EBX]와 같은 주소를 사용할 수 있다. 일반적인 리얼 모드에서는 EBX가 0xFFFF를 초과하면 오류가 발생하지만, 언리얼 모드에서는 이러한 접근이 허용된다.
2. 3. 32비트 주소 지정
80386부터 리얼 모드 프로그램은 주소 크기 재정의 접두사(Address Size Override Prefix)를 사용하여 32비트 레지스터를 사용할 수 있다. 이를 통해 DS:[EBX]와 같은 주소를 사용할 수 있는데, 일반적인 리얼 모드에서는 EBX가 0xFFFF를 초과하면 오류가 발생하지만 언리얼 모드에서는 접근이 허용된다."거대한 리얼 모드"(Ralf Brown의 인터럽트 목록에 이름이 명시됨) 또는 "unREAL" 모드(Tomasz Grysztar에 의해 명명됨)는 4 GiB 코드 세그먼트를 사용하여 32비트 코드를 실행하는 기능을 추가한다. 이는 32비트 속성("D" 비트)이 1로 설정된 디스크립터에서 코드 선택자(CS)를 로드하여 구현된다. 이 모드를 사용하면 16비트 코드 세그먼트에서 32비트 어드레싱을 할 때 일반적으로 필요한 피연산자 크기 재정의 접두사를 피할 수 있지만, 인터럽트와의 상호 작용 때문에 설정하기가 더 어렵다.
32비트 CS의 사용은 Agarwal의 1991년 기사에서 "unreal mode"라는 용어를 처음 소개하면서 설명되었다.[1] 이 모드는 Grysztar의 오픈 소스 FASM과 Logitech 마우스 드라이버에서 번들로 제공되는 상용 DOS 익스텐더인 Helix RM386에서 사용된다. Grysztar는 2010년에 이 모드로 진입하고 인터럽트를 처리하는 데 사용되는 기술에 대한 설명을 작성했다. 그는 또한 그가 테스트한 대부분의 CPU가 이전에 알려지지 않은 이 모드를 지원한다고 보고했으며, Cyrix에서 제조된 것으로 추정되는 미지의 모델 CPU와 나중에 사용자가 보고한 Bochs 및 DOSBox 에뮬레이터는 예외였다.
2. 4. 빅 리얼 모드 (Big Real Mode)
80286 및 이후 모든 x86 프로세서는 효율성을 위해 실제 모드에서도 유효 메모리 주소를 계산할 때 내부 세그먼트 디스크립터 캐시에 저장된 기본 주소, 크기 및 기타 속성을 사용한다. 따라서 내부 세그먼트 디스크립터를 수정하면 실제 모드에서 주소 지정 가능한 메모리 크기와 같은 세그먼트의 일부 속성을 변경할 수 있다. 이 기술은 널리 사용되었으며 모든 인텔 프로세서에서 지원된다.언리얼 모드의 프로그램은 thunking 없이 실제 모드(BIOS, DOS 커널 및 드라이버)용으로 프로그래밍된 16비트 코드를 호출할 수 있다. 이로 인해 언리얼 모드 드라이버는 DPMI 드라이버보다 간단하다. 그러나 언리얼 모드는 Windows 3.x/9x/NT 및 OS/2와 같은 보호 모드 운영 체제와는 호환되지 않는다.
빅 리얼 모드는 1MiB 코드 세그먼트와 4GiB 데이터 세그먼트를 가지고 있다. 언리얼 모드는 일반적으로 하나 이상의 데이터 선택자를 사용하여 메모리의 데이터를 보다 효율적으로 어드레싱하는 것을 포함하는데, 이는 흔히 사용되는 방식이며 종종 "플랫 리얼 모드" 또는 "빅 리얼 모드"라고 불린다. "언리얼 모드"라는 용어는 1991년 Rakesh K. Agarwal에 의해 처음 사용되었다.[1]
2. 5. 거대 리얼 모드 (Huge Real Mode)
80286 이후 모든 x86 프로세서는 실제 모드에서도 유효 메모리 주소를 계산할 때 내부 세그먼트 디스크립터 캐시에 저장된 기본 주소, 크기 및 기타 속성을 사용하여 효율성을 높인다. 내부 세그먼트 디스크립터를 수정하면 실제 모드에서 주소 지정 가능한 메모리 크기와 같은 세그먼트의 일부 속성을 변경할 수 있다. 이 기술은 널리 사용되었으며 모든 인텔 프로세서에서 지원된다."거대한 리얼 모드"(Ralf Brown의 인터럽트 목록에 명시됨) 또는 "unREAL" 모드(Tomasz Grysztar에 의해 명명됨)는 4 GiB 코드 세그먼트를 사용하여 32비트 코드를 실행하는 기능을 추가한다. 이는 32비트 속성("D" 비트)이 1로 설정된 디스크립터에서 코드 선택자(CS)를 로드하여 구현된다. 이 모드를 사용하면 16비트 코드 세그먼트에서 32비트 어드레싱을 사용할 때 일반적으로 필요한 피연산자 크기 재정의 접두사를 피할 수 있지만, 인터럽트와의 상호 작용 때문에 설정하기가 더 어렵다.
32비트 CS의 사용은 1991년 Agarwal의 기사에서 "unreal mode"라는 용어를 처음 소개하면서 설명되었다.[1] 이 모드는 Grysztar의 오픈 소스 FASM과 Logitech 마우스 드라이버에 포함된 상용 DOS 익스텐더인 Helix RM386에서 사용된다. Grysztar는 2010년에 이 모드로 진입하고 인터럽트를 처리하는 데 사용되는 기술에 대한 설명을 작성했다. 그는 또한 테스트한 대부분의 CPU가 이전에 알려지지 않은 이 모드를 지원한다고 보고했으며, Cyrix에서 제조된 것으로 추정되는 미지의 모델 CPU와 나중에 사용자가 보고한 Bochs 및 DOSBox 에뮬레이터는 예외였다고 밝혔다.
3. 활용 사례
언리얼 모드를 활용한 게임은 거의 없으며, 아마 유일할 수도 있는 게임은 ''울티마 VII''이다.
HIMEM.SYS는 이 기능을 사용하여 확장 메모리를 어드레스하는데, DOS가 언리얼 모드와 호환되지 않는 가상 8086 모드에서 실행되도록 전환되지 않는 경우에 해당한다.
언리얼 모드는 BIOS 코드에서 사용되는데, 이는 최신 인텔 프로세서의 초기 모드이기 때문이다. 또한, 인텔 386SL 및 이후 프로세서에서 시스템 관리 모드(SMM)는 프로세서를 거대한 리얼 모드로 전환한다.
일부 부트 로더 (예: LILO)는 언리얼 모드를 사용하여 최대 4GB의 메모리에 접근한다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com