본문 바로가기
CS/[혼자 공부하는 컴퓨터구조 + 운영체제]

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

by haeyoon 2024. 4. 29.

명령어 사이클: CPU가 하나의 명령어를 처리하는 정형화된 흐름
인터럽트: 흐름이 끊어지는 상황

1. 명령어 사이클

프로그램은 수많은 명령어로 이루어져 있고, 명령어는 일정 주기가 반복되며 실행되는데 이 주기를 명령어 사이클 이라고 한다.

1.1. 인출사이클 & 실행사이클의 반복

1) 인출 사이클

명령어를 메모리에서 CPU로 가져오는 단계

2) 실행 사이클

CPU로 가져온 명령어를 실행 (해석 & 제어신호 발생)

1.2. 간접 사이클

명령어를 CPU로 가져와도 바로 실행할 수 없는 경우
ex) 간접 주소 지정 방식: 오버랜드 필드에 유효주소의 주소 명시 메모리 접근 한번 더 필요
한번 더 메모리에 접근해야함 = 간접 사이클

 


2. 인터럽트

CPU의 작업을 방해하는 신호

2.1. 동기 인터럽트(예외)

- CPU에 의해 발생
CPU가 명령어를 수행하다가 예외적인 상황이 발생했을 때 발생하는 인터럽트

  • 폴트: 예외 처리 직후 예외 발생한 명령어부터 실행 재개
  • 트랩: 예외 처리한 직후 예외 발생한 명령어 다음 명령어부터 실행 재개
  • 중단: CPU가 실행중인 프로그램 강제로 중단시틸 수 밖에 없는 심각한 오류 발견했을 때 발생하는 예외
  • 소프트웨어 인터럽트: 시스템 호출이 발생했을때

 

2.2 비동기 인터럽트(하드웨어 인터럽트)

- 입출력장치에 의해 발생
CPU가 입출력장치(프린트)에 입출력 작업 부탁하면 작업 끝낸 입출력장치가 CPU에 완료 알림인 인터럽트를 보낸다.

  • if) 하드웨어 인터럽트 사용X

      CPU는 프린터가 언제 프린트 끝낼지 모르기 때문에 주기적으로 프린터의 완료 여부를 확인해야 한다.
        = 알림 없는 전자레인지 앞에서 조리 끝날때까지 서성이는것

  • if) 하드웨어 인터럽트 사용O

       주기적으로 프린터 완료 여부 확인할 필요 없음 / 프린트 완료 인터럽트 받을 때 까지 다른 작업을 처리할 수 있다.


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

① 입출력 장치: CPU에 인터럽트 요청신호를 보냄
② CPU: 실행 사이클이 끝나고 명령어 인출 전에 인터럽트 여부를 확인
③ CPU: 인터럽트 요청 확인 & 인터럽트 플래그를 통해 인터럽트 받아들일 수 있는지 여부 확인
④ 인터럽트 받아들일 수 있으면 -> CPU: 지금까지 작업 백업
⑤ CPU: 인터럽트 벡터 참고하여 인터럽트 서비스 루틴 실행
⑥ 인터럽트 서비스 루틴 끝나면 백업한 작업 복구해 실행 재개

* 인터럽트 요청 신호: CPU한테 흐름 끊고 지금 끼어들어도 되는지 물어보는 신호
* 인터럽트 플래그: 하드웨어 인터럽트 받아들일지 & 무시할지 결정하는 플래그
      - 인터럽트 플래그가 불가능 = CPU는 인터럽트 요청이 와도 요청 무시
      - 인터럽트 플래그가 가능 = CPU는 인터럽트 요청신호를 받아들이고 인터럽트를 처리
   + 인터럽트 플래그가 불가능으로 되어 있어도 무시할 수 없는 인터럽트 요청(non mistakable interrupt)이 있다 (정전, 하드웨어 고장으로 인한 인터럽트)
* 인터럽트 서비스 루틴(인터럽트 핸들러): 인터럽트 처리하기 위한 프로그램
    = 어떤 인터럽트가 발생했을때 어떻게 처리하고 작동할지에 대한 정보


     CPU가 인터럽트를 처리한다 = 인터럽트 서비스 루틴을 수행하고 본래 수행하던 작업으로 되돌아온다

* 인터럽트 벡터: CPU가 각기 다른 인터럽트 서비스 루틴을 구분하기 위한 식별 정보
     - 인터럽트 서비스 루틴의 시작주소를 알 수 있다