명령어 사이클: CPU가 하나의 명령어를 처리하는 정형화된 흐름
인터럽트: 흐름이 끊어지는 상황
1. 명령어 사이클
프로그램은 수많은 명령어로 이루어져 있고, 명령어는 일정 주기가 반복되며 실행되는데 이 주기를 명령어 사이클 이라고 한다.
1.1. 인출사이클 & 실행사이클의 반복
1) 인출 사이클
명령어를 메모리에서 CPU로 가져오는 단계
2) 실행 사이클
CPU로 가져온 명령어를 실행 (해석 & 제어신호 발생)
1.2. 간접 사이클
명령어를 CPU로 가져와도 바로 실행할 수 없는 경우
ex) 간접 주소 지정 방식: 오버랜드 필드에 유효주소의 주소 명시 → 메모리 접근 한번 더 필요
한번 더 메모리에 접근해야함 = 간접 사이클
2. 인터럽트
CPU의 작업을 방해하는 신호
2.1. 동기 인터럽트(예외)
- CPU에 의해 발생
CPU가 명령어를 수행하다가 예외적인 상황이 발생했을 때 발생하는 인터럽트
- 폴트: 예외 처리 직후 예외 발생한 명령어부터 실행 재개
- 트랩: 예외 처리한 직후 예외 발생한 명령어 다음 명령어부터 실행 재개
- 중단: CPU가 실행중인 프로그램 강제로 중단시틸 수 밖에 없는 심각한 오류 발견했을 때 발생하는 예외
- 소프트웨어 인터럽트: 시스템 호출이 발생했을때
2.2 비동기 인터럽트(하드웨어 인터럽트)
- 입출력장치에 의해 발생
CPU가 입출력장치(프린트)에 입출력 작업 부탁하면 작업 끝낸 입출력장치가 CPU에 완료 알림인 인터럽트를 보낸다.
- if) 하드웨어 인터럽트 사용X
CPU는 프린터가 언제 프린트 끝낼지 모르기 때문에 주기적으로 프린터의 완료 여부를 확인해야 한다.
= 알림 없는 전자레인지 앞에서 조리 끝날때까지 서성이는것
- if) 하드웨어 인터럽트 사용O
주기적으로 프린터 완료 여부 확인할 필요 없음 / 프린트 완료 인터럽트 받을 때 까지 다른 작업을 처리할 수 있다.
3. 하드웨어 인터럽트 처리 순서
① 입출력 장치: CPU에 인터럽트 요청신호를 보냄
② CPU: 실행 사이클이 끝나고 명령어 인출 전에 인터럽트 여부를 확인
③ CPU: 인터럽트 요청 확인 & 인터럽트 플래그를 통해 인터럽트 받아들일 수 있는지 여부 확인
④ 인터럽트 받아들일 수 있으면 -> CPU: 지금까지 작업 백업
⑤ CPU: 인터럽트 벡터 참고하여 인터럽트 서비스 루틴 실행
⑥ 인터럽트 서비스 루틴 끝나면 백업한 작업 복구해 실행 재개
* 인터럽트 요청 신호: CPU한테 흐름 끊고 지금 끼어들어도 되는지 물어보는 신호
* 인터럽트 플래그: 하드웨어 인터럽트 받아들일지 & 무시할지 결정하는 플래그
- 인터럽트 플래그가 불가능 = CPU는 인터럽트 요청이 와도 요청 무시
- 인터럽트 플래그가 가능 = CPU는 인터럽트 요청신호를 받아들이고 인터럽트를 처리
+ 인터럽트 플래그가 불가능으로 되어 있어도 무시할 수 없는 인터럽트 요청(non mistakable interrupt)이 있다 (정전, 하드웨어 고장으로 인한 인터럽트)
* 인터럽트 서비스 루틴(인터럽트 핸들러): 인터럽트 처리하기 위한 프로그램
= 어떤 인터럽트가 발생했을때 어떻게 처리하고 작동할지에 대한 정보
→ CPU가 인터럽트를 처리한다 = 인터럽트 서비스 루틴을 수행하고 본래 수행하던 작업으로 되돌아온다
* 인터럽트 벡터: CPU가 각기 다른 인터럽트 서비스 루틴을 구분하기 위한 식별 정보
- 인터럽트 서비스 루틴의 시작주소를 알 수 있다
'CS > [혼자 공부하는 컴퓨터구조 + 운영체제]' 카테고리의 다른 글
[컴퓨터 구조] 5-3. ISA, CISC와 RISC (0) | 2024.05.03 |
---|---|
[컴퓨터 구조] 5-2. 효율적인 CPU를 위한 설계 기법 - 명령어 병렬 처리 기법 (1) | 2024.05.02 |
[컴퓨터 구조] 4-1&2. CPU의 구성요소 (0) | 2024.04.25 |
[컴퓨터구조] 2. 컴퓨터 정보 단위와 인코딩 (0) | 2024.04.24 |
[컴퓨터구조] 1-2. 컴퓨터구조 개요 (2) | 2024.04.22 |