1. 메모리(Memory) 란 ?
컴퓨터에서 `기억' 하는 능력을 갖고 있다는 것은 매우 중요합니다. 컴퓨터로 작업했던 모든 내용이 기억되어지지 않는다면 아무런 소용이 없으니까요...
일반적으로 메모리(MEMORY)는 컴퓨터의 작업 영역을 말하는 것으로, 이러한 메모리는 사용자가 응용 프로그램을 사용시, 중앙처리장치(CPU)가 사용자가 지정한 작업을 수행하는 동안 필요한 프로그램과 자료 등을 보관해 두는 장소를 뜻합니다.
DOS를 사용하면서 사용자들이 제일 불만을 가졌던 것들 중에 하나가 메모리에 관련된 문제들입니다. 처음 컴퓨터를 사용하는 사람들은 대부분이 구입처에서 만들어 준 메모리 상태로 사용하다가 새로운 응용 프로그램을 사용한다던지 할 경우 만약 새로운 응용 프로그램이 시스템의 메모리 상황에 민감하게 반응하는 프로그램이라면 이때부터 메모리와의 원하지 않는 한판 전쟁을 치루어야 했습니다.
2. 메모리의 이해
1) 기본 메모리 (Conventional Memory)
IBM 에서 처음 개인용 컴퓨터를 발표했을때 대부분의 컴퓨터에서는 64 kb 안팎의 메모리가 들어 있었습니다. 그런 상황에서 IBM 의 설계자들은 640KB의 메모리만으로도 충분히 컴퓨터를 사용할 수 있다고 판단하였던거죠. 이 당시의 프로그램들은 크기가 기껏해야 70K∼80K 정도였으니 그 당시만 하더라도 1024KB라는 크기는 엄청난 양이었습니다. 이에 따라 8088 CPU를 기반으로 해서 DOS도 1MB 라는 한계량을 설정하게 됩니다. 그러나 이러한 판단은 잘못된 것으로 소프트웨어의 크기가 커지고 처리 데이타의 양이 많아짐에 따라 그 한계를 드러내었습니다.
이에 그 대책으로 640kb 이상의 메모리를 관리하는 방법이 나타났는데, 바로 아래에서 설명할 연속확장 메모리와 중첩확장 메모리입니다.
이중 0 kb 에서 640 KB 사이의 메모리를 도스가 관리할 수 있는 기본메모리라고 합니다.
즉 DOS가 가지는 메모리의 한계인 기본 메모리가 640KB라는 것입니다.
DOS는 임의의 프로그램을 실행시켰을 경우 그 프로그램의 수행에 관련된 파일들을 기본 메모리로 불러들여 작업을 수행하게 합니다. 이때 프로그램의 수행에 필요한 메모리보다 사용가능한 기본 메모리가 부족하게 되면 Out of memory 라는 짜증나는 에러 메세지를 접하게 되는 것입니다. 거의 대부분의 도스용 프로그램이 이 영역에서 실행되기 때문에, 대부분의 메모리 관리 프로그램의 목적이 보다 많은 기본 메모리를 확보하는데 맞춰져 있다는 사실도 이 영역의 중요성을 잘 설명해줍니다.
물론 계속적인 컴퓨터의 발전으로 CPU 가 운영가능한 최대 메모리의 양도 늘어났지만 여전히 기본 메모리 640KB라는 제약에 묶여 있는 이유는 DOS가 하위 버전의 응용 프로그램들과의 호환성 등의 이유로 기본 메모리의 한계를 없애지 못하기 때문입니다.
2) 상위 메모리 (UMA, Upper Memory Area)
그럼 640KB 외에 384KB는 무엇을 위한 곳인가?
이곳은 컴퓨터에 내장된 ROM 바이오스와 비디오 램, 디스크 드라이브 컨트롤러, ROM BASIC, EMS 페이지프레임과 같은 하드웨어적인 확장에 대비해서 예약이 되어있는 공간입니다. 보통 384KB 영역을 표현할 경우는 UMA 라고 하며, 이중 386 이상 기종에서 하드웨어가 점유한 지역을 제외한 나머지 영역을 도스에서 메모리로 사용할 수 있는데 이렇게 사용하는 메모리의 블럭을 상위 메모리 블럭(UMBs, Upper Memory Blocks) 이라고 구분해서 표현하기도 합니다.
이 UMB 에 DOS 5.0부터는 장치구동파일과 램상주 프로그램을 설치하여 기본메모리를 더욱 늘려 쓸 수 있게 되었습니다.
그러나 286 NEAT 기종을 제외한 286 이하의 기종은 이러한 상위 메모리 영역을 직접적으로 사용할 수 없습니다. 386 CPU부터 이러한 상위 메모리로의 설치가 가능해서 그만큼의 기본 메모리를 최대한 절약할 수 있는 것입니다. 그러나 이렇게 상위 메모리로의 장치 구동파일이나 램상주 프로그램 등을 설치하는 것이 제대로 잘 되지 않기 때문에 조금이라도 기본 메모리를 확보하기 위해서는 많은 노력이 기울여지는 것입니다.
▣ 하이 메모리 (HMA : High Memory Area)
DOS는 메모리를 효율적으로 사용하기 위해 메모리에다 번지(Address) 를 지정해 놓았습니다. 만약 1 MB의 메모리가 장착되어 있다면 0∼640번지 까지가 기본 메모리 영역이며 641∼1024번지 까지의 영역이 상위 메모리입니다. 그런데 확장 메모리가 시작되기 전의 1025∼1088번지 사이의 64 KB의 영역이 존재합니다. 이곳이 바로 HMA 영역입니다. 이 영역은 DOS 5.0 이상에서 CONFIG.SYS에 DEVICE=C:DOSHIMEM.SYS 와 DOS=HIGH 라는 이 두행을 추가해주면 생성되는데 이 영역으로 도스 커널의 일부분을 옮기므로 기본 메모리를 약 40∼50KB 정도 절약할 수 있게 됩니다.
3) 연장 메모리 (XMS, EXTENDED MEMORY)
IBM 에서는 640 KB 로는 부족하다는 사실을 곧 깨닫고는 이 한계를 넘기 위하여 규칙을 정하였습니다. 즉 컴퓨터의 보드 상에 메모리를 더 꽂고 이렇게 더 늘린 메모리를 도스에게 알리고 쓸 수 있도록 도스에서 제공하는 프로그램이 바로 HIMEM.SYS 입니다.
도스는 HIMEM.SYS라는 연장 메모리 관리자를 사용하여 1MB 이상의 영역에서 같은 어드레스에 동시에 두 개 이상의 프로그램이 겹쳐서 사용되지 않도록 합니다. 여기서 HIMEM.SYS에 의해 관리되는 메모리를 XMS(eXtended Memory Specification) 메모리라고 합니다.
이런 방법으로 메모리를 늘리는데 가장 큰 장점은 가격이 EMS 메모리보다 싸다는 것입니다.
하지만 EMS 메모리를 지원하는 프로그램은 많지만, 이 XMS 형태의 메모리를 인식해서 사용하는 프로그램은 매우 적습니다. 그래서 이 가격이 싼 XMS 를 비싼 EMS 메모리로 이용하기 위해 다음에 설명하는 EMM386.EXE 가 나타나게 되었습니다. 이 프로그램은 시스템에 설치된 모든 XMS 메모리를, 응용프로그램이 XMS 형태를 원하면 XMS 로, EMS 메모리를 원하면 EMS 형태로 제공해 줍니다.
4) 확장 메모리 (EMS, EXPANDED MEMORY)
이것은 스프레트 시트 프로그램을 개발한 로터스사에서 640KB 의 한계를 넘기 위하여 만든 규칙입니다.
메인보드 위에다 카드형태로 메모리를 더 설치해서 쓰자는 것이었는데, 이렇게 확장된 메모리를 확장메모리라 불렀죠. 이 과정에서 로터스사는 인텔, 마이크로소프트사와 함께 이렇게 설치한 카드를 이용하기 위해 규격을 만들었는데 이 규격을 EMS (Expanded Memory Specification)라고 부릅니다.
확장 메모리는 확장 메모리 관리자(EMM, Expanded Memory Manager)프로그램이 관리하며 이론적으로 286은 16MB까지, 386 이상의 컴퓨터는 4GB 까지 확장 메모리를 사용할 수 있습니다.
확장 메모리는 페이지프레임이라 부르는 64KB 크기의 지정된 메모리 구역을 통하여 연장 메모리를 EMM이 16KB 블럭으로 자르고 이 메모리를 매핑(Mapping)한 후 확장 메모리를 요구하는 프로그램에게 배분하는 식으로 사용됩니다.
386 이상에서 EMS를 관리하는 메모리 관리자로는 도스의 EMM386.EXE와 그외 QEMM, 86MAX 등이 있습니다.