2011년 1월 14일 금요일

도스 메모리 관리

2003-01-20 11:25:06 fromRLAVLFAH(김성창)  번호: 62096   조회: 96  
상주 메모리가 부족하다고 나오는데여 어케 해야되나요?ㅠ.ㅠ
도스상에서 v3검사를 하려고 하는데 기억장소가 부족하다고 나오네요
상주 메모리가 부족해서 그런지 소프트웨어를 돌리면 끊기면서 돌아갑니다. 
다른 도로설계나 기타 여러가지 소프트웨어들은 아예 깔리지도 않고요. 

 2003-01-20 13:00:55 fromFROSTMAN(설상진)  

도스에서 사용되는 메모리는 크게 다섯가지로 구분됩니다.

1) conventional memory
- 맨 처음부분부터 640KB까지의 영역을 말합니다. 모든 도스 프로그램은 이 영역에서 돌아가고, V3의 경우 이 부분이 570KB 이상 남아있어야 정상적으로 동작이 됩니다.

2) UMBs(Upper Memory Blocks)
- 640KB 이후부터 1024KB까지의 384KB 영역을 A B C D E F까지 여섯개의 64KB 블럭으로 나눠서 사용하는 부분입니다. 옛날 도스용 램상주 프로그램이 로드되는 부분이기도 하고, 섀도우램 기법 등을 통해 메인보드나 그래픽 카드의 바이오스 영역 일부가 로드되는 부분이기도 합니다.

3) HMA(High Memory Area)
- 1024KB 이후부터 64KB만큼 1088KB까지의 영역을 말합니다. 여기에는 DOS 운영체제의 환경 변수가 로드되며, 사용자가 특별히 관여할 수는 없습니다. 도스의 버퍼 같은 것이 44까지는 여기에 로드됩니다. 만일 UMB를 사용할 수 없는 시스템(일부 286)인 경우에는 conventional memory 이후의 64KB만 먹습니다.

4) XMS(eXtended Memory Specification)
- HMA 이후부터 남은 전체 메모리를 이 규격으로 관리합니다.(윈도우에서...)

5) EMS(Expanded Memory Specification)
- UMB의 일부에 매핑하는 방식으로 프로그래밍 하기 좀 수월한 규격의 메모리입니다. 옛날 도스용 게임 중에서 이 메모리를 이용하는 것을 보신 적이 있으실 지도... 프린세스 메이커 등을 하면 EMS가 있을 경우 상당히 많은 수의 파일을 EMS에 로드한 다음 게임 로딩 시간을 줄일 수 있습니다. 지금은 거의 쓰지 않는 방식이고, 32MB까지만 사용이 가능합니다. 아, EMS는 일반적인 윈도우 시스템에서는 XMS 규격으로 관리하는 부분의 일부를 뚝 떼어서 가상적인 EMS로 에뮬레이션 해서 돌립니다.

님께서 겪은 V3의 메시지는 conventional memory가 부족해서 나온 메시지입니다.
대충 다음과 같이 c:\config.sys 파일을 수정하세요.

[config.sys]

device=c:\windows\himem.sys/testmem:off
dos=high
devicehigh=c:\windows\emm386.exe ram
dos=umb
(dos=high와 dos=umb를 합쳐서 dos=high,umb라고 써도 됩니다.)
이후의 모든 device= 명령어를 devicehigh= 이라고 수정...

이렇게만 하셔도 충분한 메모리가 확보될 겁니다. 좀 더 알차게 확보하려면 buffers 옵션이나 stacks 옵션도 손봐야 하지만, 이정도만 돼도 충분히 확보됩니다.

도움이 되길 바랍니다.

========================================================================
도스 메모리 늘리는 법좀 알려주세요. - 충남 논산시 부창2동 김영필
himem.sys와 emm386.exe를 config.sys에서 읽어들이고 autoexec.bat를 약간 손보면 됩니다. 다음과 같이 각 파일들에 필수적으로 들어가는 부분이 있는지 확인해 보세요. 대문자로 표기된 부분이 핵심입니다.

- config.sys -
DEVICE=C:\WINDOWS\HIMEM.SYS/testmem:off - 도스에서 XMS를 쓰려면 필요하고, 옵션은 메모리 테스트를 안해서 부팅을 빠르게 합니다.

DOS=HIGH - HMA에 도스를 읽어들여서 기본 메모리를 약 50KB 더 확보합니다.

DEVICE=C:\WINDOWS\EMM386.EXE RAM i=b000-b7ff - EMM386으로 EMS를 사용할 수 있게 합니다. 만약 흑백 모니터(허큘리스)를 쓴다면, i 옵션을 빼야 합니다.

