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)를 이용해 물리 주소 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

관련 문서

분류