[OS] 시스템 콜 & 인터럽트

do_it·2025년 9월 30일

os

목록 보기
2/13

0. 시스템 콜?

사용자 프로그램이 운영체제의 서비스를 요청할 때 사용하는 인터페이스

  • 일반 사용자 프로그램은 직접 하드웨어나 커널 기능을 사용할 수 없음
  • 따라서 운영체제에 요청을 보내는 유일한 통로 → 시스템 콜!
  • 시스템 콜은 SW 인터럽트를 발생시켜 커널 모드로 진입하게 함
    내부적으로는 trap 명령어 등을 이용해 CPU에게 커널 코드 실행을 요청함
  • 시스템 콜은 소프트웨어 인터럽트이자 예외

시스템 콜의 종류

분류시스템 콜 예시설명
프로세스 제어fork(), exec(), exit(), wait()프로세스 생성, 종료, 실행
파일 조작open(), read(), write(), close()파일 열기, 읽기, 쓰기 등
장치 제어ioctl(), read(), write()장치와의 입출력
정보 유지/관리getpid(), alarm(), sleep()시간/프로세스 정보
통신pipe(), shmget(), send(), recv()IPC, 네트워크 통신 등

시스템 콜 처리 과정

  1. 사용자 프로그램에서 시스템 콜 요청
    • e.g., read(fd, buffer, size);
  2. 소프트웨어 인터럽트(Trap) 발생
    • CPU가 모드 비트를 커널 모드로 변경
  3. 커널 진입 후 시스템 콜 핸들러 실행
    • OS는 어떤 시스템 콜인지 식별 (보통 시스템 콜 번호로)
  4. 커널이 필요한 작업 수행
    • 예: 파일 시스템에서 데이터를 읽어옴
  5. 결과를 사용자 공간에 복사
  6. 커널에서 사용자 모드로 복귀
    • 저장했던 사용자 프로그램 상태로 돌아가 계속 실행


1. 인터럽트

인터럽트란?

CPU가 프로그램을 실행하는 도중에 현재 작업을 잠시 중단하고,
시스템에 발생한 긴급한 상황이나 요청을 처리하기 위해 CPU의 제어권을 운영체제로 넘기는 메커니즘

인터럽트가 말생하면 CPU의 제어권은 즉시 운영체제(커널)로 넘어감

→ 인터럽트: CPU에게 “지금 처리해야 할 일이 생겼다”하고 알려주는 신호

→ CPU는 현재 작업을 잠깐 멈추고, 해당 이벤트를 처리한 후 원래 작업으로 복귀

  • 인터럽트는 발생 원인에 따라 크게 2가지 종류로 나뉨
종류원인예시
하드웨어 인터럽트CPU 외부의 하드웨어 장치가 발생키보드 입력, 마우스 클릭, 디스크 작업 완료, 타이머 종료
소프트웨어 인터럽트 (트랩/예외)CPU 내부에서 프로그램 실행 중 발생시스템 콜 (OS 서비스 요청), 예외 (프로그램 오류)

2. 인터럽트 처리 흐름

인터럽트가 발생하면 CPU는 다음의 과정을 통해 안전하게 처리함

  1. 인터럽트 발생
    하드웨어 장치 / 소프트웨어 요청 (트랩)이 CPU에 인터럽트 신호를 보냄
  2. CPU의 현재 작업 중단 & 상태 저장 (컨텍스트 저장)
    CPU는 현재 실행 중이던 프로그램의 상태(레지스터 값, PC 값 등)를 PCB나 스택에 안전하게 저장함
    나중에 원래의 작업을 재개하기 위함
    [c.f] PCB (Process Control Block)?
  3. 모드 전환 → 커널 모드 진
    CPU 모드 비트가 사용자 모드에서 커널 모드로 자동 전환됨
    CPU가 커널 모드로 전환되어 OS 제어권으로 넘어감
  4. 인터럽트 핸들러 실행
    CPU는 미리 정해진 메모리 주소 (인터럽트 벡터)를 참조하여 해당 인터럽트를 처리할 OS 커널 내의 함수, 즉 인터럽트 핸들러를 찾아 실행함
  5. 복구 및 복귀
    핸들러의 처리가 완료되면, CPU에 저장했던 프로그램의 상태(Context)를 복원하고,
    사용자 모드로 복귀하여 원래 중단되었던 명령어부터 실행을 재개함

