메모리 관리

메모리의 역할

메모리가 하는 일이 과연 무엇일까? 문자 그대로 이해하자면 무엇인가를 기억하는 장치이다. 그러면 하드디스크나 플로피디스크도 데이터를 기억하는 장치인데 과연 무엇이 다른가 하는 의문이 생길 것이다.

컴퓨터를 하나의 공장으로 본다면 하드디스크는 물건을 쌓아놓는 창고라고 할 수 있다. 그러나 메모리는 창고가 아닌 CPU라는 중앙처리장치가 일을 하기 위해 물건을 올려놓는 작업대와 같다. 그러므로 하드디스크와 같이 많은 데이터를 저장하지 못하지만 컴퓨터가 작업을 편하게 하기 위해선 없어서는 안될 중요한 장치이다.

결국 메모리는 하드디스크에서 필요한 데이터를 가져오기도 하고 작업을 수행한 결과로 생긴 데이터를 다시 하드디스크에 저장하기도 한다. 물론 속도는 하드드라이브에 비해 메모리가 수천배 빠르다. 자동차나 비행기도 그러하듯 속도가 빠르면 비싸기 마련이다.

그러므로 메모리는 하드드라이브와 같은 보조기억 장치보다 훨씬 비싸다. 그래서 가난한 게이머의 메모리 양은 항상 모자라지 않는가.

메모리의 주소란?

도스는 메모리 하나하나에 주소를 할당한다. 그 이유는 간단하다. 프로그램이 실행되기 위해서는 프로그램이나 데이터가 메모리에 일정부분이 올려져야 한다. 그리고 프로그램 자신이 필요한 부분이 메모리의 어디에 있는지 알게 하려면 그 프로그램이 있는 곳의 위치를 기억하고 있어야 한다. 프로그램에게 위치를 기억하게 하는 방법은 위치마다 서로 구분될 수 있는 중복되지 않는 특정한 값을 주어 그 값을 기억하게 하면 될 것이다.

이 중복되지 않는 특정한 값을 바로 '주소(Address)'라 한다. 쉽게 생각해서 행정구역에 우편번호와 주소가 존재하듯이 컴퓨터의 메모리에도 주소가 존재하는 것이다. 마치 우체부가 배달할 우편물의 주소가 있어야 그 우편물을 전달할 수 있듯 메모리마다 주소를 할당해주는데 이것을 '어드레싱'한다고 한다.

메모리의 종류

여기서 말하고자 하는 메모리의 종류는 흔히 시스템 메모리가 8Mb니 16Mb닌 하면서 말하는 메모리의 위치와 역할에 따른 분류이다. 즉 하나의 메모리도 위치에 따라 그 하는 일이 다르기 때문이다.

1. 기본 메모리(Base Memory)

도스에는 640Kb 크기로 한계지어진 기본메모리가 있다. 이 기본메모리는 도스와 도스응용 프로그램이 실행되는 메모리로 메모리의 맨 처음부터 640Kb까지의 상용메모리(Conventional Memory)를 말한다. 또 도스상에서 대부분의 프로그램이 사용되고 있기 때문에 도스 메모리라고도 하며 특별한 메모리 관리자가 없이 사용자가 사용하기 때문에 사용자 메모리(User Memory)라고도 한다.

이렇게 640Kb의 한계가 지어진데는 컴퓨터가 발전하는 속도를 과거에 충분히 예측치 못한 연유에서다. 지금은 윈도우95의 등장으로 16Mb의 메모리도 많은 것이 아니라고들 하지만 처음 도스가 등장했을 때만 해도 설마 컴퓨터가 1Mb 이상의 메모리를 사용할 일이 있으리라고는 상상을 못했다. 그때의 프로그램들은 커봐야 70~80Kb 정도를 넘어가지 않았으므로 그 10배 이상을 설정한 것은 그때의 사정으로는 그리 잘못된 판단도 아닌 듯 하다.

결국 초기 CPU 모델인 8086CPU가 어드레싱할 수 있는 최대 크기인 1Mb에 맞추고 운영체제인 도스 역시 여기에 맞춰 1Mb만 관리할 수 있도록 설계된 것이다. 더군다나 메모리는 당시에 상당히 고가의 부품이었기도 했었다. 사실 누가 개인용 컴퓨터 산업이 이런 엄청난 속도로 발전할 줄 알았겠는가. 여하간 이런 배경에서 마이크로소프트사는 애초에 도스가 다룰 수 있는 메모리 크기의 한계를 1Mb로 설정하고 도스를 설계했고 1Mb중 아래쪽의 640Kb를 기본 메모리로 프로그램들이 이용하게 했다.

2. 상위메모리(UMA: Upper Memory Area)

이러한 기본메모리 외에도 도스가 사용하는 메모리는 640Kb와 1024Kb(=1Mb) 사이의 384Kb가 더 있다. 이 메모리는 기본메모리 위에 위치하며 비디오나 디스크 컨트롤러 등 여러 가지 구동장치를 쓸 수 있는 메모리 공간으로 이미 예약이 된 메모리이기도 하다. 이러한 예약된 공간을 상위메모리 영역(UMA: Upper Memory Area)이라고 하며, 이를 메모리 블럭이라는 구조적 관점에서 볼 때는 상위메모리 블럭(UMB: Upper Memory Block)이라고 혼용하여 말하기도 한다. 이 상위메모리 블럭은 하드웨어적인 확장을 위해 비워두었기 때문에 이 공간은 사용자의 환경에 따라 비어있는 메모리 블럭이 많으며 단일 연속공간에 위치하는 것이 아니라 다수의 불연속적인 공간을 사용하고 있어 메모리 최적화에 있어 중요한 곳이기도 하다.

도스 버전 5.0 이전까지는 이 비어있는 공간을 활용하지 못하다가 도스 5.0의 출현과 함께 386 이상의 CPU에서 이 공간도 활용할 수 있게 됨으로써 보다 많은 기본 메모리를 확보할 수 있는 길이 열렸던 것이다. CONFIG.SYS의 DOS=UMB 구문은 바로 이 UMB 메모리 부분을 활용하기 위한 것이다.

3. 연장메모리(Extended Memory)

연장메모리는 1Mb(1,024byte) 이상에 위치한 메모리로 286 이상의 기종에서 사용할 수 있다. 이 연장메모리를 사용하기 위해서는 도스나 도스 응용 프로그램이 보호모드로 전환한 후 데이터를 연장메모리에 저장하거나 읽어오고 다시 리얼모드로 돌아오게 된다.

이 연장메모리는 기본메모리보다는 못하지만 유용하며 SMARTDRV.EXE 파일이 연장메모리 영역에 자리잡고 드라이브의 구동을 돕게 된다.

이 연장메모리는 HIMEM.SYS에 의해서 관리되어지는데 HIMEM.SYS는 상위메모리를 포함한 640Kb 이상의 메모리를 관리하며 2개의 프로그램이 동시에 같은 주소상에 메모리를 사용할 수 없도록 교통정리를 하여준다.

이 HIMEM.SYS에 의해서 관리되어지는 메모리를 XMS(Extended Memory Specification) 메모리라 한다.

4. 하이메모리(HMA: High Memory Area)

기본메모리는 0~640번지까지의 주소를 할당받는다. 그리고 전술한 상위메모리 영역(UMA)은 641~1024번지까지의 주소를 할당받는다. 이후 1Mb의 메모리 한계를 넘어 연장 메모리가 시작되기 전에 1025~1088번지 사이의 첫 64Kb가 미사용 영역으로 존재하는데 이를 하이메모리 영역(HMA)이라고 한다.

HMA는 도스가 직접 액세스할 수 있는 1024K 주소 밖에 위치하나 21번째 주소 라인(A20 line)을 활성화시키는 특정기법에 의해 도스의 리얼모드에서 사용할 수 있다.

