2.1. init 프로세스와 inittab 파일

프로세스 id 1 번인 init 프로세스는 사용자들을 위해서 시스템을 설정하게 됩니다. pid 0 인 프로세스가 초기화(?)한 커널의 바탕에서 나머지 작업을 수행하는 것이죠.

init 프로세스(/sbin/init) 가 하는일의 대충은 다음과 같습니다 :

init 가 처음 시작해서 수행해야 할 작업들을 설정한 파일은 /etc/inittab 파일 입니다. init 는 새로운 실행레벨에서 실행할 프로세스를 결정하기 위해서 이 파일을 참조합니다. 다시 말하면, inittab 파일은 시스템의 상태에 따라서 해당하는 런레벨에서 init 프로세스가 수행해야 할 일들을 서술해 놓은 파일입니다. init 프로그램은 inittab 파일을 참조하여서 모든 새로운 런레벨에서 실행할 수 없는 프로세스가 만약 지금 실행중이면, 그 프로세스를 죽이고, 새로운 런레벨 에서 실행해야만 하는 프로세스 중 현재 실행되고 있지 않은 프로세스는 새로이 실행을 시킵니다.

주석

[1]

이와 관련해서 정헌학님(hunhak94@somedomain) 께서 다음과 같은 질문을 주셨습니다 :

이 부분에서 init 다음에 파일시스템 마운트fstab 이 실행된다고 하면 초기 부팅시 /sbin 이 마운트 되지 않은 상태 즉, fstab 이 실행되지 않은 상태에서 어찌 /sbin/init 를 찾아서 실행을 할 수 가 있죠?? 결국 마운트 되지 않은 상태에서 파일 시스템에 접근을 할 수 있다는 이야기인데... 잘 이해가 안갑니다.

다음은 저의 답장입니다 :

한번 훈학님의 시스템에서 dmesg 를 해 보세요. 아마도 NET, 즉, TCP/IP 프로토콜 스택과 유닉스 도메인 소켓을 초기화 한 후에 root 를 readonly 로 마운트 하는 부분이 있을 겁니다. 이것은, mount 프로그램을 쓰는 것이 아니라, 커널의 VFS(Virtual File System) 에서 처리하는 것이죠, 그리고, fstab 을 참조한 마운트는 start_kernel() 함수가 종료되면서, execve() 함수로 init 를 실행시킨 후에 일어납니다. 이때, readonly 로 마운트되어 있던 root 파일 시스템이 다시 read/write 로 마운트되게 됩니다. 흠... 그러면, /sbin 을 root 파일시스템에 두지 않고 다른 파일시스템이 둔다면 어떻게 될까요... 궁금해지네요.. 이 문제는 시스템을 한번 밀고, /sbin 을 다른 파일시스템으로 두어서 테스트 해 본 후에 다시 메일을 드리겠습니다. 다행히도 테스트할 수 있는 장난감용 컴퓨터가 있거든요 ^^ 메일 다시한번 감사드립니다. 즐거운 나날들 되세요 ^^*** 꼬랑지. 답장이 좀 늦었네요... 그간 바빠서, 훈학님의 메일에 대해 곰곰히 생각해 볼 시간이 별로 없었답니다 -_-;;;