0. 명령어 사이클
명령어 사이클은 컴퓨터가 CPU를 통해 명령어를 처리하는 기본적인 작업 단계이다. 프로그램 속 명령어들은 일정한 주기로 반복되며 실행되고, 이 주기를 명령어 사이클이라고 한다.
간단하게 인출과 실행이 반복되는 명령어 사이클이 있을 수 있다.
간접 주소 지정 방식(오퍼랜드에 유효 주소의 주소를 저장하는 방식)과 같은 주소 지정 방식을 사용할 경우 CPU로 명령어를 가져와도 바로 실행이 불가능할 수 있다. 때문에 간접 사이클이 필요하다.
이러한 정해진 명령어 사이클 중단시키거난 흐름을 끊는 것을 인터럽트라고 한다. 인터럽트는 크게 동기(예외) 인터럽트와 비동기(하드웨어) 인터럽트로 나뉜다.
1. 동기 인터럽트(예외)
- CPU가 예기치 못한 상황을 접했을 때 발생한다.
- 메모리에 접근했는데 해당 메모리에 데이터가 없거나 실행할 수 있는 명령어가 없는 경우 발생할 수 있다.
- 디버깅을 하는 것도 인터럽트라고 할 수 있다.
2. 비동기 인터럽트(하드웨어)
- 주로 입출력 장치에 의해 발생하며 알림과 같은 역할을 한다.
- ex) 세탁기 완료 알림, 마우스 클릭, 키보드 입력 등
- 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용한다.
- 입출력장치는 비교적 CPU보다 느리기 때문에 비동기 인터럽트가 없을 경우에 CPU가 입출력장치에 작업 완료 확인을 계속해서 확인을 해야한다. 하지만 인터럽트가 있기 때문에 입출력 잡업 동안 CPU는 다른 일을 할 수 있다.
4. 인터럽트 처리 순서
- 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
- CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
- 하드웨어 고장이나 정전 등과 관련된 일부 인터럽트는 인터럽트 플래그로 막을 수 없다.(NMI: Non Maskable Interrupt)
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다. (레지스터에 저장된 명령어 주소나 데이터들을 스택 영역에 백업해 놓는다.)
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
- 각각의 인터럽트를 구분하기 위한 정보이며, 시작하려는 인터럽트의 시작 주소를 알기 위해 필요한다. 인터럽트 벡터를 표처럼 모은 인터럽트 벡터 테이블도 메모리에 위치한다.
- 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개한다.
- 인터럽트 서비스 루틴도 프로그램이기 때문에 메모리에 저장된다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 명령어 병령 처리 기법 (0) | 2024.11.20 |
---|---|
[컴퓨터 구조] 빠른 CPU를 위한 설계 기법 (0) | 2024.11.19 |
[컴퓨터 구조] 메모리의 종류 (0) | 2024.11.17 |
[컴퓨터 구조] 시스템 버스(FSB) (0) | 2024.11.16 |
[컴퓨터 구조] CPU의 동작 (0) | 2024.11.13 |