이 HMA를 직접 사용하는 프로그램은 거의 없으나 DOS=HIGH 문은 바로 이 영역에 도스 일부를 이동시켜 대략 40Kb~50Kb 정도의 기본 메모리를 더 확보하게 한다.

5. 확장메모리(Expended Memory)

요즘에 나오는 게임을 실행하려면 EMS 메모리를 더 요구하거나 아니면 EMS 메모리를 제거하라는 메시지를 보는 경우가 있다. 또 EMS 메모리보다는 XMS 메모리를 더 요구할 때도 있다. 바로 EMS 메모리는 확장메모리를 말하는 것이다. 이 확장메모리를 사용하려면 16Kb 크기를 가진 4개의 메모리 블럭으로 구성된 64Kb 크기의 페이지 프레임을 통한 스와핑 기법을 이용하여 시스템에 부가된 메모리를 도스가 액세스할 수 있는 1,024byte 이내의 주소로 매핑(Mapping)하여야 한다. 이 확장메모리는 LIM EMS(Lotus, Intel, Microsoft Expended Memory Specification) 규격에 따르는 메모리이다. 이 EMS는 EMS 3.2와 EEMS, EMS 4.0 등이 있으며 EMS 3.2는 8Mb 램을 사용할 수 있고 4.0은 32Mb 램을 사용할 수 있다.

메모리의 한계는 왜 생겼는가?

메모리의 한계란 도스나 도스 응용 프로그램이 기본메모리인 640Kb 내에서만 실행되는 것을 말한다. 이 한계는 마이크로 프로세서 즉 CPU의 어드레싱 능력에 의해서 생겨난 것이다.

마이크로 프로세서는 읽고 쓸 수 있는 메모리의 크기를 어드레스 라인(Address Line)으로 결정하는데 이 어드레스 라인은 마이크로 프로세서 칩과 데이터 버스간의 연결통로를 말한다. 하나의 어드레스 라인은 1비트(bit)의 어드레스를 처리할 수 있으며 마이크로 프로세서가 처리할 수 있는 메모리의 바이트(byte) 수는 2n(n은 라인의 수)이다. 즉 20개의 어드레스 라인을 가진 마이크로 프로세서는 220인 1,048,576(1Mb)바이트를 처리할 수 있다. 만약 20개가 넘는 어드레스 라인을 처리하려면 마이크로 프로세서는 보호모드를 사용하는데 도스는 보호모드에서는 작동을 할 수 없으므로 리얼모드로 전환되어야 한다. 결국은 도스가 처리할 수 있는 메모리는 1Mb가 되며 이는 도스가 영원히 풀지 못하는 문제로 남게 되었다.

그래서 요즘에 나오는 윈도우95는 이러한 도스의 한계를 없애버려 차세대의 운영체제로 각광을 받고있는 이유 중의 하나인 것이다.

메모리에 관한 용어들

1Kb

메모리에서의 1Kb는 1,000바이트가 아니고 1,024바이트이다. 그리고 바이트(byte)는 컴퓨터가 이해할 수 있는 가장 작은 단위인 비트(bit)를 8개 묶은 것을 말한다.

XMS(eXtened Memory Specification, 연장메모리 규격)

LIM(Lotus, Intel, Microsoft)에 의해 제정된 메모리 관리 규약으로 XMS는 EMS처럼 페이지 방식을 이용하는 것이 아니라 필요한 만큼 메모리를 할당하여 사용하기 때문에 특히 대용량의 크기를 갖는 프로그램을 사용하는 경우 EMS보다 우수한 성능을 발휘한다. 윈도우 3.×용 응용 프로그램들이 XMS를 지원하고 있기 때문에 사용자들은 보다 쉽게 많은 메모리 영역에서 작업할 수 있다.

EMS 3.2

로터스, 인텔, 마이크로소프트 3개의 회사가 최초로 만든 확장메모리에 관한 규격이다. 그래서 LIM Standard라고도 하며 UMB 영역에 위치한 페이지 프레임을 통하여 한 번에 64Kb의 메모리를 처리할 수 있다.

EEMS

Enhanced EMS의 약자로 AST, Quardram, Ashton Tate 3개 회사에 의해서 개량되어진 EMS 규격이다. 특징은 기본메모리 영역에 페이지 프레임을 설치할 수 있고 단일 REAL ALTERNATE MAP을 지원한다.

EMS 4.0

EMS3.2와 EEMS 규격을 통합한 확장메모리 규격이다. 복수의 REAL ALTERNATE MAP을 지원한다.

HIMEM.SYS

연장메모리를 관리하는 프로그램으로 응용 프로그램들이 동시에 같은 영역의 연장 메모리를 사용하지 못하게 한다.

SMARTDRV.EXE

디스크 캐시 프로그램으로 메모리(RAM)와 디스크 간의 속도 차이를 극복하기 위하여 메모리의 일부를 임시 기억장소로 할당하여 전체적인 시스템의 속도를 향상시키는 일련의 기능을 수행하는 프로그램이다.

매핑(Mapping)

물리적인 메모리의 주소에 가상 메모리 주소를 배정하는 기법

스와핑(Swapping)

가상 기억장치나 보조 기억장치에서 새로운 페이지를 가져와 주기억 장치내에 있는 페이지를 바꾸는 것

페이지 프레임

EMS를 사용하는 프로그램이 매핑을 하기 위해 처리하는 메모리 영역으로 16Kb 크기를 가진 4개의 영역으로 구성하는 것

보호모드

286 이상의 기종에서 연장메모리를 직접 처리할 수 있는 모드

리얼모드

모든 인텔 프로세서가 일반적으로 지원하고 있고 도스가 유일하게 직접 지원할 수 있는 모드

데이터 버스

시스템의 각 장치 사이에 데이터를 주고받는 통로를 말한다. 예를 들면 CPU와 하드디스크나 아니면 VGA카드와 모니터간의 데이터를 주고받는 데이터 통로 등이다

EMM386 잘 사용하기

메모리 확보의 기초

메모리 관리를 위해 386Max 혹은 QEMM386 같은 메모리 관리 프로그램을 많이 스지만 도스에서 기본으로 제공하고 있는 메모리 관리자들만 잘 활용해도 사실 웬만한 메모리 문제는 모두 해결 가능하다. 자 그럼 도스에서 기본 메모리를 확보하기 위해 어떻게 해야 하는지 몇가지 용어와 파일의 기능에 대한 개념을 386 이상의 CPU에서 MS DOS 6.2 버전을 중심으로 정리해 보자.

HIMEM.SYS와 EMM386.EXE

컴퓨터의 눈부신 발전으로 기존 도스에서 요구하는 RAM 1Mb 가지고는 프로그램 구동의 한계를 느끼자 그 이상의 메모리를 쓰기 위해 인텔, 로터스, 마이크로소프트사가 만나 EMS(Extended Memory System: 연장메모리)라는 규약을 정하게 되었고 이 규약에 따라 도스에서는 메모리를 늘려 쓸 수 있게 해주는 HIMEM.SYS와 EMM386.EXE라는 메모리 관리자를 도스 5.0부터 제공하기 시작했다.

그렇다면 이들의 역할은 무엇인가. 1Mb 이상의 메모리를 사용하기 위해서는 그 메모리를 인식하여 활용할 수 있도록 규약에 따라 만들어진 프로그램의 도움이 필요하다. 아무리 16Mb를 설치하더라도 이들 프로그램의 도움없이는 설치된 메모리를 인식하지 못하는 것이다. 연장 메모리 관리자인 HIMEM.SYS는 연장메모리의 한 블럭을 정해진 규약인 64Kb 크기로 나누어 같은 블럭을 서로 다른 2개의 프로그램이 동시에 차지하고서도 충돌하지 않도록 정리하는 역할을 한다.

