📖인터럽트

CPU가 프로그램을 실행할 때, 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 즉시 중단하고, 발생된 상황을 우선 처리한 후 실행 중이던 작업으로 복귀하여 계속 처리하는 것

  • 우선적으로 처리해야할 일(ex. 입출력, 우선 순위 연산 등)이 발생하였을 때 그것을 처리하고 원래 동작으로 돌아옴

인터럽트가 없다면?

CPU가 장치의 상태를 주기적으로 점검 해야 함 → 그동안 CPU가 다른 연산 할 수 없음 → CPU 사용성 낭비

📖인터럽트 종류

📎하드웨어 인터럽트

입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생

  • 인터럽트라 함은 대부분 하드웨어 인터럽트를 가리킴
  • 전원 이상, 기계 착오, 외부 신호, 입출력

📎소프트웨어 인터럽트

프로그램 처리 중 명령의 요청에 의해 발생 (SVC 인터럽트)

  • 사용자가 프로그램을 실행시킬 때 발생
  • 소프트웨어 이용 중에 다른 프로세스를 실행 시키면 시분할 처리를 위해 자원 할당 동작이 수행

➰TRAP(예외상황)

잘못된 명령이나 데이터를 사용할 때 발생

  • 0으로 나눗셈, 오버플로우, 명령어를 잘못 사용한 경우(Exception), 디버깅 시 break point

Note

Interrupt : 외부에서 발생하는 이벤트로 인해 운영체제에 의해 처리되는 중단 Trap : 프로그램 내부에서 발생하는 예외 상황으로 인해 운영체제에 의해 처리되는 중단

➰시스템 콜

사용자 프로세스가 운영체제의 서비스를 요청하기 위해 커널의 함수를 호출하는 것

📖인터럽트 동작

인터럽트 요청프로그램 중단프로그램 상태 보관인터럽트 처리프로그램 재개

📎인터럽트 동작 예시

process A가 실행 중에 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정

  1. process A는 system call을 통해 인터럽트를 발생시킴

  2. CPU는 현재 수행중인 명령의 수행이 완료된 시점에서 프로그램 실행 중단

  3. 현재까지 수행중이었던 상태 보관하고 해당 process의 PCB(Process Control Block)에 저장

    • PCB에 저장하는 것 : 수행중이던 MEMORY주소, 레지스터 값, 하드웨어 상태, PC(Program Counter, IP): CPU가 다음에 실행할 명령의 주소를 담고 있는 카운터
  4. CPU의 제어를 인터럽트 서비스 루틴에 넘김

  5. 인터럽트 전처리 실행

    • 원인 파악(ex. 데이터를 읽어오라는 명령 받음)
    • 처리 루틴을 호출
  6. 인터럽트 처리 루틴 수행

  7. 이전 실행 위치로 상태 복구

📖인터럽트 우선순위

📎우선순위 판별 방식(컨트롤러가 입력을 받아들이는 방식)

1. 폴링 방식(Polling)

사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식

  • 소프트웨어적인 방식
  • 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행(하드웨어에 비해 속도가 느림)

2. 인터럽트 방식

MCU 자체가 하드웨어적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식

  • 하드웨어적인 방식
  • 직렬 연결 방식(daisy chain), 병렬 연결 방식이 있음
  • 인터럽트는 신속 대응이 가능하므로 실시간 대응의 경우 인터럽트 방식이 필수적