HIMEM.SYS: 두 판 사이의 차이
새 문서: = HIMEM.SYS = '''HIMEM.SYS'''는 MS-DOS, PC DOS, Windows 3.x 환경에서 사용되는 공식 XMS(Extended Memory Specification) 메모리 관리자이다. CPU의 A20 라인을 제어하여 HMA(High Memory Area)에 접근할 수 있도록 하며, XMS 규격에 따라 확장 메모리를 할당·관리하는 역할을 담당한다. HIMEM은 EMM386.EXE와 함께 동작하여 DOS 환경에서 효율적인 메모리 활용을 가능하게 한다. (단, UMB는 HIMEM이 아니라 ''... |
편집 요약 없음 |
||
| 1번째 줄: | 1번째 줄: | ||
= HIMEM.SYS = | = HIMEM.SYS = | ||
'''HIMEM.SYS'''는 MS-DOS, PC DOS, Windows 3.x 환경에서 사용되는 | '''HIMEM.SYS'''는 MS-DOS, PC DOS, Windows 3.x 환경에서 사용되는 XMS(Extended Memory Specification) 확장 메모리 관리자이며, | ||
A20 라인 제어, HMA(High Memory Area) 접근, XMS 블록 관리 등 DOS 메모리 확장을 위해 필수적인 장치 드라이버이다. | |||
XMS | |||
본 문서는 '''MS-DOS 6.22 정품 HIMEM.TXT'''를 기반으로 하고, 도스박물관 기술 보존 목적으로 전문 해설을 추가하였다. | |||
== 1. HIMEM.SYS 개요 == | |||
HIMEM은 확장 메모리(XMS) 및 HMA의 사용을 조정하여 | |||
여러 프로그램/드라이버가 같은 메모리 영역을 중복 사용하지 않도록 관리한다. | |||
* '''A20 라인 제어''' | |||
* '''HMA 제공 (64KB − 16바이트)''' | |||
* '''XMS 메모리(1MB↑) 관리''' | |||
* '''INT 2Fh 기반 XMS API 제공''' | |||
* '''XMS 핸들(EMB) 생성·삭제''' | |||
* A20 라인 제어 | * '''EMS/UMB는 EMM386.EXE가 생성하며, HIMEM은 그 기반 제공''' | ||
* HMA 제공 | |||
* XMS | |||
* INT | |||
* | |||
HIMEM.SYS는 | == 2. 설치 및 우선순위 == | ||
CONFIG.SYS에서 HIMEM.SYS는 반드시 EMM386.EXE보다 먼저 로드해야 한다. | |||
<pre> | <pre> | ||
DEVICE=HIMEM.SYS | DEVICE=HIMEM.SYS | ||
DEVICE=EMM386.EXE NOEMS | |||
DOS=HIGH,UMB | |||
</pre> | </pre> | ||
== | == 3. 명령 형식 == | ||
<pre> | |||
DEVICE=[drive:][path]HIMEM.SYS [/A20CONTROL:ON|OFF] [/CPUCLOCK:ON|OFF] | |||
[/EISA] [/HMAMIN=m] [/INT15=xxxx] | |||
[/NUMHANDLES=n] [/MACHINE:xxxx] | |||
[/SHADOWRAM:ON|OFF] [/TESTMEM:ON|OFF] [/VERBOSE] | |||
</pre> | |||
== | === 3.1 파라미터 ([drive:][path]) === | ||
HIMEM.SYS 파일의 위치를 지정한다. | |||
DOS 디렉터리(예: C:\DOS)에 있는 것이 일반적이다. | |||
== 4. 스위치 상세 설명 == | |||
=== /A20CONTROL:ON|OFF === | === /A20CONTROL:ON|OFF === | ||
HIMEM이 | A20 라인을 HIMEM이 강제로 제어할지 여부. | ||
* ON : A20이 이미 ON이었어도 HIMEM이 재제어(기본값) | |||
* OFF : A20이 OFF일 때만 제어 | |||
A20 제어 방식 우선순위(실제 HIMEM 구현): | |||
# Port 92h Fast A20 Gate (386↑ 대부분) | |||
# BIOS A20 루틴 INT 15h | |||
# 8042 Keyboard Controller 방식 (구형 286) | |||
=== /CPUCLOCK:ON|OFF === | === /CPUCLOCK:ON|OFF === | ||
일부 | 일부 286/386 보드에서 HIMEM 로드시 타이머가 흔들리는 문제를 교정. | ||
ON은 안정성↑, 속도↓. 기본값은 OFF. | |||
기본값은 OFF. | |||
=== /EISA === | === /EISA === | ||
EISA 시스템에서 16MB 이상 | EISA 시스템에서 16MB 이상 확장 메모리 할당 시 필요. | ||
AT/386/486 일반 보드에서는 필요 없음. | |||
=== /HMAMIN= | === /HMAMIN=m === | ||
HMA를 | HMA를 사용할 최소 요구 메모리(KB 단위). | ||
0~ | 0~63 지정 가능. | ||
Windows 3.x 386 Enhanced Mode에서는 | 최소 요구량을 만족한 첫 응용프로그램이 HMA를 독점한다. | ||
Windows 3.x 386 Enhanced Mode에서는 무시된다. | |||
=== /INT15=xxxx === | === /INT15=xxxx === | ||
INT 15h AH=87h | INT 15h AH=87h 방식(구형 확장 메모리 할당 방식) 사용 프로그램을 위해 | ||
xxxx | xxxx KB를 예약. | ||
* 최소 64~최대 65535 KB | |||
* XMS 등장 이전의 프로그램(Lotus 1-2-3 초기 버전 등) 호환용 | |||
=== /NUMHANDLES=n === | === /NUMHANDLES=n === | ||
동시 XMS 핸들(EMB) 수 설정. | |||
1~128 | 각 핸들 6바이트 오버헤드. | ||
1~128 (기본값 32) | |||
Windows 3.x 386 Enhanced Mode에서는 무시됨. | Windows 3.x 386 Enhanced Mode에서는 무시됨. | ||
=== /MACHINE:xxxx === | === /MACHINE:xxxx === | ||
A20 타이밍 및 BIOS 호환성을 위해 시스템 유형을 강제로 지정. | |||
==== MACHINE 코드 목록 ==== | ==== MACHINE 코드 목록 ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! 코드 !! 번호 !! 컴퓨터 종류 | ||
|- | |- | ||
| 1 || | | at || 1 || IBM AT 또는 완전 호환 | ||
|- | |- | ||
| 2 || | | ps2 || 2 || IBM PS/2 | ||
|- | |- | ||
| 3 || | | ptlcascade || 3 || Phoenix Cascade BIOS | ||
|- | |- | ||
| 4 || | | hpvectra || 4 || HP Vectra (A & A+) | ||
|- | |- | ||
| 5 || | | att6300plus || 5 || AT&T 6300 Plus | ||
|- | |- | ||
| 6 || | | acer1100 || 6 || Acer 1100 | ||
|- | |- | ||
| 7 || | | toshiba || 7 || Toshiba 1600/1200XE | ||
|- | |- | ||
| 8 || | | wyse || 8 || Wyse 12.5MHz 286 | ||
|- | |- | ||
| 9 || | | tulip || 9 || Tulip SX | ||
|- | |- | ||
| 10 || | | zenith || 10 || Zenith ZBIOS | ||
|- | |- | ||
| 11 || | | at1 || 11 || IBM AT (지연 타이밍 1) | ||
|- | |- | ||
| 12 || | | at2 || 12 || IBM AT (지연 타이밍 2) | ||
|- | |- | ||
| 12 || | | css || 12 || CSS Labs | ||
|- | |- | ||
| 13 || | | at3 || 13 || IBM AT (지연 타이밍 3) | ||
|- | |- | ||
| 13 || | | philips || 13 || Philips | ||
|- | |- | ||
| 14 || | | fasthp || 14 || HP Vectra | ||
|- | |- | ||
| 15 || | | ibm7552 || 15 || IBM 7552 산업용 컴퓨터 | ||
|- | |- | ||
| 16 || | | bullmicral || 16 || Bull Micral 60 | ||
|- | |- | ||
| 17 || | | dell || 17 || Dell XBIOS | ||
|} | |} | ||
=== /SHADOWRAM:ON|OFF === | === /SHADOWRAM:ON|OFF === | ||
일부 | 일부 286/386 보드는 ROM Shadowing을 RAM으로 수행한다. | ||
RAM이 2MB 미만일 경우 HIMEM이 Shadow RAM을 OFF로 하여 | |||
Windows가 사용할 확장 메모리를 확보할 수 있다. | |||
486↑ 대부분의 보드는 BIOS가 Shadow RAM을 제어하므로 | |||
이 옵션이 적용되지 않는 경우가 많다. | |||
=== /TESTMEM:ON|OFF === | === /TESTMEM:ON|OFF === | ||
부팅 시 | 부팅 시 확장 메모리 검사 수행. | ||
* ON : 메모리 전체 반복 패턴 검사 (기본값) | |||
* OFF : 검사 생략, 부팅 속도 향상 | |||
HIMEM의 검사 알고리즘은 BIOS POST보다 훨씬 정밀하며, | |||
패턴 AA55h/FFFFh/0000h/랜덤 패턴/주소 의존패턴 등 다단계 검사로 구성됨. | |||
=== /VERBOSE (/V) === | === /VERBOSE (/V) === | ||
상세 메시지를 출력. | |||
ALT | ALT 누른 채 부팅하면 강제 VERBOSE 출력. | ||
== 5. HIMEM 동작 원리 == | |||
=== 5.1 HMA(High Memory Area) === | |||
* 위치: 1MB + 0h ~ 1MB + FFFFh | |||
* 크기: 64KB − 16바이트 | |||
* DOS=HIGH 시 커널(IO.SYS/MSDOS.SYS)의 약 45KB가 HMA로 이동 | |||
→ Conventional Memory 약 45KB 절약 | |||
HMA는 XMS 스펙상 한 번에 하나의 클라이언트만 사용 가능. | |||
=== 5.2 XMS 메모리 === | |||
* 1MB 이상의 RAM 사용 | |||
* 프로텍티드 모드 기반 구조 | |||
* INT 2Fh XMS API로 접근 | |||
* HIMEM은 XMS 핸들 테이블 생성·관리 | |||
=== 5.3 HIMEM과 EMM386 관계 === | |||
{| class="wikitable" | |||
! 구성 요소 !! 기능 | |||
|- | |||
| HIMEM.SYS || XMS / A20 / HMA 제공 | |||
|- | |||
| EMM386.EXE || EMS / UMB / VCPI 제공 | |||
|} | |||
== | == 6. CONFIG.SYS 예제 == | ||
=== 안정적 일반 환경 === | |||
<pre> | <pre> | ||
DEVICE=HIMEM.SYS | DEVICE=HIMEM.SYS | ||
| 151번째 줄: | 179번째 줄: | ||
</pre> | </pre> | ||
== | === EMS 필요 프로그램용 === | ||
HIMEM.SYS | <pre> | ||
DEVICE=HIMEM.SYS | |||
DEVICE=EMM386.EXE RAM | |||
DOS=HIGH,UMB | |||
</pre> | |||
=== 최대 UMB 확보 (HIGHSCAN) === | |||
<pre> | |||
DEVICE=HIMEM.SYS | |||
DEVICE=EMM386.EXE NOEMS HIGHSCAN | |||
DOS=HIGH,UMB | |||
</pre> | |||
== 같이 보기 == | == 7. 공식 문서의 주요 Notes 확장 해설 == | ||
=== 7.1 HIMEM의 확장 메모리 테스트 === | |||
공식 문서에 기술된 “unreliable extended memory" 메시지는 | |||
다음과 같은 상황에서 발생한다: | |||
* SIMM 모듈 불량 | |||
* 286/386 보드의 메모리 Refresh 레이트 오류 | |||
* A20 게이트 타이밍 오류 | |||
* Shadow RAM 충돌 | |||
메모리 테스트 실패 시: | |||
<pre> | |||
ERROR: HIMEM.SYS has detected unreliable extended memory at address XXXXXXXXh. | |||
</pre> | |||
/TESTMEM:OFF 로 무시 가능하지만 권장되지 않는다. | |||
=== 7.2 DOS=HIGH 해설 보완 === | |||
* HIMEM 또는 다른 XMS 드라이버가 있어야만 | |||
DOS=HIGH로 커널을 HMA에 로드할 수 있다. | |||
* WIN386.EXE(Windows 3.x Enhanced Mode) 환경에서 | |||
DOS=HIGH는 Windows의 Virtual Machine Manager(VMM)에 의해 유지된다. | |||
== 8. 같이 보기 == | |||
* [[EMM386.EXE]] | * [[EMM386.EXE]] | ||
* [[DOS 메모리 구조]] | |||
* [[CONFIG.SYS]] | * [[CONFIG.SYS]] | ||
* [[XMS]] | * [[XMS]] | ||
* [[ | * [[HMA]] | ||
* [[EMS]] | |||
* [[UMB]] | * [[UMB]] | ||
2025년 11월 28일 (금) 21:12 기준 최신판
HIMEM.SYS
HIMEM.SYS는 MS-DOS, PC DOS, Windows 3.x 환경에서 사용되는 XMS(Extended Memory Specification) 확장 메모리 관리자이며, A20 라인 제어, HMA(High Memory Area) 접근, XMS 블록 관리 등 DOS 메모리 확장을 위해 필수적인 장치 드라이버이다.
본 문서는 MS-DOS 6.22 정품 HIMEM.TXT를 기반으로 하고, 도스박물관 기술 보존 목적으로 전문 해설을 추가하였다.
1. HIMEM.SYS 개요
HIMEM은 확장 메모리(XMS) 및 HMA의 사용을 조정하여 여러 프로그램/드라이버가 같은 메모리 영역을 중복 사용하지 않도록 관리한다.
- A20 라인 제어
- HMA 제공 (64KB − 16바이트)
- XMS 메모리(1MB↑) 관리
- INT 2Fh 기반 XMS API 제공
- XMS 핸들(EMB) 생성·삭제
- EMS/UMB는 EMM386.EXE가 생성하며, HIMEM은 그 기반 제공
2. 설치 및 우선순위
CONFIG.SYS에서 HIMEM.SYS는 반드시 EMM386.EXE보다 먼저 로드해야 한다.
DEVICE=HIMEM.SYS DEVICE=EMM386.EXE NOEMS DOS=HIGH,UMB
3. 명령 형식
DEVICE=[drive:][path]HIMEM.SYS [/A20CONTROL:ON|OFF] [/CPUCLOCK:ON|OFF]
[/EISA] [/HMAMIN=m] [/INT15=xxxx]
[/NUMHANDLES=n] [/MACHINE:xxxx]
[/SHADOWRAM:ON|OFF] [/TESTMEM:ON|OFF] [/VERBOSE]
3.1 파라미터 ([drive:][path])
HIMEM.SYS 파일의 위치를 지정한다. DOS 디렉터리(예: C:\DOS)에 있는 것이 일반적이다.
4. 스위치 상세 설명
/A20CONTROL:ON|OFF
A20 라인을 HIMEM이 강제로 제어할지 여부.
- ON : A20이 이미 ON이었어도 HIMEM이 재제어(기본값)
- OFF : A20이 OFF일 때만 제어
A20 제어 방식 우선순위(실제 HIMEM 구현):
- Port 92h Fast A20 Gate (386↑ 대부분)
- BIOS A20 루틴 INT 15h
- 8042 Keyboard Controller 방식 (구형 286)
/CPUCLOCK:ON|OFF
일부 286/386 보드에서 HIMEM 로드시 타이머가 흔들리는 문제를 교정. ON은 안정성↑, 속도↓. 기본값은 OFF.
/EISA
EISA 시스템에서 16MB 이상 확장 메모리 할당 시 필요. AT/386/486 일반 보드에서는 필요 없음.
/HMAMIN=m
HMA를 사용할 최소 요구 메모리(KB 단위). 0~63 지정 가능. 최소 요구량을 만족한 첫 응용프로그램이 HMA를 독점한다. Windows 3.x 386 Enhanced Mode에서는 무시된다.
/INT15=xxxx
INT 15h AH=87h 방식(구형 확장 메모리 할당 방식) 사용 프로그램을 위해 xxxx KB를 예약.
- 최소 64~최대 65535 KB
- XMS 등장 이전의 프로그램(Lotus 1-2-3 초기 버전 등) 호환용
/NUMHANDLES=n
동시 XMS 핸들(EMB) 수 설정. 각 핸들 6바이트 오버헤드. 1~128 (기본값 32) Windows 3.x 386 Enhanced Mode에서는 무시됨.
/MACHINE:xxxx
A20 타이밍 및 BIOS 호환성을 위해 시스템 유형을 강제로 지정.
MACHINE 코드 목록
| 코드 | 번호 | 컴퓨터 종류 |
|---|---|---|
| at | 1 | IBM AT 또는 완전 호환 |
| ps2 | 2 | IBM PS/2 |
| ptlcascade | 3 | Phoenix Cascade BIOS |
| hpvectra | 4 | HP Vectra (A & A+) |
| att6300plus | 5 | AT&T 6300 Plus |
| acer1100 | 6 | Acer 1100 |
| toshiba | 7 | Toshiba 1600/1200XE |
| wyse | 8 | Wyse 12.5MHz 286 |
| tulip | 9 | Tulip SX |
| zenith | 10 | Zenith ZBIOS |
| at1 | 11 | IBM AT (지연 타이밍 1) |
| at2 | 12 | IBM AT (지연 타이밍 2) |
| css | 12 | CSS Labs |
| at3 | 13 | IBM AT (지연 타이밍 3) |
| philips | 13 | Philips |
| fasthp | 14 | HP Vectra |
| ibm7552 | 15 | IBM 7552 산업용 컴퓨터 |
| bullmicral | 16 | Bull Micral 60 |
| dell | 17 | Dell XBIOS |
/SHADOWRAM:ON|OFF
일부 286/386 보드는 ROM Shadowing을 RAM으로 수행한다. RAM이 2MB 미만일 경우 HIMEM이 Shadow RAM을 OFF로 하여 Windows가 사용할 확장 메모리를 확보할 수 있다.
486↑ 대부분의 보드는 BIOS가 Shadow RAM을 제어하므로 이 옵션이 적용되지 않는 경우가 많다.
/TESTMEM:ON|OFF
부팅 시 확장 메모리 검사 수행.
- ON : 메모리 전체 반복 패턴 검사 (기본값)
- OFF : 검사 생략, 부팅 속도 향상
HIMEM의 검사 알고리즘은 BIOS POST보다 훨씬 정밀하며, 패턴 AA55h/FFFFh/0000h/랜덤 패턴/주소 의존패턴 등 다단계 검사로 구성됨.
/VERBOSE (/V)
상세 메시지를 출력. ALT 누른 채 부팅하면 강제 VERBOSE 출력.
5. HIMEM 동작 원리
5.1 HMA(High Memory Area)
- 위치: 1MB + 0h ~ 1MB + FFFFh
- 크기: 64KB − 16바이트
- DOS=HIGH 시 커널(IO.SYS/MSDOS.SYS)의 약 45KB가 HMA로 이동
→ Conventional Memory 약 45KB 절약
HMA는 XMS 스펙상 한 번에 하나의 클라이언트만 사용 가능.
5.2 XMS 메모리
- 1MB 이상의 RAM 사용
- 프로텍티드 모드 기반 구조
- INT 2Fh XMS API로 접근
- HIMEM은 XMS 핸들 테이블 생성·관리
5.3 HIMEM과 EMM386 관계
| 구성 요소 | 기능 |
|---|---|
| HIMEM.SYS | XMS / A20 / HMA 제공 |
| EMM386.EXE | EMS / UMB / VCPI 제공 |
6. CONFIG.SYS 예제
안정적 일반 환경
DEVICE=HIMEM.SYS DEVICE=EMM386.EXE NOEMS DOS=HIGH,UMB
EMS 필요 프로그램용
DEVICE=HIMEM.SYS DEVICE=EMM386.EXE RAM DOS=HIGH,UMB
최대 UMB 확보 (HIGHSCAN)
DEVICE=HIMEM.SYS DEVICE=EMM386.EXE NOEMS HIGHSCAN DOS=HIGH,UMB
7. 공식 문서의 주요 Notes 확장 해설
7.1 HIMEM의 확장 메모리 테스트
공식 문서에 기술된 “unreliable extended memory" 메시지는 다음과 같은 상황에서 발생한다:
- SIMM 모듈 불량
- 286/386 보드의 메모리 Refresh 레이트 오류
- A20 게이트 타이밍 오류
- Shadow RAM 충돌
메모리 테스트 실패 시:
ERROR: HIMEM.SYS has detected unreliable extended memory at address XXXXXXXXh.
/TESTMEM:OFF 로 무시 가능하지만 권장되지 않는다.
7.2 DOS=HIGH 해설 보완
- HIMEM 또는 다른 XMS 드라이버가 있어야만
DOS=HIGH로 커널을 HMA에 로드할 수 있다.
- WIN386.EXE(Windows 3.x Enhanced Mode) 환경에서
DOS=HIGH는 Windows의 Virtual Machine Manager(VMM)에 의해 유지된다.