Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

Chapter 04-3 : 명령어 사이클과 인터럽트 본문

Computer Architecture + Operating System/Computer Architecture

Chapter 04-3 : 명령어 사이클과 인터럽트

시데브 2023. 8. 1. 01:23

학습 목표

  • CPU가 하나의 명령어를 처리하는 흐름인 명령어 사이클과 그 흐름을 방해하는 인터럽트에 대해 학습

 

명령어 사이클

  • 명령어 사이클(instruction cycle): 하나의 명령어를 처리하는 정형화된 흐름, 프로그램 속 각각의 명령어들은 명령어 사이클이 반복되며 실행된다.
  • 인출 사이클(fetch cycle): 메모리에 저장된 명령어를 CPU로 가져오는 단계
  • 실행 사이클(execution cycle): CPU로 가져온 명령어를 실행하는 단계, 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계
  • 간접 사이클(indirect cycle): 명령어의 주소를 CPU로 가져왔을 때, 해당 명령어 주소에 저장된 명령어를 인출하기 위해 메모리에 다시 접근하는 단계

 

인터럽트

  • 인터럽트(interrupt): CPU의 작업을 방해하여 중단시키는 신호
  • 동기 인터럽트(synchronous interrupts) 혹은 예외(exception): CPU가 명령어들을 수행하다가 예상치 못한 상황(프로그래밍상의 오류, 예외적 상황 등)에 마주쳤을 때 발생하는 인터럽트
  • 비동기 인터럽트(asynchronous interrupts) 혹은 하드웨어 인터럽트: CPU가 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 사용하는 알림과 같은 인터럽트

비동기 인터럽트

 CPU가 하드웨어 인터럽트를 처리하는 순서는 다음과 같다.

  1. 입출력 장치가 CPU에 인터럽트 요청 신호 전송
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
  3. CPU가 인터럽으 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
  6. 인터럽트 서비스 루틴이 끝나면 백업해 둔 작업을 복구하여 실행을 재개
  • CPU가 인터럽트 요청 신호를 수용하기 위해서는 플래그 레지스터의 인터럽트 플래그(인터럽트를 받아들일지, 무시할지 결정)가 활성화되어 있어야 함 -> CPU가 어떤 방해도 받지 말아야 한다면 인터럽트 플래그가 '불가능'으로 설정
  • 막을 수 있는 인터럽트(maskable Interrupt): 인터럽트 플래그가 불가능으로 설정돼있을 때, 수용되지 않는 인터럽트
  • 막을 수 있는 인터럽트(non maskable Interrupt): 인터럽트 플래그로 막을 수 없는 인터럽트, 정전이나 하드웨어 고장으로 인한 인터럽트가 이에 해당

인터럽트 서비스 루틴

  • 인터럽트 서비스 루틴(ISR; Interrupt Service Routine) 혹은 인터럽트 핸들러: 인터럽트를 처리하기 위한 프로그램, 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램
  • 인터럽트 벡터(interrupt vector): 인터럽트 서비스 루틴을 식별하기 위한 정보, 각기 다른 인터럽트 서비스 루틴을 구분하기 위해 사용하며 인터럽트 서비스 루틴의 시작 주소를 알 수 있음(데이터 버스로부터 전달받음)

 

명령어 사이클 구조

 


참고자료

  • 강민철, <혼자 공부하는 컴퓨터구조 + 운영체제>, 한빛미디어(주), 2022.08.16