OS (운영체제)

"An operating system is system software that manages computer hardware and software resources."

— 학계와 교과서에서 전해 내려오는 가장 건조하고도 엄밀한 운영체제의 정의.

개발자들에게 가상 메모리와 프로세스라는 우아한 거짓말(추상화)을 믿게 함으로써, CPU 레지스터와 전선 가닥을 직접 납땜하는 파국에서 인류를 구해낸 구세주. 학부 시절 공룡 책(OS 교과서) 두께를 보며 전공을 바꿀까 심각하게 고민하게 만든 만악의 근원 중 하나.

1. 개요

OS(Operating System, 운영체제)는 컴퓨터 하드웨어와 사용자/애플리케이션 프로그램 사이에서 다리 역할을 수행하는 가장 근본적인 시스템 소프트웨어이다. 리눅스, Windows, macOS 등이 여기에 해당한다.

물리적인 CPU, 메모리, 저장 장치 등 날것의 하드웨어는 극도로 단순하고 무자비하지만, 운영체제가 이들을 감싸 '파일(File)', '프로세스', '가상 메모리(Virtual Memory)'라는 아름답고 편리한 고수준 개념으로 포장하여 제공해 준다. 이 덕분에 전 세계 수많은 개발자들은 복잡한 하드웨어 회로도 대신 고수준 프로그래밍 언어로 쾌적하게 코딩할 수 있게 되었다.(...)

2. 운영체제의 핵심 심장: 커널(Kernel)과 시스템 콜(System Call)

2.1. 커널 (Kernel): 하드웨어의 절대 군주

운영체에서 가장 핵심적인 역할을 수행하는 코어 프로그램이 바로 커널(Kernel)이다. 커널은 메모리에 상시 거주하며 CPU 스케줄링, 메모리 관리, 디바이스 드라이버 제어 등 모든 물리 자원의 독점적 관리 권한을 행사한다.

안전성을 위해 커널은 일반 사용자 프로그램이 하드웨어 자원에 함부로 접근하지 못하도록 유저 모드(User Mode)커널 모드(Kernel Mode)라는 이중 모드 아키텍처로 벽을 세워 둔다. 일반 프로그램이 하드웨어에 데이터를 쓰거나 네트워크 패킷을 보내려면, 반드시 커널의 문을 두드려 허락을 받아야 한다.

2.2. 시스템 콜 (System Call): 장벽을 넘나드는 통로

유저 모드의 프로그램이 커널의 권한을 대행해 달라고 정중하게 요청하는 통로가 바로 시스템 콜(System Call)이다. C언어printf() 함수나 파일 읽기 등의 기능은 내부적으로 수많은 시스템 콜을 거쳐 실행된다. 시스템 콜이 호출되는 순간 CPU는 모드를 전환하고 커널 코드를 실행하기 때문에, 과도한 시스템 콜 호출은 프로그램의 성능을 갉아먹는 원인이 되기도 한다.1

3. 프로세스와 스레드 스케줄링, 그리고 자원 관리

3.1. 프로세스(Process) vs 스레드(Thread)

  • 프로세스 (Process): 운영체제로부터 독립된 가상 메모리 공간과 자원을 할당받아 실행 중인 프로그램의 인스턴스. 철저히 격리되어 있어 한 프로세스가 죽어도 다른 프로세스에는 영향을 주지 않는다.
  • 스레드 (Thread): 프로세스 내부에서 실행 흐름을 담당하는 일꾼. 프로세스 내의 메모리와 자원을 동료 스레드들과 공유하기 때문에 통신이 빠르지만, 한 녀석이 메모리를 오염시켜 트래시를 만들면 프로세스 전체가 사이좋게 요단강을 건넌다.(...)

3.2. 스케줄링과 교착 상태 (Deadlock)

CPU는 한 번에 하나의 연산만 할 수 있지만(싱글 코어 기준), 운영체제가 1초에 수백 번씩 실행 프로세스를 교체하는 컨텍스트 스위칭(Context Switching)을 수행하여 사용자가 보기에는 여러 프로그램이 동시에 도는 것처럼 착각하게 만든다. 스케줄러가 이 우선순위를 조율하는 과정에서, 서로가 상대방이 가진 자원을 내놓으라고 영원히 대치하는 교착 상태(Deadlock)가 터지면 시스템 전체가 먹통이 되는 끔찍한 사태가 발생한다.2

4. 공룡 책과 스케줄링 알고리즘

4.1. 공룡 책 (Operating System Concepts)

실버샤츠(Silberschatz) 등이 집필한 운영체제 분야의 바이블로, 표지에 매번 공룡 그림이 그려져 있어 '공룡 책'이라는 친근하면서도 공포스러운 이름으로 통한다. 컴퓨터공학과 학생들에게 중간/기말고사 기간 동안 악명 높은 스케줄링 알고리즘 계산 문제를 풀게 만들며 끝없는 절망과 C학점을 선물해 주는 상징적인 도서다.

5. 여담

  • 블루스크린의 원인: Windows의 상징인 블루스크린(BSOD)은 커널 모드에서 예외 처리가 되지 않은 치명적인 오류가 발생하여, 운영체제가 스스로 시스템 전체가 영구적으로 손상되는 것을 방기하기보다 컴퓨터를 강제 중지시키기 위해 뿜어내는 '마지막 경고'이다.
  • 가상 메모리의 기적: 실제 물리 램(RAM) 용량이 8GB밖에 안 되는데도 개발자들이 16GB가 넘는 대형 게임과 에디터를 동시에 띄울 수 있는 이유는, 운영체제가 디스크 공간의 일부를 메모리처럼 사용하는 페이징(Paging) 기술을 사용하여 개발자를 달콤하게 속이고 있기 때문이다.
  • 인터럽트의 힘: 컴퓨터 마우스를 움직이는 아주 미세한 동작조차, 하드웨어가 CPU에게 '내가 움직였으니 처리해라'라고 신호를 보내는 하드웨어 인터럽트(Interrupt) 메커니즘을 거친다. 컴퓨터는 사실 매 순간 인터럽트의 대홍수 속에서 작동하고 있는 셈이다.

6. 관련 문서

각주

  1. 이러한 성능 한계를 극복하기 위해 최신 고성능 네트워크 카드나 디스크 드라이버는 커널을 거치지 않고 다이렉트로 메모리에 데이터를 꽂는 DMA(Direct Memory Access) 등의 우회 기술을 활용한다.

  2. 현대 커널들은 이 데드락을 실시간으로 감지하고 해결하는 복잡한 알고리즘을 구현하느라 수만 줄의 커널 코드와 싸우고 있다.