seegongsik
운영체제

어떻게 부팅: 전원 한 번에, 배운 모든 것이 무대에 오르는 순간

방금 끈 컴퓨터는 캄캄하다. 화면은 꺼져 있고 메모리는 텅 비어 있다. 그런데 우리는 커널이 모든 것을 관리한다고 배웠다. 프로세스를 띄우고, 메모리에 벽을 세우고, 시스템 콜을 받아 준다고 말이다. 그 커널은 지금 어디에 있을까? 전원이 꺼져 있으니 메모리에는 아무것도 없어요. 그렇다면 전원 버튼을 누르는 그 한순간에 텅 빈 컴퓨터는 어떻게 살아 움직이는 컴퓨터로 바뀔까?

01

전원을 누르면 텅 빈 컴퓨터가 깨어난다

전원이 꺼진 컴퓨터를 떠올려 보자. 메모리는 깨끗이 비어 있다. 그렇게 많이 배운 커널도, 거기서 가지를 뻗던 프로세스들도 지금은 메모리에 한 줄도 없다. 전기가 흐르지 않으니 당연한 일이에요.
전원 버튼을 누르면 누군가는 첫걸음을 떼야 한다. 그 첫걸음을 떼는 것은 커널이 아니라, 메인보드의 칩 안에 늘 저장되어 있는 아주 작은 프로그램이다. 이것을 시동 프로그램, 또는 펌웨어라고 부른다.
펌웨어는 전원이 들어오면 가장 먼저 깨어나도록 처음부터 그 자리에 들어 있어요.

메모리: 텅 빔
칩
전원 꺼짐

전원 켜기를 누르면, 메모리가 텅 비어 있던 컴퓨터에서 칩 안의 작은 시동 프로그램(펌웨어, 파랑)이 가장 먼저 깨어난다. 커널은 아직 어디에도 없어요.

깨어난 것은 작은 펌웨어 하나뿐이고 메모리는 여전히 거의 비어 있다. 펌웨어는 똑똑하지 않다. 부품이 제대로 붙어 있는지 간단히 점검하는 것 말고는 화면을 꾸미지도, 앱을 띄우지도 못한다.
펌웨어가 아는 것은 진짜 일꾼을 데려오는 방법 하나다. 그 일꾼이 바로 커널이에요. 그런데 커널은 지금 메모리에 없다. 전원이 꺼져 있는 동안 커널은 디스크에 파일로 잠들어 있었기 때문이다.
그러니 펌웨어가 할 일은 분명하다. 디스크로 가서 커널을 데려오는 것이다.

02

펌웨어가 디스크에서 커널을 메모리로 올린다

여기서 지난 레슨의 말을 떠올려 보자. 커널은 늘 메모리에 머물며 모든 것을 관리한다고 했다. 그런데 늘 머문다는 커널도 어느 순간에는 처음으로 메모리에 올라와야 한다. 그 순간이 바로 지금이에요.
펌웨어는 디스크에서 커널 파일을 찾아 한 덩이씩 메모리로 옮긴다. 실제 컴퓨터에서는 펌웨어가 먼저 부트로더라는 작은 프로그램을 불러오고, 부트로더가 커널을 올리는 경우가 많다. 어느 쪽이든 텅 비어 있던 메모리에 드디어 커널이 자리를 잡는다.
이 영역 내내 모든 일의 주인공으로 불러 온 커널이 부팅의 이 장면에서 처음으로 무대에 오르는 것이다.

펌웨어
디스크 (커널 파일이 잠들어 있음)
커널
커널
커널
커널
메모리

버튼을 누를 때마다 디스크에 파일로 잠들어 있던 커널(금색)이 한 덩이씩 메모리로 올라온다. 네 덩이가 다 올라오면, 늘 머문다던 커널이 비로소 처음 자리를 잡아요.

커널이 메모리에 다 올라오면 펌웨어는 조용히 일을 넘긴다. 작은 시동 프로그램의 역할은 여기까지다. 진짜 일꾼을 깨워 자리에 앉혔으니 이제 무대는 커널의 것이에요.
깨어난 커널은 가장 먼저 무엇을 할까? 커널 혼자서는 우리 눈에 보이는 일을 하나도 하지 못한다. 화면의 아이콘도, 키보드 입력을 받는 창도, 우리가 여는 앱도 모두 어떤 프로그램이 실행되어야 생긴다.
이 순간부터 컴퓨터 전체를 책임지는 것은 커널이다. 그래서 커널이 맨 처음 하는 일은 첫 번째 프로세스를 낳는 것이다.

03

커널이 첫 프로세스를 낳고, 거기서 가지가 뻗는다

프로세스를 다룬 레슨을 떠올려 보자. 프로그램은 디스크에 잠든 파일이고, 그것이 실행되어 살아 움직이는 상태가 프로세스라고 했다. 부팅에서 커널은 바로 그 일을 처음으로 해낸다.
디스크에 잠들어 있던 프로그램 하나를 골라 실행해 이 컴퓨터의 첫 번째 프로세스로 만드는 것이다. 리눅스에서는 이 첫 프로세스에 1번이라는 번호가 붙는다. 다만 커널이 모든 앱을 일일이 띄우지는 않아요. 첫 프로세스가 다른 프로세스를 낳고, 그 자식이 또 자식을 낳으면서 한 그루 나무처럼 가지를 뻗어 나간다.
우리가 쓰는 수많은 프로그램은 모두 이 첫 프로세스에서 갈라져 나온 가지다.

커널

버튼을 한 번 누르면 커널(금색) 아래에 첫 프로세스가 태어나고, 한 번 더 누르면 거기서 자식 프로세스들(초록)이 가지처럼 뻗어 나와요.

