HIMEM.SYS
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)에 의해 유지된다.