1. 명령어 사이클
- 하나의 명령어를 처리하는 정형화된 흐름
- 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행
- 과정
- 인출 사이클 (fetch cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계
- 실행 사이클 (excution cycle) : 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생
- 간접 사이클 (indirect cycle)
- 간접 주소 지정 방식 등에서는 유효 주소의 주소를 명시하므로 명령어를 인출한다고 바로 실행이 불가능
- 이 경우 명령어 인출을 위해 메모리 접근을 한 번 더 해야 하기 때문에 간접 사이클을 거침
- 인터럽트
- CPU의 작업을 방해하는 신호
- 종류
1. 동기 인터럽트
- CPU가 실행하는 프로그래밍 상의 오류와 같은 예외적인 상황에 마주쳤을 때 발생
2. 비동기 인터럽트
- 주로 입출력 장치에 의해 발생
- 입출력 장치는 CPU보다 속도가 현저히 느리기 때문에 CPU는 입출력 작업의 결과를 바로 받을 수 없음
- 따라서 비동기 인터럽트는 입출력 장치의 작업이 완료될 때까지 CPU가 다른 작업을 처리할 수 있게 해줌
- 프린터와 같은 입출력 장치에 CPU가 작업을 부탁하면 작업을 끝낸 입출력 장치가 CPU에 인터럽트(완료 알림)를 보냄
- 비동기 인터럽트 동작 과정
1. 입출력 장치가 CPU에 인터럽트 요청 신호 보냄
2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인
- 인터럽트 플래그
- 플래그 레지스터 안에 존재
- 가능, 불가능 여부에 따라 CPU가 인터럽트를 받아들일지 말지 결정
- 정전이나 하드웨어 고장으로 인한 인터럽트는 인터럽트 플래그가 불가능으로 설정되어도 반드시 먼저 처리함
4. 가능하다면 지금까지의 작업을 백업
5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
- 인터럽트 서비스 루틴 (인터럽트 핸들러)
- 인터럽트를 처리하기 위한 프로그램
- 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어짐
- 다른 프로그램과 마찬가지로 프로그램 카운터를 비롯한 레지스터들을 사용하면서 실행
- 인터럽트 벡터
- 인터럽트 서비스 루틴을 식별하기 위한 정보
- 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있음
- CPU는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있음
6. 인터럽트 서비스 루틴이 끝나면 백업해 둔 작업을 복구하여 실행
- 인터럽트 처리 과정 정리
1. 인터럽트 서비스 루틴을 실행한 후
2. 본래 수행하던 작업으로 돌아온다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
명령어 병렬 처리 기법 [혼공컴구] (0) | 2023.11.22 |
---|---|
컴퓨터 구조 - 클럭, 코어, 스레드 [혼공컴구] (0) | 2023.11.17 |
컴퓨터 구조 - CPU ( 코어 ) [혼공컴구] (0) | 2023.11.17 |
컴퓨터 구조 - 명령어 [혼공컴구] (0) | 2023.11.17 |
컴퓨터 구조 - 데이터 [혼공컴구] (0) | 2023.11.17 |