-
명령어 사이클 + 인터럽트
프로그램 속 명령어는 일정한 주기가 반복되며 실행
이 주기를 명령어 사이클 이라고 함
메모리에 저장된 값을 실행하기 위해서는 인출 이라는 작업이 필요하다.
인출하는 주기를 인출 사이클 이라고 한다.
실행하는 주기를 실행 사이클 이라고 한다


- 인출하고 실행하는 이 사이클이 명령 사이클의 일부로 볼 수 있다.
⚠️ 간혹 인출 사이클을 해도 추가로 메모리에 접근이 필요한 경우도 있다.
위와 같은 경우를 위해 중간에 간접 사이클이 추가될 수 있다.인터럽트?
- 인터럽트는 명령어 사이클로 실행되던 흐름을 끊어버리는 것이다.
- 인터럽트는 동기 인터럽트 + 비동기 인터럽트가 있다
동기 인터럽트?

- CPU가 예기치 못한 상황을 마주할 때 동기 인터럽트가 발생한다.
비동기 인터럽트?(하드웨어 인터럽트)

- 주로 입출력장치에 의해서 발생한다.
- 알림 같은 역할
- 입출력 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용
- 입출력 장치는 CPU에 비해 느리다!!
- 인터럽트가 없다면 CPU는 프린트 완료여부를 계속 찾아봐야 한다.

비동기 인터럽트?(하드웨어 인터럽트) 처리 순서
- 입출력장치는 CPU에 의해 인터럽트 요청 신호를 보냄
- CPU는 실행사이클이 끝나고 명령어를 인출하기 전에 항상 인터럽트 여부를 확인
- CPU는 인터럽트 요청을 확인후 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
- 인터럽트를 받아들일수 있다면 CPU는 지금까지의 작업을 백업한다
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
- 인터럽트 서비스 끝나면 백업해둔 작업을 다시 실행

- 인터럽트 요청신호는 입출력 장치가 CPU한테 보내는 요청신호를 말한다.

- 인터럽트 요청 신호를 받아들이면, 실행 사이클이 끝나고 인터럽트 플래그를 확인한다,
- 인터럽트 플래그로 모든 인터럽트를 제어 할 수 없다.. 정전이나 하드웨어 고장 등 긴급한 인터럽트의 경우는 인터럽트 플래그로 막을수 없다!! => None Maskable interrupt라고 한다.
- 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때, 해당 인터럽트를 처리하기 위한 프로그램
- 인터럽트 서비스 루틴도 프로그램이기 때문에 일반적으로 메모리에 저장되어 있음


- 인터럽트 벡터 : 각각 인터럽트를 구분하기 위한 정보

CPU가 인터럽트를 처리한다는 말은
인터럽트 서비스 루틴을 수행하고, 본래 수행하던 작업으로 돌아온다고 할 수 있다
+ 인터럽트 시작주소는 인터럽트 벡터로 알 수 있다- 근데 궁금한점은 CPU가 메모리에 있는 프로그램을 수행중인데 인터럽트를 받아들이면 레지스텅 있는 값들은 어떻게 백업을 시키는 걸까?? 🤔
- 정답은 메모리에 스택 영역에 수행중이던 프로그램을 백업시킨다고 한다.
'CS지식' 카테고리의 다른 글
CS지식 (명령어 병렬처리 기법) (0) 2025.09.03 CS 지식 (0) 2025.09.03 CS지식 7일차 (0) 2025.09.02 자료구조 - (Linked List) (1) 2025.08.31 CS 지식 6일차 (4) 2025.08.10