EMM386.EXE: 두 판 사이의 차이

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


EMM386은 CPU의 '''가상 8086 모드'''와 MMU(Page Table)활용하며, 
이 구조를 통해 도스 응용 프로그램이 사용할 수 있는 
HIMEM.SYS가 제공하는 XMS 메모리를 기반으로 EMS와 UMB를 동시에 구성한다.
'''기본 메모리(Conventional Memory, 640KB)'''를 최대한 확보할 수 있다.


MS-DOS 5.0에서부터 '''EMM386.EXE'''라는 독립 실행 파일 형태로 제공되었으며,  
EMM386은 CPU의 '''가상 8086 모드'''와 MMU(Page Table)를 이용해 
Windows/386 · Windows 3.x의 386 향상 모드에서도 메모리 관리자 역할을 담당하였다.
물리 주소 1MB 이상(XMS 영역)을 UMA로 "매핑"하여 사용하는 방식으로 동작하며, 
EMM386 로딩 전에는 반드시 '''HIMEM.SYS'''가 먼저 로드되어 있어야 한다.
 
MS-DOS 5.0부터 EXE 형태로 제공되었으며   
Windows/386 · Windows 3.x의 ‘386 향상 모드’ 환경에서도 사용되었다.


= 역사 =
= 역사 =
== 초기 ==
== 초기 ==
* 1986년 Compaq Deskpro 386용 OEM DOS에 포함된 '''CEMM'''(Compaq Expanded Memory Manager)에서 기술 기반이 시작되었다.
* 1986년 Compaq Deskpro 386용 OEM DOS에 포함된 '''CEMM'''이 기술적 기반.
* 1987년 Windows/386 2.0에서 Microsoft 버전의 EMS 에뮬레이터가 첫 등장하였다.
* 1987년 Windows/386 2.0에서 Microsoft 버전 EMS 관리자가 등장.
* 1988년 MS-DOS 4.0에서 '''EMM386.SYS''' 형태로 독립 제공.
* 1988년 MS-DOS 4.0에서 '''EMM386.SYS'''제공.


== MS-DOS 5.0 이후 ==
== MS-DOS 5.0 이후 ==
1991년 MS-DOS 5.0에서 '''EMM386.EXE''' 형태로 재정비되면서  
1991년 MS-DOS 5.0에서 '''EMM386.EXE'''로 재구성되며 다음 기능을 제공:
* UMB 제공  
* EMS 지원  
* EMS 제공  
* UMB 지원  
* v8086 모드 기반 메모리 가상화   
* XMS ↔ EMS 동적 변환  
* CONFIG.SYS 라인에서 유연한 설정 제공  
* v8086 기반 메모리 가상화   
* 세밀한 메모리 영역 제어 옵션 지원  


등이 가능해졌다.
이후 DOS 6.x 및 Windows 3.x/9x와 함께 지속적으로 개선되었다.


= 버전 기록 =
= 버전 기록 =
53번째 줄: 57번째 줄:
= 작동 원리 =
= 작동 원리 =
== 가상 8086 모드 ==
== 가상 8086 모드 ==
EMM386은 CPU의 가상 8086 모드를 이용하여 모든 도스 프로그램 실행을 제어하며,  
EMM386은 CPU의 가상 8086 모드를 사용하여  
메모리 접근을 MMU(Page Table)로 우회시킨다.   
도스 프로그램의 메모리 접근을 MMU(Page Table)를 통해 제어한다.   
이를 통해 실제로는 1MB 이상의 물리 주소(XMS)를   
이를 통해 1MB 이상의 실제 물리 주소(XMS 영역)를   
640KB~1MB 사이의 UMA처럼 “보이도록” 매핑할 수 있다.
상위 메모리 영역처럼 보이도록 매핑할 수 있다.


== HIMEM.SYS와의 관계 ==
== HIMEM.SYS와의 관계 ==
* HIMEM.SYS: XMS 관리   
HIMEM.SYS가 XMS의 기본 관리 역할을 담당하고,  
* EMM386.EXE: XMS를 기반으로 EMS·UMB 생성   
EMM386.EXE는 HIMEM.SYS가 제공하는 XMS를 기반으로
HIMEM.SYS가 없으면 EMM386은 동작할 수 없다.
* EMS 생성   
* UMB 생성 
* 페이지 프레임 관리 
 
