EMM386.EXE: 두 판 사이의 차이

도스박물관
둘러보기로 이동검색으로 이동
잔글 Pc1412님이 Emm386.exe 문서를 넘겨주기를 만들지 않고 EMM386.EXE 문서로 이동했습니다
편집 요약 없음
1번째 줄: 1번째 줄:
= 개요 =
= EMM386.EXE =
'''EMM386.EXE'''는 80386 이상의 CPU에서 동작하는 MS-DOS용 확장 메모리 관리자이다. 
확장 메모리(XMS)를 기반으로 '''EMS(Expanded Memory)'''를 에뮬레이트하고, 
상위 메모리 영역(UMA)에 존재하는 빈 공간을 스캔하여 '''UMB(Upper Memory Block)'''로 제공함으로써 
도스 프로그램의 '''기본 메모리(Conventional Memory, 640KB) 확보'''를 가능하게 한다.


EMM386은 CPU의 '''가상 8086 모드'''와 MMU(Page Table)를 활용하며, 
'''EMM386.EXE'''는 MS-DOS 5.0 이상에서 제공되는 80386 이상 CPU 전용
HIMEM.SYS가 제공하는 XMS 메모리를 기반으로 EMS와 UMB를 동시에 구성한다.
EMS(Expanded Memory Specification) 에뮬레이터이자 UMB(Upper Memory Block) 생성기이다.


MS-DOS 5.0에서부터 '''EMM386.EXE'''라는 독립 실행 파일 형태로 제공되었으며,
EMM386은 페이지프레임 및 가상 8086 모드를 활용하여 EMS 메모리를 제공하며,
Windows/386 · Windows 3.x의 386 향상 모드에서도 메모리 관리자 역할을 담당하였다.
HIMEM.SYS와 함께 동작하여 DOS 메모리 구조의 효율을 극대화한다.


= 역사 =
== 개요 ==
== 초기 ==
; 종류 : 메모리 관리자 / 장치 드라이버
* 1986년 Compaq Deskpro 386용 OEM DOS에 포함된 '''CEMM'''(Compaq Expanded Memory Manager)에서 기술 기반이 시작되었다.
; 필요 CPU : 80386 이상 (286에서는 동작 불가)
* 1987년 Windows/386 2.0에서 Microsoft 버전의 EMS 에뮬레이터가 첫 등장하였다.
; 기능 :
* 1988년 MS-DOS 4.0에서 '''EMM386.SYS''' 형태로 독립 제공.
* EMS 4.0 호환 메모리 제공 (EMM 에뮬레이션)
* UMB(Upper Memory Block) 생성
* VCPI(가상 제어 프로그램 인터페이스) 제공
* VGA/BIOS ROM Shadow 영역 관리
* 메모리 맵 조정(Exclude / Include)


== MS-DOS 5.0 이후 ==
== 역할 ==
1991년 MS-DOS 5.0에서 '''EMM386.EXE''' 형태로 재정비되면서 
* '''EMM386 ≠ HIMEM'''
* UMB 제공 
** HIMEM = XMS/HMA 관리 + A20 라인 제어  
* EMS 제공  
** EMM386 = EMS/UMB/VCPI 제공   
* v8086 모드 기반 메모리 가상화 
* CONFIG.SYS 라인에서 유연한 설정 제공   


등이 가능해졌다.
둘은 반드시 함께 사용해야 한다.


= 버전 기록 =
예:
{| class="wikitable"
<pre>
! 함께 제공된 제품 !! 날짜 !! 파일명 !! 버전
DEVICE=HIMEM.SYS
|-
DEVICE=EMM386.EXE NOEMS
| MS-DOS 4.01 || 1988-11 || EMM386.SYS || 4.00
DOS=HIGH,UMB
|-
</pre>
| Windows 3.0 || 1990-05 || EMM386.SYS || 4.10.0419
 
|-
== 명령 형식 ==
| MS-DOS 5.0 / PC DOS 5.0 || 1991-06 || EMM386.EXE || 4.20.06x
<pre>
|-
DEVICE=[drive:][path]EMM386.EXE [RAM|NOEMS]
| PC DOS 5.02 / MS-DOS 5.00a || 1992-09 || EMM386.EXE || 4.33
                              [/FRAME=xxxx]
|-
                              [/I=range]
| Windows 3.1 / WfW 3.1 || 1992 || EMM386.EXE || 4.44
                              [/X=range]
|-
                              [/HIGHSCAN]
| MS-DOS 6.0 / PC DOS 6.1 || 1993 || EMM386.EXE || 4.45
                              [/NOVCPI]
|-
                              [/AUTO]
| MS-DOS 6.2 / 6.21 / PC DOS 6.3 / WfW 3.11 || 1993~1994 || EMM386.EXE || 4.48
                              [/VERBOSE]
|-
                              [/TEST]
| MS-DOS 6.22 || 1994-06 || EMM386.EXE || 4.49
</pre>
|-
 
| IBM PC DOS 7.0 / PC DOS 2000 || 1995~1998 || EMM386.EXE || 4.50
== 모드 ==
|-
=== RAM ===
| Windows 95 / 98 || 1995~1998 || EMM386.EXE || 4.95
EMS 메모리를 생성한다.
|}
UMB도 자동 활성화된다.
 
