CS 공부 & 면접 맛보기 0x0F [운영체제] : 인터럽트와 트랩

2025. 1. 20. 23:00코딩 도구/CS 면접 도구

반응형

인터럽트와 트랩

질문

인터럽트(Interrupt)와 트랩(Trap)의 차이점은 무엇인가요?

면접 답변

인터럽트(Interrupt)와 트랩(Trap)은 모두 CPU의 정상적인 명령어 흐름을 제어하는 메커니즘입니다. 그러나 발생 원인과 동작 방식에서 차이가 있습니다.

  • 인터럽트(Interrupt):
    • 외부 하드웨어 장치(키보드, 마우스, 타이머 등)에 의해 발생.
    • 비동기적으로 발생하며, 현재 실행 중인 프로세스를 일시 중지하고 처리.
  • 트랩(Trap):
    • 소프트웨어에 의해 발생하는 예외 상황이나 시스템 호출로 발생.
    • 동기적으로 발생하며, 예외 상황(예: 0으로 나누기) 처리 또는 OS 서비스 요청.

1. 인터럽트(Interrupt)란?

정의: 인터럽트는 CPU가 프로그램 실행을 일시 중단하고 외부 장치의 요청을 처리하기 위해 발생하는 신호입니다.

특징:

  • 비동기적 발생 (외부 이벤트)
  • 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉨

하드웨어 인터럽트 예시:

  • 키보드 입력
  • 마우스 클릭
  • 타이머 인터럽트

소프트웨어 인터럽트 예시:

  • 시스템 콜(System Call)

C++ 인터럽트 예제 (시뮬레이션 코드):

#include <iostream>
#include <csignal>
using namespace std;

void signalHandler(int signum) {
    cout << "Interrupt signal (" << signum << ") received.\n";
    exit(signum);
}

int main() {
    signal(SIGINT, signalHandler);
    cout << "Press Ctrl+C to trigger an interrupt." << endl;
    while (true);
    return 0;
}

2. 트랩(Trap)이란?

정의: 트랩은 소프트웨어적으로 발생하는 예외 상황이나 시스템 호출을 처리하기 위해 CPU가 발생시키는 신호입니다.

특징:

  • 동기적 발생 (현재 실행 중인 명령어와 직접 관련)
  • 예외 상황과 시스템 호출을 포함

예외 상황 예시:

  • 0으로 나누기
  • 메모리 접근 오류

시스템 호출 예시:

  • 파일 읽기/쓰기
  • 메모리 할당 요청

C++ 트랩 예제 (0으로 나누기 시뮬레이션):

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 0;
    try {
        cout << "Result: " << (a / b) << endl;
    } catch (const exception& e) {
        cerr << "Exception caught: Division by zero!" << endl;
    }
    return 0;
}

인터럽트와 트랩의 비교표

구분인터럽트(Interrupt)트랩(Trap)

발생 원인외부 장치 (키보드, 타이머 등)소프트웨어 (예외, 시스템 호출)
발생 시점비동기적 (외부 이벤트)동기적 (현재 명령어와 직접 관련)
예시키보드 입력, 타이머 신호0으로 나누기, 시스템 호출
핸들러 필요 여부필요 (인터럽트 핸들러)필요 (예외 핸들러)

결론

  • 인터럽트와 트랩은 모두 CPU의 흐름을 중단하고 특정 작업을 처리하는 메커니즘입니다.
  • 인터럽트외부 이벤트에 의해 발생하고, 비동기적으로 동작합니다.
  • 트랩소프트웨어 예외 및 시스템 호출로 인해 발생하며, 동기적으로 동작합니다.
반응형