Interrupt & Context Switching

Apr 30, 2019


(1) Interrupt

현재 실행 중인 프로세스와 별도로 외부에서 이벤트(ex: 입출력 동작의 종료 등)가 일어나면 인터럽트가 발생한다.

  • 인터럽트 과정
    1. 인터럽트 발생
    2. 프로그램 실행 중지
    3. 실행 중이던 프로그램의 상태를 보존한다. (다음 실행할 프로그램의 정보가 담긴 Program Counter, 누산기, 스택 메모리, 색인 레지스터, 프로세스 상태와 번호를 Program Control Block에 저장)
    4. 인터럽트 처리 루틴 실행
    5. 인터럽트 서비스 루틴 실행
    6. 상태 복구
    7. 중단되었던 프로그램 실행 재개
  • 입출력 인터럽트 : 입출력 동작이 발생했음을 확인하고 이벤트를 기다리는 프로세스를 준비 상태로 바꾼 후 실행할 프로세스를 결정한다.
  • 클록 인터럽트 : 현재 실행 중인 프로세스의 할당 시간을 조사하여 실행 중인 프로세스를 준비 상태로 바꾸고, 다른 프로세스를 실행 상태로 바꾼다.

(2) Context Switching

이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하여 프로세스를 교환하는 과정

  • 실행 중인 프로세스에 인터럽트가 발생했을 때, 운영체제가 다른 프로세스를 실행 상태로 바꾸고 제어를 넘겨주는 과정에서 프로세스 간 문맥 교환이 일어난다.
  • 하지만, 인터럽트 처리 루틴을 실행한 후, 현재 실행 중인 프로세스를 재실행할 수 있으므로 인터럽트가 무조건 프로세스 간 문맥 교환을 발생시키는 것은 아니다.
  • 프로세스가 준비->실행, 실행->준비, 실행->대기 상태로 바뀔 때 발생한다.
  • 오버헤드 : 어떤 처리를 하기 위해 드는 간접적인 처리시간, 메모리
    • 메모리 속도, 레지스터 수, 특수 명령어의 유무에 따라 결정된다.