seegongsik
내 단어장
운영체제

시스템 콜: 프로그램이 운영체제에 부탁하는 공식 창구

지난 강 끝에서 묘한 빈틈을 하나 봤죠. 운영체제는 파일마다 권한을 정해 두는데, 정작 내 프로그램은 읽기가 허락된 파일조차 디스크에서 직접 꺼내 오지 못한다고요. 사실 프로그램은 디스크도, 화면도, 네트워크도 마음대로 못 건드려요. 단단한 울타리 안에 갇혀 있거든요. 그럼 도대체 어떻게 파일을 열고, 화면에 글자를 띄울까요?

01

프로그램은 울타리 안에 갇혀 있어요 (사용자 모드)

앞에서 운영체제는 프로그램끼리 서로의 메모리를 침범하지 못하게 벽을 세운다고 했죠. 그 벽은 하드웨어에도 똑같이 적용돼요. 보통의 프로그램은 디스크에 직접 손을 뻗을 수도, 화면에 직접 점을 찍을 수도, 네트워크 선을 직접 만질 수도 없어요. 마치 울타리 안에 들어가 있는 셈이죠. 이렇게 갇힌 상태를 사용자 모드라고 불러요. 답답해 보이지만 이유가 있어요. 만약 아무 프로그램이나 하드웨어를 직접 주무를 수 있다면, 실수투성이거나 나쁜 프로그램 하나가 컴퓨터 전체를 망가뜨릴 수 있거든요.

프로그램
디스크

프로그램이 디스크에 직접 손을 뻗어 보세요. 벽에 막혀 차단(빨강)됩니다. 사용자 모드의 프로그램은 하드웨어를 직접 못 만져요.

직접 손을 뻗을 때마다 번번이 막혔죠. 안전을 위해서는 당연한 일이에요. 하지만 그럼 이상하잖아요. 우리가 매일 쓰는 프로그램들은 멀쩡히 파일을 열고, 사진을 보여 주고, 인터넷에 접속하는데요. 갇혀 있다면서, 그 일들은 도대체 어떻게 해내는 걸까요? 비밀은 직접 하는 게 아니라 부탁하는 데 있어요. 다음에서 그 부탁의 방법을 봅시다.

02

해결: 공식 창구에 부탁하기 (시스템 콜)

은행에 가면 우리는 금고에 직접 들어가지 않아요. 창구에 가서 요청서를 내밀면, 열쇠를 가진 직원이 대신 처리해 주죠. 프로그램도 똑같아요. 디스크를 직접 못 여는 대신, 운영체제의 창구에 가서 부탁해요. 이 파일 좀 열어 줘, 이 글자를 화면에 띄워 줘, 인터넷으로 이걸 보내 줘 하고요. 이렇게 운영체제에게 내미는 요청 하나하나를 시스템 콜이라고 불러요. 핵심은, 프로그램이 일을 직접 하지 않고 운영체제에게 시킨다는 거예요. 운영체제는 그럴 권한이 있으니까요.

프로그램
운영체제 창구
디스크

요청서를 눌러 창구에 부탁해 보세요. 프로그램(금색)이 파일 열기를 운영체제 창구(파랑)에 내밀면, 운영체제가 대신 처리해 결과를 돌려줘요(초록).

창구에 부탁하니 안 되던 일이 됐어요. 프로그램은 여전히 울타리 안에 있지만, 운영체제라는 대리인을 통해 바깥일을 해낸 거죠. 그런데 한 가지가 묘해요. 똑같은 디스크인데, 프로그램이 직접 만지면 막히고 운영체제가 만지면 되는 이유가 뭘까요? 창구를 넘는 그 짧은 순간에, 무언가가 바뀌는 게 분명해요. 다음에서 그 변화를 들여다봅시다.

03

창구를 넘으면 권한이 바뀐다 (사용자 모드 ↔ 커널 모드)

비밀은 CPU에 두 개의 모드가 있다는 거예요. 하나는 사용자 모드. 우리의 프로그램이 사는, 힘이 제한된 세계죠. 다른 하나는 커널 모드. 하드웨어든 뭐든 다 만질 수 있는, 운영체제의 강력한 세계예요. 평소 프로그램은 사용자 모드로 달려요. 그러다 시스템 콜로 창구를 넘는 순간, CPU가 잠깐 커널 모드로 바뀌어요. 그 강한 권한으로 운영체제가 부탁받은 일을 처리하고, 끝나면 곧바로 다시 사용자 모드로 돌아와 프로그램에게 결과를 건네줘요. 강한 힘은 딱 요청을 처리하는 그 순간에만, 그것도 이 창구에서만 주어지고 곧 거둬들여지는 거죠.

사용자 모드

시스템 콜을 눌러 보세요. 프로그램은 사용자 모드(금색)로 달리다가, 창구를 넘는 순간 커널 모드(파랑)로 바뀌어 일을 처리하고, 다시 사용자 모드로 돌아와요.

