[OS] 인터럽트 (Interrupt)

Jay·2021년 4월 19일
1

Computer Science

목록 보기
45/50
post-thumbnail

인터럽트 !?

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

인터럽트 당한 시점의 레지스터와 PC(Program Counter : 다음 번에 실행할 명령어 주소)를 PCB에 저장해두고 CPU의 제어를 인터럽트 서비스 루틴에 넘긴다.

지금 수행 중인 일보다 더 중요한 일(ex. 입출력, 우선 순위 연산 등)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야 한다.

외부/내부 인터럽트는 CPU의 하드웨어 신호에 의해 발생
소프트웨어 인터럽트는 명령어의 수행에 의해 발생

외부 인터럽트

  • 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
    전원 이상, 기계 착오, 외부 신호, 입출력

내부 인터럽트

  • Trap이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생
    0으로 나누기가 발생, 오버플로우, 명령어를 잘못 사용한 경우(Exception), 디버깅시 break point

소프트웨어 인터럽트

  • 프로그램 처리 중 명령의 요청에 의해 발생한 것 (SVC 인터럽트)
    사용자가 프로그램을 실행시킬 때 발생, 소프트웨어 이용 중에 다른 프로세스를 실행 시키면 시분할 처리를 위해 자원 할당 동작이 수행된다.

인터럽트 발생 처리 과정


사진 출처 : https://mindstation.tistory.com/164

  1. 인터럽트 요청 발생
  2. 프로그램 수행 중단
    • 현재 수행중인 명령의 수행이 완료된 시점에서 중단
    • 현재의 주기억 장치 사이클이 끝나는 시점이 아님
  3. PC에 기억되어 있는 주소를 안전한 곳에 기억시켜서 보존
    • 상태 레지스터와 PC 등을 스택에 잠시 저장한다.
  4. 인터럽트 전처리 실행
    • 원인 파악
    • 처리 루틴을 호출
  5. 인터럽트 처리 루틴 수행
    • 프로그램의 상태를 안전한 곳에 기억시켜 보존
    • 해결
  6. 보존 시킨 PC의 값을 PC에, 그리고 보존시킨 프로그램의 상태를 환원시킨 프로그램의 수행을 중단되었던 곳에서부터 계속하여 수행.

전반적으로 PC의 값을 안전한 곳에 기억시켜 보존하고, 원인 판단, 인터럽트 처리루틴의 수행을 개시시키는 순서로 이뤄진다.

근데 위 처럼 인터럽트 기능이 없다면, 컨트롤러가 특정한 일을 할 시기를 알기 위해 지속적으로 체크를 해야 한다
이는 폴링이다.


즉, 컨트롤러가 입력을 받아들이는 방법(우선순위 판별방법)에는 2가지가 있다.

  • 폴링 방식

    • 사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
    • 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행. (하드웨어에 비해 속도가 느리다)
  • 인터럽트 방식

    • MCU 자체가 하드웨적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식
      • daisy chain
      • 병렬 우선순위 부여

인터럽트 방식은 HW로 지원 받아야 하는 제약이 있지만,
폴링에 비해 신속 대응이 가능하다.
그래서 실시간 대응의 경우 = 인터럽트 방식이 필수적이다.


면접 질문

Q. 한컴오피스 '한글'을 클릭 후 빈 화면어 커서가 깜빡이고 있다. 이때 hello world를 작성하면 컴퓨터 내부에서 어떤일이 발생하는가?

  • 키보드에서 사용자 입력이 들어오면 키보드 컨트롤러가 인터럽트를 발생시켜서 CPU에게 키가 입력 되었다는 사실을 알려준다.
  • CPU는 현재 수행중이던 작업의 상태를 저장하고 인터럽트 요청 처리를 위해 OS내에 정의된 키보드 인터럽트 처리 루틴을 찾아간다.
  • 키보드 인터럽트 처리 루틴은 키보드로부터 입력받은 내용을 메모리의 특정 부분에 저장해서 해당 프로그램에게 키보드 입력이 들어왔음을 알리며 인터럽트 처리를 완료한다.
  • 인터럽트 처리가 끝나면 인터럽트 발생 직전 상태를 복구시켜 중단된 작업을 재개한다.

Reference

profile
Android Developer - Come to my medium (https://medium.com/@wodbs135)

0개의 댓글