등을 수행한다.
 
== EMS/XMS 동적 전환 ==
공식 HELP 문서의 핵심 설명에 따르면:


== EMS 및 UMB 제공 ==
* '''MIN=값''' : 항상 확보해둘 EMS 용량 
* EMS는 16KB의 페이지 프레임 사용  
* '''MEMORY=값''' : 필요 시 XMS를 EMS로 변환해 최대 제공할 수 있는 용량 
* UMB는 A000h~FFFFh 사이 장치 영역 중 실제 사용되지 않는 부분을 스캔하여 확보  
* EMS 필요 프로그램 실행 시 
* MEM /C, MEM /F 등에서 보이는 UMB는 모두 EMM386이 제공한 것
  → EMM386은 즉시 XMS 일부를 EMS로 변환하여 제공
* 프로그램 종료 시 
  → 다시 EMS를 해제하여 XMS로 반환
 
즉, EMS는 “항상 고정된 크기”가 아니라 
XMS와 동적으로 전환되며 작동한다.
 
== MIN=0 동작 ==
MIN=0 설정 시, 
* EMS는 “상시 예약되지 않음”  
* 프로그램이 EMS 요청 시에만 XMS를 EMS로 변환  
* 하지만 이미 XMS가 모두 사용 중이면 EMS 생성 실패 가능
 
이 내용은 DOS 메모리 최적화에서 매우 중요한 포인트다.


= Windows와의 관계 =
= Windows와의 관계 =
== 386 향상 모드 ==
== 386 향상 모드 ==
Windows 3.x/9x의 386 향상 모드가 시작되면   
Windows 3.x/9x의 Enhanced Mode가 시작되면   
Windows의 보호 모드 VMM이 EMM386의 기능을 인계하며,   
Windows의 보호 모드 VMM이 EMM386 기능을 인계받으며,   
EMM386.EXE는 일시 중단된다.
EMM386.EXE는 일시 중단된다.


== GEMMIS API ==
== GEMMIS API ==
Windows는 EMM386과 메모리 관리자 정보를 교환하기 위해   
Windows는 EMM386과 상호작용하기 위해   
'''GEMMIS(Global EMM Import Specification)'''사용한다.
'''GEMMIS(Global EMM Import Specification)'''사용한다.


이를 구현한 메모리 관리자는 다음과 같다:
이를 지원하는 EMS 관리자는:
* Microsoft EMM386.EXE  
* Microsoft EMM386   
* Quarterdeck QEMM   
* Quarterdeck QEMM   
* Qualitas 386MAX   
* Qualitas 386MAX   
* Helix Netroom   
* Helix Netroom   


FreeDOS의 JEMM386/JEMMEX는 GEMMIS를 지원하지 않기 때문에  
FreeDOS의 JEMM386/JEMMEX는 GEMMIS를 지원하지 않으며  
Windows 3.x 386 향상 모드에서는 실행되지 않는다.
Windows 3.x Enhanced Mode 실행이 불가능하다.
 
== SYSTEM.INI 우선순위 ==
공식 HELP 문서에 따르면:


== FreeDOS 호환성 ==
* EMM386의 옵션(I, X, FRAME 등)은 
JEMM 시리즈 사용 시 Windows 3.x는 다음 오류를 출력한다:
  **SYSTEM.INI의 EMMINCLUDE / EMMEXCLUDE / EMMPAGEFRAME보다 우선한다.**


> 현재 설치된 보호 모드 소프트웨어가 실행 중인 동안에는 Windows를 실행할 없습니다.
즉, Windows 측 설정으로는 EMM386의 CONFIG.SYS 설정을 덮어쓰기할 없다.


→ WIN /S 또는 WIN /2로 강제 표준 모드 실행만 가능하며  
= SCSI/ESDI 및 /DOUBLE_BUFFER ==
가상 메모리·386Enh 드라이버 로딩 등이 모두 제한된다.
SCSI·ESDI HDD를 사용하는 경우  
UMB/EMS 사용 시 DMA 주소 문제 때문에 
'''SMARTDRV /DOUBLE_BUFFER''' 옵션이 필요할 수 있다.


= EMM386.EXE 옵션 =
이는 데이터 전송을 안정시키기 위한 필수 설정일 수 있으며 
(출처: Hangual MS-DOS 6.2 HELP 전문)
특히 1990년대 SCSI 카드 사용자 환경에서 널리 사용되었다.


