1/05/2007

[win98] windows98 booting

- 하드디스크 곳곳에는 부팅에 관련된 파일이 숨겨져 있다.
부팅이란 '부트스트랩(Bootstrap)'을 편의상 줄인 말로, 컴퓨터를 동작하는 데 필요한 프로그램이나 과정을 의미한다. 좀더 구체적으로 말한다면, PC 전원이 켜진 후 장착된 하드웨어를 검사하고 운영체제가 로딩되는 과정을 뜻하는 것이다. 부트스트랩은 본래 부츠를 신기 위해 잡아당기는 가죽 조각(손잡이)을 가리키는 것으로, 구형 자동차에서 엔진에 시동을 걸 때 사용된 가죽끈에서 유래되었다는 설도 있다.

* 부팅은 크게 두가지 과정을 거친다.
- 바이오스에서 검사하는 POST(Power On Self Test)와 운영체제가 시작되는 로딩 과정이다. 메인보드 안에 내장된 롬 형태의 바이오스는 전원이 켜지면 메모리의 용량과 이상 유무를 확인하고 그래픽 카드가 이상 없는지 확인한다. 이어서 입출력 포트와 하드디스크, 플로피 드라이브를 검사한다. 이 때 만일 바이오스에 기억된 정보와 다른 점이 발견되면 모니터 화면이나 스피커의 비프음을 통해 경고 메시지를 알려준다. 하드웨어적으로 이상이 없으면, 바이오스는 하드디스크의 부트 섹터를 찾아 부팅 파일을 메모리로 불러들인다. 이 때 플로피디스크가 일차 부팅 드라이브이면 플로피디스크부터 읽고, 다음에 하드디스크를 읽는다. 만일 하드디스크에서도 부팅 파일을 찾지 못하면 에러 메시지를 내고 부팅 파일을 요구한다. 부팅 파일을 메모리에 적재한 후에는 command.com과 config.sys, autoexec.bat 파일을 불러 그 안의 명령대로 관련 드라이버를 메모리에 로딩한다. 마지막으로 윈도 98을 실행할 win.com이 실행되면 부팅이 완료되며 운영체제가 명령권을 인수한다.

* 부팅 과정
- PC에 전원을 켜면 7단계의 과정을 거쳐 부팅이 이루어진다. 전체 과정 중 1번부터 5번까지는 POST라고 한다.

1. 전원 켜기
2. CPU 초기화
3. 그래픽 카드 검사
4. 메모리 검사
5. 입출력장치 검사
6. 부팅 파일 찾기
7. 부팅 파일 메모리 적재

- 바이오스(BIOS) : 'Basic Input/Output System'의 약자로, 키보드, 마우스, 디스크, 모니터 등 기본적인 입출력장치에 대한 제어 및 관리를 한다. 바이오스는 소프트웨어이지만 칩 안에 내장된 펌웨어 형태로 존재한다.

