인터럽트는 프로그램을 실행하는 도중 예상하지 못한 상황이 발생해서 현재 실행중인 작업을 중단하고 발생한 상황을 처리한 후 다시 작업으로 복귀하는 것을 말합니다.
프로그램을 실행하는 도중 예상하지 못한 상황은 무엇이 있을까요?

프로그램은 사진과 같이 이미 작성해놓은 명령어의 집합입니다. 이 명령어를 하나씩 처리하는 도중 예상하지 못한 상황이 발생한 것입니다.
복잡하게 생각하지 말고, 정확히 사진의 프로그램만을 실행한다고 생각해봅시다.
이 프로그램의 명령어를 작성할 때 예상하지 못한 것은 무엇이 있을까요?
만약 이 명령어들을 하나씩 실행할 때 정전이 발생한다면 어떻게 될까요? 이 코드에서는 그런 부분을 고려하지 않고 있습니다.
그렇다면 이 명령어를 하나씩 실행하다가 마우스 클릭이 발생한다면 어떻게 될까요? 이 부분도 예상하긴 어렵습니다.
이런 상황들을 모두 예측해서 코드를 작성하는 것은 불가능 합니다.
이런 예상치 못한 상황이 발생했을 때 인터럽트라는 방식으로 상황을 처리하고 복귀하는 것입니다.
앞서 예상치 못한 상황에 대해 말했습니다.
하지만 예상하지 못했다는 것을 의도하지 않은 동작이라고 혼동하면 안됩니다.
앞서 설명한 마우스 클릭만 생각해도 실행중인 프로그램이 예상하지 못했을 뿐, 사용자는 의도적으로 클릭을 했습니다.
다른 예시를 들자면 CPU에서 여러 프로세스들을 시분할 처리하기 위해서, 타이머로 인한 인터럽트를 의도적으로 발생시키고 컨텍스트 스위칭을 진행합니다.
예상하지 못했을 뿐이지 의도했을 수도 있고, 의도하지 않았을 수도 있습니다.
"예상하지 못했다는 것" != "의도하지 않았다는 것"
예상치 못한 상황이 발생했을 때 어떻게 처리되는지 과정을 살펴보면서 흐름을 알아봅시다.
굵게 표시된 단어들은 밑에서 설명합니다.
1. CPU에서 명령어를 순차적으로 실행하는 중
2. 특정 장치에서 예상치 못한 상황 발생
3. 해당 장치에서 인터럽트 요청 라인(Interrupt Request Line)으로 신호를 보냄
4. CPU가 인터럽트 요청 라인을 통해 인터럽트 감지
5. 인터럽트 백터를 통해 인터럽트 서비스 루틴(ISR)의 주소를 찾음
6. 찾은 인터럽트 서비스 루틴으로 점프
7. 인터럽트 서비스 루틴을 수행 후 복귀
CPU 하드웨어에는 인터럽트 요청 라인이라는 선이 있습니다.
인터럽트가 발생하면 인터럽트가 발생한 장치에서 CPU의 인터럽트 요청 라인으로 신호를 보내는 것입니다.
CPU는 하나의 명령어의 실행을 완료할 때마다, 인터럽트 요청 라인을 확인하여 인터럽트가 발생했는지를 확인합니다.
다음 사진과 같이 인터럽트 요청 라인으로 신호를 보낸다는 것만 알아둡시다.


사진 출처 : https://velog.io/@woo00oo/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt
인터럽트 서비스 루틴이란 예상치 못한 상황을 처리하기 위한 서비스 루틴을 말합니다.
CPU에서 명령어들을 처리하던 도중 갑자기 "마우스 클릭"이 발생했을 때 다음과 같이 처리할 수 있을 것입니다.
이렇게 "마우스 클릭"이라는 인터럽트가 발생했을 때 처리하는 과정을 인터럽트 서비스 루틴이라 부릅니다.
인터럽트는 굉장히 빈번히 일어납니다.
단순히 마우스 클릭이나 키보드 입력 등등을 생각해봐도 꽤 많이 일어난다고 느낄 수 있습니다.
그렇기 때문에 인터럽트가 발생했을 때 인터럽트 서비스 루틴(ISR)을 빠르게 찾아서 처리해줘야 합니다.
ISR을 빠르게 찾기 위해서 ISR의 시작 주소들이 담긴 배열을 메모리에 만들어 놓습니다.
그리고 인터럽트 요청 라인으로 온 인터럽트 번호를 읽고, 이 번호를 사용해서 배열에 접근해서 ISR의 시작 주소로 점프합니다.

이렇게 인터럽트 서비스 루틴을 빠르게 찾기 위해서 만들어진 것이 인터럽트 벡터 테이블입니다.
인터럽트 서비스 루틴을 수행한 후 복귀와 관련된 내용은 나중에 추가하겠습니다.
입출력 장치, 타이밍 장치, 전원 등의 외부적인 요인에 의해서 발생하는 인터럽트를 의미합니다.
앞서 살펴본 예시들과 마찬가지로 하드웨어 장치가 인터럽트 요청 라인에 신호를 보내면서 처리됩니다.
프로세스(실행중인 명령어) 내부에서 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트를 의미합니다.
내부 인터럽트의 경우 하드웨어가 아닌 소프트웨어가 인터럽트 요청 라인에 직접 신호를 보냅니다.
즉, 실행 중인 프로그램이 스스로 인터럽트를 발생시킨다고 보면 됩니다.
도서 운영체제
널널한 개발자 - 인터럽트에서 DirectX까지
IT위키 - 인터럽트
https://baebalja.tistory.com/354