그리고 EMM386.EXE의 역할은 무엇인가. 기본 메모리에서 우편번호를 매기듯 메모리 번지를 할당하는 것처럼 연장메모리 역시 나름대로 메모리 관리 방식이 있어야 할 것이다. 페이지 프레임이라고 불리는 64Kb의 메모리 구역을 16Kb 크기의 블럭으로 잘라 순차적으로 나누어주는 방식을 사용한다. 이런 일을 매핑(mapping)이라고 하는데 바로 EMM386.EXE의 역할이다.

더 이상은 필요 이상의 전문적인 내용이라 여겨지므로 그 역할에 관해서는 그만 다루기로 하고 마지막으로 이 명령어들이 CONFIG.SYS에서 기본적으로 어떻게 구현되는지 알아보자.

우선 DEVICE=C:\DOS\HIMEM.SYS라는 문장이 모든 DEVICE 구문에 앞서서 위치하도록 해야 한다. 그래야 다른 디바이스들이 연장메모리를 이용할 수 있기 때문이다.

그렇다면 디바이스란 무엇인가. 컴퓨터에는 사운드 카드라던가 CD-ROM 드라이브 같은 여러 가지 주변기기들이 설치된다. 이들 장치는 하드웨어이고 이들 하드웨어를 움직이게 하기 위해서는 하드웨어 장치에 적절한 규칙들을 주고 이에 따르도록 해야 할 것이다. 이 역할을 하는 소프트웨어가 바로 디바이스들이고 이런 디바이스는 반드시 DEVICE 구문에 의해 실행된다.

그 다음으로는 EMM386.EXE를 설치해야 한다.

DEVICE=C:\DOS\EMM386.EXE라고 CONFIG.SYS에 써주면 된다.

자 이렇게 하면 메모리 관리의 기본은 끝나게 된다. 즉

DOS=HIGH, UMB

DEVICE=C:\DOS\HIMEM.SYS

DEVICE=C:\DOS\EMM386.EXE

이렇게 간단한 3줄의 문장을 CONFIG.SYS에 추가 입력함으로써 기본 메모리를 보다 많이 확보하고 기본메모리 외에 연장메모리를 활용할 수 있는 바탕을 마련한 것이다. 이것들의 스위치와 여타 구문들을 살펴서 메모리를 마지막까지 짜내보도록 하자.

메모리 짜내기

자 그럼 이제 HIMEM.SYS와 EMM386의 스위치들을 알아보고 이들을 활용해 어떻게 보다 많은 메모리를 확보할 수 있는지 알아보자.

HIMEM.SYS는 메모리와 관련된 중요한 스위치가 별로 없는데 그중에 /MACHINE: xxxx 스위치는 컴퓨터가 'HMA' 영역을 사용할 수 있도록 하는 요소인 'A20 handler'를 시스템에 따라 지정하는 스위치이다. 만약 HIMEM.SYS를 설치하고 난 뒤에 'A20 handler' 에러가 발생하면서 설치가 되지 않는 경우는 각 시스템에 맞는 값을 적어서 재설치하면 된다. 각 시스템에 따른 정보는 도스 도움말의 'HIMEM.SYS' 항목을 보면 된다.

또한 메모리 확보와는 상관이 없으나 부팅시 속도를 조금이라도 올리고 싶다면 HIMEM.SYS에 'TESTMEM:OFF' 스위치를 주고 부팅시 메모리 검사를 하지 않고 빠르게 부팅할 수 있으며 'SWITCHES=/F'를 주면 부팅시 대기 시간을 줄여 부팅을 빠르게 한다.

자 이젠 EMM386.EXE의 스위치 중에서 'NOEMS'의 역할은 무엇인지 알아보자. 이는 EMS 메모리를 사용치 않고 XMS 메모리만 사용할 경우의 옵션인데 XMS가 더 빠르기도 하고 요즘 대부분의 프로그램은 EMS를 사용치 않는다. 그리고 나서 자신의 비디오가 컬러라면 뒤에다 'I=B000-B7FF'를 추가한다. 이 스위치는 단색 텍스트를 위해 예약된 버퍼의 주소인데 이를 컬러에서는 사용치 않는다. 이 스위치를 써주면 쓰지 않고 있는 메모리 공간을 쓸 수 있는 메모리라고 컴퓨터에게 알려준다. 이 옵션의 한가지 단점은 도스의 프로그램에서 슈퍼 VGA 모드를 사용하지 못하는 것이다. 즉 표준 VGA 모드만 사용가능하다. 허큘리스 카드 사용자라면 'I=B800-BFFF'를 스위치로 덧붙인다.

이와는 반대로 'X=????-????' 스위치가 있는데 이것의 역할은 기본적으로 포함되는 메모리 영역을 지정하여 컴퓨터로 하여금 쓰지 않고 예약해 두어 다른 프로그램이 쓰도록 하는 것이다.

그 외의 옵션으로는 'HIGHSCAN'이 있다. 'HIGHSCAN' 스위치가 사용되면 시스템 롬을 메모리 주소 F000:000부터 검색해서 시스템 롬이 중복되어 있으면 '32Kb'의 상위메모리를 더 확보한다.

그러나 이 스위치는 'EMM386.EXE'로 하여금 'UMB' 영역을 공격적으로 검색해 확보하려 하므로 이때 무리가 발생할 수가 있어 다른 응용 프로그램들과 충돌이 발생할 소지가 많다.

데이터 베이스 프로그램이나 스프레드 시트 중에 그런 프로그램이 많은데 만약 자신의 응용 프로그램중에 EMS 메모리를 요구하는 것이 있다면 'NOEMS' 대신에 'RAM' 스위치를 추가해야 한다. 이 스위치의 단점은 EMS 메모리를 위해 64Kb의 페이지 프레임 영역을 사용하기 때문에 NOEMS 스위치보다 64Kb이 적은 메모리 영역을 제공하게 된다. 그러니까 이 스위치를 추가하면 기본 메모리 위쪽에 활용가능한 공간이 64Kb만큼 줄어드는 것이다. 그러나 응용 프로그램이 요구하면 어쩔 수 없다.

이때 응용 프로그램이 활용가능한 EMS 메모리를 직접 수치로 지정해놓아도 되지만 'AUTO'라는 스위치를 주면 EMM386.EXE가 응용 프로그램이 요구할 때마다 자동으로 XMS를 EMS로 전환해주므로 일일이 지정해 줄 필요없이 편하다.

그외에 'MIN=?'라는 스위치가 있는데, 이 스위치는 '?'에 부분에 지정한 만큼 항상 EMS가 쓰도록 예약해두게 하는 스위치다. 이 스위치에 최소값 '0'을 지정하면 EMS를 위해 아무런 메모리도 예약해두지 말라는 스위치가 되므로 EMS와 XMS를 둘다 사용하면서 가장 많은 XMS를 확보하고 싶을 때 유용한 스위치가 되겠다.

그외에는 'FRAME=????' 형식의 스위치가 있는데 전술했듯이 EMS를 쓰면 64Kb의 페이지 프레임 영역을 사용하게 되는데 이 영역이 보통 D00h 주소부터 시작된다. 일반적으로 개인용 컴퓨터에서 E00h 부분부터는 사용되지 않는 공간이다. 이 공간에다 페이지 프레임을 옮겨주면 64Kb를 다시 쓸 수 있다. 그러나 이는 시스템마다 다르므로 만약 'WARNING: Option ROM or RAM detected within page frame'이라는 에러 메시지를 만나면 제거해야 한다.

자 이정도면 중요한 스위치는 다 검토한 것 같다.