* io.sys
- io.sys는 '리얼 모드 운영체제 파일'이라고 부른다. POST 과정이 끝나면 바이오스는 부트 섹터에 있는 io.sys 파일을 우선적으로 불러들인다. 부팅 파일 중 최전선에 있는 셈이다. io.sys는 과거 도스에서는 하드웨어의 제어에서 데이터 입출력을 담당했지만, 윈도 98에서는 msdos.sys와 io.sys의 역할을 모두 하고 있다. 여기에는 도스에서 config.sys와 autoexec.bat가 하는 역할도 포함되어 있다. 이런 이유로 config.sys나 autoexec.bat 파일에 특별한 지정을 하지 않아도 최적의 환경으로 부팅이 가능하다.
io.sys는 사용자가 함부로 수정할 수 없는 파일로, 메모리에 로딩될 때 himem.sys나 ifshlp.sys, setver.exe, dblspace.bin의 드라이버를 함께 로딩한다. io.sys에 포함된 항목을 수정하려면 config.sys나 autoexec.bat 파일을 사용해야 한다. 다음은 io.sys에 포함된 항목과 그에 대한 설명이다.
himem.sys : 하이 메모리 영역(HMA: High Memory Area)을 사용할 수 있는 드라이버이다. 연장 메모리(Extended Memory)의 65KB 부분인 HMA를 사용하므로 기본 메모리를 절약할 수 있다.
dos=high : himem.sys로 하이 메모리를 사용할 때에는 dos=high 문을 사용하여 활성화시켜야 한다. io.sys에서는 config.sys 파일에 EMS386을 사용할 경우 자동으로 dos=umb 문도 추가된다.
ifshlp.sys : 리얼 모드 파일 시스템과 네트워크 관련 API를 지원하는 드라이버로, 설치 가능 파일 시스템 관리자(Installable File System Manager)에 의해 관리된다. 이 드라이버로 인해 윈도의 32비트 파일 지원이 가능하다.
setver.exe : 일부 도스 프로그램들은 버전이 맞아야만 실행되는 경우가 있다. 이 때 setver.exe를 사용하면 프로그램의 버전에 맞춰 실행되도록 한다. 이 경우 setver.exe가 로딩되어야 한다.
Files= : 프로그램이 한 번에 처리할 수 있는 파일의 수를 정의한다. 기본값은 '60'으로 너무 수가 적으면 프로그램을 실행할 수 없고, 너무 크면 메모리를 낭비한다.
Lastdrive= : 윈도에서 사용할 수 있는 드라이브의 이름을 지정한다. 기본값은 'Z'로 C, D, E 등의 드라이브 이름을 Z까지 사용할 수 있다는 의미이다. 마지막 드라이브 이름을 바꾸려면 config.sys에서 수정하면 된다.
Buffers= : 데이터를 읽어들이는 버퍼의 크기를 지정한다. 윈도 98에서는 필요 없지만 도스 호환 프로그램에서는 필요하다. 기본값은 '30'이며, 이 값이 크면 역시 메모리를 낭비한다.
Stacks= : 스택은 하드웨어 인터럽트를 저장하는 메모리 공간이다. 윈도 98에서는 필요하지 않지만 일부 프로그램과의 호환성을 위해 io.sys에 포함된다. 기본값은 '9,256'으로, 256KB의 9개 스택을 사용한다는 의미하다. 역시 너무 많은 스택 지정은 메모리 낭비를 가져오며, 너무 적으면 에러 메시지가 나타난다.
- 로딩(Loading) : 프로그램이나 데이터를 불러들이는 작업. 문서를 편집하기 위해 문서 파일을 불러들이거나 메모리에서 연산할 데이터를 불러들이는 과정을 말한다.
- API(Application Program Interface) : 소프트웨어 호환성을 유지하기 위한 규약이다. 게임이나 그래픽 프로그램에서 하드웨어를 제어하고자 할 때 각 프로그램 업체가 직접 제어장치를 만들지 않고 공통 API를 거쳐 손쉽게 개발할 수 있다.

* msdos.sys
- msdos.sys는 '특수한 시작값'이라고 부른다. 도스에서는 메모리 관리, 시스템 호출 등의 기능을 하는 중요한 부팅 파일이었지만, 윈도 98에서는 부팅시 옵션을 조정하는 정도로 사용된다. 특히 msdos.sys 파일은 사용자가 수정할 수 있어 부팅시 다양한 설정이 가능하다.
사용자가 직접 msdos.sys 파일을 수정하려면, 읽기 전용과 숨김 속성을 '기록'으로 바꾼 후 수정해야 한다. 수정 후에는 다시 읽기 전용과 숨김으로 속성을 되돌린다. 이 때 파일 아래의 반복되는 문자열은 건드리지 말아야 한다. 이 문자열은 파일 크기를 맞추기 위한 것으로, 이를 삭제하여 파일 크기가 변경되면 부팅되지 않을 수도 있다. 다음은 msdos.sys에 사용되는 섹션과 항목 설정 방법이다.

[Paths] 섹션
- HostWinBootDrv= : 부팅되는 드라이브의 루트 디렉터리를 지정한다. 일반적으로 'C'로 지정하면 된다.
- WinBootDir= : 부트 디렉터리를 지정한다. 일반적으로 'C:\Windows'이다.
- WinDir= : 윈도 98이 설치된 디렉터리를 지정한다. 기본값은 'C:\Windows'이다.

