Machineboy空
CPU ③ 명령어 사이클과 인터럽트 본문
CPU는 메모리로부터 명령어나 데이터를 가져와서 실행하기도 하고 필요하면 메모리에 값을 저장하기도 한다.
명령어 사이클 ?
CPU가 메모리의 실행 프로그램을 실행하는데 일정한 패턴이 있고, 정해진 패턴 흐름에 따라 명령어를 처리한다.
인터럽트 ?
정해진 흐름을 방해받기도 한다. 정해진 흐름을 끊는 신호.
1) 명령어 사이클 (Instruction cycle)
프로그램 속 명령어들은 일정한 주기가 반복되며 실행되고 이 주기를 명령어 사이클(Instruction cycle)이라고 한다.
인출 사이클 (Fetch Cycle) | 메모리에 저장된 명령어를 실행하려면 가장 먼저 CPU로 가져와야 한다. |
![]() |
실행 사이클 (Execution Cycle) | 가져 와서 실행 | ![]() |
하지만 CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다.
이 경우, 간접 사이클이 추가되기도 한다.
2) 인터럽트 (Interrupt)
- CPU의 정해진 흐름을 끊는 전기 신호
- CPU가 꼭 주목해야 할 때, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생
- "대리, 이거 급한 거니까 지금 하던 일 멈추고 이것부터 처리해주게 "
동기 인터럽트(exception) | 비동기 인터럽트(hardware interrupt) |
CPU가 예기치 못한 상황을 접했을 때 발생 | 주로 입출력장치에 의해 발생 ex) 알림(세탁기 완료 알림, 전자레인지 조리 알림)과 같은 역할 |
![]() |
![]() ![]() ex) 키보드 같은 입출력장치에서 스페이스 바 누르면 CPU가 그것을 인지하고 정해진 흐름을 중단하고 입력을 처리해줘야겠다하는 식으로 행동하게 됌 |
2-1) 비동기 인터럽트 (hardware Interrupt)
- 비동기 인터럽트(hardware interrupt)의 필요성
입출력 작업 도중에도 효율적으로 명령어를 처리하기 위한 하드웨어 인터럽트
- 하드웨어 인터럽트의 처리 순서
인터럽트 요청 신호 | ![]() |
|
인터럽트 플래그 | ![]() ![]() |
현재 인터럽트를 받아들일 수 있다, 없다를 판단하는 플래그 *모든 인터럽트를 인터럽트 플래그로 막을 수 있는 것은 아니다 |
인터럽트 벡터 | ![]() |
인터럽트마다 고유한 인터럽트 서비스 루틴의 시작 주소를 가지고 있다 메모리에 인터럽트 벡터 테이블이 있다. |
인터럽트 서비스 루틴 |
![]() ![]() ![]() |
예) 루틴A에는 프린터의 서비스 루틴, B에는 키도브 서비스 루틴 등이 적혀있음 |
즉, CPU가 인터럽트를 처리한다
== '인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아 온다'
+ 인터럽트 시작 주소는 인터럽트 벡터를 통해 알 수 있다.
+ 인터럽트가 발생하면 메모리 스택 영역에 지금 작업 내용을 백업하고 인터럽트를 실행
'Computer > CS' 카테고리의 다른 글
CPU 성능 향상 ② 명령어 병렬 처리 기법 - 명령어 파이프라인(Instruction Pipeline), 슈퍼스칼라(Superscalar), 비순차적 명령어 처리(OOOE) (0) | 2024.01.05 |
---|---|
CPU 성능 향상 ① 빠른 CPU를 위한 설계 기법 - 클럭(clock), 코어(core), 스레드(thread) (0) | 2024.01.05 |
CPU ② 레지스터 (1) | 2024.01.04 |
CPU ① ALU와 제어장치 (1) | 2024.01.04 |
C 언어 컴파일 과정 : 전처리(preprocess) - 컴파일(compile) - 어셈블(assemble) - 링크(link) (0) | 2024.01.04 |