[운영체제] Day1 인터럽트

빵코·2024년 4월 3일

📌 인터럽트

CPU 인터럽트

  • CPU가 어떤 작업을 수행하고 있을 때 CPU의 작업을 방해하는 신호를 말함.
  • 방해라고 안좋은 신호인 것만이 아니라 먼저 수행해야 할 명령어가 있음을 알려주는 신호이기도 함.
  • 정상적으로 수행할 수 없는 명령어가 입력되면 CPU는 인터럽트를 발생시키고, 이때의 인터럽트를
    동기인터럽트, '예외'라고 한다. 연산시예외, 입력예외, 파일못찾는 예외 등 코드를 짤때 발생 하는 여러 예외들이 모두 CPU 인터럽트이다.

하드웨어(비동기) 인터럽트

  • 입출력장치(하드웨어)로부터 발생하는 인터럽트는 '비동기 인터럽트'라고 함.

인터럽트 핸들링

  • 인터럽트가 발생하면, 인터럽트에 대응하는 무언가가 동작해야 한다.
    이를 '인터럽트 서비스 루틴'이라 한다.
    인터럽트 서비스 루틴은 인터럽트를 처리하기 위해 특정 인터럽트 신호에 대해 미리 정의되 어 있는 프로그램 또는 함수이다.
    인터럽트가 발생하면 하던동작을 잠시 멈추고 인터럽트 서비스 루틴이 작동한 후 다시 실행하는 것인데 그래서 인터럽트 핸들링이라고도 불린다.

📍 인터럽트 예제

# 인터럽트 예제

# 두개의 모듈 사용
import time # 시간을 제어
import signal # 신호를 처리, 비동기 이벤트에 대한 핸들러 모듈 
            # - 키보드,마우스 등의 인터럽트 발생시 대응 할 수 있게, 대응하여 인터럽트 핸들러를 만들 수 있게 해줌.

def handler(signum, frame) : # signum: 처음으로 인터럽트의 유형 번호를 받게됨 / frame: 메모리 영역 중 정보를 수행하는 역할
  print('키보드 인터럽트 감지')
  print('신호 번호:', signum)
  print('스텍 프레임:', frame)
  exit() # 강제 종료 함수: 인터럽트 발생 시 강제종료

signal.signal(signal.SIGINT, handler) # SIGINT: 키보드인터럽트 상수

while True:
  print('5초 간격으로 츨력 중...')  # 5초마다 출력 반복, 이때 키보드 인터럽트 발생 시 handler함수만 동작하게 됨.
  time.sleep(5)

<실행결과>

=> Signal 모듈을 이용해 인터럽트를 처리하는 파이썬에서의 패턴 확인
운영체제에서 인터럽트에 대한 정의를 미리 해놓았기 때문에 이러한 인터럽트 처리가 가능 한 것

profile
빵먹으면서 코딩하는 개발자를 꿈꾸는 코린이

0개의 댓글