모드가 잠깐 바뀌고 다시 돌아오는 이 작은 춤이, 사실 운영체제 안전의 핵심이에요. 힘은 늘 켜져 있지 않고, 부탁이 들어온 그 순간에만 잠깐 켜졌다 꺼지니까요. 그런데 여기서 한 가지 의문이 들죠. 창구를 넘기만 하면 운영체제가 시키는 대로 다 해 준다면, 결국 프로그램이 직접 하드웨어를 만지는 거랑 뭐가 다르겠어요? 그래서 창구에는 한 가지 일이 더 있어요. 바로 검사예요. 다음에서 봅시다.

04

창구가 하나라서 검사할 수 있다 (권한 확인)

만약 운영체제가 부탁을 받자마자 묻지도 따지지도 않고 다 해 준다면, 창구는 그냥 통과 지점일 뿐이겠죠. 하지만 운영체제는 그러지 않아요. 모든 요청이 반드시 이 하나의 창구를 지나야 하니까, 운영체제는 일을 처리하기 전에 먼저 검사할 수 있어요. 너 이 파일 읽을 권한 있어? 바로 지난 강에서 본 그 권한 확인이 여기서 일어나요. 권한이 있으면 처리해 주고, 없으면 거절하고 오류를 돌려줘요. 좁은 창구 하나가, 모든 위험한 행동이 반드시 지나가는 검문소가 되는 거예요.

요청을 골라 창구에 내보세요. 운영체제가 권한을 검사해요. 허락된 요청은 처리(초록), 금지된 요청(예: 남의 파일 쓰기)은 거절(빨강)하고 오류를 돌려줘요.

허락된 요청은 통과하고, 금지된 요청은 문 앞에서 막혔죠. 창구가 좁다는 게 불편한 게 아니라 오히려 안전장치였어요. 모든 위험한 행동이 반드시 한곳을 지나니, 그 한곳에서만 규칙을 지키면 되거든요. 자, 이제 사용자 모드의 울타리, 부탁이라는 시스템 콜, 잠깐 바뀌는 커널 모드, 그리고 창구에서의 검사까지 한 줄로 꿰어 봅시다.

05

정리: 한 줄로 꿴 왕복, 그리고 창구 뒤의 커널

전체를 한 줄로 보면 이래요. 프로그램은 사용자 모드 울타리 안에서, 하드웨어를 직접 못 만진 채로 달려요. 무언가 필요하면 시스템 콜로 공식 창구에 부탁하죠. 창구를 넘는 순간 CPU가 잠깐 커널 모드로 바뀌고, 운영체제는 먼저 권한을 검사한 뒤 일을 처리해요. 끝나면 다시 사용자 모드로 돌아와 결과를 건네주죠. 그러니까 시스템 콜은 프로그램과 운영체제의 힘을 잇는, 단 하나의 잘 지켜지는 문이에요. 우리가 파일을 열 때, 화면에 점 하나 찍을 때, 인터넷에 무언가 보낼 때, 그 모든 일이 조용히 이 문을 지나갑니다.

단계를 차례로 눌러 한 바퀴를 따라가 보세요. 사용자 프로그램에서 시스템 콜로, 커널 모드 전환과 권한 검사로, 일 처리에서 결과 반환까지. 왕복 한 장으로 정리돼요.

그런데 그 창구 뒤에서, 커널 모드의 강력한 힘으로 실제 일을 처리해 주는 존재는 누구일까요? 운영체제의 가장 깊은 중심, 모든 권한을 쥐고 하드웨어와 직접 이야기하는 그 핵심에는 이름이 있어요. 바로 커널이에요. 시스템 콜은 결국 이 커널에게 보내는 부탁이었던 거죠. 다음 강에서는 드디어 그 커널을 정면으로 만나 봅니다. 지금까지 본 일정, 메모리, 파일, 권한, 창구가 모두 누구의 손에서 돌아가고 있었는지, 한자리에서 보게 될 거예요.

한 줄 정리모든 프로그램은 직접 하드웨어를 못 건드리게 울타리 안(사용자 모드)에 갇혀 있어요. 일을 하려면 운영체제에게 부탁해야 하죠. 그 부탁이 바로 시스템 콜이에요. 파일을 열어 줘, 화면에 띄워 줘 같은 요청을 공식 창구에 내미는 거예요. 창구를 넘는 순간 CPU는 잠깐 강력한 권한(커널 모드)으로 바뀌어 운영체제가 일을 처리하고, 곧 다시 원래 모드로 돌아와요. 창구가 하나뿐이라서 운영체제는 모든 요청을 미리 검사할 수 있고(권한 확인도 여기서), 그 덕분에 울타리는 단단히 서 있으면서도 프로그램은 필요한 일을 해냅니다.
운영체제
이 페이지가 도움 됐다면 후원하기