ex:
<pre>
DEVICE=EMM386.EXE RAM
</pre>
 
=== NOEMS ===
EMS 메모리를 생성하지 않고, 
'''UMB만 제공'''한다.
DOS 6.x 최적화에서 가장 널리 쓰인다.


= 작동 원리 =
ex:
== 가상 8086 모드 ==
<pre>
EMM386은 CPU의 가상 8086 모드를 이용하여 모든 도스 프로그램 실행을 제어하며,
DEVICE=EMM386.EXE NOEMS
메모리 접근을 MMU(Page Table)로 우회시킨다. 
DOS=HIGH,UMB
이를 통해 실제로는 1MB 이상의 물리 주소(XMS)를 
</pre>
640KB~1MB 사이의 UMA처럼 “보이도록” 매핑할 수 있다.


== HIMEM.SYS와의 관계 ==
== 스위치 상세 ==
* HIMEM.SYS: XMS 관리 
* EMM386.EXE: XMS를 기반으로 EMS·UMB 생성 
HIMEM.SYS가 없으면 EMM386은 동작할 수 없다.


== EMS 및 UMB 제공 ==
=== /FRAME=xxxx ===
* EMS는 16KB의 페이지 프레임 사용  
EMS 페이지프레임 주소(16KB x 4 = 64KB)를 지정한다.  
* UMB는 A000h~FFFFh 사이 장치 영역 중 실제 사용되지 않는 부분을 스캔하여 확보 
기본 위치는 A000~BFFF 사이의 빈 영역.
* MEM /C, MEM /F 등에서 보이는 UMB는 모두 EMM386이 제공한 것


= Windows와의 관계 =
예:
== 386 향상 모드 ==
<pre>
Windows 3.x/9x의 386 향상 모드가 시작되면 
/FRAME=D000
Windows의 보호 모드 VMM이 EMM386의 기능을 인계하며, 
</pre>
EMM386.EXE는 일시 중단된다.


== GEMMIS API ==
=== /I=range (Include) ===
Windows는 EMM386과 메모리 관리자 정보를 교환하기 위해 
지정 영역을 UMB 스캔 대상에 포함.
'''GEMMIS(Global EMM Import Specification)'''을 사용한다.


이를 구현한 메모리 관리자는 다음과 같다:
:
* Microsoft EMM386.EXE 
<pre>
* Quarterdeck QEMM 
/I=D000-D3FF
* Qualitas 386MAX 
</pre>
* Helix Netroom 


FreeDOS의 JEMM386/JEMMEX는 GEMMIS를 지원하지 않기 때문에  
=== /X=range (Exclude) ===
Windows 3.x 386 향상 모드에서는 실행되지 않는다.
지정 영역을 스캔에서 제외.  
사운드 카드, SCSI BIOS, VGA BIOS 등과 충돌 방지용.


== FreeDOS 호환성 ==
예:
JEMM 시리즈 사용 시 Windows 3.x는 다음 오류를 출력한다:
<pre>
/X=C800-CBFF
/X=D000-D7FF
</pre>


> 현재 설치된 보호 모드 소프트웨어가 실행 중인 동안에는 Windows를 실행할 없습니다.
=== /HIGHSCAN ===
더 공격적인 UMB 검사 수행. 
일부 시스템에서 더 많은 UMB 확보 가능. 
단, 불안정성이 증가할 있다.


→ WIN /S 또는 WIN /2로 강제 표준 모드 실행만 가능하며  
=== /NOVCPI ===
가상 메모리·386Enh 드라이버 로딩 등이 모두 제한된다.
VCPI 인터페이스 제공 금지.  
일부 DPMI 프로그램과 충돌할 때 사용.


= EMM386.EXE 옵션 =
=== /AUTO ===
(출처: Hangual MS-DOS 6.2 HELP 전문)
ROM/RAM 자동 매핑 최적화.
대부분의 시스템에서 기본적으로 권장.


== ON / OFF / AUTO ==
=== /VERBOSE ===
* ON: EMS·UMB 활성 
로드 시 상세 메시지 출력.
* OFF: 기능 중지 
* AUTO: 프로그램 요청 시에만 EMS/UMB 생성


== memory ==
=== /TEST ===
EMM386이 제공하는 EMS/VCPI 용량(KB). 
디버그용 메모리 테스트 수행.
NOEMS 사용 시 기본값 0.


