우리가 도스상에서 내리는 대부분의 명령은 command.com이라는 파일이 처리합니다. 전문가들이 말하는 용어로 command.com 파일은 운영체제의 쉘(Shell) 프로그램이라고 말합니다. 쉘 프로그램은 사용자가 내린 명령을 운영체제가 수행할 수 있도록 명령을 입력받고 이를 컴퓨터의 운영체제에 전달하는 일을 합니다. 다시 말해 사용자가 내린 명령을 운영체제가 수행할 수 있도록 통역해주는 일을 합니다.
그럼 실질적인 운영체제의 핵심은 무엇인가? 커널(kernel)이라고 하는 부분입니다. 도스로 말하면 io.sys와 같은 파일이 이에 해당합니다. 실질적으로 사용자가 내린 명령을 수행하면서 컴퓨터의 하드웨어를 조작하는 파일입니다. 이처럼 실질적으로 사용자의 명령을 수행하하면서 파일의 입출력을 담당하고, 하드웨어를 관리하는 프로그램을 커널이라고 합니다. 그리고 운영체제의 핵심은 커널이라고 부르는 부분입니다.
그렇다면 왜 쉘과 커널로 구분할까요? 운영체제의 핵심은 커널입니다. 그러나 사용자가 바로 명령어로 커널을 제어하기는 매우 어렵습니다. 기계적인 부분이 많기 때문입니다. 때문에 사용자가 내린 명령을 운영체제의 핵심인 커널 부분이 이해할 수 있도록 번역해주는 장치가 필요합니다. 이 번역장치에 해당하는 프로그램이 쉘 프로그램입니다. 따라서 보통 우리가 운영체제라고 부르는 프로그램은 크게 커널과 쉘로 구성됩니다. 이는 도스 외에도 유닉스, 리눅스, 윈도98도 마찬가지입니다. 하여간 운영체제가 커널이라는 핵심부분과 쉘로 구성된다는 정도만 알고 계시면 됩니다. 일반인이 쉘과 커널이라는 용어에 대해서 알 필요는 없습니다.
우리가 주목해야 할 부분은 내부 명령어와 외부 명령어의 차이입니다. 왜 내부 명령어와 외부 명령어로 구분해야 하는지, 내부 명령어와 외부 명령어는 기능상 차이가 있는지 등을 알아볼 때입니다. 사실 엄밀하게 말해서 내부 명령어와 외부 명령어는 차이가 없습니다. 단지 사용자의 편리를 위하여 구분해놓은 개념에 불과합니다. 도스를 비롯한 대부분의 운영체제는 디스크에서 파일을 입출력하여 프로그램을 실행시킵니다. 이처럼 디스크의 파일 입출력을 이용하는 운영체제는 실질적으로 내부 명령어라는 개념이 존재하지 않습니다. 모든 파일, 심지어는 운영체제조차도 디스크에 기록되어 있기 때문입니다. 운영체제 역시 부팅하면서 디스크에서 램으로 불러오므로 외부 명령어에 해당합니다. 그렇다면 내부 명령어라는 표현을 사용하는 이유는 무엇일까요? 명령체계의 효율성 때문입니다. 이런 경우를 생각해보겠습니다. dir이라는 도스 명령어는 디스크에 어떤 파일이 있나를 알아보는 명령어이고, cd라는 명령어는 디렉토리 사이를 이동하는 명령어입니다. dir이나 cd라는 명령어는 1분에도 몇 차례씩 사용할 정도로 사용빈도가 높습니다. 그런데 이 명령어를 파일로 만들어 디스크에 저장해두었다고 합시다. dir.com, cd.com이라는 이름으로 디스크에 저장해두었습니다. 그리고 사용자가 dir이라는 명령어를 실행시킬 때마다 디스크를 뒤져서 dir.com 파일을 찾아보고 dir.com을 램으로 불러와 파일목록을 보여줍니다. 그리고 다시 램을 빠져나갑니다. 자주 사용하는 명령어를 매번 디스크에서 불러오는 것은 매우 비효율적입니다. 지금이야 하드디스크가 발달해서 속도 차이를 못느끼지만 10년 전만 해도 대부분의 사람이 360KByte 짜리 플로피디스크에서 파일을 읽어왔습니다. 이때 명령어 하나를 치면 디스크를 읽어서 실행하느라고 몇 초에서 몇 십 초까지 걸렸습니다.
자주 사용하는 dir 명령을 실행시킬 때마다 매번 속도가 느린 디스크에서 읽어와 실행시키는 일은 이처럼 매우 비효율적입니다. 그래서 사람들은 자주 사용하는 중요한 명령어는 램에 늘 넣어두고 사용하는 것이 좋겠다는 생각을 합니다. 명령어 파일을 부팅할 때 한꺼번에 읽어와 램에 두고 사용한다면 매번 플로피디스크를 읽어야 하는 불편함과 느린 속도를 개선시킬 수 있기 때문입니다. 물론 파일이 램에 늘 상주하게 되면 파일의 덩치만큼 램의 공간을 늘 차지합니다. 나중에 들어오는 프로그램이 사용할 램의 공간이 그만큼 줄어드는 셈입니다. 그러나 중요 명령어 파일을 부팅할 때 램으로 불러와 상주시키는 것이 램의 공간이 줄어들어서 겪는 불편보다는 훨씬 효율적이기 때문에 중요한 명령어를 램으로 불러와 상주시킵니다. 그래서 사람들은 dir.com이나 cd.com, md.com, copy.com, ver.com 등의 중요한 도스 명령어 파일을 부팅하면서 램으로 불러오는 방법을 생각합니다. 그런데 각각의 명령어마다 파일을 만들어 수 십 개나 되는 파일을 램으로 불러올 경우 램 안은 매우 어수선해집니다. 그래서 이들 명령어 파일을 하나로 묶어서 저장하는 것이 훨씬 깔끔하겠다는 생각을 합니다.
결국 도스 명령어 중에서 가장 중요한 명령어들을 묶어서 하나의 파일로 만듭니다. 이렇게 해서 만든 파일이 command.com 파일입니다. 그러니까 command.com 파일은 겉으로 보기에는 하나의 파일로 보이지만 하나의 기능만 수행하는 파일이 아닙니다. 그 안을 들여다보면 dir, cd, md, rd, type, ver, copy 등의 많은 명령어가 들어있습니다. 나중에 여러분의 컴퓨터 실력이 좀더 쌓이면 섹터 에디터라는 도구를 통해서 command.com 파일의 내용을 읽어볼 수 있는데 이때 dir, cd, md, rd, type, ver, copy 등의 많은 명령어가 들어있음을 볼 수 있습니다.
포함하고 있음을 보여줍니다. 이처럼 command.com 파일은 dir, cd, md, rd, type, ver, copy 등의 많은 명령어를 하나로 묶어 저장한 파일입니다. 그리고 dir, cd, md, rd, type, ver, copy 등의 명령어는 도스에서 가장 빈번하게 사용하는 중요한 명령어입니다. 따라서 command.com은 외부 명령어인 파일을 묶어놓은 파일이며, command.com은 사용자가 내리는 주요 명령어를 운영체제가 실행할 수 있도록 도와주는 일인 쉘의 기능을 합니다.
그리고 command.com 파일은 부팅하면서 디스크에서 읽혀진 다음에 램으로 들어가 상주합니다. 이처럼 부팅하면서부터 램에 들어가 상주하기 때문에 command.com에 포함된 dir, cd, md, rd, type, ver, copy 등의 명령어는 컴퓨터가 부팅된 후에는 언제 어느 곳에서도 실행이 가능한 명령어가 됩니다. 이처럼 command.com 파일에 포함되어 부팅할 때 램에 들어가 상주하는 명령어를 내부 명령어라고 합니다. 이제 내부 명령어가 무엇인지 아셨을 것으로 생각합니다. 원래는 디스크에 파일로 저장되어 있어야 하는 작은 명령어들을 command.com이라는 파일 하나로 묶어서 운영체제의 쉘기능을 수행하도록 한 명령어가 내부 명령어입니다.
반면 도스의 운영체제 파일 중에서 사용 빈도가 낮거나 중요하지 않는 명령어 또는 덩치가 큰 명령어는 외부 명령어로 존재합니다. 즉 디스크에 파일로 저장해두었다가 필요할 때마다 디스크에서 읽어 램으로 불러와 실행시킵니다. format이나 fdisk와 같은 프로그램이 외부 명령어에 해당합니다.
따라서 실질적으로 외부 명령어와 내부 명령어의 기능상 차이는 별로 없습니다. 단지 부팅할 때부터 램에 불러오느냐 나중에 필요할 때 램으로 불러오느냐의 차이가 있을 뿐입니다. 내부 명령어는 부팅하면서부터 램에 들어와 상주하는 명령어이고, 외부 명령어는 부팅이 된 후에 사용자가 명령을 내려서 램으로 불러오는 명령어라는 차이가 있습니다. 물론 hwp.exe와 같은 프로그램 역시 외부 명령어에 해당합니다. 한 마디로 말해서 디스크에 저장되었다가 사용자가 명령을 입력해 실행시키는 프로그램은 거의 대부분 외부 명령어로 보셔도 무방합니다.
** 삽화: (063) 내부 명령어를 만든 이유
출처 : http://ith.kr/chair/cgj/cgj0905.html
'Linux > Command & Tool' 카테고리의 다른 글
udevinfo ? Ubuntu 에선 udevadm으로 ! (0) | 2015.10.17 |
---|---|
[펌] PID로 프로세스 정보 알아내기 (0) | 2015.08.15 |
[LinuxCommand] chmod (0) | 2015.02.05 |
find 명령어 (0) | 2013.10.02 |
find 옵션 (0) | 2013.09.23 |