Computer Science

[Computer Science] CPU : 명령어 사이클과 인터럽트

WebDevLee 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. 인터럽트 서비스루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개합니다.

 

 


 

[ 총 사이클 ]