== MIN=size ==
== 메모리 구조에서의 역할 ==
보장된 EMS 최소값. 기본 256KB.
EMM386은 386 CPU의 가상 8086 모드를 활용하여 확장 메모리를 “EMS 4.0 방식”으로 변환하고,
다음의 기능을 제공한다.


== NOEMS ==
=== 1) EMS 에뮬레이션 ===
EMS 비활성화.
* Lotus-Intel-Microsoft LIM EMS 4.0 호환
UMB는 계속 제공되며, 
* 64KB 페이지프레임 구성
상위 메모리를 최대 확보할 때 자주 사용된다. 
* 대부분의 1980~90년대 구형 프로그램 실행 지원
다만 EMS 기반 게임/프로그램은 정상 동작하지 않을 수 있다.


== FRAME=address ==
=== 2) UMB(Upper Memory Block) 생성 ===
EMS 페이지 프레임 주소 지정.
F000~A000 사이의 빈 영역을 스캔하여 
장치 드라이버 / TSR을 상위 메모리에 적재 가능.


== X=mmmm-nnnn / I=mmmm-nnnn ==
LOADHIGH(LH), DEVICEHIGH와 함께 사용.
사용/제외할 UMA 블록 수동 지정.


== HIGHSCAN ==
=== 3) VCPI 제공 ===
UMA를 더욱 자세히 스캔한다. 
DOS 확장기(Phar Lap, DOS/4GW 초기 버전 등)에 필요한 인터페이스 제공.
추가 UMB 확보가 가능한 경우가 있지만 
일부 기종에서는 시스템 정지 위험도 있다.


== NOHI ==
(DPMI 기반 Win3.x/Win9x의 경우 VCPI는 부차적 역할)
EMM386 일부를 UMB에 올리지 않음.
→ 기본 메모리 감소 
→ UMB 증가


== ROM=mmmm-nnnn ==
== 추천 CONFIG.SYS / AUTOEXEC.BAT 조합 ==
Shadow RAM 구성.


== NOVCPI ==
=== 386/486 DOS 6.22 최적화(일반용) ===
VCPI 비활성화 (NOEMS와 함께 사용해야 함).
<pre>
DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE NOEMS
DOS=HIGH,UMB
</pre>


== WIN=mmmm-nnnn ==
=== EMS 필요한 옛 프로그램(예: Wing Commander) ===
Windows에서 사용할 UMA 영역 예약.
<pre>
DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE RAM
DOS=HIGH,UMB
</pre>


== ALTBOOT ==
=== 최대 UMB 확보(위험성 있음) ===
Ctrl+Alt+Del 재부팅 처리 방식 대체.
<pre>
DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE NOEMS HIGHSCAN
DOS=HIGH,UMB
</pre>


= 실제 CONFIG.SYS 예시 =
=== 하드웨어 충돌 있을 때 ===
== EMS 미사용, UMB 최대 확보 ==
<pre>
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=EMM386.EXE NOEMS X=C800-CFFF X=D000-D7FF
DEVICE=C:\DOS\EMM386.EXE NOEMS
</pre>
DOS=HIGH,UMB


== EMS 활성화 ==
== 주의 사항 ==
DEVICE=C:\DOS\HIMEM.SYS
* 286에서는 절대 동작하지 않음 (386 전용 V86 모드 필요)
DEVICE=C:\DOS\EMM386.EXE RAM
* EMS=RAM 모드는 일부 Protected Mode 프로그램과 충돌 가능
DOS=HIGH,UMB
* Win3.x Enhanced Mode에서 EMM386은 필수 구성 요소


== HIGHSCAN 예시 ==
== HIMEM과의 관계 ==
DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN
{| class="wikitable"
! 구성 요소 !! 기능
|-
| HIMEM.SYS || XMS / A20 / HMA
|-
| EMM386.EXE || EMS / UMB / VCPI / 페이지프레임
|}


= 관련 문서 =
== 같이 보기 ==
* [[HIMEM.SYS]]
* [[HIMEM.SYS]]
* [[MEM.EXE]]
* [[CONFIG.SYS]]
* [[CONFIG.SYS]]
* [[DOS 메모리 구조]]
* [[DOS 메모리 구조]]
* [[QEMM]]
* [[EMS]]
* [[386MAX]]
* [[XMS]]
 
* [[UMB]]
= 분류 =
[[Category:MS-DOS 명령어]]
[[Category:메모리 관리자]]
[[Category:DOS 구성요소]]

2025년 11월 25일 (화) 17:20 판

EMM386.EXE

EMM386.EXE는 MS-DOS 5.0 이상에서 제공되는 80386 이상 CPU 전용 EMS(Expanded Memory Specification) 에뮬레이터이자 UMB(Upper Memory Block) 생성기이다.

