seegongsik
운영체제

어떻게 커널: 모든 걸 관장하는 운영체제의 핵

지난 레슨에서 프로그램은 공식 창구인 시스템 콜에 부탁하고, 창구를 넘는 순간 CPU가 잠깐 커널 모드로 바뀐다고 했다. 그렇다면 창구 뒤에서 그 강한 권한으로 실제 일을 하는 것은 누구일까? 그 모드의 이름에는 왜 하필 커널이 붙었을까? 이번에는 운영체제의 가장 깊은 중심, 늘 제자리를 지키는 핵을 정면으로 만나요.

01

창구 뒤에는 누가 있을까

지난 레슨을 떠올려 보자. 프로그램은 울타리 안에 갇혀 하드웨어를 직접 만지지 못하고, 일이 필요하면 시스템 콜이라는 공식 창구에 부탁했다. 창구를 넘는 순간 CPU가 잠깐 커널 모드로 바뀌어 일을 처리하고 돌아왔다.
그때 일부러 들여다보지 않은 것이 하나 있어요. 창구 뒤에서 그 강한 권한으로 실제 일을 해 주는 존재다.
창구는 부탁을 받는 입구일 뿐이고, 그 안쪽에는 디스크를 읽고 화면에 점을 찍는 일꾼이 따로 있다. 그 일꾼의 이름이 바로 커널이에요.

프로그램
시스템 콜 창구
?

버튼을 누르면 시스템 콜 창구 뒤에 가려져 있던 칸이 열리며 커널이 드러난다. 프로그램의 부탁을 실제로 처리한 것은 이 커널이었어요.

이제 커널 모드라는 이름도 이해가 된다. 그 강한 권한은 커널이 일할 때 쓰는 힘이라서 그런 이름이 붙은 것이다.
그렇다면 커널은 부탁이 들어올 때만 잠깐 나타났다 사라질까? 그렇지 않아요.
운영체제라는 말을 가장 좁은 뜻으로 쓸 때 가리키는 것도 바로 이 커널이다.
커널이 언제부터 언제까지 그 자리에 있는지가 다음 이야기다.

02

커널은 늘 깨어 있다

우리가 쓰는 앱은 켰다 껐다 한다. 음악 앱을 열었다 닫고, 브라우저를 띄웠다 끈다. 앱은 필요할 때 메모리에 올라왔다가 닫으면 메모리에서 내려간다.
커널은 다르다. 컴퓨터가 켜지고 부팅이 진행되는 동안 메모리에 올라와 자리를 잡고, 전원을 끌 때까지 한 번도 그 자리를 떠나지 않아요. 앱이 아무리 들고 나도 커널은 늘 그 밑에서 깨어 있다.
생각해 보면 당연하다. 앱을 메모리에 올리고 내리는 일, 누구에게 CPU를 줄지 정하는 일을 모두 커널이 하기 때문이다. 커널이 잠들면 그 일을 해 줄 존재가 아무도 남지 않아요.

커널 (상주)늘 켜짐
앱은 켰다 껐다 해도, 커널 칸은 항상 켜진 채예요.

위의 앱 세 칸은 누를 때마다 켜지고 꺼지지만, 맨 아래 커널 칸은 늘 켜진 채 그대로다. 커널은 부팅부터 종료까지 메모리에 머물러요.

앱 칸은 깜빡였어도 커널 칸은 한결같이 켜져 있었다. 커널은 무대 뒤에서 막을 올리고 내리는 사람과 비슷하다. 배우들은 나왔다 들어가지만 그 사람은 공연 내내 자리를 지킨다.
그렇다면 커널은 그 자리에서 정확히 무슨 일을 할까? 사실 이 영역에서 배운 거의 모든 일이 커널의 손에서 돌아가고 있었어요.

03

모든 자원의 관제탑

이 영역을 지나오며 여러 가지를 배웠다. 누구에게 CPU를 먼저 줄지 정하는 스케줄링, 실제보다 큰 메모리를 보여 주는 가상 메모리, 새 장치와 말을 통하게 해 주는 드라이버, 파일을 정리하는 파일 시스템, 누가 무엇을 할 수 있는지 따지는 권한 확인까지다.
그때는 따로따로 배웠지만 이 일을 실제로 해내는 손은 하나다. 바로 커널이에요.
커널은 공항의 관제탑과 비슷하다. 관제탑이 비행기마다 언제 뜨고 내릴지, 어느 활주로를 쓸지를 한곳에서 정하듯, 커널은 CPU, 메모리, 장치, 파일이라는 자원을 누구에게 얼마나 줄지 한 손에서 정한다.

커널
자원을 하나 누르면 그 일을 누가 맡는지 나와요.

다섯 자원 가운데 하나를 누르면 가운데 커널 칸에 불이 들어온다. CPU 스케줄링이든 메모리 · 드라이버 · 파일 · 권한이든, 그 일을 맡은 것은 모두 커널이에요.

