공부해왔듯이 CPU는 메모리로부터 명령어나 데이터들을 갖고와서 실행함, 필요하다면 값을 저장할 수도 있음
CPU는 메모리 안에 있는 프로그램을 정해진 흐름에 따라서 실행하게됨
이 정해진 흐름, 주기를 명령어 사이클 이라고함
CPU는 정해진 흐름으로만 실행을 하는데 그 정해진 신호를 끊는 신호를 인터럽트라고함
명령어 사이클
프로그램 속 명령어들은 일정한 주기가 반복되며 실행
이 주기를 명령어 사이클 이라고함
CPU가 메모리에 있는 어떤 프로그램을 실행하려면?
먼저 메모리에 있는 값을 CPU 레지스터 혹은 CPU 내부로 갖고 와야함
그래야 실행할 수 있으니
인출하는 주기를 인출하는 사이클, 갖고와서 실행하는 사이클을 실행 사이클이라고함
그런데 CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 존재함
위 그림처럼 오퍼랜드에 데이터가 아닌 주소가 존재할 때는 명령어를 가지고 와도 바로 실행이 불가능한 경우가 있음
따라서 인출 사이클과 실행 사이클 사이에 간접 사이클이 추가될 수가 있음
-> 어떤 명령어는 인출과 실행 사이클만으로 실행되고, 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행됨
이게 명령어 사이클의 일부임!
하지만 인터럽트가 존재함 이러한 정해진 흐름을 끊어버리는 것
인터럽트
말 그대로 방해하다, 중단시키다 interrupt
CPU가 꼭 주목해야 할 때, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생
김책임, 이거 급한 거니 지금 하던 일 멈추고 이것부터 처리하게나!
인터럽트의 종류에는 동기 인터럽트와 비동기 인터럽트가 존재한다.
동기 인터럽트 (예외) ? : CPU가 예기치 못한 상황을 접했을 때 발생
EX) CPU가 접근하고자 하는 메모리에 접근했는데 원하는 데이터가 없다던지 혹은 디버깅도 인터럽트의 한 종류임
비동기 인터럽트 (하드웨어 인터럽트) : 주로 입출력장치에 의해 발생 알림(세탁기 완료 알림, 전자레인지 조리 알림) 과 같은 역할
키보드의 입력과 우리가 마우스를 누르는 것 또한 인터럽트의 한 종류라고 말할 수 있음
EX) 키보드나 마우스를 누르면 이런 입력이 들어왔으니 처리해 달라 -> CPU에게 요청하는 것
입출력장치는 CPU에 비해 느림 따라서 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야함
하지만 인터럽트가 있다면 CPU가 다른 일을 하고 있을 테니 완료되면 알려달라고 하고 다른 일을 할 수 있음.
하드웨어 인터럽트의 처리 순서
1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
6. 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개
(1) 인터럽트 요청신호?
CPU는 다른 것을 이미 실행하고 있을 것이기 때문에 입출력장치가 지금 끼어들어도 되는지 신호를 먼저 날림
(2) 인터럽트 서비스 루틴?
인터럽트 서비스 루틴이란 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램
"키보드가 인터럽트 요청을 보내면 이렇게 행동해야 한다"
"마우스가 인터럽트 요청을 보내면 이렇게 행동해야 한다" 등등
(3) 인터럽트 벡터?
각각의 인터럽트를 구분하기 위한 정보
(4) CPU가 인터럽트른 처리한다?
인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다, 그리고 인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다. 프로그램 카운터 및 메모리 주소 레지스터에 저장되어 있는 값들을 스택 영역에 백업 시킨 후 인터럽트 서비스 루틴을 실행하고 그 뒤 다시 백업 데이터를 가져와서 프로그램을 실행한다.
* 인터럽트 요청 신호: CPU의 작업을 방해하는 인터럽트에 대한 요청
* 인터럽트 플래그: 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
* 인터럽트 벡터: 인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보
* 인터럽트 서비스 루틴: 인터럽트를 처리하는 프로그램
'컴퓨터 구조' 카테고리의 다른 글
[2/20 출근 전 공부하는 컴퓨터 구조] C 언어 컴파일 과정 + CPU (0) | 2025.02.20 |
---|---|
[2/17 비전공자가 공부하는 컴퓨터 구조 공부 기록 남기기] 명령어 구조 야근좀 제발 그만!!!!!!! (0) | 2025.02.17 |
[2/11 비전공자가 공부하는 컴퓨터 구조 공부 기록 남기기😁] (0) | 2025.02.12 |
[컴퓨터 구조] 첫번째 공부 (0) | 2024.11.21 |