운영체제는 애플리케이션과 하드웨어 사이에서 자원을 관리하는 시스템 소프트웨어다. 프로그램이 CPU를 쓰고, 메모리를 할당받고, 파일을 읽고, 네트워크로 데이터를 보내는 과정은 대부분 운영체제를 거쳐 일어난다.
운영체제를 공부할 때는 용어를 하나씩 외우기보다 “한정된 자원을 여러 프로그램이 안전하게 나눠 쓰게 하려면 무엇이 필요할까?”라는 질문으로 보는 편이 이해하기 쉽다. CPU는 동시에 많은 일을 하는 것처럼 보이지만 실제로는 실행 대상을 계속 바꿔가며 처리하고, 메모리는 각 프로세스가 서로의 영역을 침범하지 못하도록 분리되어야 한다. 파일과 네트워크도 마찬가지로 접근 권한과 동시성 문제가 따라온다.
이 카테고리에서는 그 흐름을 몇 가지 주제로 나눠 정리한다.
프로세스와 스레드
프로세스와 스레드는 실행 단위를 이해하기 위한 출발점이다. 프로세스는 독립된 메모리 공간을 가진 실행 단위이고, 스레드는 같은 프로세스 안에서 실행 흐름을 나눠 가진다. 그래서 멀티 프로세스와 멀티 스레드를 비교할 때는 단순히 “무엇이 더 빠른가”보다 무엇을 공유하고 무엇을 격리할지가 핵심이 된다.
컨텍스트 스위칭
컨텍스트 스위칭은 CPU가 실행 중인 작업을 멈추고 다른 작업으로 넘어가는 과정이다. 이때 운영체제는 현재 실행 상태를 저장하고 다음 작업의 상태를 복원한다. 프로세스 전환과 스레드 전환은 비용이 다르고, 캐시나 TLB 같은 하드웨어 상태에도 영향을 줄 수 있다.
CPU 스케줄링
CPU 스케줄링은 어떤 작업에 CPU를 먼저 줄지 결정하는 문제다. FCFS, SJF, Round Robin, Priority 같은 알고리즘은 각각 공정성, 응답 시간, 처리량 사이에서 다른 선택을 한다. 실제 시스템에서는 하나의 기준만으로는 부족해서, 우선순위와 대기 시간, 선점 여부를 함께 고려한다.
동기화
동기화는 여러 실행 흐름이 같은 자원에 접근할 때 생기는 문제를 다룬다. 공유 변수를 동시에 수정하면 경쟁 조건이 생길 수 있고, 이를 막기 위해 임계 영역, 뮤텍스, 세마포어, 모니터 같은 개념이 나온다. 동기화는 안전성을 높이지만 잘못 쓰면 성능 저하나 교착상태로 이어질 수 있다.
교착상태
교착상태는 여러 프로세스나 스레드가 서로의 자원을 기다리며 아무도 앞으로 나아가지 못하는 상황이다. 상호 배제, 점유와 대기, 비선점, 순환 대기 조건이 함께 만족될 때 발생할 수 있다. 해결 방식은 크게 예방, 회피, 탐지와 복구로 나눌 수 있다.
메모리 관리
메모리 관리는 프로세스가 안전하고 효율적으로 메모리를 쓰도록 만드는 영역이다. 가상 메모리를 사용하면 각 프로세스는 자신만의 연속된 주소 공간을 가진 것처럼 동작하지만, 실제 물리 메모리와는 페이지 단위로 매핑된다. 페이지 폴트, 스와핑, 페이지 교체 알고리즘은 이 구조를 이해할 때 함께 보게 된다.
IPC
IPC는 프로세스 간 통신을 의미한다. 프로세스는 기본적으로 메모리 공간이 분리되어 있기 때문에 데이터를 주고받으려면 별도의 통신 방법이 필요하다. 파이프, 메시지 큐, 공유 메모리, 소켓, 시그널 같은 방식이 있고, 각 방식은 속도와 구현 복잡도, 동기화 부담이 다르다.