본문 바로가기
운영체제

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

by 송파감자 2024. 8. 9.

 

 

 

1. 명령어 사이클

  • 프로그램 속 각 명령어들은 일정 주기 반복하며 실행함
  • 이 주기가 곧 명령어 사이클!

명령어를 메모리에서 CPU로 가져온다(인출 사이클 == Fetch Cycle)

-> 명령어 실행한다 (실행 사이클 == Execution Cycle)

명령어 사이클은 하나의 명령어가 처리되는 주기를 말함

 

간접 사이클(Indirect Cycle)?

  • 바로 실행 사이클 돌입할 수 없을 때가 있는 사이클임
  • 예) 간접주소지정방식에서 명령어 실행하려면 메모리 접근 한 번 더 해야 함!

 


2. 인터럽트?

  • 방해하다, 중단시키다
  • CPU의 작업을 방해하는 신호
  • CPU가 수행 중인 작업은 방해를 받으면 중단될 수 있음

 

인터럽트의 종류

동기 인터럽트?

  • CPU에 의해 발생하는 인터럽트
  • 예외라고도 부름(Exception)

비동기 인터럽트? (asynchronous interrupts)

  • 주로 입출력장치에 의해 발생하는 인터럽트
  • 인터럽트, 하드웨어 인터럽트라고 부름

-> 동기 인터럽트는 예외, 비동기 인터럽트는 하드웨어 인터럽트라고 부름 

 

 

하드웨어 인터럽트?

  • 알림과 같은 인터럽트임
  • 예시) CPU가 프린터에 출력을 명령-> 프린터는 CPU속도 보다 훨씬 느림 -> CPU가 계속 프린터에게 다 됐냐고 물어보면 낭비임 -> 프린터가 출력 다하면 CPU에게 완료여부 알려주는 게 하드웨어 인터럽트

하드웨어 인터럽트 순서

  1. 입출력 장치가 CPU에게 인터럽트 요청 신호를 보냄
  2. CPU는 싱행사이클이 끝나고 명령어 인출 전 항상 인터럽트 여부 확인
  3. CPU는 인터럽트 요청 확인 후 인터럽트 플래그를 통해 현재 인터럽트 받을 수 있는지 확인
  4. 인터럽트 받을 수 있으면 CPU는 지금까지 작업 백업함
  5. CPU는 인터럽트 벡터 참조해서 인터럽트 서비스 루틴 실행
  6. 인터럽트 서비스 루틴 실행 종료하면 4번에서 백업한 작업 보구해서 실행 재개함

인터럽트 요청 신호

  • ex) : 지금 끼어들어도 되나여?(프린터가 CPU에게)

인터럽트 플래그

  • CPU가 인터럽트 요청 수용하려면 플래그레지스터의 인터럽트 플래그가 활성화 되어있어야 함

플래그 레지스터

 

BUT, 모든 하드웨어 인터럽트를 인터럽트 플래그로 막을 수 있는 것은 아님

왜냐?

-> 가장 우선순위가 높은 인터럽트가 있기 때문. 정전, 하드웨어 고장 같은..

 

하드웨어 인터럽트는 막을 수 있는 인터럽트와 막을 수 없는 인터럽트가 있음

 

인터럽트 서비스 루틴(ISR : Interrupt Service Routine)

  • 인터럽트 핸들러라고도 부름
  • CPU가 인터럽트 요청 받아들이면 인터럽트 서비스 루틴을 실행함
  • 이게 뭐냐? 인터럽트를 처리하는 프로그램임

인터럽트 벡터?

  • 인터럽트 서비스 루틴을 식별하기 위한 정보
  • 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있음

 

요약하자면

CPU가 인터럽트를 처리한다는 말은 인터럽트 서비스 루틴을 실행하고 본래 수행하던 작업으로 다시 되돌아간다는 말임!

 

CPU는 이 과정을 반복하면서 프로그램 실행함~