리눅스 시스템의 기동
1. 부팅 단계
전원을 켜면 맨 먼저 BIOS(Basic Input Output System)가
실행된다. 바이오스는 기본적인 하드웨어 장치들을 검사하여 바이오스에서 지정된
부팅 매체를 선택하여 부팅 과정을 진행하도록 합니다. 즉 바이오스에서 지정된 매체(플로피
디스크, 하드 디스크, CD-ROM 등)에 저장된 부트 관리자까지 인도하는 역할을 한다.

이제 부팅 매체의 OS의 부트 관리자가 실행된다. 리눅스의 부팅 관리자는 LILO(Linux
Loader)라고 하는데 하드 디스크의 첫 번째 섹터인 MBR(Master Boot Recorder)에
저장되어 있다.

리눅스 부트 관리자는 리눅스 커널을
실행한다. 리눅스 커널은 시스템의 여러 자원들을 초기화한다.(리눅스가 부팅될 때
화면에 상세하게 표시가 된다.)

2. 시스템 초기화
리눅스 커널은 먼저 init 프로세서를 수행한다. init는 initialize의 약어로 여러
설정 파일들을 참조하여 시스템을 초기화하게 된다. 마치 도스에서 config.sys와
autoexec.bat를 참조하여 시스템을 초기화하는 것과 비슷하다. 리눅스 시스템의 초기화
내용은 /etc/inittab와 /etc/rc.d/init.d 파일 대부분 저장되어 있다. init 프로세스는
시스템이 종료될 때까지 메모리에 남아서 다른 프로세스를 관리한다.
3. 멀티 유저를 위한 자식 프로세스 생성
init 프로세스는 초기화 과정에서 여러 개의 자식 init 프로세스를 만드는데,
이는 리눅스가 여러 사람이 사용할 수 있는 멀티 유저 OS이기 때문이다. 프로세스가
자신과 동일한 프로세스를 만드는 것을 포크(fork)라고 한다. 반대로 여러 프로세스가
하나로 합쳐지는 것을 join이라고 한다.
init 프로세스가 자식 프로세스를 만들고
다시 자식 프로세스가 여러 개의 다른 프로세스와 데몬을 생성한 후에 최종적으로
사용자가 로그인하기를 기다리게 된다.

4. 로그인과 셸의 수행
사용자는 ID와 Password를 입력하여 로그인하게 된다. 이는 login 프로세스가
담당한다.
login 프로세스에 의한 사용자 식별 및 인증 과정이 끝나면 리눅스는
드디어 셸을 수행하게 된다. 사용자가 리눅스 명령을 사용하여 리눅스 시스템을 이용할
수 있는 것은 바로 셸이 리눅스 명령어를 해석해주기 때문이다.
로그인은 텍스트
환경의 로그인과 그래픽 환경의 로그인이 있는데, 텍스트 환경의 로그인에는 telnetd난
rlogind와 같은 데몬에 의해 처리된다. 그래픽 환경의 로그인에는 xdm, gdm, kdm과
같은 데몬이 사용된다.
보다 세부적인 부팅 과정은 다음과 같다.


리눅스에서 프로그램의 실행
위에서 이미 언급한 대로 리눅스 명령은 셸에 의해 처리된다. 도스에서 command.com이
도스 명령어를 해석하듯 리눅스에서는 셸이 명령어를 해석한다. 리눅스 명령어도
도스 명령어와 마찬가지로 내부 명령어 외부 명령어가 있다. 셸이 직접 처리할 수
있는 것을 내무 명령이라하고 셸이 다른 프로그램을 찾아 실행해야 하는 명령을 외부
명령이라고 한다. 외부 명령은 하드 디스크에 파일 형태로 존재하는데 사용자가 외부
명령을 내리면 셸은 외부 명령을 찾아 실행한다. 외부 명령은 하드 디스크에서 램에
적재되고 이를 CPU가 실행한다.
리눅스에서 프로그램의 형태
기본적으로 리눅스에는 확장자 개념이 없다. 따라서 파일 이름만으로는 실행 파일과
텍스트 파일, 그림 파일을 구분할 수 없다. 리눅스에서는 파일의 속성으로 파일을
구분한다. 즉 각 파일마다 소유자와 그룹, 기타 사용자에 대한 각각의 읽기,쓰기,실행
권한이 설정되어 있다.

리눅스에서 실행 가능한 파일에는 스크립트 파일, 중간 코드 파일, 바이너리 파일
등이 있다. 스크립트 파일은 인터프리터에 의해 실행이 가능한 명령어의 집합을 말한다.
중간 코드 파일은 자바와 같이 가상 기계에 의해 실행될 수 있는 중간 코드로 구성된
파일이다. 바이너리 파일은 바로 실행할 수 있는 바이너리 코드로 구성되어 있다.
