본문 바로가기

CS

[CS 공부 #3] 운영체제 : 한정된 자원을 어떻게 나눌 것인가?

지난번 네트워크를 통해 연결의 중요성을 논했다면, 오늘은 그 연결된 세상 속에서 가장 근본적인 문제,

바로 '한정된 자원을 어떻게 나눌 것인가'에 대해 이야기해 보려 합니다.

 

이 질문은 비단 컴퓨터 시스템에만 국한되지 않습니다.

우리의 하루, 조직의 시간, 그리고 나 자신의 에너지까지 모두 '유한한 자원'이기 때문이죠.

 

저는 한때 프로젝트를 동시에 일곱 개 맡아 진행한 적이 있습니다.

그때의 제 하루는 마치 과열된 CPU 같았습니다. 회의 알림은 인터럽트처럼 쉴 새 없이 들어왔고, 가장 중요한 문서 작업은 언제나 ‘대기열’(Queue)에 밀려 있었습니다. 그때 처음으로 깨달았습니다.

"이건 단순한 업무 과부하가 아니라, 근본적인 자원 관리 문제구나."


1. 보이지 않는 관리자: 운영체제의 기본 원리

운영체제(OS)는 우리가 보지 못하는 곳에서 이 복잡한 '자원 관리'를 대신해주는 시스템입니다. 수많은 프로그램들이 한꺼번에 실행될 때, 누가 먼저 CPU를 쓸지, 메모리는 얼마나 나눠줄지를 결정하죠.

OS의 목표와 원리는 놀랍도록 단순합니다.

"모두가 조금씩, 그러나 멈추지 않게."

 

이처럼 효율적인 분배는 한정된 자원 속에서도 시스템 전체를 부드럽게 유지하게 합니다. 이는 인간 사회에도 그대로 적용됩니다. 모든 팀원이 '최대치'로 일하면 결국 전체는 과부하로 멈춰버리게 됩니다. 중요한 것은, 누가 언제 멈추고 다시 움직이느냐의 균형입니다.


2. 효율을 설계하다: 스케줄링의 철학

운영체제의 가장 기본적인 기능이 바로 스케줄링(Scheduling)입니다.

CPU 스케줄러는 모든 프로세스에 동일한 '시간 조각(Time Slice)'을 할당하거나, 중요도에 따라 우선순위(Priority)를 조정합니다. 이는 우리가 업무를 배분하는 방식과 정확히 일치합니다.

  • 중요한 일: 더 긴 CPU 시간 할당 (예: 핵심 개발 스프린트)
  • 덜 급한 일: 짧은 CPU 시간 할당 (예: 간단한 검토 및 피드백)
  • 완료된 일: Kill/Terminate (더 이상 자원 낭비 금지)

그때부터 저의 하루도 '운영체제처럼' 바뀌었습니다. 하루를 프로세스로 나누고, 중요한 일에 CPU 시간을 집중 배분했습니다. 불필요한 회의는 Suspend(일시 중지)시키고, 생산성 없는 대화는 Kill(종료)했죠.

결국 멀티태스킹은 착각에 불과했습니다. 운영체제처럼 순서를 정하고, 집중해야 할 순간에만 깨어 있는 것이 진짜 효율이었습니다.

💡 재기 넘치는 유머 한 조각: OS의 관점에서 보면, '갑자기 생각난 아이디어를 메모하는 행위'는 현재 실행 중인 프로세스(주요 업무)를 방해하는 비동기 인터럽트입니다. 중요한 건 '바로 처리'가 아니라 '대기열에 안전하게 넣는 것'이죠. 우리는 메모장이라는 멋진 스풀링 버퍼를 가지고 있으니 안심하세요. 😉


3. 시스템 관리자로서의 '나'

운영체제의 목표가 '효율'이라면, 우리 인간 시스템의 목표는 '의미'일지도 모릅니다.

시스템은 완벽하게 공정하게 나누려 애쓰지만, 사람은 때때로 비효율을 감수하며 관계와 신뢰를 쌓습니다. 완벽한 스케줄러가 없듯,

 

완벽한 하루도 없습니다. 그럼에도 우리는 최적화된 선택을 하려 애씁니다.

결국 '한정된 자원을 나누는 일'은 단순히 기술이 아니라, 태도이자 철학입니다.

 

운영체제는 시스템을 지속시키기 위해 끊임없이 "지금 가장 중요한 프로세스는 무엇인가?"를 판단합니다. 나 역시 그날 이후, 내 안의 스케줄러를 믿기로 했습니다.

 

이제 우리는 운영체제가 아니라 '나'라는 시스템의 관리자가 되어야 합니다. CPU도, 시간도, 마음의 에너지도 모두 유한하니까요. 이 질문 하나로도, 혼잡했던 하루가 조금은 질서를 찾기 시작할 것입니다.

 

다음번엔, 이 자원을 가장 효율적으로 활용하기 위한 또 다른 도구, '알고리즘 – 가장 효율적인 길을 찾는 방법'으로 이야기를 이어가겠습니다. 기대해주세요.