이들 스위치를 적절히 사용하면 PC마다 조금씩 차이가 나겠지만 기본 메모리가 610Kb 이상은 나올 것이다. 이 정도라면 게임을 실행시키는데 충분하다.

만약 여기에서 좀더 메모리를 짜내고 싶다면 도스에서 제공하는 'MSD'를 이용할 수 있다. MSD를 실행시켜 Memory 항목을 보면 'Possibly Available'이란 영역이 있다. 원래는 예약된 공간인데 실제로는 사용되지 않고 있는 것처럼 보이는 공간이란 의미이다. 이 영역이 있다면 그 옆에 표시된 주소를 확인해 EMM386.EXE에다 'I=xxxx-xxxx' 스위치를 사용해서 추가한다. 초기메뉴 중에 'Utilities'를 선택한 후 'Memory Block Display...' 항목을 보면 보다 자세하게 알 수 있을 것이다.

자 이제 이렇게 해서 나온 CONFIG.SYS의 결과물들을 몇가지 예로 들어보자.

DEVICE=C:\DOS\HIMEM.SYS /TESTMEM: OFF

DEVICE=C:\DOS\EMM386.EXE RAM 2048 MIN=0

DEVICE=C:\DOS\EMM386.EXE RAM 2048 FRAME=E000

DEVICE=C:\DOS\EMM386.EXE NOEMS I=B000-B7FF HIGHSCAN

메모리배신의 끝

이제 마지막으로 HIMEM.SYS와 EMM386.EXE 이외의 구문으로 기본 메모리를 확보하는 방법을 알아보자.

우선 'BUFFER' 항목을 줄이자. 버퍼 하나당 차지하는 기본 메모리 양은 512바이트이다.

디스크 캐시 프로그램을 설치해서 사용한다면 이 값을 5~6 정도로 줄인다. 버퍼가 하는 일이나 캐시가 하는 일이 중복되기 때문이다. 'FILES 구문은 한거번에 열어놓고 사용할 수 있는 파일의 개수를 설정하는 것인데, 데이터베이스를 관리하는 특별한 경우가 아니라면 한꺼번에 40개 이상의 파일을 열어놓을 일이 별로 없으므로 그 이상을 설정할 필요가 없다. FILE 하나당 50바이트의 메모리를 차지한다.

그리고는 'FCBS=1.0'과 'STACKS=0.0'이라는 구문을 추가한다. 파일 제어 블럭과 하드웨어 인터럽트를 관리하기 위한 메모리 할당에 관련된 명령인데 이것이 어떤 역할을 하는 것보다 중요한 것은 이것 역시 메모리를 잡아먹는다는 사실이다. FCBS는 과거 도스버전에서 사용되던 자료구조를 위한 구문이고 STACK 구문 역시 현재 별반 필요없다. 설치하고 'Stack overflow' 에러가 나는 경우가 아니라면 문제없다.

이렇게 함으로써 STACK 구문에서 약 2Kb, FCBS 구문에서 약 500 바이트의 메모리를 더 확보할 수 있다.

마지막으로 'LASTDRIVE' 구문에서 자신의 마지막 드라이브가 D라면 'LASTDRIVE=D'를 써준다. 컴퓨터가 아무것도 써주지 않으며 알아서 E를 잡는데 이렇게 함으로써 E가 아니라 D라고 지정해줌으로써 176 바이트를 절약할 수 있다.

이런 세팅이 끝났다면 모든 'DEVICE' 명령을 'DEVICEHIGH' 명령으로 고쳐서 기본메모리 위의 상위 메모리로 디바이스가 올라가도록 하고 AUTOEXEC.BAT에서는 모든 램상주 프로그램 앞에 'LOADHIGH'를 붙인다. 램상주라는 말은 프로그램의 일부 또는 전부가 메모리상에 항상 올라가서 실행되는 프로그램을 말한다.

이때 상주 크기가 큰 프로그램부터 설치하는 것이 좋다. 실제 프로그램의 크기가 크더라도 반드시 상주 메모리의 크기가 큰 것은 아니므로 상주 크기는 도스 6.x 버전부터 제공하고 있는 'MEMMAKER.EXE'를 실행하면 'MAMMAKER.STS'라는 아스키 문서파일이 생성되는데 'MaxSize='이라는 항목이 있다. 이 부분이 바로 상주시 최대크기를 나타내주는 것이므로 이 부분을 확인하여 큰 것부터 설치하면 된다.

이렇게 생성된 config.sys의 예를 들어보자.

CONFIG.SYS 예

SWITCHES=/F

DOS=HIGH, UMB

DEVICE=C:\DOS\HIMEM.SYS/TEXTMEM:OFF

DEVICE=C:\DOS\EMM386.EXE NOEMS I=B000-B7FF HIGHSCAN

혹은

DEVICE=C:\DOS\EMM386.EXE RAM 2048 MIN=0

DEVICEHIGH=C:\WINDOWS\MOUSE.SYS

DEVICEHIGH=C:\DOS\ANSI.SYS

STACKS=0,0

FCBS=1,0

BUFFERS=5,0

FILES=40

이제 MEM/C/P로 자신의 메모리를 확인해보라.

도스의 배신은 대부분 여기서 끝나는 것이다. 다시는 도스에게 배신당하지 않을 것이다. 그리고 게이머들은 메모리 때문에 골치아픈 일은 없을 것이다.

컴퓨터의 구조

컴퓨터의 구조는 생각 외로 아주 간단하다.

'CPU'라 불리우는 중앙 처리 장치가 있고 CPU에게 데이터를 직접적으로 전해주는 '메모리'라는 것과 이 메모리를 통해 CPU와 데이터를 주고받고자 하는 '입출력 장치'(하드디스크, 프린터, 모니터, 마우스 등)가 있다. 여기서 중요한 일반적 사실은 CPU는 메모리가 전해주는 데이터만을 이용한다는 것이다. 즉, 메모리는 CPU에게 데이터를 주고 CPU가 처리한 데이터를 가지고 있으면서 필요로 하는 주변 장치들에게 데이터를 제공하는 역할을 하는 것이다.

메모리의 종류

그러면, 이제부터 본격적으로 메모리의 종류에 대해 알아보도록 하자. 밑에 설명된 용어와 그 뜻들은 반드시 알아야 하는 것들은 아니고 참고로 알아두면 좋을 것이다.

RAM(Random Access Memory: 임의 액세스 기억장치)

우리가 흔히 '램'이라고 부르는 것이다. 데이터를 읽고 쓸 수 있지만 전원이 끊기면 저장된 내용도 모두 사라지므로 전원이 끊기기 전에 저장된 내용을 하드디스크 등의 보조 기억 장치에 저장해야 한다.

ROM(Read Only Memory: 읽기 전용장치)

롬은 위의 램과는 달리 한번 기록한 데이터는 전원이 끊겨도 지워지지 않는 특성이 있다. 그러나 램과 롬의 장점을 모두 살려서 쓰고 읽을 수 있어서 전원이 끊겨도 기록한 데이터가 지워지지 않는 것도 있다.

기본 용어의 개념 잡기

컴퓨터와 메모리는 취급할 수 있는 데이터의 형태가 '0'과 '1' 뿐이라는 사실은 이미 널리 알려진 사실이다. 엄밀히 말해서 0과 1은 전압의 높고 낮음의 차이로 표현된다. 하나의 0 또는 1을 '비트(bit)'라고 하며 8개의 비트를 '바이트(byte)'라고 한다.

메모리는 주소 또는 '어드레스(address)'라는 단위로 나뉘어져 있어서 데이터를 쓰고 읽을 때는 언제나 '주소'를 사용한다. 여기서는 메모리를 어떻게 나누며(나뉘어지는 주소), 그 명칭은 어떻게 다르게 불리우는가에 주의를 하며 보는 것이 좋다.