= EMM386.EXE의 주요 옵션 =
== ON / OFF / AUTO ==
== ON / OFF / AUTO ==
* ON: EMS·UMB 활성   
ON: EMS·UMB 활성   
* OFF: 기능 중지  
OFF: 비활성  
* AUTO: 프로그램 요청 시에만 EMS/UMB 생성
AUTO: 프로그램 요청 시에만 EMS/UMB 활성


== memory ==
== memory ==
EMM386이 제공하는 EMS/VCPI 용량(KB).   
EMS/VCPI 최대 제공량(KB).   
NOEMS 사용 시 기본값 0.
NOEMS 사용 시 기본값 0.


== MIN=size ==
== MIN=size ==
보장된 EMS 최소값. 기본 256KB.
고정적으로 예약할 EMS 최소 크기.


== NOEMS ==
== NOEMS ==
EMS 비활성화.   
EMS 비활성화.   
UMB는 계속 제공되며,  
UMB는 제공되며   
상위 메모리를 최대 확보할 자주 사용된다.   
'''상위 메모리를 최대 확보'''할 많이 사용된다.   
다만 EMS 기반 게임/프로그램은 정상 동작하지 않을 수 있다.
단, EMS 기반 프로그램은 동작하지 않을 수 있다.
 
== RAM ==
EMS 제공 + UMB 제공 
단, 페이지 프레임을 확보해야 하므로 
'''NOEMS보다 UMB가 적게 확보된다.'''
 
== FRAME / Mx / Pn ==
EMS 페이지 프레임 주소 또는 개별 페이지 주소 지정.


== FRAME=address ==
공식 HELP 예제:
EMS 페이지 프레임 주소 지정.
device=emm386.exe 512 p0=d000 p1=d400 p2=d800 p3=dc00


== X=mmmm-nnnn / I=mmmm-nnnn ==
== X=mmmm-nnnn / I=mmmm-nnnn ==
사용/제외할 UMA 블록 수동 지정.
상위 메모리 사용/제외 범위 지정.


== HIGHSCAN ==
== HIGHSCAN ==
UMA를 더욱 자세히 스캔한다.   
EMA/UMB 추가 스캔 실시.   
추가 UMB 확보가 가능한 경우가 있지만  
하지만 잘못된 영역을 사용 가능하다고 판단하여  
일부 기종에서는 시스템 정지 위험도 있다.
'''시스템이 멈출 위험'''이 있으므로 고급 사용자 전용 옵션이다.


== NOHI ==
== NOHI ==
EMM386 일부를 UMB에 올리지 않음.   
EMM386 일부를 UMB에 올리지 않음.   
→ 기본 메모리 감소   
→ 기본 메모리 감소   
→ UMB 증가
→ UMB 확보 증가


== ROM=mmmm-nnnn ==
== ROM=range ==
Shadow RAM 구성.
Shadow RAM 구성.


== NOVCPI ==
== NOVCPI ==
VCPI 비활성화 (NOEMS와 함께 사용해야 함).
VCPI 비활성(반드시 NOEMS와 함께).


== WIN=mmmm-nnnn ==
== WIN=range ==
Windows에서 사용할 UMA 영역 예약.
Windows에서 사용할 UMA 영역 예약.
== NOMOVEXBDA ==
EBDA를 UMB로 이동시키지 않음. 
특정 VGA BIOS, 네트워크 ROM과의 충돌을 방지할 때 사용.


== ALTBOOT ==
== ALTBOOT ==
Ctrl+Alt+Del 재부팅 처리 방식 대체.
CTRL+ALT+DEL 재부팅 대체 핸들러 사용. 
재부팅 루틴이 불안정한 일부 386 보드에서 사용되었다.


= 실제 CONFIG.SYS 예시 =
= 사용 예시 =
== EMS 미사용, UMB 최대 확보 ==
== EMS 미사용, UMB 최대 확보 ==
  DEVICE=C:\DOS\HIMEM.SYS
  DEVICE=C:\DOS\HIMEM.SYS
155번째 줄: 198번째 줄:
  DOS=HIGH,UMB
  DOS=HIGH,UMB


== HIGHSCAN 예시 ==
== EMS 페이지 프레임 수동 지정 ==
  DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN
device=emm386.exe 512 frame=d000
 