[Options] 섹션
- Autoscan= : 부팅시 디스크 검사를 하는 항목이다. 기본값은 '1'로, 'Autoscan=1'이라고 지정하면 디스크 검사를 하겠냐는 메시지가 나온 후 디스크 검사를 한다. 반대로 '2'로 지정하면 메시지가 나오지 않고 자동으로 디스크 검사를 한다. '0'의 경우 디스크 검사를 하지 않는다.
- BootDelay= : 부팅시 'Starting Windows' 메시지가 나타난 후 기다리는 시간이다. 부팅시 키를 눌러 부팅 메뉴로 들어갈 때 시간을 확보하기 위한 것으로, 기본값 '2'는 2초 동안 기다린다는 의미이다. '0'으로 지정하면 키를 누를 시간을 주지 않는다. 이 경우 부팅 시간은 단축되지만 부팅 메뉴에서 안전 모드로 들어갈 수 없다.
- BootGUI= : 부팅을 윈도 모드로 할지 정한다. 기본값은 '1'로 일반적인 윈도 98 환경으로 부팅된다. 만일 '0'으로 지정하면 도스처럼 부팅된다. 물론 부팅 후 'win'을 입력하면 윈도 98이 시작된다.
- BootKeys= : 부팅시 기능키 사용 여부를 지정한다. 기본값은 '1'로 부팅 중 , 등의 기능키를 눌러 부팅 메뉴를 호출할 수 있지만, '0'으로 두면 기능키를 눌러도 동작하지 않는다. 이 때에는 BootDelay= 기능도 사용할 수 없다.
- BootMenu= : 부팅시 부팅 메뉴를 보여준다. 기본값은 '0'으로, 이 경우 부팅시 키를 눌러야 부팅 메뉴를 볼 수 있다. 만일 '1'로 지정하면 부팅할 때마다 부팅 메뉴를 보여준다.
- BootMenuDefault= : 부팅 메뉴의 기본 항목을 선택한다. 뒤에 붙이는 번호에 따라 부팅 메뉴에서 메뉴 번호에 반전이 된다. 기본값은 '3'으로 안전 모드로 부팅된다. 값을 '1'로 하면 일반 모드로 부팅하도록 지정할 수 있다.
- BootMenuDelay= : 부팅 메뉴 지연 시간을 지정한다. 기본값은 '30'으로, 30초 동안 부팅 메뉴가 나타나며, 30초 이후에는 자동으로 선택된 메뉴로 부팅된다.
- BootMulti= : 이전 도스 모드로 부팅할 수 있게 한다. 기본값은 '0'이며, 부팅 메뉴에서 이전 도스 모드를 표시하지 않는다. 하지만 '1'로 지정하면 마지막 메뉴에 이전 도스 모드가 나타난다. 참고로, 이전 도스 모드는 도스에서 윈도 98을 설치할 경우에만 사용할 수 있다. 윈도 98만 설치된 PC에서는 이 항목을 '1'로 지정해도 이전 도스 모드 메뉴를 볼 수 없다.
- BootWarn= : 안전 모드로 부팅에 성공하였을 경우 경고 메시지 창을 보이게 한다. 기본값은 '1'이다.
- DblSpace= : 압축된 디스크 드라이브를 사용하기 위한 드라이버(dblspace.bin)를 로딩할 것인지 결정한다. 기본값은 '1'이며, 디스크 압축을 사용하지 않는다면 값을 '0'으로 설정하여 로딩되지 않도록 해야 한다.
- DrvSpace= : DblSpace와 마찬가지로 압축된 디스크 드라이브를 사용하기 위해서 메모리에 로딩되는 드라이버이다. drvspace.bin 파일을 로딩하며, 기본값은 '1'이다. 역시 디스크 압축을 사용하지 않는다면 값을 '0'으로 준다.
- Logo= : 시스템 시작시 움직이는 윈도 98 로고가 표시되도록 한다. 기본값은 '1'이며, '0'으로 설정하면 로고가 보이지 않는다.