EMM386.EXE: 두 판 사이의 차이
잔글 Pc1412님이 Emm386.exe 문서를 넘겨주기를 만들지 않고 EMM386.EXE 문서로 이동했습니다 |
편집 요약 없음 |
||
| (같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
| 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)를 이용해 | |||
Windows/386 · Windows 3.x의 | 물리 주소 1MB 이상(XMS 영역)을 UMA로 "매핑"하여 사용하는 방식으로 동작하며, | ||
EMM386 로딩 전에는 반드시 '''HIMEM.SYS'''가 먼저 로드되어 있어야 한다. | |||
MS-DOS 5.0부터 EXE 형태로 제공되었으며 | |||
Windows/386 · Windows 3.x의 ‘386 향상 모드’ 환경에서도 사용되었다. | |||
= 역사 = | = 역사 = | ||
== 초기 == | == 초기 == | ||
* 1986년 Compaq Deskpro 386용 OEM DOS에 포함된 '''CEMM''' | * 1986년 Compaq Deskpro 386용 OEM DOS에 포함된 '''CEMM'''이 기술적 기반. | ||
* 1987년 Windows/386 2.0에서 Microsoft | * 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 동적 변환 | ||
* | * 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 영역)를 | ||
상위 메모리 영역처럼 보이도록 매핑할 수 있다. | |||
== HIMEM.SYS와의 관계 == | == HIMEM.SYS와의 관계 == | ||
HIMEM.SYS가 XMS의 기본 관리 역할을 담당하고, | |||
EMM386.EXE는 HIMEM.SYS가 제공하는 XMS를 기반으로 | |||
* EMS 생성 | |||
* UMB 생성 | |||
* 페이지 프레임 관리 | |||
등을 수행한다. | |||
== EMS/XMS 동적 전환 == | |||
공식 HELP 문서의 핵심 설명에 따르면: | |||
== EMS | * '''MIN=값''' : 항상 확보해둘 EMS 용량 | ||
* EMS는 | * '''MEMORY=값''' : 필요 시 XMS를 EMS로 변환해 최대 제공할 수 있는 용량 | ||
* | * EMS 필요 프로그램 실행 시 | ||
* | → 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의 | Windows 3.x/9x의 Enhanced Mode가 시작되면 | ||
Windows의 보호 모드 VMM이 | 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 | * 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 | 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 / OFF / AUTO == | ||
ON: EMS·UMB 활성 | |||
OFF: 비활성 | |||
AUTO: 프로그램 요청 시에만 EMS/UMB 활성 | |||
== memory == | == memory == | ||
EMS/VCPI 최대 제공량(KB). | |||
NOEMS 사용 시 기본값 0. | NOEMS 사용 시 기본값 0. | ||
== MIN=size == | == MIN=size == | ||
고정적으로 예약할 EMS 최소 크기. | |||
== NOEMS == | == NOEMS == | ||
EMS 비활성화. | EMS 비활성화. | ||
UMB는 | 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 == | == X=mmmm-nnnn / I=mmmm-nnnn == | ||
사용/ | 상위 메모리 사용/제외 범위 지정. | ||
== HIGHSCAN == | == HIGHSCAN == | ||
EMA/UMB 추가 스캔 실시. | |||
하지만 잘못된 영역을 사용 가능하다고 판단하여 | |||
'''시스템이 멈출 위험'''이 있으므로 고급 사용자 전용 옵션이다. | |||
== NOHI == | == NOHI == | ||
EMM386 일부를 UMB에 올리지 않음. | EMM386 일부를 UMB에 올리지 않음. | ||
→ 기본 메모리 감소 | → 기본 메모리 감소 | ||
→ UMB 증가 | → UMB 확보 증가 | ||
== ROM= | == ROM=range == | ||
Shadow RAM 구성. | Shadow RAM 구성. | ||
== NOVCPI == | == NOVCPI == | ||
VCPI | VCPI 비활성(반드시 NOEMS와 함께). | ||
== WIN= | == WIN=range == | ||
Windows에서 사용할 UMA 영역 예약. | Windows에서 사용할 UMA 영역 예약. | ||
== NOMOVEXBDA == | |||
EBDA를 UMB로 이동시키지 않음. | |||
특정 VGA BIOS, 네트워크 ROM과의 충돌을 방지할 때 사용. | |||
== ALTBOOT == | == ALTBOOT == | ||
CTRL+ALT+DEL 재부팅 시 대체 핸들러 사용. | |||
재부팅 루틴이 불안정한 일부 386 보드에서 사용되었다. | |||
= | = 사용 예시 = | ||
== 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=emm386.exe 512 frame=d000 | |||
== HIGHSCAN == | |||
device=emm386.exe NOEMS HIGHSCAN | |||
= 관련 문서 = | = 관련 문서 = | ||
| 168번째 줄: | 214번째 줄: | ||
= 분류 = | = 분류 = | ||
[[Category:MS-DOS 명령어]] | [[Category:MS-DOS 명령어]] | ||
[[Category:DOS 구성요소]] | |||
[[Category:메모리 관리자]] | [[Category:메모리 관리자]] | ||
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