기본 메모리(Conventional Memory)

메모리의 0Kb부터 640Kb까지의 부분, 필수적인 DOS 프로그램들과 사용자가 사용하면서 실행시키는 프로그램들이 들어간다.

상위메모리(Upper Memory)

640Kb부터 1024Kb(1Mb)까지의 DOS가 사용하는 부분. 보통 여러가지 장치 구동 파일(마우스 등)을 넣어둔다.

연속확장 메모리(Extended Memory 또는 XMS)

메모리의 1Mb 이상의 부분. 메모리가 8Mb라면 7Mb(8-1=7)가 연속 확장 메모리인 것이다.

중첩확장 메모리(Expanded Memory 또는 EMS)

메모리의 1Mb 이상의 부분. 위의 연속 확장 메모리와 같은 영역을 말하는 것이지만 메모리를 사용하는 방법이 연속확장 메모리에서와는 다른 방법을 사용하기 때문에 구별하기 위해서 '중첩확장 메모리'라는 다른 이름을 쓰는 것이다.

하이메모리 영역(High Memory Area 또는 HMA)

1Mb 이상의 부분에서 처음 64Kb의 부분. 즉, 1024Kb부터 1088Kb까지의 부분이다.

* 메모리의 종류에 관한 자세한 내용은 뒷부분에서 설명하겠습니다.

MEM의 사용

여기서 컴퓨터의 현재 메모리 상태가 어떤가 보는 방법 하나를 소개하겠다. DOS 프로그램 중에 MEM이라는 것이 바로 그것이다. 또 그외에 사용가능한 옵션은

C:\>MEM/P: 현재 메모리에 들어가 있는 프로그램들을 출력한다.

C:\>MEM/D: 프로그램과 함께 설치된 장치구동 파일들을 출력한다.

C:\>MEM/C: 기본 메모리에 들어가 있는 프로그램들과 XMS, EMS 메모리들의 상태 등이 출력된다.

처음부터 마지막 5번째 줄까지 내용은 기본 메모리 640Kb 안에 들어가 있는 프로그램들의 이름과 크기, 그리고 남은 메모리의 크기를 알려준다.

그리고, 마지막 4줄은 연속 확장 메모리인 XMS의 크기 (EMM386.EXE를 사용해 중첩 확장 메모리를 사용했다면 EMS의 크기도 나타날 것이다)와 HMA가 존재하는지를 알려준다.

용어 ABC

PROM(Programmable ROM)

공장에서 제품으로 출하된 후 최초의 한 번만 램처럼 그 내용을 기록할 수 있고 기록 후에는 롬처럼 내용을 변경할 수 없는 ROM.

EPROM(Erasable and Programmable ROM)

강한 자외선을 쬐거나(UV-EPROM), 전기적으로(EEPROM) 기록된 내용을 지울 수 있는 롬. 전원이 끊겨도 그 내용은 유지된다.

SRAM(Static RAM)

한 번 기록된 데이터에 대하여 전기공급이 계속되는 한 재생작업(refresh: 내용을 보존하기 위해 일정시간마다 메모리의 모든 부분에 전기적 자극을 주는 것)이 필요없이 그 내용을 유지하는 램.

DRAM(Dynamic RAM)

기록된 데이터에 대해 일정시간 간격으로 재생작업을 해주어야 하는 램. SRAM보다 집적도(일정한 넓이에 얼마나 많은 회로를 넣었는가)가 크고 속도가 빠르다.

추가적으로 메모리와 관련된 몇 가지의 용어에 대해 더 알아보도록 하자.

TTL(Transister Transistor Logic)

반도체 제조공법에 따른 종류의 하나로, 속도가 빠르고 외부의 전기 충격에 강한 장점을 가지고 있다.

CMOS(Complementary Metal Oxide Semiconductor)

반도체 제조공법에 따른 종류의 하나로 TTL보다 동장속도는 늦으나 집적도가 높고 소비전력이 낮은 장점을 가지고 있다.

바이오스(BIOS: Basic Input Output System)

흔히 롬 바이오스(ROM BIOS)라 부르는 것이 있다. 이것은 컴퓨터가 원초적으로 입출력을 행할 때(모니터, 프린터, 디스크와의 입출력 등) 필요한 일련의 절차들을 미리 정의해 롬 속에 담아두고 있는 것을 말한다. 컴퓨터는 전원을 켤 때나 입출력을 행할 때 롬 바이오스 속에 정의된 절차를 수행하며 롬 바이오스의 일부를 메모리에 넣어둔다.

캐시 메모리(Cashe)

하드디스크와 일반적인 램의 속도차이는 세발자전거와 자동차의 차이라 할 수 있다. 그러나 일반적인 램의 속도도 CPU의 속도에 비하면 자동차와 비행기만큼의 차이가 난다. 아주 속도가 빠른 램을 사용하면 CPU와의 속도차를 줄일 수는 있으나 이러한 램의 가격은 속도가 빠를수록 비싸서 8메가니 16메가니 하는 주기억장치의 양을 채우기에는 그 비용이 만만치 않다. 그래서 고안해낸 것이 CPU와 주기억장치인 일반 메모리 사이에 존재하는 캐시 메모리인 것이다. CPU의 속도에 비해 느린 메모리의 속도를 보완하기 위해 CPU보다 느리고 일반 메모리보다는 빠른 적은 양의 캐시 메모리를 이용하여 데이터의 처리속도를 향상시킨 것이다.

버퍼(Buffer)

메모리를 사용하는 방법의 일종으로 속도가 빠른 장치(CPU, 램 등)와 상대적으로 속도가 느린 장치(프린터, 모니터 등) 사이에 존재하여 속도가 빠른 장치에서 데이터가 처리되는 시간을 기다리는 것을 최소화하는 방법이다. 대표적인 예로 프린터 내에 존재하는 버퍼를 들 수가 있다. 10장의 문서를 프린트할 때 CPU는 프린터에게 프린팅 명령을 주게 되는데, 이때 버퍼가 없다면 CPU는 문서 10장의 프린팅 명령을 문서 한장한장이 프린트될 때까지 기다렸다가 프린터에게 명령을 주어야 하지만, 버퍼가 있을 경우 10장의 프린팅 명령을 한번에 프린터 버퍼에 넣고 다른 작업을 수행할 수가 있으니 더 효율적인 것이다.

쉐도우 램(Shadow RAM)

컴퓨터가 켜지고 난 후 주 메모리의 일부를 쉐도우 램으로 지정하고 속도가 느린 롬의 내용을 쉐도우 램에 담아 처리속도의 향상에 도움을 주는 방법이다.

레지스터(Register)

CPU 내부에 존재하는 아주 작은 크기의 메모리라고 생각하면 된다. CPU가 여러 가지 계산의 중간 결과값을 가지고 있거나 프로그램을 실행하면서 다음에 실행할 곳의 위치를 기억하는 등의 중요한 역할을 한다.

CONFIG를 내손으로 주무르자!

CONFIG.SYS

DOS란 운영체제의 하나로 개인용 컴퓨터를 작동시키는데 없어서는 안될 프로그램들의 집합이다. 컴퓨터가 작동하기 위해서 필수적으로 IO.SYS와 MSDOS.SYS, COMMAND.COM 등의 파일이 있어야 한다. 앞으로 나오는 CONFIG.SYS 파일이나 AUTOEXEC.BAT 파일은 없어서는 안되는 파일은 아니지만 사용자의 컴퓨터를 가장 알맞은 환경으로 꾸며주는 중요한 파일이다. 위의 파일들은 모두 C:\라는 루트 디렉토리 밑에 존재한다. 이중에서 IO.SYS와 MSDOS.SYS 파일은 파일의 속성이 감추어져 있으므로 일반 dir 명령으로는 볼 수가 없고, dir /a:h란 추가적인 옵션을 주어야 모니터에 출력된다.

