본문 바로가기
cs

[혼공운영체제] 3. 명령어 사이클과 인터럽트

by 이쟝 2023. 4. 16.
인프런의 개발자를 위한 컴퓨터 공학1 : 혼자 공부하는 컴퓨터 구조 + 운영체제 강의를 듣고, 학습 및 요약

 

CPU는 메모리 안에 있는 프로그램을 어떤 정해진 흐름대로 처리하게 되는 데 이 때 정해진 흐름, 주기를 명령어 사이클이라고 한다. (즉, 프로그램 속 명령어들은 일정한 주기가 반복되며 실행된다. 이 주기가 명령어 사이클이다.)

 

  • 하지만 CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다. 그래서 메모리 접근이 더 필요한 경우에는 간접 사이클을 이용하기도 한다.
    • 어떤 명령어는 인출과 실행 사이클만으로 실행되고, 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행된다.
간혹 정해진 흐름을 방해하는 신호가 CPU한테 올 수 있는데 정해진 흐름을 끊는 신호를 인터럽트라고 한다.
CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생!!!!

인터럽트의 종류

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

CPU가 예기치 못한 상황을 접했을 때 발생
폴트, 트랩, 중단, 소프트웨어 인터럽트

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

주로 입출력장치에 의해 발생, 알림과 같은 역할
입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용
  • 입출력장치는 CPU에 비해 느리기 때문에 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다.
  • 인터럽트가 있다면 입출력 작업 동안 CPU는 다른 일을 할 수 있다.
막을 수 있는 인터럽트  막을 수 없느 

하드웨어 인터럽트

하트웨어 인터럽트의 처리 순서

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

 CPU의 작업을 방해하는 인터럽트에 대한 요청
인터럽트 플래그

인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트 
플래그 레지스터 안에 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지에 대한 여부 확인(0과 1로 표기)
하지만 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 건 아니다.
그래서 막을 수 있는 인터럽트(maskable Interrupt) 막을 수 없는 인터럽트(non maskable interrupt)로 나뉜다. (하드웨어 고장이나, 정전 같이 긴급한 상황일 때)
인터럽트 서비스 루틴 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램
CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴 실행
"키보드가 인터럽트 요청을 보내면 이렇게 행동해야 한다."
"마우스가 인터럽트 요청을 보내면 이렇게 행동해야 한다."
인터럽트 서비스 루틴도 프로그램이기에 메모리에 저장
인터럽트 벡터


각각의 인터럽트를 구분(식별)하기 위한 정보
인터럽트마다 고유한 인터럽트 서비스 루틴의 시작주소를 포함한다.
인터럽트 벡터 테이블 : 인터럽트 벡터들을 표처럼 모아놓은 것(메모리에 있음)
CPU가 각각의 인터럽트 서비스 루틴의 시작 주소를 알기위해서 필요하다. 
입출력장치가 CPU에게 인터럽트 요청 신호 + 인터럽트 벡터 함께 보낸다. 

인터럽트 서비스 루틴
인터럽트 벡터

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

'

명령어 사이클