한 번 누르자 첫 프로세스가 생기고, 한 번 더 누르자 그 아래로 자식들이 주르륵 뻗어 나왔다. 이것이 우리가 매일 보는 화면의 출발점이다. 바탕화면을 그리는 프로그램도, 시계도, 알림도 모두 이 가지 어딘가에 있는 프로세스예요.
이 프로세스들은 저마다 자기 메모리 공간을 가지고, 무언가 필요할 때마다 시스템 콜로 커널에 부탁한다. 이 영역에서 따로따로 배운 조각들이 부팅이라는 한 장면 안에서 착착 제자리를 찾아 들어가는 셈이다.
이제 그 조각들을 한 그림에 층층이 쌓을 차례다.

04

층층이 쌓여 완성된다 (하드웨어에서 앱까지)

전체를 한 그림으로 보자. 맨 아래에는 디스크, 메모리, 화면, 키보드 같은 실제 부품인 하드웨어가 있다. 그 위에서 작은 펌웨어가 깨어나 첫걸음을 떼고, 펌웨어가 커널을 올린다.
커널은 하드웨어 바로 위에 앉아 모든 부품과 직접 이야기하면서 메모리에 벽을 세우고 일정을 관리한다. 커널 위에는 첫 프로세스가, 그 위에는 우리가 쓰는 앱들이 차례로 쌓여요.
아래층이 든든히 받쳐야 위층이 설 수 있다. 하드웨어 없이는 펌웨어가, 펌웨어 없이는 커널이, 커널 없이는 프로세스가, 프로세스 없이는 앱이 서지 못해요. 이렇게 아래층이 위층을 받치는 짜임을 흔히 계층 구조라고 부른다.

앱
첫 프로세스
커널
펌웨어
하드웨어

버튼을 누를 때마다 아래에서부터 한 층씩 불이 들어온다. 하드웨어, 펌웨어, 커널, 첫 프로세스, 앱 순서로, 아래층이 먼저 서야 위층을 올릴 수 있어요.

맨 위의 앱까지 불이 들어오면 비로소 우리가 보는 화면이 완성된다. 캄캄하던 컴퓨터가 이제 살아 움직이는 것이다.
재미있는 점은 이 탑이 다 서고 나면 펌웨어가 한 일은 거의 잊힌다는 것이다. 앱을 쓰면서 그 아래에 커널이, 또 그 아래에 펌웨어와 하드웨어가 받치고 있다는 사실을 우리는 거의 의식하지 않아요.
하지만 그 모든 층은 부팅이라는 한순간에 아래에서부터 차곡차곡 세워진 것이다. 컴퓨터를 켤 때 잠깐 뜨는 제조사 로고 화면이 바로 펌웨어가 일하는 시간이고, 그 화면이 사라질 즈음 커널이 일을 넘겨받는다.

05

전원 한 번에 이 모든 것이: 영역 전체를 한 장으로

전체를 한 줄로 이으면 이렇다. 전원을 누르면 칩 안의 작은 펌웨어가 깨어나고, 펌웨어가 디스크에서 커널을 메모리로 올리고, 커널이 첫 프로세스를 낳고, 거기서 앱들이 가지를 뻗는다.
불과 몇 초 사이에 벌어지는 이 한 줄 안에 이 영역에서 배운 거의 모든 것이 들어 있어요. 디스크에 잠든 파일과 메모리, 늘 머무는 커널, 살아 움직이는 프로세스, 프로세스마다의 메모리 공간, 부품과 이야기하는 드라이버, 누가 무엇을 해도 되는지 정하는 권한, 프로세스가 커널에 부탁하는 시스템 콜까지다.
부팅은 이 모든 조각이 처음으로 한자리에, 그것도 정해진 순서대로 등장하는 장면이에요.

다섯 단계를 차례로 누르면 전원, 펌웨어 깨어남, 커널 올리기, 첫 프로세스, 앱 쌓기로 이어지는 부팅 한 바퀴가 한 줄로 꿰어져요.

이제 전원 버튼을 누르는 짧은 순간이 전과 다르게 보일 것이다. 그 안에서 작은 시동 프로그램이 커널을 깨우고, 커널이 첫 프로세스를 낳고, 그 위로 앱들이 한 층씩 올라서는 커다란 조립이 벌어지기 때문이다.
이 영역은 화면 뒤의 보이지 않는 살림꾼이 무슨 일을 하는지 묻는 데서 시작했다. 부팅은 그 살림꾼이 아침에 일어나 집안 살림을 처음부터 차근차근 차리는 장면이에요. 캄캄한 기계가 우리를 맞을 준비를 마치는, 매일 조용히 되풀이되는 한순간이다.

한 줄 정리전원을 누르면 칩 안에 늘 들어 있는 작은 시동 프로그램(펌웨어)이 먼저 깨어난다. 펌웨어는 디스크에서 커널을 찾아 메모리로 올리고, 늘 머문다던 커널은 이때 처음으로 메모리에 자리를 잡아요. 깨어난 커널은 첫 프로세스를 낳고, 거기서 다른 프로세스들이 가지처럼 뻗어 나오며, 그 위로 우리가 쓰는 앱들이 차례로 올라온다. 부팅은 하드웨어에서 펌웨어, 커널, 프로세스, 앱까지 한 층씩 쌓아 올리는 일이고, 전원 한 번에 이 영역에서 배운 커널과 프로세스와 메모리가 모두 순서대로 무대에 오른다.
← 운영체제
이 페이지가 도움 됐다면 후원하기