부팅(Booting)

컴퓨터를 켜면 사용자가 사용할 수 있는 DOS 프롬프트 화면이 나오기 전까지 컴퓨터 혼자 열심히 무언가를 하는 것을 볼 수 있다. 이 과정을 '부팅'이라 한다.

부팅 디스켓 만들기

메모리를 최상의 상태로 만들기 위해서는 CONFIG.SYS 파일과 AUTOEXEC.BAT 파일을 바꾸면서 컴퓨터를 재부팅시켜야 하는데, 이때 조금이라도 잘못이 있어서 컴퓨터가 켜지지 않는 경우가 생길 수 있다. 이때를 대비하여 플로피 디스켓에 부팅할 때 필요한 DOS 파일을 넣어서 디스켓으로 부팅을 할 수 있는 것이 부팅 디스켓이다.

부팅 디스켓을 만드는 가장 기본적인 방법은 디스켓을 드라이브에 넣고 시스템 디스크로 포맷을 하는 것이다. 명령은 'C:\FORMAT A:/S'이다. 이때 나오는 화면에서 System Transferred라는 메시지가 출력된 것을 볼 수 있다. 이 과정에서 부팅에 필요한 IO.SYS와 MSDOS.SYS, COMMAND.COM 3개의 파일이 디스켓으로 복사되는 것이다. CONFIG.SYS와 AUTOEXEC.BAT 파일은 디스켓에는 없다. 이 2개의 파일은 포맷이 끝나고 사용자가 직접 작성하거나 복사를 해 넣어야 한다.

롬 바이오스

롬 바이오스라는 것에 대해 간단히 언급하고 계속 내용을 이어나가는 것이 좋을 것 같다. 컴퓨터를 켰을 때 '뜨뜨뜨뜨…'하는 메모리 검사 소리 후 화면에 'Press <DEL> if you want to run setup/extd setup'이라는 메시지가 뜨는 것을 본 기억이 있을 것이다. 이때 <DEL>키를 누르면 롬 바이오스의 메뉴 화면이 나타난다. 자세한 메뉴 화면은 롬 바이오스를 제작한 회사에 따라 틀리기 때문에 공통적인 기능만 언급하도록 하겠다.

우선, 컴퓨터 시스템이 가지고 있는 정보를 변경할 수 있는 STANDARD SETUP이 있다. 시스템의 날짜, 시간, 총 메모리, 디스크 드라이브의 정보 등이 있고 변경할 수가 있다. 갑자기 그 내용이 바뀌지 않는 이상 변경할 필요가 없다.

다음으로 조금더 자세한 사항을 변경할 수가 있는 ADVANCE SETUP이 있다.

주로 시스템이 작동하는 방법에 대해 변경할 수 있는데, 컴퓨터가 부팅될 때 부팅 디스크를 A: -> C: 순으로 찾을 것인가 아니면 C: -> A: 순으로 찾을 것인가 등의 각종 선택사항이 있다.

이것 역시 특별한 일이 아니면 바꾸지 않는 것이 좋고 필요하다면 주위에 아는 사람의 도움을 받는 것이 좋다. 다음은 ADVANCE SETUP의 간략한 내용이다.

ABOVE 1MB MEMORY TEST

1MB 이상의 메모리를 테스트할 것인가를 결정

MEMORY TEST SOUND

메모리 테스트시의 소리 설정

<DEL> MESSAGE

부팅시 <DEL> 키를 누르라는 메시지의 출력 여부 결정

NUMERIC PROCESSOR TEST

수치프로세서 검사

FLOPPY SEEK AT BOOT

부팅시 A: B: 등의 플로피 디스크 드라이브를 검사할 것인가를 결정

BOOT UP SEQUENCE

부팅시 드라이브를 검색하는 순서

BOOT UP CPU SPEED

부팅시 CPU 속도 설정

다른 하나의 BIOS 기능은 Hard Disk Utility이다. 이곳에서는 하드 디스크의 포맷과 하드 디스크의 Interleave라는 값을 자동으로 설정하고 하드 디스크의 상태를 분석한다. 하드 디스크가 정상으로 작동하고 있는데 이곳에서 설정을 바꾸면 하드 디스크를 못읽는 경우가 생길 수 있으니 조심해야 한다. 이외에도 BIOS에 들어갈 경우 비밀번호를 설정할 수 있고 각종 칩들의 설정을 행할 수 있다.

다시한번 말하지만 '롬 바이오스'는 컴퓨터 시스템이 가지고 있어야 할 기본적이고 중요한 내용을 담고있는 곳이기 때문에 함부로 건드린다면 컴퓨터가 작동하지 않는 사태(?)도 감수해야 할지 모른다.

CONFIG.SYS 파일과 다중 부팅(MULTI BOOTING)

CONFIG.SYS 파일은 사용자가 컴퓨터를 사용하기에 앞서 무엇을(주로 메모리를) 어떻게 사용할 것인가를 결정해 주는 파일이다. 마우스를 사용하려면 마우스 구동 파일을, 메모리를 EMS로 쓰려면 EMM386.EXE 파일을 컴퓨터에게 알려준다. 아무리 메모리가 32Mb나 된다고 해도 이 파일의 설정상태에 따라 실행이 안되는 프로그램이 생길 수도 있으니 간단히 넘길 파일은 아니다. 그러나 CONFIG.SYS 파일은 컴퓨터가 부팅되면서(켜지면서) DOS의 로더에 의해 실행되는 것으로 사용자가 DOS 프롬프트 상에서 실행시킬 수 없다. 그래서 CONFIG.SYS 파일을 변경한 후에 그 결과를 알기 위해서는 컴퓨터를 다시 부팅시켜야 한다.

항상 다시 부팅시켜야 하는 불편을 조금이나마 줄여주는 것이 바로 '다중 부팅'이다. 이것은 컴퓨터를 켰을 때 미리 정해놓은 몇가지의 설정중에서 하나를 골라 부팅시키는 것이다.

다중 부팅 CONFIG.SYS 파일의 예

[MEMU]

MENUITEM=LAN

MENUITEM=WINDOWS

MENUITEM=EMM

MENUCOLOR=15, 1

MENUDEFAULT=WINDOWS, 5

[COMMON]

DOS=HIGH, UMB

FILES=100

BUFFERS=50

DEVICE=C:\WINDOWS\HIMEM.SYS

SHELL=C:\COMMAND.COM/P

LASTDRIVE=C

[LAN]

DEVICE=C:\WINDOWS\EMM386.EXE 1024 RAM

DEVICE=C:\LAN\PROTMAN.DOS/I:C:\LAN

DEVICEHIGH=C:\LAN\UBLOOP.DOS

DEVICEHIGH=C:\LAN\ELNK3.DOS

DEVICEHIGH=C:\LAN\UBTPS.DOS

INSTALL=C:\LAN\NETBIND.EXE

[WINDOWS]

DEVICE=C:\WINDOWS\EMM386.EXE NOEMS

DEVICEHIGH=C:\WINDOWS\MOUSE.SYS

[EMM]

DEVICE=C:\WINDOWS\EMM386.EXE 2048 RAM

CONFIG.SYS 파일의 명령어들

CONFIG.SYS 파일을 이해 못하더라도 이제부터 설명된 내용을 보고나면 이해할 수 있을 것이다.

[MENU] 문단

메뉴를 정하는 부분으로 이곳의 메뉴 이름과 [메뉴 이름]은 같아야 한다. 메뉴색을 정할 수 있고 MENUDEFAULT를 지정을 통해 아무 선택도 없으면 여기서 지정된 기본 설정 메뉴를 실행한다.

[COMMON] 문단

