[운영체제] 인터럽트

지니🧸·2023년 4월 7일
0

CS 저장소

목록 보기
2/48
post-custom-banner

🦢 인터럽트

인터럽트: CPU 프로그램 실행 시 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우, 마이크로프로세서에게 알려 처리할 수 있도록 하는 것

  • 필요 이유: 입출력 연산이 CPU 명령 수행속도보다 현저히 느림 > CPU가 입출력 처리를 기다릴 시간이 없기 때문에 입출력이 연산 완료 후 CPU에게 작업 완료를 알리는 것
  • 하드웨어/소프트웨어는 인터럽트를 발생시키기 위해 CPU내에 있는 인터럽트 라인을 세팅함
  • CPU는 매번 명령을 수행하기 전에 인터럽트라인이 세팅되어있는지 검사함
  • 하드웨어 인터럽트: 하드웨어가 발생시키는 인터럽트
    • CPU가 아닌 다른 하드웨어 장치가 CPU에게 알릴 것이 있거나, CPU 서비스를 요청해야 할 경우
  • 소프트웨어 인터럽트: 소프트웨어가 발생시키는 인터럽트
    • 소프트웨어 (사용자 프로그램)가 스스로 인터럽트 라인 생성 (예) 예외 상황, system call

🦢 인터럽트 처리 방법

  • 인터럽트 발생 시 CPU는 현재 진행 중인 작업을 완료하고 현재까지 수행 중이던 상태를 해당 프로세스의 Process Control Block (PCB)에 저장함
    • PCB에는 수행중이던 메모리 주소, 레지스터 값, 하드웨어 상태 등을 저장
  • PC(Program Counter, IP)에 다음 실행할 명령의 주소 저장
  • 인터럽트 벡터를 읽고 ISR 주소값을 얻어 Interrupt Service Routine (ISR)로 점프하여 루틴 실행
  • 해당 코드 실행 후 대피시킨 레지스터 복원
  • ISR의 끝에 IRET 명령어에 의해 인터럽트가 해제
    • IRET 명령어: Interrupt Return 명령어, 이전 테스크로 다시 돌아가는 어셈블리 명령어
      • ISR의 마지막 명령어
  • IRET 명령어가 실행되면 대피시킨 PC 값을 복원하여 이전 실행 위치로 복원

정리:

  1. 프로그램 실행 중단: 현재 실행중이던 명령어까지만 수행

  2. 현재의 프로그램 상태 보존: PC(Program Counter)의 값을 스택에 저장

    • Context을 저장한다고도 함
      • Context: 프로세스의 상태와 관련된 레지스터의 집합
  3. 인터럽트 처리루틴 실행: 인터럽트를 요청한 장치 식별

  4. 인터럽트 서비스 루틴 (ISR) 실행: 인터럽트 원인 파익 & 실질적 작업 수행. 처리기 레지스터 상태 보존.

    • 서비스 루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 재귀적으로 1~5 수행
  5. 상태 복구: 인터럽트 발생시 저장해둔 PC(Program Counter)값을 다시 복구

  6. 중단된 프로그램 실행 재개: PC값을 이용해 이전에 수행중이던 프로그램 재개

🦢 Polling vs. Interrupt

Polling vs. Interrupt

  • Polling:
    • 하드웨어의 변화를 지속적으로 읽어들이며 이벤트의 수행 여부를 주기적으로 검사
    • 해당 신호를 받았을 때 이벤트 실행
  • Interrupt:
    • 하드웨어의 변화를 감지하여 외부로부터 입력을 CPU가 알아채는 방법
    • 이벤트를 수행하라는 IRQ를 받으면 인터럽트 핸들러를 통해 ISR이 동작

🦢 하드웨어/소프트웨어 인터럽트

하드웨어 인터럽트:

  • CPU 외부의 디스크 컨트롤러/주변장치로부터 요구됨
  • 운영체제의 처리를 요하는 상황을 알리기 위해 전지적인 신호를 사용해 구현
  • HW 인터럽트 종류:
    • 기계검사 인터럽트: 프로그램 실행 중 갑작스런 정전/컴퓨터 내에서 기계적 문제
    • 외부 인터럽트: 오퍼레이터나 타이머에 의해 의도적으로 프로그램 중단
    • 입출력 인터럽트: 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청됨
    • 프로그램검사 인터럽트: 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제 발생

소프트웨어 인터럽트: CPU 내부에서 자신이 실행한 명령/CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생

  • 프로그램 실행 중 프로그램 상의 처리 불가능한 오류/이벤트를 알리기 위함 > trap/exception (예외)
  • 프로그램 내에서 특별한 서비스를 요구하거나 감시를 목적으로 의도적으로 프로그램이 발생시킨 특별한 명령어에 의해 발생
  • (예) 존재하지 않는 메모리 주소에 접근, 나눗셈에서 0으로 나누고자 하는 경우

참고:

profile
우당탕탕
post-custom-banner

0개의 댓글