EMM386.EXE

도스박물관
Pc1412 (토론 | 기여)님의 2025년 11월 25일 (화) 17:16 판 (Pc1412님이 Emm386.exe 문서를 넘겨주기를 만들지 않고 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)를 활용하며, HIMEM.SYS가 제공하는 XMS 메모리를 기반으로 EMS와 UMB를 동시에 구성한다.

MS-DOS 5.0에서부터 EMM386.EXE라는 독립 실행 파일 형태로 제공되었으며, Windows/386 · Windows 3.x의 386 향상 모드에서도 메모리 관리자 역할을 담당하였다.

역사

초기

  • 1986년 Compaq Deskpro 386용 OEM DOS에 포함된 CEMM(Compaq Expanded Memory Manager)에서 기술 기반이 시작되었다.
  • 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 형태로 재정비되면서

  • UMB 제공
  • EMS 제공
  • v8086 모드 기반 메모리 가상화
  • CONFIG.SYS 라인에서 유연한 설정 제공

등이 가능해졌다.

버전 기록

함께 제공된 제품 날짜 파일명 버전
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)를 640KB~1MB 사이의 UMA처럼 “보이도록” 매핑할 수 있다.

HIMEM.SYS와의 관계

  • HIMEM.SYS: XMS 관리
  • EMM386.EXE: XMS를 기반으로 EMS·UMB 생성

HIMEM.SYS가 없으면 EMM386은 동작할 수 없다.

EMS 및 UMB 제공

  • EMS는 16KB의 페이지 프레임 사용
  • UMB는 A000h~FFFFh 사이 장치 영역 중 실제 사용되지 않는 부분을 스캔하여 확보
  • MEM /C, MEM /F 등에서 보이는 UMB는 모두 EMM386이 제공한 것

Windows와의 관계

386 향상 모드

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

GEMMIS API

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

이를 구현한 메모리 관리자는 다음과 같다:

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

FreeDOS의 JEMM386/JEMMEX는 GEMMIS를 지원하지 않기 때문에 Windows 3.x 386 향상 모드에서는 실행되지 않는다.

FreeDOS 호환성

JEMM 시리즈 사용 시 Windows 3.x는 다음 오류를 출력한다:

> 현재 설치된 보호 모드 소프트웨어가 실행 중인 동안에는 Windows를 실행할 수 없습니다.

→ WIN /S 또는 WIN /2로 강제 표준 모드 실행만 가능하며 가상 메모리·386Enh 드라이버 로딩 등이 모두 제한된다.

EMM386.EXE 옵션

(출처: Hangual MS-DOS 6.2 HELP 전문)

ON / OFF / AUTO

  • ON: EMS·UMB 활성
  • OFF: 기능 중지
  • AUTO: 프로그램 요청 시에만 EMS/UMB 생성

memory

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

MIN=size

보장된 EMS 최소값. 기본 256KB.

NOEMS

EMS 비활성화. UMB는 계속 제공되며, 상위 메모리를 최대 확보할 때 자주 사용된다. 다만 EMS 기반 게임/프로그램은 정상 동작하지 않을 수 있다.

FRAME=address

EMS 페이지 프레임 주소 지정.

X=mmmm-nnnn / I=mmmm-nnnn

사용/제외할 UMA 블록 수동 지정.

HIGHSCAN

UMA를 더욱 자세히 스캔한다. 추가 UMB 확보가 가능한 경우가 있지만 일부 기종에서는 시스템 정지 위험도 있다.

NOHI

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

ROM=mmmm-nnnn

Shadow RAM 구성.

NOVCPI

VCPI 비활성화 (NOEMS와 함께 사용해야 함).

WIN=mmmm-nnnn

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

ALTBOOT

Ctrl+Alt+Del 재부팅 처리 방식 대체.

실제 CONFIG.SYS 예시

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

HIGHSCAN 예시

DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN

관련 문서

분류