HIMEM.SYS와 EMM386으로 도스 메모리 관리하기

  도스는 640KB까지를 기본 메모리(base memory)로 별다른 설정 없이 쓸 수 있다. 몇몇 풀그림들은 삼국지3처럼 기본 메모리 공간을 아주 많이 요구하기도 하고, 기본 메모리보다 훨씬 많은 공간을 쓰기도 한다. 도스가 애초에 640KB보다 많은 메모리를 쓰도록 설계하지 않은 탓에 상위 메모리(Uppper Memory), 연속 확장 메모리(Extended Memory) 따위의 복잡한 메모리 구분이 생겨났다.

  도스의 메모리 구역을 구분하는 용어를 정리해 보면 다음과 같다.

  • BMS (Base Memory Specification; 기본 메모리 규격) : 640KB 이내의 기본 메모리
  • UMB (Upper Memory Block; 상위 메모리 구역) : 640KB~1MB 사이 메모리 영역
  • XMS (eXtended Memory Specification; 연속 확장 메모리 규격) : 1MB 이상 메모리 영역
  • HMA (High Memory Area; 고위 메모리 영역) : XMS의 첫 64KB
  • EMS (Expanded Memory Seicification; 중첩 확장 메모리 규격) : UMB와 XMS를 이용하는 확장 메모리

도스의 메모리 구분
도스의 메모리 구분

  기본 메모리 이외의 메모리 영역은 전체 메모리가 640KB 이상인 286(AT) 이상 기종에서 HIMEM.SYS, EMM386와 같은 관리자를 통하여 쓸 수 있다.


연속 확장 메모리(XMS)와 고위 메모리(HMA) 쓰기

  연속 확장 메모리(XMS) 관리자인 HIMEM.SYS는 CONFIG.SYS에서 XMS를 쓰는 다른 풀그림이나 장치보다 먼저 메모리에 띄우도록 해야 한다.
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH
  'DOS=HIGH'라고 하면 기본 메모리를 차지하는 도스 알맹이(커널)의 일부를 크기가 64KB인 고위 메모리(HMA)로 옮겨서 40KB쯤 되는 기본 메모리 공간을 아낄 수 있다.


상위 메모리(UMB)와 중첩 확장 메모리(EMS) 쓰기

  EMM386.EXE는 램 상주 풀그림을 올릴 수 있는 상위 메모리(UMB) 공간을 마련하거나, 드물게 몇몇 풀그림이 이용하는 중첩 확장 메모리 공간을 마련하는 역할을 한다. EMM386.EXE는 XMS 공간을 이용하므로 HIMEM.SYS 다음에 실행해야 한다.

상위 메모리(UMB)만 쓰기

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS
DOS=HIGH,UMB
  'NOEMS'는 중첩확장 메모리는 만들지 않고 상위 메모리(UMB)만 만들라는 선택사항이어서 가장 많은 상위 메모리를 확보할 수 있다. 'DOS=UMB'라고 하면 상위 메모리(UMB)를 도스의 메모리 자원으로 인식하여 상위 메모리에 램 상주 풀그림이 들어갈 수 있다. 'DOS=HIGH'와 'DOS=UMB'를 'DOS=HIGH,UMB'로 묶어 적었다.


중첩 확장 메모리(EMS)만 쓰기

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE EMS 1024
DOS=HIGH

  EMM386.EXE에 'EMS 1024'라고 붙이면 중첩 확장 메모리(EMS) 1024KB를 만들게 된다. EMS 크기를 붙이지 않으면 자동으로 256KB가 설정된다. EMM386.EXE가 상위 메모리(UMB)는 만들지 않으므로, 'DOS=UMB'를 붙이지 않았다.


상위 메모리(UMB)와 중첩 확장 메모리(EMS) 모두 쓰기

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM 1024
DOS=HIGH,UMB
  'DEVICE=EMM386.EXE RAM 1024'라고 하면 상위 메모리(UMB)와 중첩 확장 메모리(EMS) 1024KB를 모두 만들게 된다. 상위 메모리(UMB)에 EMS 페이지 프레임이 들어가므로, 'NOEMS'로 한 것보다 쓸 수 있는 UMB 용량이 64KB 적다.


램 상주 풀그림을 상위 메모리(UMB)에 올리기

  EMM386.EXE로 상위 메모리(UMB)를 만들어서 'DOS=UMB'라는 명령도 적었다면, EMM386.EXE 다음에 실행되는 램 상주 풀그림을 상위 메모리에 올려서 기본 메모리를 아낄 수 있다. config.sys와 autoexec.bat에서 실행문에 'DEVICEHIGH'나 'LOADHIGH'를 쓰면 된다.
DEVICE=C:\DOS\RAMDRIVE.SYS 1024 /E
→ DEVICEHIGH=C:\DOS\RAMDRIVE.SYS 1024 /E

C:\DOS\MOUSE.EXE
→ LOADHIGH C:\DOS\MOUSE.EXE

글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요

  1. 비밀방문자 2021/01/28 17:26 고유주소 고치기 답하기

    관리자만 볼 수 있는 덧글입니다.

  2. 나무 2022/02/09 20:13 고유주소 고치기 답하기

    감사합니다. 그럼 삼국지3을 실행할때 메모리가 부족하다고 나오는데 이를 해결하려면 어떻게 설정해야 되는지요? 32메가 램 쓰고 있습니다.

    • 팥알 2022/02/10 16:39 고유주소 고치기 답하기

      삼국지 시리즈는 640KB 이내의 기본 메모리를 유난히 많이 필요로 하는 게임입니다.

      위 글에 설명한 것처럼 기본 메모리에 들어갈 프로그램을 기본 메모리가 아닌 영역으로 옮겨서 기본 메모리를 아낄 수 있습니다.
      게임에 필요하지 않는 램 상주 프로그램을 줄이고, 조금이라도 메모리를 덜 먹는 프로그램을 골라 쓰는 방법이 있습니다.

      config.sys와 autoexex.bat를 고쳐 가며 게임을 실행해 보아야 알 수 있습니다.
      잘 되면 그냥 쓰면 되니 다행이지만, 잘 안 되면 어떤 프로그램들이 메모리를 얼마나 어떻게 차지하는지를 하나씩 살펴야 할 수 있습니다.
      도스 종류와 판(버전)에 따라서도 응용 프로그램이 최대로 쓸 수 있는 기본 메모리 용량 한계가 다릅니다.