== HIGHSCAN ==
  device=emm386.exe NOEMS HIGHSCAN


= 관련 문서 =
= 관련 문서 =
168번째 줄: 214번째 줄:
= 분류 =
= 분류 =
[[Category:MS-DOS 명령어]]
[[Category:MS-DOS 명령어]]
[[Category:DOS 구성요소]]
[[Category:메모리 관리자]]
[[Category:메모리 관리자]]
[[Category:DOS 구성요소]]

2025년 11월 28일 (금) 21:08 기준 최신판

개요

EMM386.EXE는 80386 이상의 CPU에서 동작하는 MS-DOS용 확장 메모리 관리자이다. 확장 메모리(XMS)를 기반으로 EMS(Expanded Memory)를 에뮬레이트하고, 상위 메모리 영역(UMA)에 존재하는 빈 공간을 스캔하여 UMB(Upper Memory Block)를 제공한다.

이 구조를 통해 도스 응용 프로그램이 사용할 수 있는 기본 메모리(Conventional Memory, 640KB)를 최대한 확보할 수 있다.

EMM386은 CPU의 가상 8086 모드와 MMU(Page Table)를 이용해 물리 주소 1MB 이상(XMS 영역)을 UMA로 "매핑"하여 사용하는 방식으로 동작하며, EMM386 로딩 전에는 반드시 HIMEM.SYS가 먼저 로드되어 있어야 한다.

MS-DOS 5.0부터 EXE 형태로 제공되었으며 Windows/386 · Windows 3.x의 ‘386 향상 모드’ 환경에서도 사용되었다.

역사

초기

  • 1986년 Compaq Deskpro 386용 OEM DOS에 포함된 CEMM이 기술적 기반.
  • 1987년 Windows/386 2.0에서 Microsoft 버전 EMS 관리자가 등장.
  • 1988년 MS-DOS 4.0에서 EMM386.SYS로 제공.

MS-DOS 5.0 이후

1991년 MS-DOS 5.0에서 EMM386.EXE로 재구성되며 다음 기능을 제공:

  • EMS 지원
  • UMB 지원
  • XMS ↔ EMS 동적 변환
  • v8086 기반 메모리 가상화
  • 세밀한 메모리 영역 제어 옵션 지원

이후 DOS 6.x 및 Windows 3.x/9x와 함께 지속적으로 개선되었다.

버전 기록

함께 제공된 제품 날짜 파일명 버전
MS-DOS 4.01 1988-11 EMM386.SYS 4.00
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
PC DOS 5.02 / MS-DOS 5.00a 1992-09 EMM386.EXE 4.33
Windows 3.1 / WfW 3.1 1992 EMM386.EXE 4.44
MS-DOS 6.0 / PC DOS 6.1 1993 EMM386.EXE 4.45
MS-DOS 6.2 / 6.21 / PC DOS 6.3 / WfW 3.11 1993~1994 EMM386.EXE 4.48
MS-DOS 6.22 1994-06 EMM386.EXE 4.49
IBM PC DOS 7.0 / PC DOS 2000 1995~1998 EMM386.EXE 4.50
Windows 95 / 98 1995~1998 EMM386.EXE 4.95

작동 원리

가상 8086 모드

EMM386은 CPU의 가상 8086 모드를 사용하여 도스 프로그램의 메모리 접근을 MMU(Page Table)를 통해 제어한다. 이를 통해 1MB 이상의 실제 물리 주소(XMS 영역)를 상위 메모리 영역처럼 보이도록 매핑할 수 있다.

HIMEM.SYS와의 관계

HIMEM.SYS가 XMS의 기본 관리 역할을 담당하고, EMM386.EXE는 HIMEM.SYS가 제공하는 XMS를 기반으로

  • EMS 생성
  • UMB 생성
  • 페이지 프레임 관리

등을 수행한다.

EMS/XMS 동적 전환

공식 HELP 문서의 핵심 설명에 따르면:

  • MIN=값 : 항상 확보해둘 EMS 용량
  • MEMORY=값 : 필요 시 XMS를 EMS로 변환해 최대 제공할 수 있는 용량
  • EMS 필요 프로그램 실행 시
 → EMM386은 즉시 XMS 일부를 EMS로 변환하여 제공  
  • 프로그램 종료 시
 → 다시 EMS를 해제하여 XMS로 반환

