CS

[OS] 인터럽트(Interrupt)

옥돔이와 연근이 2022. 8. 30. 21:35
반응형

인터럽트

💡 인터럽트 (Interrupt)

: CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능

대부분의 컴퓨터는 한 개의 CPU를 사용하므로 한 순간에는 하나의 일 밖에 처리할 수 없다.

따라서 ,어떤 일을 처리하는 도중에 우선 순위가 급한 일을 처리할 필요가 있을 때 대처할 수 있는 방안 필요하다 → 인터럽트


💡 인터럽트 (Interrupt) 필요한 이유

선점형 스케줄러를 예로 들면 프로세스가 Running 중에 스케줄러에 의해 중단되게 된다.

→ 이유는 다른 프로세스로 교체하기 위함으로, 그렇게 하기 위해서는 스케줄러의 코드가 실행이되서 현재 진행중인 프로세스를 중지시킬 수 있어야 한다. 왜냐하면 스케줄러도 하나의 프로그램이니까 !!

그러나 프로세스가 스스로 결정하는것은 진행 중에 I/O장치 혹은 다른 작업을 진행해야 해서 Block 상태가 되는것과 프로세스가 종료되서 Exit상태가 되는 것이다.=. 즉, Running 상태에서는 스케줄러에의해 강제로 Ready상태가 되는 것일뿐, 프로세스가 스스로 중단하는것이 아니라 스케줄러가 강제로 중단을 시키는 것이고 인터럽트는 이러한 부분에서 필요한 기능이다.

*선점형 기법: 프로세스 running 중에 스케쥴러가 이를 중단시키고 다른 프로세스로 교체 가능


💡인터럽트 우선순위

이렇게 인터럽트가 한 개씩만 실행되면 참 좋겠지만 여러 인터럽트가 동시에 발생하는 경우는 많이 존재한다. 이 때 한 개의 CPU인 상황이라면 동시에 여러 개의 인터럽트가 발생한다면 우선 순위를 정해서 순차적으로 처리해야 한다. 이를 인터럽트 우선 순위라 하고 이런 우선 순위는 아래와 같이 중요하고 심각한 인터럽트가 우선적으로 처리되어야 한다.

  1. 전원 공급의 이상
  2. CPU의 기계적인 오류
  3. 외부 신호에 의한 인터럽트
  4. 입출력 전송 요청 및 전송 완료, 전송 오류
  5. 프로그램 검사 인터럽트
  6. 수퍼바이저 호출(SVC 인터럽트)

💡 내부 인터럽트와 외부 인터럽트

하드웨어 인터럽트와 소프트웨어 인터럽트 두가지 경우로 나누는 경우도 있지만, 여기서는 내외부를 소개하겠다.

외부 인터럽트

: 입출력 장치, 전원 등의 외부적인 요인에 의해 발생하는 인터럽트

  • 전원 이상 인터럽트: 정전이나 전원이 이상이 있는 경우
  • 기계 고장 인터럽트: CPU등의 기능적인 동작 오류가 발생한 경우
  • 입출력 인터럽트(I/O Interrupt): 입출력의 종료 등의 이유로 CPU의 수행을 요청하는 인터럽트. → 키보드, 마우스, 저장장치, 프린터 등등

내부 인터럽트

: 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트

  • 0으로 나누는 경우
  • 오버플로우 또는 언더플로우가 발생한 경우
  • 프로그램 상의 오류
  • 프로그램에서 함수 등 명령어를 잘못 사용한 경우
  • 소프트웨어 인터럽트: CPU가 인스트럭션을 수행하는 도중에 일어나는 인터럽트

💡 인터럽트 처리과정

위 그림이 시사하는 바는 다음과 같다. 우선, 명령어 사이클은 인출(fetch stage)
실행(execution stage) 두 가지 단계를 반복해서 수행한다.

그런데 인터럽트 요청이 들어왔다고 해서 바로 이를 처리하는 것이 아니라, 명령어 N의 실행 단계를 마쳐야 한다. 명령어의 실행단계를 마칠 때마다 중앙처리장치는 반복적으로인터럽트 요청이 있는지 계속해서 확인한다. 인터럽트 요청이 있어야 인터럽트 서비스 단계를 진행한다.


참고1: https://whatisthenext.tistory.com/147
참고2: https://velog.io/@hyun0310woo/7.-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

반응형