[CS] 리눅스에서의 인터럽트

Cookie·2025년 2월 21일
0

ComputerScience

목록 보기
6/10
post-thumbnail

리눅스에서의 인터럽트

1. 인터럽트란?

인터럽트란

  • 컴퓨터 시스템에서 예기치 않은 일이 발생했을 때 CPU에게 알리는 메커니즘
  • 프로그램이 아닌 외부 요인(하드웨어, OS 내부 이벤트 등)에 의해 제어 흐름이 변경
  • 예를 들어, 키보드 입력, 네트워크 패킷 도착, 타이머 이벤트 등에서 발생함




2. 인터럽트의 동작 흐름

  1. 인터럽트 발생

    • 하드웨어(키보드, 네트워크, 타이머 등) 또는 소프트웨어(시스템 호출, 예외 등)에서 인터럽트 발생
  2. CPU 인터럽트 감지 & 상태 저장

    • 실행 중이던 프로그램의 레지스터 값, 스택 정보 저장
  3. 인터럽트 벡터 테이블(IVT) 조회

    • 인터럽트 번호에 맞는 인터럽트 핸들러 주소 확인
  4. 인터럽트 핸들러 실행

    • 해당 인터럽트에 대한 적절한 처리 수행
    • (예: 키보드 입력 → 입력 버퍼 저장, 네트워크 패킷 → 수신 버퍼 저장)
  5. 원래 실행 중이던 코드로 복귀

    • 저장했던 CPU 상태 복원, 프로그램 실행 재개




3. 인터럽트의 종류

💠 하드웨어 인터럽트

  • 외부 장치(키보드, 마우스, 네트워크 등)에서 발생
  • 인터럽트 컨트롤러(PIC, APIC 등)가 관리

💠 소프트웨어 인터럽트

  • 프로그램이 명령어를 실행하면서 직접 발생
  • 대표적으로 시스템 호출(syscall), 예외(Exception), 페이지 폴트(Page Fault) 등이 있음

💠 동기 인터럽트 vs 비동기 인터럽트

  • 동기 인터럽트: 실행 중인 명령어와 동기적으로 발생 (예: 0으로 나누기)
  • 비동기 인터럽트: 외부 이벤트(키보드, 네트워크 등)로 인해 비동기적으로 발생




4. 인터럽트 핸들러

  • 인터럽트 발생 시, 해당 인터럽트를 처리하는 핸들러(Interrupt Handler) 실행됨

  • 리눅스에서는 각 인터럽트 번호에 맞는 핸들러를 등록하여 관리

  • 핸들러는 빠르게 실행되어야 하며, 복잡한 작업은 소프트웨어 인터럽트(SoftIRQ), 태스크릿(Tasklet), 워크큐(Workqueue) 등으로 처리




5. CPU와 인터럽트

인터럽트 서비스 루틴 이라고도 불림

  • CPU는 인터럽트 발생 시 인터럽트 벡터 테이블(IVT)을 참조하여 적절한 핸들러 실행

  • 실행 중이던 프로그램의 상태(레지스터 값 등)는 스택(Stack Space)에 저장

  • 인터럽트 처리가 끝나면 스택에 저장된 상태 복원 후 원래 실행하던 코드로 복귀




6. 인터럽트 처리 시 주의할 점

과도한 인터럽트 발생 → 성능 저하

  • 네트워크 패킷이 과도하게 들어올 경우 CPU 사용률 급증 가능
  • 인터럽트 발생을 줄이기 위해 폴링(Polling), 인터럽트 코얼레싱(Interrupt Coalescing) 기법 사용

인터럽트 핸들러는 최대한 빠르게 실행

  • 핸들러 실행 시간이 길어지면 다른 인터럽트 처리가 지연될 수 있음
  • 복잡한 작업은 SoftIRQ, Workqueue 등으로 지연 처리

중첩 인터럽트 관리

  • 고우선순위 인터럽트는 저우선순위 인터럽트보다 먼저 처리
  • 필요하면 특정 인터럽트는 마스킹(Masking)하여 차단
profile
나만의 공부 일지... [임시 休]

0개의 댓글