공부/CS 스터디

[CS 스터디] 2주차 커널 동작과 인터럽트

Kongjak 2026. 5. 4. 17:31

CS 스터디 2주차 - 커널 동작과 인터럽트

커널 모드

커널 모드는 말 그대로 커널에서 실행하는 모드로, 다음과 같은 특징을 가진다.

  • 모든 하드웨어에 직접 접근 가능
  • 모든 CPU 명령어 실행 가능
  • 운영체제가 커널 모드로 실행됨

유저 모드

유저 모드는 userspace에서 동작하는 모드로, 다음과 같은 특징을 가진다.

  • 하드웨어에 직접 접근 불가
  • 제한된 CPU 명령어 실행 가능
  • 일반 애플리케이션이 기본적으로 유저 모드로 실행됨

그렇다면, 유저 모드에서 실행중이던 애플리케이션이 네트워크 처리, 파일 입출력 등 하드웨어에 직접 접근하는 등, 유저 모드 권한 밖의 작업을 하려면 어떻게 동작할까?

이때 애플리케이션은 시스템 콜 (System Call)을 사용한다.

시스템 콜

시스템 콜을 애플리케이션이 커널 기능을 요청할 때 사용하는 인터페이스이다.

유저 모드에서 동작하는 애플리케이션도 파일 입출력, 네트워크 통신, 메모리 관리처럼 하드웨어나 커널 자원이 필요한 작업을 수행해야 한다.

하지만 유저 모드에서는 하드웨어에 직접 접근할 수 없기 때문에, OS가 제공하는 시스템 콜을 통해 커널에 작업을 요청한다.

시스템 콜에는 다음과 같은 종류가 있다.

  • 프로세스 생성 및 삭제
  • 메모리 확보 및 해제
  • 프로세스 간 통신 (IPC)
  • 네트워크
  • 파일 시스템 처리

시스템 콜은 다음과 같이 동작한다.

애플리케이션 실행 (유저 모드)
    ↓
시스템 콜 요청
    ↓
CPU가 커널 모드로 전환
    ↓
커널이 요청한 작업 수행
예: 파일 읽기, 네트워크 송신, 메모리 매핑 등
    ↓
결과 반환
    ↓
CPU가 다시 유저 모드로 복귀
    ↓
애플리케이션 실행 재개

물론 일반적으로 우리가 사용하는 고수준 언어 (Kotlin, Python) 등은 시스템 콜을 내부적으로 래핑하여, API 혹은 라이브러리로 제공하기 때문에 우리가 시스템 콜을 직접 사용하는 경우는 드물다.

인터럽트

인터럽트는 프로그램이 실행 도중, 외부의 이벤트로 인해 현재 작업을 일시 중단하고, 이벤트를 먼저 처리한 후 다시 원래의 작업을 재개하는 것을 말한다.

예를 들어 키보드 입력, 네트워크 패킷 도착, 디스크 I/O 완료, 타이머 만료 등이 발생하면 CPU는 현재 작업을 잠시 중단하고 커널의 인터럽트 처리 루틴을 실행한다.

인터럽트의 실행 순서는 다음과 같다.

인터럽트 발생
    ↓
현재 상태 저장
    ↓
커널 모드 진입
    ↓
인터럽트 핸들러 실행
    ↓
상태 복구
    ↓
기존 작업 재개 또는 다른 작업 실행

여기서 인터럽트 핸들러는 발생한 인터럽트를 처리하는 커널 코드이다.

인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나누어지며, 추가로 인터럽트에 속하지는 않지만, 인터럽트 이야기에 빠질 수 없는 예외가 있다.

하드웨어 인터럽트

하드웨어 인터럽트는 하드웨어에 의해 발생하는 인터럽트로, 일반적으로 CPU가 아닌 다른 하드웨어에서 발생한다. 아래와 같은 종류가 있다.

  • 입출력 인터럽트: 하드 디스크. 네트워크 등 입출력 장치에서 입력을 마치거나 이상을 알리는 인터럽트
  • 타이머 인터럽트: 일정 시간마다 발생하여 운영체제가 CPU 사용 시간과 스케줄링을 관리하도록 돕는 인터럽트
  • 전원 이상 인터럽트: 정전 혹은 전원 공급 이상으로 인해 발생하는 인터럽트
  • 기계 착오 인터럽트: CPU 자체의 오류 혹은 기타 하드웨어 결함으로 인해 발생하는 인터럽트
  • 외부 인터럽트: 사용자가 콘솔에서 강제 종료 명령을 입력하거나, 외부 주변 장치에서 발생하는 인터럽트

소프트웨어 인터럽트

소프트웨어 인터럽트는 소프트웨어 명령에 의해 발생하는 인터럽트로, 시스템 콜이 대표적이다.

예외

예외(Exception)는 프로그램 실행 도중 CPU가 감지한 동기적 이벤트이다. 예외는 현재 실행 중인 명령어와 직접 관련이 있으며, CPU가 이를 감지해 커널의 예외 처리 루틴으로 제어를 넘긴다.

예외에는 다음과 같은 종류가 있다.

  • 0으로 나누기
  • Page fault
  • 잘못된 메모리 접근
  • 권한이 없는 명령어 / 존재하지 않는 명령어 실행