어느 자원을 눌러도 길은 커널로 모였다. 흩어져 보이던 일들이 사실은 하나의 중심에서 돌아가고 있던 것이다.
그런데 커널이 이렇게 강한 일을 다 한다면 위험하지 않을까? 아무 프로그램이나 이 힘을 쓸 수 있다면 큰일이 날 거예요.
그래서 컴퓨터는 힘의 세계를 둘로 나눠 둔다.

04

두 모드의 경계

지난 레슨에서 본 두 모드를 다시 떠올려 보자. 사용자 모드는 우리 앱들이 사는, 힘이 제한된 세계다. 커널 모드는 하드웨어든 무엇이든 직접 만질 수 있는, 커널이 일하는 세계예요.
둘 사이에는 분명한 경계가 있다. 사용자 모드의 앱은 하드웨어에 직접 손을 뻗지 못하고, 커널 모드에서 일하는 커널만 하드웨어를 직접 만진다. 그래서 앱이 무언가를 직접 하려 들면 막히고, 커널에 부탁해 커널 모드를 거쳐야만 일이 이루어진다.
이 경계 덕분에 강한 힘은 믿을 수 있는 커널 한곳에만 모여 있어요.

사용자 모드

왼쪽 버튼으로 모드를 바꾸고 오른쪽 버튼으로 하드웨어에 직접 손을 뻗는다. 사용자 모드에서는 막히고(빨강) 커널 모드에서만 허용된다(초록). 강한 힘은 커널 모드 안에만 있어요.

사용자 모드에서는 막혔고 커널 모드에서만 통했다. 강한 힘이 커널 한곳에 모여 있다는 것은 든든한 일이다. 위험한 행동이 한곳만 거치니 그곳만 잘 지키면 되기 때문이에요.
하지만 아찔한 생각도 든다. 모든 것이 커널 하나에 걸려 있다면, 그 커널 자체에 문제가 생기면 어떻게 될까?

05

커널이 멈추면

지금까지 본 것을 모아 보자. 커널은 시스템 콜 창구 뒤에서 실제 일을 처리하는 핵심 프로그램이고, 부팅부터 종료까지 메모리에 머물며, CPU와 메모리와 장치와 파일과 권한이라는 자원을 한 손에서 관장한다. 강한 커널 모드는 커널이 일할 때 쓰는 힘이다.
그래서 앱 하나가 잘못돼 멈추거나 죽어도 그 아래의 커널이 살아 있으면 그 앱만 정리되고 나머지는 멀쩡히 돌아간다. 먹통이 된 앱 하나만 강제로 닫고 컴퓨터를 계속 쓸 수 있는 것도 그 덕분이에요.
하지만 커널 자체가 멈추면 이야기가 완전히 달라진다. 앱을 정리하고 자원을 나눠 주고 부탁을 처리할 그 한 손이 사라지니, 그 위의 모든 앱과 시스템 전체가 한꺼번에 멈춘다. 화면이 갑자기 파랗게 바뀌거나 아무것도 먹히지 않아 다시 켜야만 하는 드문 순간이 바로 커널이 더는 버티지 못한 때예요. 윈도우의 파란 오류 화면이나 리눅스의 커널 패닉이 그런 경우다.

커널
앱을 하나 눌러 멈춘 다음, 커널도 멈춰 봐요.

앱 세 개 가운데 하나를 누르면 그 앱만 멈추고 나머지는 멀쩡하다. 마지막으로 아래의 커널 멈추기 버튼을 누르면 그 위의 모든 것이 한꺼번에 정지해요(빨강).

이제 운영체제의 한가운데가 또렷이 보인다. 따로 배운 스케줄링, 메모리, 드라이버, 파일, 권한, 시스템 콜이 모두 이 커널 한 손에서 돌아가고 있었다.
그런데 자원을 한 손에서 나눠 주다 보면 새로운 골칫거리가 생긴다. 두 프로그램이 저마다 가진 것을 놓지 않고 상대가 가진 것만 기다리면 둘 다 영영 멈춰 버려요.
다음 레슨에서는 서로 양보하지 않을 때 벌어지는 이 교착 상태를 다룬다.

한 줄 정리커널은 운영체제의 핵심 프로그램이다. 시스템 콜이라는 창구 뒤에서 실제 일을 처리하는 것이 커널이고, 커널은 컴퓨터가 부팅될 때부터 꺼질 때까지 늘 메모리에 머문다. 앱은 떴다 꺼졌다 해도 커널은 그동안 한 번도 자리를 비우지 않아요. 지금까지 배운 거의 모든 것, 곧 CPU를 누구에게 줄지 정하는 스케줄링, 가상 메모리, 장치 드라이버, 파일 정리, 권한 검사가 모두 커널의 일이고, 강한 커널 모드는 커널이 일할 때 쓰는 권한이다. 그래서 앱 하나가 죽어도 커널이 정리해 주지만, 커널 자체가 멈추면 붙잡아 줄 것이 없어 시스템 전체가 멈춰요.
← 운영체제
이 페이지가 도움 됐다면 후원하기