커널: 모든 걸 관장하는 운영체제의 핵
지난 강에서 프로그램은 공식 창구(시스템 콜)에 부탁하고, 창구를 넘는 순간 잠깐 커널 모드로 바뀐다고 했죠. 그런데 그 창구 뒤에서 강력한 권한으로 실제 일을 처리해 주는 건 도대체 누구일까요? 그리고 그 이름이 왜 하필 커널 모드였을까요? 오늘은 운영체제의 가장 깊은 중심, 늘 그 자리를 지키는 핵을 정면으로 만나 봐요.
창구 뒤엔 누가 있나
지난 강을 떠올려 봐요. 프로그램은 울타리 안에 갇혀 하드웨어를 직접 못 만지고, 일이 필요하면 시스템 콜이라는 공식 창구에 부탁했죠. 그리고 창구를 넘는 순간 CPU가 잠깐 커널 모드로 바뀌어 그 일을 처리하고 돌아왔어요. 그때 우리는 한 가지를 일부러 안 들여다봤어요. 창구 뒤에서 그 강력한 권한으로 실제 일을 해 주는 존재 말이에요. 창구는 어디까지나 부탁을 받는 입구일 뿐이고, 그 안쪽에서 진짜로 디스크를 읽고 화면에 점을 찍는 일꾼이 따로 있어요. 그 일꾼의 이름이 바로 커널이에요.
창구를 눌러 그 뒤를 들여다보세요. 시스템 콜 창구 뒤에 가려져 있던 핵, 커널이 드러나요. 부탁을 실제로 처리한 건 바로 이 커널이었어요.
커널이 드러났죠. 강력한 커널 모드라는 이름도 이제 이해가 돼요. 그 강한 권한은 바로 이 커널이 일할 때 쓰는 힘이라서, 그 이름이 붙은 거예요. 그런데 이 커널은 부탁이 들어올 때만 잠깐 나타났다 사라지는 걸까요? 그렇지 않아요. 다음에서는 커널이 언제부터 언제까지 그 자리에 있는지를 봐요.
커널은 늘 깨어 있어요
우리가 쓰는 프로그램은 켰다 껐다 해요. 음악 앱을 열었다가 닫고, 브라우저를 띄웠다가 끄죠. 앱은 필요할 때 메모리에 올라왔다가, 닫으면 메모리에서 내려가요. 그런데 커널은 달라요. 컴퓨터를 켜는 순간 가장 먼저 메모리에 자리를 잡고, 전원을 끌 때까지 한 번도 그 자리를 떠나지 않아요. 앱이 아무리 들고 나도, 커널은 늘 그 밑에서 깨어 있어요. 생각해 보면 당연해요. 앱을 메모리에 올리고 내리는 일, 누구에게 CPU를 줄지 정하는 일, 그 모든 일을 하는 게 커널이니까요. 커널이 잠들면 그 일을 해 줄 사람이 아무도 없어요.
앱들을 눌러 켰다 껐다 해 보세요. 앱 칸은 켜지고 꺼지지만, 맨 아래 커널 칸은 늘 켜진 채로 그대로예요. 커널은 부팅부터 종료까지 메모리에 상주해요.
앱은 깜빡거려도 커널 칸은 한결같이 켜져 있었죠. 커널은 무대 뒤에서 막을 올리고 내리는 사람 같아요. 배우들은 나왔다 들어가지만, 그 사람은 공연 내내 자리를 지켜요. 그런데 커널은 늘 그 자리에서 정확히 무슨 일을 하는 걸까요? 사실 우리가 이 영역에서 배운 거의 모든 일이 다 커널의 손에서 돌아가고 있었어요. 다음에서 한자리에 모아 봐요.
모든 자원의 관제탑
이 영역을 거쳐 오며 우리는 여러 가지를 배웠어요. 누구에게 CPU를 먼저 줄지 정하는 스케줄링, 진짜 메모리보다 큰 척하는 가상 메모리, 새 장치를 알아보는 드라이버, 파일을 정리하는 체계, 누가 무엇을 할 수 있는지 보는 권한 확인까지요. 그때는 따로따로 배웠지만, 사실 이 모든 일을 실제로 해내는 손은 하나예요. 바로 커널이에요. 커널은 마치 공항의 관제탑 같아요. 비행기마다 언제 뜨고 내릴지, 어느 활주로를 쓸지를 한곳에서 정하듯, 커널은 CPU, 메모리, 장치, 파일이라는 자원을 누구에게 얼마나 줄지 한 손에서 관장해요.
자원 하나하나를 눌러 보세요. CPU 스케줄링, 메모리, 드라이버, 파일, 권한 어느 것을 누르든, 그 일을 관장하는 건 가운데 커널이라고 하이라이트돼요. 모든 자원이 커널 한 손에서 돌아가요.
어느 자원을 눌러도 길이 커널로 모였죠. 흩어져 보이던 일들이 사실 하나의 중심에서 돌아가고 있었던 거예요. 그런데 커널이 이렇게 강력한 일을 다 한다면, 위험하진 않을까요? 아무 프로그램이나 이 힘을 쓸 수 있다면 큰일이겠죠. 그래서 컴퓨터는 힘의 세계를 둘로 나눠 둬요. 다음에서 그 경계를 들여다봐요.
두 모드의 경계
지난 강에서 잠깐 봤던 두 모드를 다시 떠올려 봐요. 하나는 사용자 모드. 우리의 앱들이 사는, 힘이 제한된 세계예요. 다른 하나는 커널 모드. 하드웨어든 뭐든 직접 만질 수 있는, 커널이 일하는 강한 세계죠. 둘 사이에는 분명한 경계가 있어요. 사용자 모드에 있는 앱은 하드웨어에 직접 손을 못 뻗어요. 오직 커널 모드에 있는 커널만 하드웨어를 직접 만질 수 있죠. 그래서 앱이 무언가를 직접 하려 들면 막히고, 커널에게 부탁해 커널 모드를 거쳐야만 그 일이 이뤄져요. 이 경계 덕분에 강한 힘은 믿을 수 있는 커널 한 곳에만 모여 있어요.
모드를 눌러 전환해 보세요. 사용자 모드일 땐 하드웨어에 직접 손을 뻗으면 막혀요(빨강). 커널 모드일 때만 하드웨어 접근이 허용돼요(초록). 강한 힘은 커널 모드 안에만 있어요.
사용자 모드에선 막히고 커널 모드에서만 통했죠. 강한 힘이 커널 한 곳에 모여 있다는 건 든든한 일이에요. 위험한 행동이 한 곳만 거치니, 그 한 곳만 잘 지키면 되니까요. 하지만 동시에 조금 아찔한 생각도 들어요. 모든 게 커널 한 곳에 걸려 있다면, 만약 그 커널 자체에 문제가 생기면 어떻게 될까요? 마지막에서 그 질문으로 오늘 배운 걸 정리해요.
커널이 멈추면
오늘 본 것을 한 줄로 모아 봐요. 커널은 시스템 콜 창구 뒤에서 실제 일을 처리하는 핵심 프로그램이고, 부팅부터 종료까지 늘 메모리에 상주하며, CPU와 메모리와 장치와 파일과 권한이라는 모든 자원을 한 손에서 관장해요. 강한 커널 모드는 커널이 일할 때 쓰는 힘이고요. 그래서 이런 일이 벌어져요. 앱 하나가 잘못돼 멈추거나 죽어도, 그 위에 커널이 살아 있으니 그 앱만 정리하고 나머지는 멀쩡히 굴러가요. 우리가 먹통이 된 앱 하나만 강제로 닫고 계속 쓸 수 있는 게 그 덕분이죠. 하지만 커널 자체가 멈추면 이야기가 완전히 달라져요. 앱을 정리해 줄, 자원을 나눠 줄, 부탁을 처리해 줄 그 한 손이 사라지는 거라서, 그 위의 모든 앱과 시스템 전체가 한꺼번에 멈춰 버려요. 컴퓨터가 갑자기 새파래지거나 먹통이 되며 다시 켜야만 하는 그 드문 순간이, 바로 커널이 더는 버티지 못한 때예요.
앱 하나를 눌러 멈춰 보세요. 커널이 살아 있어 그 앱만 정리되고 나머지는 멀쩡해요. 마지막으로 커널을 눌러 멈추면, 그 위의 모든 것이 한꺼번에 정지(빨강)해요. 모든 게 커널 하나에 달려 있어요.
이제 운영체제의 한가운데가 또렷이 보여요. 지금까지 따로 배운 스케줄링, 메모리, 드라이버, 파일, 권한, 시스템 콜이 모두 이 커널 한 손에서 돌아가고 있었던 거죠. 그런데 자원을 한 손에서 나눠 주다 보면 새로운 골칫거리가 생겨요. 두 프로그램이 서로 가진 걸 안 놓고 상대 것만 기다리면, 둘 다 영영 멈춰 버리는 거예요. 다음 강에서는 그렇게 서로 양보 안 할 때 벌어지는 교착을 만나 봐요.