DOS=UMB - 도스가 UMB를 이용할 수 있게 합니다. EMM386을 먼저 띄워야하죠.

BUFFERS=8,0 - 버퍼는 44개까지는 기본메모리를 전혀 소모하지 않습니다. 그러나 디스크 캐쉬를 띄우면 별로 필요 없으니까 3가지 줄여도 전혀 문제 없습니다. 데이터 베이스 프로그램은 많이 필요하죠.

STACKS=0,0 - 스택은 도스 6.2부터는 필요하면 알아서 만들게 되었습니다. 그냥 0,0으로 지정해 두면 메모리 소모가 가장 적습니다.

FCBS=1,0 - File Control BlockS 방식은 옛날 방식으로, 지금은 안씁니다. 과감하게 최소치로 줄여버리세요.

deviceHIGH=c:\windows\biling.sys - 한글 윈도우즈의 경우에 이걸 빼면 한글 코드 변환이 불안정하게 됩니다...

이제 이 뒷부분에 해당 컴퓨터에 필요한 다른 드라이버들을 설치합니다. 대부분 DeviceHigh 명령으로 읽어들이는게 좋고, 스마트 드라이브는 절대로 config.sys에서 InstallHigh 명령으로 설치하면 안됩니다. 자동으로 더블 버퍼링이 들어가는데 메모리 소모랑 속도에서 손해입니다. 또 V3res도 InstallHigh 명령으로 설치하면 나중에 필요없을 때 제거할 수 없습니다.

- autoexec.bat -
set path=c:\windows;c:\windows\command;c:\util;c:\dos - 패쓰는 길어봤자 아무 쓸모가 없고, 길이가 128문자를 넘어가면 반응 속도도 떨어지고 비효율적입니다.

LOADHIGH c:\windows\nlsfunc.exe c:\windows\country.sys - 한글 윈도우에서 국가 코드를 지정합니다. 나중에 chcp 명령으로 언어 세트를 변경할 수 있습니다. chcp 949는 한글, chcp 437은 영어.

이제 이 다음에 필요한 내용을 추가합니다. CD-ROM이 필요하다면 LH 명령으로 MSCDEX를 구동해야 하고, 이때 EMS를 쓰고 있다면 옵션에 /E를 줘서 데이터 소비 영역을 EMS로 옮길 수 있습니다.

또, MSCDEX를 띄운 다음에 Smartdrv를 띄워야 CD-ROM의 내용을 디스크 캐슁할 수 있습니다. 물론 스마트 드라이브는 LH 명령으로 띄워야 하겠죠. 스마트 드라이브 설정은 다음과 같이 합니다.

lh c:\windows\smartdrv /n X+ 4096

/n 옵션을 써야 쓰기 캐쉬가 살아나고, 그걸 드라이브별로 지정하려면 드라이브 문자 뒤에 +를 표시합니다. 만일 쓰기 캐쉬를 끄려면 드라이브 문자 뒤에 -를 표시합니다. 만일 램드라이브라면 당연히 -를 표시해 줘야겠죠. 4096이라는 수치는 캐쉬의 용량입니다. KB단위이므로, 여기서는 4메가를 할당한다는 뜻입니다. 8메가 이하의 시스템에서는 1메가를, 16메가정도에서는 2메가를, 32메가가 넘어갈 정도면 4메가정도 할당해 줘도 괜찮습니다. 물론 윈95나 98에서는 스마트 드라이브를 띄우는게 아무런 의미가 없으므로, 커맨드 모드로 부팅할 때에만 쓸모가 있습니다.

마우스 드라이버도 설치해야 하는데, 그냥 아무 mouse.exe나 mouse.com으로 하지 말고, 통신에서 로지텍에서 제공되는 마우스 드라이버와 cloaking이라는 실행파일을 구한 다음 조합해서 쓰세요. cloaking을 실행한 직후에 mouse.exe를 실행하면 메모리 소모량은 cloaking.exe와 mouse.exe가 각각 1KB씩 소모합니다. 보통때에는 최소 18KB씩 소모하지요.

그리고 만일 LH 명령으로 V3res를 설치하실 분이라면 UMB에 반드시 36KB 이상의 공간이 있어야지만 됩니다. V3res는 조금 특이해서 정작 소모하는 공간은 6KB이지만, UMB 여유 공간이 36KB 이상이 되어야만 UMB에 설치되고, 모자라면 기본 메모리를 잡아먹습니다. V3res를 꼭 쓰셔야 할 분은 참고하시길.

댓글 없음:

댓글 쓰기