EMM386은 페이지프레임 및 가상 8086 모드를 활용하여 EMS 메모리를 제공하며, HIMEM.SYS와 함께 동작하여 DOS 메모리 구조의 효율을 극대화한다.

개요

종류
메모리 관리자 / 장치 드라이버
필요 CPU
80386 이상 (286에서는 동작 불가)
기능
  • EMS 4.0 호환 메모리 제공 (EMM 에뮬레이션)
  • UMB(Upper Memory Block) 생성
  • VCPI(가상 제어 프로그램 인터페이스) 제공
  • VGA/BIOS ROM Shadow 영역 관리
  • 메모리 맵 조정(Exclude / Include)

역할

  • EMM386 ≠ HIMEM
    • HIMEM = XMS/HMA 관리 + A20 라인 제어
    • EMM386 = EMS/UMB/VCPI 제공

둘은 반드시 함께 사용해야 한다.

예:

DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE NOEMS
DOS=HIGH,UMB

명령 형식

DEVICE=[drive:][path]EMM386.EXE [RAM|NOEMS]
                               [/FRAME=xxxx]
                               [/I=range]
                               [/X=range]
                               [/HIGHSCAN]
                               [/NOVCPI]
                               [/AUTO]
                               [/VERBOSE]
                               [/TEST]

모드

RAM

EMS 메모리를 생성한다. UMB도 자동 활성화된다.

ex:

DEVICE=EMM386.EXE RAM

NOEMS

EMS 메모리를 생성하지 않고, UMB만 제공한다. DOS 6.x 최적화에서 가장 널리 쓰인다.

ex:

DEVICE=EMM386.EXE NOEMS
DOS=HIGH,UMB

스위치 상세

/FRAME=xxxx

EMS 페이지프레임 주소(16KB x 4 = 64KB)를 지정한다. 기본 위치는 A000~BFFF 사이의 빈 영역.

예:

/FRAME=D000

/I=range (Include)

지정 영역을 UMB 스캔 대상에 포함.

예:

/I=D000-D3FF

/X=range (Exclude)

지정 영역을 스캔에서 제외. 사운드 카드, SCSI BIOS, VGA BIOS 등과 충돌 방지용.

예:

/X=C800-CBFF
/X=D000-D7FF

/HIGHSCAN

더 공격적인 UMB 검사 수행. 일부 시스템에서 더 많은 UMB 확보 가능. 단, 불안정성이 증가할 수 있다.

/NOVCPI

VCPI 인터페이스 제공 금지. 일부 DPMI 프로그램과 충돌할 때 사용.

/AUTO

ROM/RAM 자동 매핑 최적화. 대부분의 시스템에서 기본적으로 권장.

/VERBOSE

로드 시 상세 메시지 출력.

/TEST

디버그용 메모리 테스트 수행.

메모리 구조에서의 역할

EMM386은 386 CPU의 가상 8086 모드를 활용하여 확장 메모리를 “EMS 4.0 방식”으로 변환하고, 다음의 기능을 제공한다.

1) EMS 에뮬레이션

  • Lotus-Intel-Microsoft LIM EMS 4.0 호환
  • 64KB 페이지프레임 구성
  • 대부분의 1980~90년대 구형 프로그램 실행 지원

2) UMB(Upper Memory Block) 생성

F000~A000 사이의 빈 영역을 스캔하여 장치 드라이버 / TSR을 상위 메모리에 적재 가능.

LOADHIGH(LH), DEVICEHIGH와 함께 사용.

3) VCPI 제공

DOS 확장기(Phar Lap, DOS/4GW 초기 버전 등)에 필요한 인터페이스 제공.

(DPMI 기반 Win3.x/Win9x의 경우 VCPI는 부차적 역할)

추천 CONFIG.SYS / AUTOEXEC.BAT 조합

386/486 DOS 6.22 최적화(일반용)

DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE NOEMS
DOS=HIGH,UMB

EMS 필요한 옛 프로그램(예: Wing Commander)

DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE RAM
DOS=HIGH,UMB

최대 UMB 확보(위험성 있음)

DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE NOEMS HIGHSCAN
DOS=HIGH,UMB

하드웨어 충돌 있을 때

DEVICE=EMM386.EXE NOEMS X=C800-CFFF X=D000-D7FF

주의 사항

  • 286에서는 절대 동작하지 않음 (386 전용 V86 모드 필요)
  • EMS=RAM 모드는 일부 Protected Mode 프로그램과 충돌 가능
  • Win3.x Enhanced Mode에서 EMM386은 필수 구성 요소

HIMEM과의 관계

구성 요소 기능
HIMEM.SYS XMS / A20 / HMA
EMM386.EXE EMS / UMB / VCPI / 페이지프레임

같이 보기