즉, EMS는 “항상 고정된 크기”가 아니라 XMS와 동적으로 전환되며 작동한다.

MIN=0 동작

MIN=0 설정 시,

  • EMS는 “상시 예약되지 않음”
  • 프로그램이 EMS 요청 시에만 XMS를 EMS로 변환
  • 하지만 이미 XMS가 모두 사용 중이면 EMS 생성 실패 가능

이 내용은 DOS 메모리 최적화에서 매우 중요한 포인트다.

Windows와의 관계

386 향상 모드

Windows 3.x/9x의 Enhanced Mode가 시작되면 Windows의 보호 모드 VMM이 EMM386 기능을 인계받으며, EMM386.EXE는 일시 중단된다.

GEMMIS API

Windows는 EMM386과 상호작용하기 위해 GEMMIS(Global EMM Import Specification)를 사용한다.

이를 지원하는 EMS 관리자는:

  • Microsoft EMM386
  • Quarterdeck QEMM
  • Qualitas 386MAX
  • Helix Netroom

FreeDOS의 JEMM386/JEMMEX는 GEMMIS를 지원하지 않으며 Windows 3.x Enhanced Mode 실행이 불가능하다.

SYSTEM.INI 우선순위

공식 HELP 문서에 따르면:

  • EMM386의 옵션(I, X, FRAME 등)은
 **SYSTEM.INI의 EMMINCLUDE / EMMEXCLUDE / EMMPAGEFRAME보다 우선한다.**

즉, Windows 측 설정으로는 EMM386의 CONFIG.SYS 설정을 덮어쓰기할 수 없다.

SCSI/ESDI 및 /DOUBLE_BUFFER =

SCSI·ESDI HDD를 사용하는 경우 UMB/EMS 사용 시 DMA 주소 문제 때문에 SMARTDRV /DOUBLE_BUFFER 옵션이 필요할 수 있다.

이는 데이터 전송을 안정시키기 위한 필수 설정일 수 있으며 특히 1990년대 SCSI 카드 사용자 환경에서 널리 사용되었다.

EMM386.EXE의 주요 옵션

ON / OFF / AUTO

ON: EMS·UMB 활성 OFF: 비활성 AUTO: 프로그램 요청 시에만 EMS/UMB 활성

memory

EMS/VCPI 최대 제공량(KB). NOEMS 사용 시 기본값 0.

MIN=size

고정적으로 예약할 EMS 최소 크기.

NOEMS

EMS 비활성화. UMB는 제공되며 상위 메모리를 최대 확보할 때 많이 사용된다. 단, EMS 기반 프로그램은 동작하지 않을 수 있다.

RAM

EMS 제공 + UMB 제공 단, 페이지 프레임을 확보해야 하므로 NOEMS보다 UMB가 적게 확보된다.

FRAME / Mx / Pn

EMS 페이지 프레임 주소 또는 개별 페이지 주소 지정.

공식 HELP 예제:

device=emm386.exe 512 p0=d000 p1=d400 p2=d800 p3=dc00

X=mmmm-nnnn / I=mmmm-nnnn

상위 메모리 사용/제외 범위 지정.

HIGHSCAN

EMA/UMB 추가 스캔 실시. 하지만 잘못된 영역을 사용 가능하다고 판단하여 시스템이 멈출 위험이 있으므로 고급 사용자 전용 옵션이다.

NOHI

EMM386 일부를 UMB에 올리지 않음. → 기본 메모리 감소 → UMB 확보 증가

ROM=range

Shadow RAM 구성.

NOVCPI

VCPI 비활성(반드시 NOEMS와 함께).

WIN=range

Windows에서 사용할 UMA 영역 예약.

NOMOVEXBDA

EBDA를 UMB로 이동시키지 않음. 특정 VGA BIOS, 네트워크 ROM과의 충돌을 방지할 때 사용.

ALTBOOT

CTRL+ALT+DEL 재부팅 시 대체 핸들러 사용. 재부팅 루틴이 불안정한 일부 386 보드에서 사용되었다.

사용 예시

EMS 미사용, UMB 최대 확보

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

EMS 활성화

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

EMS 페이지 프레임 수동 지정

device=emm386.exe 512 frame=d000

HIGHSCAN

device=emm386.exe NOEMS HIGHSCAN

관련 문서

분류