본문 바로가기
카테고리 없음

[기획 연재 18편] 운영체제(OS)의 탄생: 하드웨어라는 야수를 조련하는 지휘자 (커널의 역할)

by khhjyc_ 2026. 1. 19.

서론: 지휘자 없는 오케스트라

바이올린, 첼로, 팀파니 등 수백 개의 악기가 있습니다. 연주자들에게 "알아서 연주하세요"라고 하면 어떤 일이 벌어질까요? 훌륭한 음악 대신 끔찍한 소음만 가득할 것입니다. 누군가는 "바이올린, 지금 켜세요", "팀파니, 지금은 쉬세요"라고 지시해야 합니다.

컴퓨터도 똑같습니다. CPU, 메모리, 하드디스크, 모니터라는 강력한 하드웨어(악기)들이 있지만, 이를 통제할 시스템이 없다면 고철 덩어리에 불과합니다.

오늘 18편에서는 이 하드웨어라는 야수들을 조련하여 우리가 편리하게 마우스를 클릭할 수 있게 해주는 거대한 지휘자, '운영체제(Operating System, OS)'의 탄생 배경과 원리를 알아봅니다.

본론 1: 왜 운영체제가 필요한가?

지난 17편에서 다룬 '임베디드 시스템'은 한 가지 일만 하니까 OS가 없거나 아주 단순해도 됩니다. 하지만 우리가 쓰는 PC는 게임도 하고, 음악도 듣고, 인터넷도 해야 합니다.

만약 OS(윈도우 등)가 없다면, 여러분은 한글 프로그램을 켤 때마다 이런 코드를 짜야 합니다.
"하드디스크 3번 트랙을 돌려서 데이터를 읽고, 모니터의 1024번째 픽셀에 흰색 점을 찍어라..."

이건 불가능하죠. 그래서 운영체제가 중간에 나서서 "복잡한 건 내가 할 테니, 사용자는 그냥 아이콘만 더블 클릭하세요"라고 '추상화(Abstraction)'를 제공하는 것입니다.

본론 2: 커널(Kernel), OS의 심장

운영체제는 껍데기(Shell)와 알맹이(Kernel)로 나뉩니다. 우리가 보는 바탕화면은 껍데기에 불과하고, 진짜 핵심은 '커널(Kernel)'입니다.

  • 자원 관리자: 어떤 프로그램에 CPU를 몇 초 빌려줄지(스케줄링), 누구에게 메모리 땅을 얼마나 떼어줄지 결정하는 절대 권력자입니다.
  • 보안관: 프로그램 A가 허락 없이 프로그램 B의 메모리를 훔쳐보려 하면, 커널이 즉시 차단하고 A를 강제 종료시킵니다. (이것이 "프로그램이 응답하지 않습니다" 오류의 정체입니다.)

리눅스(Linux), 안드로이드(Android), 윈도우(Windows) 모두 겉모습은 다르지만, 그 깊은 곳에는 C언어로 작성된 커널이 살아서 숨 쉬고 있습니다.

본론 3: 시스템 호출(System Call), 커널에게 부탁하기

일반 프로그램(카카오톡, 크롬 등)은 하드웨어를 직접 건드릴 권한이 없습니다. 하드디스크에 파일을 저장하고 싶으면 어떻게 해야 할까요? 커널에게 "저장 좀 해주세요"라고 부탁해야 합니다.

이 부탁하는 과정을 '시스템 콜(System Call)'이라고 합니다.
개발자가 C언어로 printf("Hello");라고 적으면, 내부적으로는 OS에게 "모니터에 글자 좀 띄워줘"라고 시스템 콜을 보내는 복잡한 과정이 일어납니다. 우리는 OS 덕분에 이 복잡함을 모르고 편하게 코딩할 수 있는 것입니다.

결론: 가장 거대한 C언어 프로젝트

운영체제는 인류가 만든 소프트웨어 중 가장 복잡하고 정교한 시스템입니다. 그리고 놀랍게도 이 거대한 시스템의 대부분은 우리가 지금까지 배워온 C언어로 작성되어 있습니다.

C언어를 배운다는 것은, 단순히 언어 하나를 배우는 게 아니라 이 거대한 디지털 세상의 '법칙'을 배우는 것입니다.

다음 [Part 19. 컴파일러의 번역 기술] 편에서는, 우리가 작성한 영어 코드(Source Code)를 기계가 이해하는 0과 1(Machine Code)로 바꿔주는 '통역사'의 신기한 기술에 대해 알아보겠습니다.