본문 바로가기
정리 { CS: 컴퓨터 과학 }/컴퓨터구조

0401(1)_ ❰❰ 04. CPU의 작동원리 ❱❱_ [ 04-3 명령어 사이클과 인터럽트 ]

by 해피퀄리아 2023. 4. 1.

[ 04-3 명령어 사이클과 인터럽트 ]

[ 1 ] 명령어 사이클

1. 설명

주기. 명령어가 실행되는 일정한 주기

명령어들을 처리하는 정형화된 과정이 반복되는 주기

(또는 정형화된 명령어 처리과정의 반복흐름의 주기)

2. 명령어 사이클의 세부주기

  • 인출 사이클
  • 메모리부터 명령어를 CPU가 인출하는 단계
  • 실행 사이클
  • 가져온 명령어를 실행하는 단계
  • 간접 사이클ex) 간접 주소 지정 방식 처럼. 메모리 접근이 더 필요할 때
  • 메모리 접근이 더 필요한 경우, 추가적 메모리 접근 단계
  • 인터럽트 사이클

 

[ 2 ] 인터럽트

설명

명령어 사이클이 끊어지는 것. 또는 그것을 발생시키는 신호

즉 CPU가 수행 중인 작업이 잠시 중단되는 것. 또는 중단을 발생시키는 신호

더 중요한 작업이 있으니 이것을 먼저 해달라는 신호

인터럽트 종류

인터럽트를 구분하는 정해진 기준이 없이 CPU마다 다르다.

교재는 인텔 CPU를 기준으로 한다.

  • 동기 입터럽트 (synchronous interrupts) : (예외)
    • “CPU”에 의해 발생하는 인터럽트
    • 예외적인 상황에 마주쳤을 때 발생시킨다.
    • ex) 포로그래밍상의 오류
    • “예외(exception)” 라고도 부른다.
  • 비동기 인터럽트 (asynchronous interrupts) : (하드웨어 인터럽트)
    • 주로 “입출력장치”에 의해 발생하는 인터럽트
    • 일반적으로 인터럽트라고 하면, 이 비동기 인터럽트를 의미
    • “하드웨어 인터럽트”라고도 불림
      • 1) 막을 수 있는 인터럽트
      • 2) 막을 수 없는 인터럽트 (ex: 하드웨어 고장 인터럽트)
  • 추가내용) 예외의 종류
    • 1) 폴트
    • 2) 트랩
    • 3) 중단
    • 4) 소프트웨어 인터럽트

[ 3 ] 하드웨어 인터럽트

{1} 사용목적

입출력장치가 작업을 하는 시간동안, CPU가 다른 작업을 할 수 있도록 하기 위해서.

CPU가 입출력장치를 기다리는게 아니라, 입출력장치가 CPU로 “알림”을 보낼 수 있도록 한다.

따라서 일종의 “알림” 이다.

{2} 관련 개념들

  • CPU가 인터럽트를 처리한다는 뜻
  • : 해당하는 인터럽트 서비스 루틴을 실행하고, 본래 수행작업으로 되돌아온다.
  • 인터럽트 요청 신호
    • 인터럽트 하기 전에, CPU에게 인터럽트 가능한지 요청하는 과정
  • : CPU의 작업을 방해하는 인터럽트에 대한 요청
  • 인터럽트 플래그
    • 하드웨어 인터럽트를 받아들일지, 무시할지, 현재의 상태에 대한 플래그
    • CPU가 중요한 작업을 처리하거나, 방해받지 않아야할 때가 있기 때문에.
    • 인터럽트 플래그가 가능 상태로 되어있어야한다.
    • 단, 하드웨어 고장 인터럽트는 불가능 플래그 상태도 이길 수 있다고 한다.
  • : 인터럽트 요청 신호를 받아들일지 여부를 결정하는 비트
  • 인터럽트 벡터
    • 인터럽트 서비스 루틴의 메모리 상 시작 주소를 알 수 있다.
    • 인터럽트 서비스 루틴도 프로그램이니까, 프로그램 카운터 등의 레지스터를 사용하여 작동한다. → 따라서 원래 하던 작업의 레지스터 정보들은 메모리상에 백업시켜놓아야한다.
  • : 인터럽트 서비스 루틴의 식별정보, 루틴의 시작 주소를 포함한다.
  • 인터럽트 서비스 루틴
    • 인터럽트를 처리하기 위한 프로그램
    • 인터럽트 핸들러 라고도 불림
    • 입출력장치마다 루틴이 다르다.
  • : 인터럽트를 처리하는 프로그램

{3} 하드웨어 인터럽트 처리 순서

  1. 인터럽트 요청 신호
  2. 입출력장치 → CPU로 인터럽트 요청 신호
  3. CPU의 인터럽트 여부 확인
  4. : CPU의 주기적 인터럽트 여부 확인 → 실행사이클이 끝나고 명령어 인출 전에, CPU는 항상 인터럽트 여부를 확인한다.
  5. 인터럽트 플래그 확인
  6. : 현재 인터럽트를 받아들일 수 있는지 여부 확인
  7. 작업 백업
  8. : 인터럽트를 받아들일 수 있다면, CPU는 지금까지의 작업을 백업한다.
  9. 인터럽트 벡터를 확인하여, 인터럽트 서비스 루틴 실행
  10. 인터럽트 서비스 루틴 관련 작업 실행
  11. 백업 작업 재개
  12. : 인터럽트 서비스 루틴 관련 실행이 끝나면, 원래 하던 작업을 재개한다.

댓글