명령어 사이클
: 명령어들은
일정한 주기
가 반복되면 실행됨. 이 주기를명령어 사이클
이라 함.
- 인출 사이클
: 메모리에 있는 명령어를 CPU로 가지고 오는 단계- 실행 사이클
: 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계- 간접 사이클
: 메모리 접근이 더 필요한 경우 거치는 단계- 인터럽트 사이클
: 인터럽트가 발생한 경우 거치는 단계
인터럽트(interrupt)
: CPU의 정상적인 작업을 방해하는 신호
종류
- 동기 인터럽트 (=예외)
- CPU에 의해 발생
- CPU가 예기치 못한 상황을 접했을 때 발생 (ex.프로그래밍상의 오류와 같은 예외적인 상황)
일반적으로 인터럽트는 비동기 인터럽트를 의미한다.
- 비동기 인터럽트 (=하드웨어 인터럽트)
- 주로
입출력장치
에 의해 발생- 완료 알림과 같은 알림 역할을 함 (ex.세탁기 완료 알림)
- 입출력 작업 도중
효율적으로 명령어를 처리
하기 위해 사용
ex)
세탁기가 언제 끝날지 모르면 CPU가 계속 확인해야 함 (입출력장치는 CPU에 비해 느리기 때문에 언제 완료될지 모름)
하지만, 비동기 인터럽트를 이용하면 완료됐을때, 알림만 받으면 돼서 그 전까지는 CPU가 자기 일을 할 수 있다.
하드웨어 인터럽트 처리 순서
- 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인함
- CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지 작업을 백업
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
- 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개함
CPU가 인터럽트를 처리한다 == 인터럽트 서비스 루틴을 실행하고, 원래 수행하던 작업으로 다시 되돌아온다
용어 정리
- 인터럽트 요청 신호
: 지금 끼어드는게 가능한지 물어보는 신호- 인터럽트 플래그
: 현재 인터럽트를 받을지 말지 결정하는 비트로 플래그 레지스터에 있음
단, 인터럽트 플래그가 받을 수 없는 상태라도 인터럽트를 받아야 하는 경우가 있는데 이를 막을 수 없는 인터럽트(non maskable interrupt)라고 함- 인터럽트 서비스 루틴
: 인터럽트를 처리하기 위한 프로그램
- CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴 실행
- 프로그램이기 때문에
메모리에 저장
- 인터럽트 벡터
: 각각의 인터럽트를 구분하기 위한 정보 (인터럽트 서비스 루틴의 시작 주소를 포함한 식별 정보)
지금까지 작업한 내용은 스택에 백업하고, 인터럽트 서비스 루틴이 모두 실행되면 작업한 내용을 불러와서 다시 재개한다.
<출처>
"혼자 공부하는 컴퓨터구조+운영체제".강민철.https://www.youtube.com/playlist?list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl (2023.04.14)
책과 강의를 통해 학습한 내용을 요약 정리했습니다.