-
[Computer Science] CPU : 명령어 사이클과 인터럽트Computer Science 2024. 5. 10. 20:18
CPU의 작동원리 중 명령어 사이클과 인터럽트에 대하여 정리하였습니다.참조 : 인프런 '개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제'
< 사이클 >
프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데, 이 주기를 명령어 사이클(인출-실행-간접)이라고 합니다.
1. 인출 사이클 : 실행할 명령어를 CPU로 가져옵니다.
2. 실행 사이클 : 가져온 명령어를 실행합니다.
3. 간접 사이클 : 추가적으로 메모리에 접근해야 하는 경우(간접 주소 지정 방식 등): 명령어 사이클
< 인터럽트 >
인터럽트란 CPU가 현재 실행 중인 프로그램을 중단하고 다른 코드를 실행하도록 요청하는 신호입니다.
: CPU가 얼른 처리해야 할 다른 작업이 생겼을 때, CPU가 꼭 주목해야할 때 발생
인터럽트의 종류에는 동기 인터럽트(예외), 비동기 인터럽트(하드웨어 인터럽트)가 있습니다.
< 동기 인터럽트(예외) >
CPU가 예기치 못한 상황을 접했을 때 발생
폴트, 트랩, 중단, 소프트웨어 인터럽트 등Ex)
- CPU가 접근하고자 하는 메모리 주소에 접근했는데 원하는 데이터가 없을 경우
- 실행할 수 없는 명령어가 있는경우
- Etc
< 비동기 인터럽트(하드웨어 인터럽트) >
주로 입출력장치에 의해 발생하고, 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용합니다.
Ex) 프린트 완료 여부 확인
: 입출력 장치는 일반적으로 CPU에 비해 느림. 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 하는 번거움 발생
: 인터럽트가 있다면 입출력 작업 동안 CPU는 다른 일을 할 수 있음
[ 하드웨어 인터럽트의 처리 순서 ]
1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냅니다.
2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인합니다.
3. CPU는 인터럽트 요청을 확인하고 플래그 레지스터에 있는 입터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인합니다.
+. 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 건 아닙니다. 하드웨어 고장이나 정전 등 인터럽트 플래그가 막을 수 없는 인터럽트(non maskable interrupt)도 존재합니다.
4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 스택에 백업합니다.
01
5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다.
- 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보(인터럽트 요청 신호 시 함께 전달됩니다)
(ex. 마우스가 보낸 인터럽트 요청인지, 키보드인지 프린터인지 등)
- 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램
(ex. 마우스가(혹은 키보드, 프린터 등) 인터럽트 요청을 보내면 이렇게 행동해야 한다)
6. 인터럽트 서비스루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개합니다.
[ 총 사이클 ]
'Computer Science' 카테고리의 다른 글
[Computer Science] CPU : 명령어 병렬 처리 기법 (1) 2024.05.14 [Computer Science] CPU : 빠른 CPU를 위한 설계 기법 (1) 2024.05.14 [Computer Science] CPU : 레지스터 (0) 2024.05.10 [Computer Science] CPU : ALU와 제어장치 (0) 2024.05.09 [Computer Science] 명령어 : 명령어의 구조 (0) 2024.05.09