이곳에 지정된 것은 메뉴에서 무엇을 선택하더라도 실행된다. 즉, 모든 메뉴에서 공통으로 실행하는 사항이다.

DOS=HIGH, UMB

DOS가 HMA와 UMB를 최대한 활용하도록 한다. 기본 메모리에 들어갈 DOS를 HMA에 올리고 여러 가지 구동파일과 메모리 상주 프로그램을 비어있는 UMB에 올린다. 여기서 HMA를 사용하기 위해서는 HIMEM.SYS가 필요하고 UMB를 사용하기 위해서는 'EMM386.EXE'가 필요하다.

FILES=파일수

한 프로그램에서 동시에 취급할 수 있는 파일의 수를 지정한다. 너무 많은 수를 지정하면 기본메모리가 감소하는데 보통 30에서 40으로 하는 것이 적당하다.

BUFFERS=버퍼크기

메모리를 버퍼로 사용하며 그 크기를 지정한다. 이것도 너무 큰 크기를 지정하면 기본 메모리가 감소하므로 보통 20에서 30으로 한다.

SHELL=C:\COMMAND.COM /P /E: 크기

사용자가 입력하는 명령을 도맡아 해석할 명령 해석기를 저정한다. 주로 DOS의 COMMAND.COM이 지정되는데, NDOS 등의 다른 명령 해석기를 지정할 수도 있다. /P 옵션은 명령 해석기를 항상 사용하겠다는 의미이고, /E: 크기옵션은 명령 해석기가 필요로 하는 공간을 지정한 크기만큼 주겠다는 뜻이다. DOS 프롬프트상에서 COMMAND/?를 입력하면 도움말이 출력된다.

LASTDRIVE=C

드라이브명으로 사용할 이름이 C:까지라고 알려준다. 즉, A: B: C: 라는 3개의 드라이브명이 존재하게 되는 것이다. 드라이브나 CD-ROM을 더 장착한다면 Z까지 써도 관계없다.

DEVICE=C:\DOS\HIMEM.SYS

가장 중요할지도 모르는 명령으로 1Mb 이상의 메모리(HMA 포함)를 사용자가 사용할 수 있게 하는 명령어이다. CONFIG.SYS 파일내에서 다른 어떤 'DEVICE=…' 명령보다 먼저 설정해야 한다.

VICEHIGH=C:\DOS\EMM386.EXE 1024 RAM

UMB를 사용할 수 있게 하면서 XMS를 1024Kb만큼 EMS로 사용하겠다는 뜻이다. 1024 RAM 대신에 NOEMS를 써넣으면 UMB만을 사용하고 EMS는 사용하지 않겠다는 명령이 되니 적절히 사용하는 것이 좋다.

STACKS=스택 수, 스택 크기

컴퓨터가 프로그램을 실행하다가 잠깐씩 다른 일을 해야하는 경우가 있다. 이때를 대비한 공간이 스택으로 그 수와 크기를 지정하는 명령이다.

CONFIG.SYS 파일의 설정과 결과

CONFIG.SYS 파일을 다음과 같이 설정했을 경우와 이때의 메모리 결과를 보도록 하자.

NOEMS 옵션에 의해 EMS가 사용되지 않은 것을 볼 수 있다. 위에서 6번째 줄에 있는 SMARTDRV.EXE라는 프로그램은 디스크 캐시 프로그램으로 최대 1024Kb에서 최소 512Kb를 메모리에 할당하라는 명령이다.

위에서 설명된 CONFIG.SYS 파일의 명령들과 그 결과를 비교해 보기 바란다. 컴퓨터 내의 모든 변화에는 반드시 그 원인이 존재하기 마련이고, 그것을 어떻게 알아내느냐가 중요하다고 할 수 있다.

config.sys 예

DOS=HIGH, UMB

FILES=30

BUFFERS=20

DEVICE=C:\WINDOWS\HIMEM.SYS

DEVICE=C:\WINDOWS\EMM386.EXE NOEMS

DEVICE=C:\WINDOWS\SMARTDRV.EXE 1024 512

DEVICE=C:\MOUSE.SYS /Y

DEVICE=C:\DOS\SETVER.EXE

SHELL=C:\DOS\COMMAND.COM C:\DOS\ /P

STACKS=9, 256

AUTOEXEC.BAT 파일이란

AUTOEXEC.BAT 파일에 대해 알아보기에 앞서 상식적으로 알아둘 것은 ***.SYS로 이름이 붙여진 파일은 직접 DOS 프롬프트에서 키보드의 입력으로 실행되는 것이 아니라 프로그램에 의해 간접적으로 실행되는 파일이며 ***.BAT으로 이름이 붙여진 파일은 DOS 프롬프트에서 키보드의 입력으로 실행되는 파일이다.

여기에서 BAT는 영어로 BATCH라는 단어의 줄임말로 그 뜻은 [해야할 일들을 '한번에 몰아서 한다'는 뜻]이다. 배치 파일은 다른 실행 파일(***.EXE나 ***.COM으로 이름붙여진 파일)과는 다르게 그 내용이 문자로 구성되어진 문서 파일(보통 '텍스트 파일'이라고 부르는)과도 같은 구조로 되어있다. 그 내용은 DOS에서 사용자가 키보드로 입력할 내용들이다.

즉 사용자가 항상 DOS 프롬프트 상에서 키보드로 입력하는 명령들을 한번의 배치파일 실행 명령으로 수행하여 명령들을 일일이 입력해야 하는 번거로움을 줄인 것이다.

배치파일을 만드는 방법은 간단하다. DOS의 'EDIT.EXE'나 HWP에서 다음을 입력해보자.

md temp

cd temp

copy c:\*.*

dir/w

모두 입력한 후에 TEST.BAT라는 이름의 파일로 저장을 한다. HWP와 같은 워드프로세서의 경우는 저장방식을 ASCII 방식으로 해야 한다. 저장이 끝나면 TEST.BAT라는 파일이 생겼을 것이다.

이제 DOS 프롬프트에서 test라고 입력하고 <엔터>키를 치면 컴퓨터 혼자 무언가를 할 것이다. 만일 C:\DOS 디렉토리에서 이 파일을 저장하여 실행했다면 TEMP라는 이름의 디렉토리를 DOS 디렉토리 밑에 하나 만들고 C:\ 디렉토리에 있는 모든 파일들을 TEMP 디렉토리로 복사하며 dir/w 명령을 실행할 것이다.

AUTOEXEC.BAT 파일의 역할

AUTOEXEC.BAT 파일은 한마디로 말하면 사용자가 컴퓨터와 작업을 할 때 조금이라도 더 편하게 할 수 있도록 하는 파일이다. 가령 사용자가 컴퓨터를 켜고나면 매번 바이러스 검사 프로그램을 실행한다고 하자. 검사가 끝나고 나면 NCD를 쳐 HWP 디렉토리로 이동하여 HWP를 실행하여 일기를 작성한다고 할 때 이를 컴퓨터가 켜지면서 저절로 바이러스 검사를 하고 HWP를 실행하여 준다면 좋을 것이다. 이렇게 하기 위해서는 AUTOEXEC.BAT 파일의 끝부분에 다음의 내용을 추가하면 된다.

cd virus

v3 c:

scan c:

cd\

cd hwp

hwp

AUTOEXEC.BAT 파일의 명령어들

이제는 AUTOEXEC.BAT 파일에서 일반적으로 사용되는 명령어 몇가지를 알아보자.

@ECHO OFF

@ECHO ON 또는 $ECHO OFF를 쓸 수 있다. OFF를 하면 이후에 실행되는 명령어들이 화면에서는 글자가 보이지 않으면서 실행되고 ON을 하면 화면에 보이면서 실행한다.

