CPU가 하나의 명령어를 실행하는 흐름인 명령어 사이클과 그 흐름을 방해하는 인터럽트에 대해 배운다.
Ready,Set,Go 🚗🚗🚗
프로그램이란 수많은 명령어들로 이루어져 있다.
프로그램을 실행한다는 것은 이 명령어들을 실행한다는 것을 의미한다.
CPU는 이 명령어들을 하나씩 실행하는데 실행할 때 일정한 주기가 반복된다.
간단하게 인출과 실행을 반복한다.
CPU의 제어신호와 레지스터에 저장된 명령어의 주소를 각각 제어버스와 주소버스에 보내면 메모리는 저장된 데이터를 데이터 버스에 보낸다. (여기까지 인출 사이클)
그 값은 메모리 버퍼 레지스터에 담기고 이를 제어신호가 해석하여 ALU를 실행시킨다(여기까지 실행 사이클)
하지만 이렇게 간단하지만은 않다.
간접 주소 지정 방식을 기억해보면 메모리에 2번 접근한다.
왜냐하면 오퍼랜드에 유효주소의 주소가 저장되고 메모리에 유효주소와 데이터가 저장되어 있기 때문이다.
이 경우 인출사이클, 간접사이클(인출사이클 한번더), 실행사이클의 과정이 추가된다는 것을 알 수 있다.
하지만 한가지 과정이 추가될 수 있다.
바로 인터럽트가 발생했을 때!
인터럽트란
CPU가 수행 중인 작업이 방해를 받아 중단될 수 있는데, CPU의 작업을 방해하는 신호가 인터럽트이다.
인터럽트는 크게 동기 인터럽트와 비동기 인터럽트가 있다.
CPU 내부에서 발생하는 인터럽트
실행하는 프로그래밍상의 오류
예외가 발생하면 CPU는 하던 일을 중단하고 해당 예외를 처리한다.
종류 : 폴트, 트랩, 중단, 소프르웨어 인터럽트
CPU가 예외를 처리하고 돌아왔을 때 예외가 발생한 명령어부터 실행하느냐, 예외가 발생한 명령어의 다음 명령어부터 실행하느냐에 따라 폴트와 트랩으로 나뉜다.
트랩의 대표적인 예시는 디버깅이다.
중단은 CPU가 실행중인 프로그램을 강제로 중단시킬 수 밖에 없는 심각한 오류를 발견했을 때 발생하는 예외이다.
소프프트웨어 인터럽트는 시스템 호출이 발생했을 때 나타난다.
입출력장치에 의해 발생하는 인터럽트 = 알람 역할
ex) 입출력장치 : 프린트, 마우스, 키보드 등 외부연결장치
CPU가 프린트를 실행시킨다.
-> 언제 완료될지 모르니까 계속 확인한다.
CPU가 프린트를 실행시킨다.
-> 하드웨어 인터럽트(프린트 완료되었다는 알람)가 오기 전까지 다른 명령어를 실행시키고 있는다.
둘의 차이를 보면 당연히 하드웨어 인터럽트가 올 때까지 다른 명령어를 실행시키고 있는 것이 CPU를 효율적으로 사용하고 있는 것이다.