탐색으로 돌아가기
Operating System4 / 24 단계

OS Kernel

커널과 시스템 콜

운영체제의 핵심. CPU·메모리·디스크 같은 자원을 관리하고, 응용 프로그램이 안전하게 하드웨어를 쓰도록 중재한다.

커널(Kernel)은 운영체제의 핵심으로, 부팅 후 항상 메모리에 상주하며 하드웨어와 응용 프로그램 사이에서 자원을 중재하는 최상위 특권 소프트웨어다. CPU는 사용자 모드(user mode, ring 3)와 커널 모드(kernel mode, ring 0)라는 두 특권 수준을 하드웨어적으로 구분하며, 응용 프로그램은 파일 입출력이나 메모리 할당처럼 특권이 필요한 작업을 직접 수행할 수 없고 반드시 시스템 콜(system call)을 통해 커널에 요청해야 한다. 시스템 콜은 소프트웨어 인터럽트(trap)나 x86의 SYSCALL/SYSENTER 같은 전용 명령으로 모드 전환(mode switch)을 일으키며, 커널은 시스템 콜 번호를 시스템 콜 테이블에서 조회해 해당 핸들러로 디스패치한 뒤 권한을 검사하고 서비스를 수행한다. 커널은 프로세스 스케줄링, 가상 메모리 관리, 파일 시스템, 장치 드라이버, IPC, 인터럽트 처리 등 여러 서브시스템으로 구성되며, 이 서브시스템들을 어떤 주소 공간에 배치하느냐에 따라 모놀리식(monolithic)과 마이크로커널(microkernel)로 나뉜다. 모놀리식 커널은 모든 서비스를 단일 커널 주소 공간에서 실행해 함수 호출 수준의 빠른 성능을 얻지만 하나의 드라이버 버그가 시스템 전체를 무너뜨릴 수 있고, 마이크로커널은 IPC·기본 스케줄링·기본 메모리 관리만 커널에 두고 드라이버·파일 시스템을 사용자 공간 프로세스로 분리해 안정성과 모듈성을 얻는 대신 메시지 전달 오버헤드를 감수한다. Linux·전통적 Unix는 모놀리식, MINIX·QNX·seL4는 마이크로커널, Windows NT·macOS(XNU)는 두 방식을 절충한 하이브리드(hybrid) 커널이다.

내부 구성

프로세스 스케줄러 (Process Scheduler)
준비 큐(ready queue)의 프로세스/스레드 중 다음에 CPU를 점유할 대상을 선택하고 컨텍스트 스위칭을 유발한다 (CFS, priority scheduling 등)
메모리 관리자 (Memory Manager / VM)
각 프로세스에 격리된 가상 주소 공간을 제공하고, 페이지 테이블·페이지 폴트·요구 페이징(demand paging)·스와핑을 통해 가상 주소를 물리 프레임으로 매핑한다
가상 파일 시스템 (Virtual File System, VFS)
ext4·NTFS·NFS 등 이질적인 파일 시스템에 open/read/write/close라는 통일된 인터페이스를 제공하는 추상화 계층이다
장치 드라이버 (Device Drivers)
일반화된 커널 요청을 특정 하드웨어(디스크·NIC·GPU)에 맞는 명령으로 변환하는 하드웨어 추상화 코드다
시스템 콜 인터페이스 (System Call Interface, SCI)
사용자 공간의 요청을 받아 시스템 콜 번호로 커널 핸들러를 디스패치하는 경계이자 진입점이다
인터럽트 핸들러 (Interrupt Handler / ISR)
타이머·I/O 완료·예외 등 비동기 하드웨어 이벤트가 발생하면 현재 실행을 중단하고 해당 서비스 루틴을 실행한다
IPC 관리자 (IPC Manager)
파이프·공유 메모리·메시지 큐·시그널·소켓 등 프로세스 간 통신 메커니즘을 커널 수준에서 제공·중재한다 (마이크로커널에서는 핵심 기능)
네트워크 스택 (Network Stack)
TCP/IP 등 프로토콜 처리를 담당하며 소켓 API를 통해 사용자 공간에 노출된다

핵심 포인트

  • 커널은 항상 메모리에 상주하는 최상위 특권 소프트웨어로 하드웨어 자원을 중재한다
  • CPU가 사용자 모드(ring 3)와 커널 모드(ring 0)를 하드웨어로 구분해 특권 명령을 보호한다
  • 응용 프로그램은 시스템 콜로만 커널 서비스에 접근하며, trap/SYSCALL 명령으로 모드 전환이 일어난다
  • 시스템 콜 번호를 시스템 콜 테이블에서 조회해 핸들러로 디스패치하고 권한을 검사한다
  • 모놀리식 커널: 모든 서비스가 단일 커널 주소 공간 → 빠르지만 결함 전파 위험 (Linux, Unix)
  • 마이크로커널: 최소 기능만 커널에, 나머지는 사용자 공간 → 안정·모듈성, IPC 오버헤드 (QNX, seL4)
  • 하이브리드 커널은 둘의 절충안 (Windows NT, macOS XNU)

심화

면접에서 자주 나오는 포인트는 '모드 전환(mode switch)'과 '컨텍스트 스위칭(context switch)'의 구분이다. 시스템 콜이 발생하면 사용자 모드→커널 모드로의 모드 전환은 일어나지만, 여전히 같은 프로세스이므로 반드시 컨텍스트 스위칭이 일어나는 것은 아니다. 반대로 스케줄러가 다른 프로세스를 선택하면 페이지 테이블(주소 공간) 교체를 동반하는 훨씬 비싼 컨텍스트 스위칭이 발생한다 — 고전적으로는 TLB 플러시까지 수반하지만, 태그드 TLB(x86의 PCID, ARM의 ASID)를 쓰는 현대 CPU는 주소공간 ID로 엔트리를 구분해 전체 플러시를 상당 부분 회피한다. 또한 인터럽트(하드웨어가 비동기로 발생)와 트랩/예외(소프트웨어 실행 중 동기적으로 발생, 시스템 콜과 0으로 나누기 등)를 혼동하지 않아야 한다. 또 하나 깊은 논점은 마이크로커널의 성능 논쟁이다. 1980~90년대 초기 마이크로커널(Mach)은 IPC 비용 때문에 느리다는 비판을 받았고, 이것이 Torvalds vs Tanenbaum 논쟁의 배경이 되었다. 그러나 seL4처럼 IPC를 극한으로 최적화하고 수학적으로 정확성을 검증(formal verification)한 3세대 마이크로커널이 등장하며 항공·자율주행 등 고신뢰 분야에서 부활했다. 실무적으로 순수 이론대로 구현된 OS는 드물며, Linux는 모놀리식이지만 로더블 커널 모듈(LKM)로 확장성을 확보했고 Windows NT·macOS는 하이브리드로 두 진영의 장점을 취한다는 점을 이해하는 것이 중요하다.

쉽게 말하면 관리사무소(커널)에 요청서(시스템 콜)를 내야 전기·수도를 쓸 수 있는 것.

면접 예상 질문

#커널#시스템 콜#사용자 모드#커널 모드