EMM386
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
EMM386은 1986년 Compaq의 OEM MS-DOS에 포함된 CEMM 개발을 통해 처음 등장한 기술로, MS-DOS 및 Windows 운영 체제에서 메모리 관리를 위해 사용되었다. EMM386은 확장 메모리를 활용하여 장치 드라이버와 상주 프로그램을 상위 메모리에 로드하여 기본 메모리를 확보하는 역할을 했다. 1991년 MS-DOS 5.0부터 EMM386.EXE 형태로 제공되었으며, 이후 MS-DOS 및 Windows 버전과 함께 업데이트되었다. EMM386은 가상 8086 모드를 활용하여 EMS와 UMB를 제공하며, Windows 환경에서는 GEMMIS API를 통해 메모리 관리 권한을 넘겨받기도 한다.
더 읽어볼만한 페이지
- 외부 도스 명령어 - COMMAND.COM
COMMAND.COM은 MS-DOS 운영체제에서 명령줄 인터페이스를 제공하는 명령어 해석기로, 파일 관리 및 프로그램 실행 등의 작업을 수행하며, 윈도우 9x에서 MS-DOS 호환성을 위해, FreeDOS에서는 핵심 구성 요소로 사용된다. - 외부 도스 명령어 - CHKDSK
CHKDSK는 디스크의 파일 시스템 무결성을 검사하고 오류를 수정하는 시스템 도구로, 다양한 운영체제에서 구현되었으며 파일 시스템 오류 수정 및 손상된 파일 조각 복구 기능을 제공하지만 데이터 손상이나 시스템 불안정을 야기할 수 있다는 비판도 있다. - 메모리 관리 - 동적 메모리 할당
동적 메모리 할당은 프로그램 실행 중 힙 영역에서 메모리 공간을 확보 및 해제하여 효율적인 메모리 관리와 유연성을 제공하는 기술로, 메모리 누수 방지 및 가비지 컬렉션 등의 고려 사항이 중요하며 C, C++, C++/CLI, C# 등에서 사용된다. - 메모리 관리 - 정적 변수
정적 변수는 프로그램 실행 시간 동안 값을 유지하며, C 언어에서 `static` 키워드로 정의되어 함수 호출 간에 값을 유지하고, 객체 지향 프로그래밍에서 클래스의 모든 인스턴스에서 공유되는 클래스 변수로 사용된다.
EMM386 - [IT 관련 정보]에 관한 문서 | |
---|---|
일반 정보 | |
개발자 | Microsoft IBM DR Datalight FreeDOS 팀 |
출시일 | 1988년 |
운영 체제 | MS-DOS PC DOS DR DOS ROM-DOS FreeDOS |
플랫폼 | Intel 80386 |
장르 | 확장 메모리 관리자 명령 |
라이선스 | 알 수 없음 |
웹사이트 | 알 수 없음 |
2. 역사
EMM386은 1986년 컴팩의 CEMM을 시작으로 발전하여, 마이크로소프트의 Windows/386과 MS-DOS에 포함되었다. 초기에는 EMM386.SYS 형태였으나, MS-DOS 5.0부터 EMM386.EXE 형태로 발전하여 더욱 유연한 메모리 관리를 제공했다.
EMM386은 윈도우의 ''386 향상'' 모드에서 일시 중단되며, 윈도우의 보호 모드 커널이 메모리 관리 역할을 넘겨받는다. FreeDOS의 메모리 관리자는 GEMMIS API를 구현하지 않아 윈도우와 함께 실행되지 않는 문제가 있었다. JEMMxx를 사용하면 윈도우를 표준 모드로 실행할 수 있지만, 기능에 제한이 있었다.[2][3][4]
2. 1. 초기 버전
EMM386 기술은 1986년 Compaq Deskpro 386용 컴팩의 OEM MS-DOS에 포함된 CEMM의 개발과 함께 처음 등장했다. 마이크로소프트의 버전은 1987년 Windows/386 2.0에 내장되어 처음 등장했으며, 1988년 MS-DOS 4.0과 함께 독립형 EMM386.SYS로 제공되었다.2. 2. MS-DOS 5.0 이후
1991년 MS-DOS 5.0에서 더욱 유연한 EMM386.EXE 버전이 등장했다. EMM386.EXE는 상위 메모리 영역(UMA)의 사용하지 않는 블록에 메모리를 매핑하여 장치 드라이버와 상주 프로그램을 "높게 로드"하여 기본 메모리를 보존할 수 있도록 했다. EMM386은 프로세서의 가상 8086 모드를 사용하여, DOS 응용 프로그램의 메모리 접근을 MMU를 거치도록 강제했다. MMU의 페이지 테이블 항목은 HIMEM.SYS를 통해 EMM386이 얻은 확장 메모리 영역에 상위 메모리의 특정 영역을 매핑하도록 구성되었다. 이 기술은 EMS (확장 메모리)와 UMB를 모두 가능하게 했다.Windows는 GEMMIS API를 사용하여 EMM386.EXE로부터 메모리 관리를 넘겨받았다. GEMMIS API를 구현한 메모리 관리자에는 EMM386.EXE, Quarterdeck QEMM, Qualitas 386MAX 등이 있었다.
2. 3. 버전 기록
함께 제공됨 | 날짜 | 파일명 | 버전 |
---|---|---|---|
MS-DOS 4.01 | 1988년 11월 | EMM386.SYS | 4.00 |
Windows 3.0 | 1990년 5월 | EMM386.SYS | 4.10.0419 |
MS-DOS 5.0 IBM PC DOS 5.0 | 1991년 6월 | EMM386.EXE | 4.20.06x |
IBM PC DOS 5.02 MS-DOS 5.00a | 1992년 9월 | EMM386.EXE | 4.33 |
Windows 3.1 Windows for Workgroups 3.1 | 1992년 4월 1992년 10월 | EMM386.EXE | 4.44 |
MS-DOS 6.0 IBM PC DOS 6.1 | 1993년 3월 1993년 6월 | EMM386.EXE | 4.45 |
MS-DOS 6.2 Windows 3.11 Windows for Workgroups 3.11 MS-DOS 6.21 IBM PC DOS 6.3 | 1993년 9월 1993년 11월 1994년 3월 1994년 4월 | EMM386.EXE | 4.48 |
MS-DOS 6.22 | 1994년 6월 | EMM386.EXE | 4.49 |
IBM PC DOS 7.0 IBM PC DOS 2000 | 1995년 4월 1998년 5월 | EMM386.EXE | 4.50 |
Windows 95 Windows 98 | 1995년 8월 1998년 6월 | EMM386.EXE | 4.95 |
EMM386.EXE는 상위 메모리 영역(UMA)의 사용하지 않는 블록에 메모리를 매핑하여 장치 드라이버와 상주 프로그램을 "높게 로드"함으로써 기본 메모리를 보존한다.
3. 작동 원리
이 기술은 1986년 Compaq Deskpro 386용 Compaq의 OEM MS-DOS에 포함된 CEMM에서 처음 등장했다. 마이크로소프트 버전은 1987년 Windows/386 2.0에 내장되었고, 1988년 MS-DOS 4.0에서는 독립형 EMM386.SYS로, 1991년 MS-DOS 5.0에서는 더 유연한 EMM386.EXE 버전으로 등장했다.
EMM386.EXE는 확장 메모리(XMS)를 활용하여 상위 메모리 영역(UMA)을 에뮬레이트(가상화)한다. 윈도우 ''386 향상'' 모드에서는 일시 중단되며, 윈도우의 보호 모드 커널이 그 역할을 대신한다.
윈도우는 GEMMIS API를 사용하여 EMM386.EXE로부터 메모리 관리를 넘겨받는다. '''글로벌 EMM 가져오기 사양'''(GEMMIS)은 소수의 메모리 관리자 공급업체("Windows/386 페이징 가져오기 사양")에 제공되는 문서를 통해 지원된다.
GEMMIS API를 구현한 메모리 관리자는 EMM386.EXE, Quarterdeck QEMM, Qualitas 386MAX, Helix Netroom 및 DOSBox 내장 DOS 등 소수에 불과하며, FreeDOS의 메모리 관리자는 이를 지원하지 않는다.
FreeDOS의 메모리 관리자(HIMEMX.EXE, JEMM386.EXE, JEMMEX.EXE)는 GEMMIS API를 구현하지 않아, 윈도우는 JEMMxxx와 함께 실행되지 않는다. 윈도우가 메모리 관리 역할을 넘겨받지 못하기 때문이다. Windows ME, Windows 98, Windows 95, Windows for Workgroups 3.1x 및 Windows 3.xx는 모두 JEMMxxx가 다음과 같은 메시지를 표시하며 실패한다.
> 현재 설치된 보호 모드 소프트웨어가 실행 중인 동안에는 Windows를 실행할 수 없습니다.
>
> 보호 모드 소프트웨어를 종료한 다음 다시 시도하십시오.
> 컴퓨터를 다시 시작해야 할 수도 있습니다.
JEMMxx를 사용하면 윈도우를 표준 모드로 강제 실행할 수 있지만, 이는 80386 향상 모드가 아닌 80286 보호 모드를 사용하는 제한적인 기능만 제공한다. 이를 위해서는 다음 세 가지 조건이 필요하다.
1. 총 XMS를 64MB로 제한
2. EMS 활성화 (NOEMS 옵션 사용 불가, 예: JEMMEX X2MAX=65422)
3. 윈도우 표준 모드 실행 (WIN /S 또는 WIN /2)
표준 모드 윈도우는 가상 메모리를 지원하지 않고, SYSTEM.INI의 [386Enh] 섹션을 건너뛰며, [386Enh]의 장치 드라이버도 로드되지 않는 등 기능이 제한된다.
3. 1. 가상 8086 모드 활용
EMM386.EXE는 프로세서의 가상 8086 모드를 사용하여 DOS 응용 프로그램의 메모리 접근을 제어한다. 이는 프로세서의 MMU를 거치도록 하며, MMU에서 사용되는 페이지 테이블 항목은 확장 메모리 관리자 HIMEM.SYS를 통해 EMM386이 얻은 확장 메모리 영역에 상위 메모리의 특정 영역을 매핑하도록 EMM386에 의해 구성된다. 이 기술은 EMS (확장 메모리)와 UMB를 모두 가능하게 했으며, 이 두 가지는 DOS 응용 프로그램에는 상위 영역의 메모리로 나타나지만, 실제로는 1MB를 초과하는 물리적 메모리 위치에 매핑된다.
3. 2. HIMEM.SYS와의 관계
EMM386은 프로세서의 가상 8086 모드를 사용한다. 이는 DOS 응용 프로그램에서 수행된 메모리 액세스가 프로세서의 MMU를 거치도록 강제하며, MMU에서 사용되는 페이지 테이블 항목은 확장 메모리 관리자 HIMEM.SYS를 통해 EMM386이 얻은 확장 메모리 영역에 상위 메모리의 특정 영역을 매핑하도록 EMM386에 의해 구성된다. 이 기술은 EMS (확장 메모리)와 UMB를 모두 가능하게 했다. 두 가지 모두 DOS 응용 프로그램에는 상위 영역의 메모리로 나타나지만, 실제로는 1MB를 초과하는 물리적 메모리 위치에 매핑된다.
3. 3. EMS 및 UMB 제공
EMM386은 프로세서의 가상 8086 모드를 사용하여 DOS 응용 프로그램의 메모리 접근이 프로세서의 MMU를 거치도록 한다. MMU에서 사용되는 페이지 테이블 항목은 확장 메모리 관리자 HIMEM.SYS를 통해 EMM386이 얻은 확장 메모리 영역에 상위 메모리의 특정 영역을 매핑하도록 EMM386에 의해 구성된다. 이 기술은 EMS (확장 메모리)와 UMB를 모두 가능하게 했다.[3] DOS 응용 프로그램에는 상위 영역의 메모리로 나타나지만, 실제로는 1MB를 초과하는 물리적 메모리 위치에 매핑된다.[3]
4. 윈도우와의 관계
EMM386.EXE는 MS-DOS 환경에서 메모리 관리를 하는 프로그램이지만, 윈도우 운영체제와도 밀접하게 관련되어 있다. EMM386.EXE는 프로세서의 가상 8086 모드를 사용하여 도스 응용 프로그램의 메모리 접근을 제어하고, 확장 메모리 (EMS)와 UMB를 사용할 수 있게 해준다.
윈도우는 '''GEMMIS API'''를 사용하여 EMM386.EXE로부터 메모리 관리 권한을 넘겨받는다. ''386 향상 모드''에서 윈도우 세션이 실행되는 동안에는 EMM386.EXE가 일시적으로 종료되고, 윈도우의 보호 모드 커널이 그 역할을 대신한다.
하지만, FreeDOS의 메모리 관리자는 GEMMIS API를 구현하지 않아 윈도우와의 호환성 문제가 발생하기도 한다.
4. 1. 386 향상 모드
''386 향상'' 모드에서 Windows 세션 중에는 EMM386.EXE가 일시적으로 종료되고, Windows의 보호 모드 커널이 메모리 관리 역할을 넘겨받는다.4. 2. GEMMIS API
Windows는 GEMMIS API를 사용하여 EMM386.EXE로부터 메모리 관리를 넘겨받는다. '''글로벌 EMM 가져오기 사양'''(GEMMIS)은 소수의 메모리 관리자 공급업체가 Windows와 상호 작용할 수 있도록 지원하는 인터페이스이다.GEMMIS API를 구현한 메모리 관리자로는 EMM386.EXE, Quarterdeck QEMM, Qualitas 386MAX, Helix Netroom 등이 있다.
4. 3. FreeDOS와의 호환성 문제
FreeDOS의 메모리 관리자(HIMEMX.EXE, JEMM386.EXE, JEMMEX.EXE)는 GEMMIS API를 구현하지 않아, JEMMxxx와 함께 Windows를 실행하면 시작되지 않는다. Windows가 메모리 관리 역할을 넘겨받지 못하기 때문이다. Windows ME, Windows 98, Windows 95, Windows for Workgroups 3.1x 및 Windows 3는 모두 JEMMxxx가 다음과 같은 메시지를 표시하며 실패한다.
현재 설치된 보호 모드 소프트웨어가 실행 중인 동안에는 Windows를 실행할 수 없습니다.
보호 모드 소프트웨어를 종료한 다음 다시 시도하십시오.
컴퓨터를 다시 시작해야 할 수도 있습니다.
JEMMxx를 사용하면 Windows가 표준 모드를 사용하도록 강제하여 Windows 3.x 및 Windows for Workgroups 3.1x를 제한된 기능으로 실행할 수 있다. 즉, 80386 향상 모드가 아닌 80286 보호 모드를 사용한다. 이를 위해서는 다음 세 가지 조건이 필요하다.
조건 | 설명 |
---|---|
총 XMS를 64MB로 제한 | |
EMS 활성화 | NOEMS 옵션을 사용할 수 없음 (예: JEMMEX X2MAX=65422) |
Windows 표준 모드 | WIN /S 또는 WIN /2 명령 사용 |
표준 모드의 Windows는 기능이 제한되어 가상 메모리를 사용할 수 없고, SYSTEM.INI의 [386Enh] 섹션을 건너뛰며, [386Enh]의 장치 드라이버는 로드되지 않는다.
5. EMM386.EXE의 스위치
EMM386.EXE는 다양한 스위치들을 제공한다.[8]
자세한 내용은 해당 문서를 참조하라.
5. 1. 기본 스위치
EMM386.EXE는 기본적으로 다음과 같은 스위치들을 제공한다.[8]스위치 | 설명 |
---|---|
`DEVICE=[드라이브:][경로]EMM386.EXE` | EMM386.EXE 파일의 위치를 지정한다. |
OFF|AUTO]` | EMM386.EXE의 작동 모드를 설정한다. (ON: 활성화, OFF: 비활성화, AUTO: 자동) |
`[메모리]` | EMM386.EXE가 사용할 메모리 양을 지정한다. |
`[MIN=크기]` | EMM386.EXE가 사용할 최소 메모리 크기를 지정한다. |
W=OFF]` | Weitek 코프로세서 지원 여부를 설정한다. (W=ON: 지원, W=OFF: 지원 안 함) |
FRAME=주소|/Pmmmm]` | 페이지 프레임의 주소를 지정하는 방식이다. |
`[Pn=주소]` | 특정 페이지(n)의 주소를 지정한다. |
`[X=mmmm-nnnn]` | 특정 메모리 영역(mmmm-nnnn)을 제외한다. |
`[I=mmmm-nnnn]` | 특정 메모리 영역(mmmm-nnnn)을 포함한다. |
`[B=주소]` | 가장 낮은 주소값을 지정한다. |
`[L=minXMS]` | 최소 XMS 메모리 양을 지정한다. |
`[A=altregs]` | 대체 레지스터 세트의 수를 지정한다. |
`[H=핸들 수]` | 사용할 수 있는 핸들의 수를 지정한다. |
`[D=숫자]` | DMA 버퍼의 크기를 지정한다. |
`[RAM=mmmm-nnnn]` | EMS/VCPI 메모리에 사용할 메모리 영역을 지정한다. |
`[NOEMS]` | EMS 지원을 사용하지 않는다. |
`[NOVCPI]` | VCPI 지원을 사용하지 않는다. |
`[HIGHSCAN]` | 상위 메모리 영역(UMA) 스캔 방식을 설정한다. |
`[VERBOSE]` | 자세한 정보 표시 모드를 활성화한다. |
`[WIN=mmmm-nnnn]` | 윈도우에서 사용할 메모리 영역을 지정한다. |
`[NOHI]` | EMM386.EXE의 일부를 상위 메모리 영역에 로드하지 않는다. |
`[ROM=mmmm-nnnn]` | ROM 영역을 지정한다. |
`[NOMOVEXBDA]` | 확장 BIOS 데이터 영역(EBDA) 이동을 방지한다. |
`[ALTBOOT]` | 대체 부팅 방식을 사용한다. |
참조
[1]
웹사이트
Datalight ROM-DOS User's Guide
https://www.dataligh[...]
[2]
웹사이트
Q98768 - Troubleshooting MS-DOS 6.x and EMM386.EXE
https://www.infania.[...]
[3]
웹사이트
EMM386 Troubleshooting and Technical Information (78557)
https://hwiegman.hom[...]
[4]
웹사이트
EMM386 and Early Versions of HIMEM.SYS (74977)
https://hwiegman.hom[...]
[5]
저널
The Windows Global EMM Import Interface
http://www.drdobbs.c[...]
2015-10-21
[6]
저널
QPI: The QEMM-386 Programming Interface
https://www.cs.cmu.e[...]
2017-08-23
[7]
웹인용
How to kick out a memory manager
http://dgi_il.tripod[...]
Walken / Impact Studios
2015-10-21
[8]
웹인용
EMM386.EXE
http://2dos.homepage[...]
2008-02-10
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com