HIMEM.SYS

도스박물관
Pc1412 (토론 | 기여)님의 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 구현):

  1. Port 92h Fast A20 Gate (386↑ 대부분)
  2. BIOS A20 루틴 INT 15h
  3. 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)에 의해 유지된다.

8. 같이 보기