3. 인터럽트 & 예외

CPU 이벤트
├── 인터럽트 (Interrupt)         ← 외부 발생 (하드웨어 장치 등)
└── 예외 (Exception)            ← 내부 발생 (CPU 내부 실행 중 발생)
     ├── 비의도적 예외          ← 0으로 나누기, 페이지 폴트 등
     └── 소프트웨어 인터럽트     ← 의도적 예외 = 시스템  (trap)

예외?

현재 실행 중인 명령어에서 문제가 생겨 운영체제가 개입해야 하는 상황

프로그램의 명령어가 실행되는 과정에서 CPU 내부적으로 발생하는 동기적(Synchronous) 이벤트
하드웨어 장치(키보드, 디스크)에 의해 비동기적으로 발생하는 일반적인 하드웨어 인터럽트와 구별됨

예외 유형정의예시
오류 (Fault/Error)프로그램의 실행을 계속할 수 없는 치명적인 상황0으로 나누기 (Divide by Zero),
유효하지 않은 명령어 실행
트랩 (Trap)의도적으로 OS 서비스를 요청하기 위해 발생시키는 예외시스템 콜(System Call) 호출
중단 (Abort)복구할 수 없는 심각한 오류하드웨어 고장, 메모리 패리티 오류 등

예외 처리의 작동 흐름

  1. 예외 발생
  2. 컨텍스트 저장
  3. 모드 전환: 모드비트가 커널모드(0)로 자동 설정됨
  4. 예외 핸들러 호출
  5. 예외 처리
  6. 복귀

인터럽트 & 예외

항목인터럽트 (Interrupt)예외 (Exception)
발생 위치CPU 외부에서 발생CPU 내부에서 발생
원인하드웨어 장치나 소프트웨어의 요청현재 실행 중인 명령어에서 문제 발생
처리 주체인터럽트 핸들러예외 핸들러
의도성대부분 비의도적 (입출력 완료 등)의도적 or 오류에 의한 발생
예시키보드 입력, 타이머 완료, 네트워크 수신0으로 나누기, 페이지 폴트, 시스템 콜(trap)
공통점모두 커널 모드 진입, 핸들러로 처리됨
  • 인터럽트와 예외는 모두 CPU가 현재 실행을 멈추고 커널 모드로 진입하게 만드는 사건이지만,
    어디서 발생하느냐, 왜 발생하느냐, 의도적인가 아닌가에 따라 다름
  • 예외는 "CPU가 뭔가 잘못 실행하려고 할 때" 발생하고,
    인터럽트는 "CPU 외부에서 무언가 알려줄 때" 발생
  • 둘 다 정상적인 프로그램 흐름을 바꾸고, 커널 모드로 진입하는 이벤트
  • 둘 다 인터럽트 핸들러 (예외 핸들러)를 통해 처리


4. 인터럽트 핸들러 (Interrupt Handler)

or 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine)
: 인터럽트가 발생했을 때 운영체제 커널 내부에서 해당 요청을 처리하는 전용 코드 조각 (함수)

[주요 역할]

  • 발생한 인터럽트 식별 : 어떤 인터럽트가 발생했는지 확인
  • 요청 처리: HW 인터럽트라면 I/O 장치의 상태를 확인하고 데이터를 처리하며, 시스템 콜이라면 사용자가 요청한 OS 서비스를 실행함
  • 상태 정리: 인터럽트 발생으로 변경된 시스템 상태를 정리하고, 해당 인터럽트 요청을 완료했음을 CPu에 알림

0개의 댓글