즉 ON을 하고나서 v3res를 실행할 때는 화면에 C:\>v3res라고 입력되는 것이 표시되고 OFF를 하고나서 v3res를 실행할 때는 화면에 입력되는 것이 표시되지 않은 채 v3res가 실행되는 것이다.

SET PROMPT $P$G

DOS 프롬프트의 표시형식을 지정하는 것이다. 일반적으로 가장 많이 사용하는 것이 '$P$G'인데, 이것은 현재 드라이브명과 디렉토리 경로를 표시하고 끝에 '>' 기호를 첨가한다. 이 결과로 'C:\DOS>'나 'C:\WINDOWS\SYSTEM>'이 프롬프트로 표시되는 것이다. 이것은 프롬프트에서 'prompt $p' 'prompt $g'를 타이핑 해보면 알 수 있다. $p$g외에도 사용자가 임의로 정의해서 쓸 수 있다. 그 예로 prompt $p[CHJ]$g를 입력해보자. 그러면 화면의 프롬프트가 C:\[CHJ]>로 바뀌어 있는 것을 볼 수 있을 것이다. 이 명령은 컴퓨터의 기능에 전혀 영향을 미치지 않으므로 마음놓고 이것저것 입력해보면서 자신만의 프롬프트를 정해서 쓰는 것도 재미있을 것이다.

CLS

화면을 모두 지우는 DOS 명령어이다.

SET PATH=C:\;C:\DOS...;

AUTOEXEC.BAT 파일의 중요한 기능 중의 하나이다. PATH는 이어지는 통로라는 의미로서 사용자가 입력한 명령이 어느 통로를 통해 실행될 것인가를 지정하는 것이다. DOS는 사용자가 입력한 명령이 DOS의 내부 명령이 아니라면 현재 위치한 디렉토리내에서 그 명령 파일을 찾을 것이다. 현재의 디렉토리에 그 명령 파일이 없으면 화면에는 Bad command or file name라는 메시지가 표시될 것이다. 이것이 DOS가 명령을 실행하는 기본 원칙이다.

그러나 아마도 여러분의 컴퓨터에서는 NCD를 치면 언제나 NCD 화면이 뜨게 되어있을 것이다. 이것은 바로 SET PATH=... 명령에 NCD.EXE 실행 파일이 들어있는 C:\NORTON: 등의 디렉토리가 포함되어 있기 때문이다. 즉 DOS는 명령이 입력되면 SET PATH=디렉토리; 디렉토리; 디렉토리;... 등으로 설정된 디렉토리를 찾아다니며 입력된 명령 파일을 찾는 것이다. 여기서 ;(세미콜론)은 디렉토리를 구분하는 기호이다. 사용자가 명령을 입력했을 경우 앞에서 나온 AUTOEXEC.BAT 파일의 경우에는

DOS 내부명령 -> 현재의 디렉토리 -> C:\(루트 디렉토리) -> C:\DOS -> C:\VIRUS -> C:\NU -> C:\COMPRESS -> C:\UTILITY -> C:\WINDOWS의 순서로 명령 실행파일을 찾는다.

추가로 알아야 할 것은 PATH로 지정하는 디렉토리들도 메모리를 차지하며 기본적으로 할당된 메모리의 크기는 128바이트이다. 이것은 PATH=뒤에 쓸 수 있는 글자의 수가 128개라는 이야기이다. 이 크기를 늘리려고 한다면 CONFIG.SYS 파일내에 SHELL=C:\COMMAND.COM /P /E:256이라는 명령 옵션을 추가해야 하지만 가능하면 크기는 늘리지 않고 필요한 디렉토리만을 지정하는 것이 좋다.

SET...

DOS에게 PATH 이외의 설정을 알려주는 것이다.

AUTOEXEC.BAT 파일의 설정

AUTOEXEC.BAT 파일이 메모리에 주는 영향은 대부분 메모리 상주 프로그램들이다. 메모리 상주 프로그램이란 항상 메모리에 존재하여 언제라도 실행이 가능한 프로그램을 말한다. 그러므로 메모리 상주 프로그램을 많이 띄우면 띄울수록 메모리의 크기는 감소하는 것이다. 다음은 모두 메모리 상주 프로그램들이다.

SMARTDRV

디스크 캐시를 해주는 프로그램이다. 디스크를 읽고 쓰는 속도를 소프트웨어적으로 향상시켜주지만 그만큼 메모리를 차지하므로 득과 실이 있다. 메모리가 충분하다면 사용하는 것이 좋다.

V3RES

대표적인 메모리 상주 바이러스 예방프로그램이다. 이런 프로그램들은 항상 메모리에 존재하여 다른 프로그램들이 실행될 때마다 바이러스의 존재여부를 검사하므로 사용하는 것이 좋을 것이다. 하지만 여러 종류의 바이러스 예방 프로그램들을 모두 사용하는 것보다는 예방 바이러스의 개수가 가장 많은 프로그램 하나를 사용하는 것이 좋다.

DOSKEY

DOS에서 제공하는 프로그램으로 사용자가 입력했던 명령들을 기억했다가 다시 실행시켜주는 프로그램이다. 사용자가 컴퓨터를 사용함에 있어서 편리함을 주는 프로그램이므로 메모리가 충분할 때에만 사용하는 것이 좋다. 사용상의 편리냐 메모리의 확보냐 하는 문제는 사용자의 선택에 달려있다.

AUTOEXEC.BAT 파일이 메모리를 차지하는 비중은 얼마나 많은 메모리 상주 프로그램을 실행하였느냐에 달여있으므로 적절한 메모리 상주 프로그램을 사용할 때 메모리의 크기를 확인해가면서 각 사용자 나름대로 연구해야 할 것이다.

컴퓨터 사양별 메모리 설정 2(386, 8Mb~16Mb)

한마디로 몇가지의 프로그램을 제외하고는 쓰기에 그리 큰 무리는 없다고 할 수 있다.

속도

CPU의 속도는 별 무리없이 사용가능하다. 기타 주변장치중에서 하드디스크, 비디오 카드와 입출력 카드가 변수지만 요즘같은 그래픽 환경에서는 비디오 카드의 기능이 가장 중요하다고 할 수 있다. 그리고 이에 따라 버스방식이 중요할 것이다. GAME을 할 때나 WINDOWS를 사용할 때, 비디오 카드와 버스 방식에 따라 그 차이가 많이 날 수도 있으므로 관심을 둘 필요가 있다.

자세한 속도와 용량 드의 사항은 앞서 언급한 예와 그리 다를 것이 없으므로 생략하고 설정의 한 예를 들어 설명하도록 하겠다. 메모리를 사용하는 방법에는 XMS와 EMS의 2가지가 있으므로 기본적으로는 2가지의 설정이 있을 수 있다. 여기에 CD-ROM과 기타 GAME을 위해 필요한 메모리 설정이 추가될 수 있다.

DOS의 내부 명령과 외부 명령

내부 명령

DOS가 기본적으로 지원하는 명령으로 그 대표적인 예로 DIR을 꼽을 수가 있다. DIR은 DIR.COM이나 DIR.EXE 등의 실행파일이 존재하는 것이 아니다. 이것은 COMMAND.COM에서 기본적으로 지원하는 명령어이기 때문에 언제 어디서나 실행 가능하다. DIR 이외에도 COPY, RENAME, TIME, DATE, VER 등의 명령이 있다.

외부명령

COMMAND.COM이 지원하지 않는 명령으로 DOS 디렉토리 내에 실행파일로 존재한다. 지금 바로 DOS 디렉토리의 내용을 보면 알 수 있다. FORMAT, XCOPY, MEM 등이 있다. 이러한 외부 명령들이 언제 어디서나 실행가능하려면 AUTOEXEC.BAT 파일내의 PATH=... 명령에 DOS 디렉토리가 포함되어 있어야 한다.