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은 | EMM386은 CPU의 '''가상 8086 모드'''와 MMU(Page Table)를 이용해 | ||
HIMEM. | 물리 주소 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와 함께 지속적으로 개선되었다. | |||
== | = 버전 기록 = | ||
{| class="wikitable" | |||
! 함께 제공된 제품 !! 날짜 !! 파일명 !! 버전 | |||
|- | |||
| 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=HIMEM.SYS | DEVICE=C:\DOS\HIMEM.SYS | ||
DEVICE=EMM386.EXE NOEMS | DEVICE=C:\DOS\EMM386.EXE NOEMS | ||
DOS=HIGH,UMB | DOS=HIGH,UMB | ||
=== | == EMS 활성화 == | ||
DEVICE=C:\DOS\HIMEM.SYS | |||
DEVICE=EMM386.EXE | DEVICE=C:\DOS\EMM386.EXE RAM | ||
DOS=HIGH,UMB | |||
== | == EMS 페이지 프레임 수동 지정 == | ||
device=emm386.exe 512 frame=d000 | |||
== | == HIGHSCAN == | ||
device=emm386.exe NOEMS HIGHSCAN | |||
= | = 관련 문서 = | ||
* [[HIMEM.SYS]] | * [[HIMEM.SYS]] | ||
* [[MEM.EXE]] | |||
* [[CONFIG.SYS]] | * [[CONFIG.SYS]] | ||
* [[DOS 메모리 구조]] | * [[DOS 메모리 구조]] | ||
* [[ | * [[QEMM]] | ||
* [[ | * [[386MAX]] | ||
= 분류 = | |||
[[Category:MS-DOS 명령어]] | |||
[[Category:DOS 구성요소]] | |||
[[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