빼미의 개발일기

[컴퓨터 구조] - 11강. 명령어 사이클과 인터럽트 본문

프로그래밍/컴퓨터 구조

[컴퓨터 구조] - 11강. 명령어 사이클과 인터럽트

빼미01 2023. 9. 4. 16:31
이 글은 한빛미디어 '혼자 공부하는 컴퓨터 구조 + 운영체제'를 공부하고 정리한 내용입니다.


 

명령어를 처리하는 정형화된 흐름을 명령어 사이클이라 하고,
그런 흐름이 끊이는 현상을 인터럽트라 한다.

● 명령어 사이클 : 프로그램 속 명령어들을 일정한 주기로 반복되며 실행하는 일련의 과정.

  • 메모리에 있는 명령어를 CPU로 가지고 오는 인출 사이클
  • CPU로 가져온 명령어를 실행하는 실행 사이클
  • 간접 주소 지정 방식 등으로 인해 명령어를 실행하기 위해 메모리 접근이 한번 더 일어야서 실행하게 되는 간접 사이클

 

인터럽트 : CPU가 수행 중인 작업을 방해하는 신호. 크게 동기 인터럽트, 비동기 인터럽트로 나뉨.


  1. 동기 인터럽트(Synchronous Interrupts) : CPU에 의해 발생하는 인터럽트. CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황에 마주했을 때 발생하는 인터럽트. 예외(Exception)이라고도 함.
    -> 오류에 가까움
  2. 비동기 인터럽트(Asynchronous Interrupts) : 주로 입출력장치에 의해 발생하는 인터럽트. 입출력장치의 작업 완료에 대한 알림(인터럽트)를 보내면 CPU에서 하던 수행을 중단하고 입출력장치에서 들어온 정보를 처리한다.
    -> 일반적으로 비동기 인터럽트를 인터럽트라고 칭함.

◆ 인터럽트(하드웨어 인터럽트) : 혼동을 방지하기 위해 이하 하드웨어 인터럽트

CPU가 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위한 알림과 같은 인터럽트.

 

※ 하드웨어 인터럽트 처리 순서

  1. 입출력 장치는 CPU에 인터럽트 요청 신호를 보냄
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인.
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업.
  5. CPU는 인터럽트 백터를 참조하여 인터럽트 서비스 루틴을 실행
  6. 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개

자세한 하드웨어 인터럽트 과정

1. 입출력 장치에서 CPU의 작업을 끊는(방해하는) 신호(인터럽트 요청 신호)를 보낸다.

( 비유를 하면 대리가 부장에게 작업완료 보고를 하기 위해 부장의 업무를 끊게 만든다라고 생각 )

 

2. CPU의 플래그 레지스터 중 IF(인터럽트 플래그)는 인터럽트를 받을지 무시할지를 결정하는 플래그이다.
중요한 작업이나 작업이 끊어지면 안 될 시 IF는 0으로 비활성화가 된다. 1로 가능이라면 CPU는 인터럽트 요청 신호를 받아들인다. ( 부장은 작업상황에 따라 컨펌을 할 수도, 아님 무시한다. )

 

2-1. 하지만 IF에서 무시할 수 없는 인터럽트가 존재. 인터럽트의 가장 우선순위가 높은 인터럽트로, 보통 정전이나 하드웨어 고장으로 인한 인터럽트가 이에 해당.

( 건물에 불이 났거나, 아래 직원이 하던 작업에서 심각한 오류가 발생하면 부장도 자기가 하던 업무는 스톱할 수밖에 없죠. )

 

3. CPU에서 요청을 받아들인다면 CPU는 인터럽트 서비스 루틴(ISR : Interrupt Service Routine)을 실행. 

인터럽트 핸들러라고도 함. 어떤 인터럽트가 발생했을 때 해상 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램. ( 다음 업무에 대한 지시 - 대기, 재시작, 보류 등등 )

 

3-1. 'CPU가 인터럽트를 처리한다'는 말은 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 돌아간다는 뜻

 

3-2. 입출력장치마다 인터럽트를 처리하는 방법은 다 다른데 이를 구분하는 것이 인터럽트 백터.

인터럽트 백터는 인터럽트 서비스 루틴을 식별하기 위한 정보들 담고 있고, 실행하는 메모리의 시작 주소를 알려준다.

( 각 팀의 다음 업무 지시에 대한 매뉴얼 )

 

4. CPU는 인터럽트로 인해 하던 작업을 중단하게 되면, 중단된 시점의 PC, MAR, MBR, IR를 스택에 저장(백업)한다.

그리고 인터럽트 서비스 루틴의 주소값을 PC에 적용하여 작업을 수행하고 인터럽트 서비스 루틴이 끝나면, 스택에 백업했던 작업 정보를 다시 불러와 일을 재기한다. ( 하던 파일을 잠시 저장, 아님 서류에 포스트잇을 붙여놓는다든지 해서 체크하고 부하직원의 컨펌을 처리. 처리 후 다시 업무 재기.)

 


인터럽트까지 적용됐을 때 명령어 사이클은 이런 모습을 갖는다.

 

※ 예외의 종류

동기 인터럽트 (예외)의 종류에는 폴트, 트랩, 중단, 소프트웨어 인터럽트가 있다.

  • 폴트(Fault) : 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 동기 인터럽트.
  • 트랩(Trap) : 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 동기 인터럽트.
    주로 디버깅할 때 사용.
  • 중단(Abort) : CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 동기 인터럽트.
  • 소프트웨어 인터럽트 (Softward Interrupt) : 시스템 호출이 발생했을 때 나타남.
Comments