명령어 사이클과 인터럽트

song·2023년 4월 14일
0
post-thumbnail

명령어 사이클

: 명령어들은 일정한 주기가 반복되면 실행됨. 이 주기를 명령어 사이클이라 함.

  • 인출 사이클
    : 메모리에 있는 명령어를 CPU로 가지고 오는 단계

  • 실행 사이클
    : 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계

  • 간접 사이클
    : 메모리 접근이 더 필요한 경우 거치는 단계

  • 인터럽트 사이클
    : 인터럽트가 발생한 경우 거치는 단계

인터럽트(interrupt)

: CPU의 정상적인 작업을 방해하는 신호

종류

  • 동기 인터럽트 (=예외)
    • CPU에 의해 발생
    • CPU가 예기치 못한 상황을 접했을 때 발생 (ex.프로그래밍상의 오류와 같은 예외적인 상황)

일반적으로 인터럽트는 비동기 인터럽트를 의미한다.

  • 비동기 인터럽트 (=하드웨어 인터럽트)
    • 주로 입출력장치에 의해 발생
    • 완료 알림과 같은 알림 역할을 함 (ex.세탁기 완료 알림)
    • 입출력 작업 도중 효율적으로 명령어를 처리하기 위해 사용

      ex)
      세탁기가 언제 끝날지 모르면 CPU가 계속 확인해야 함 (입출력장치는 CPU에 비해 느리기 때문에 언제 완료될지 모름)
      하지만, 비동기 인터럽트를 이용하면 완료됐을때, 알림만 받으면 돼서 그 전까지는 CPU가 자기 일을 할 수 있다.

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

  1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냄

  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인함

  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인

  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지 작업을 백업

  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행

  6. 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개함



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

용어 정리

  • 인터럽트 요청 신호
    : 지금 끼어드는게 가능한지 물어보는 신호

  • 인터럽트 플래그
    : 현재 인터럽트를 받을지 말지 결정하는 비트로 플래그 레지스터에 있음
    단, 인터럽트 플래그가 받을 수 없는 상태라도 인터럽트를 받아야 하는 경우가 있는데 이를 막을 수 없는 인터럽트(non maskable interrupt)라고 함


  • 인터럽트 서비스 루틴
    : 인터럽트를 처리하기 위한 프로그램
    • CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴 실행
    • 프로그램이기 때문에 메모리에 저장


  • 인터럽트 벡터
    : 각각의 인터럽트를 구분하기 위한 정보 (인터럽트 서비스 루틴의 시작 주소를 포함한 식별 정보)
    지금까지 작업한 내용은 스택에 백업하고, 인터럽트 서비스 루틴이 모두 실행되면 작업한 내용을 불러와서 다시 재개한다.

<출처>
"혼자 공부하는 컴퓨터구조+운영체제".강민철.https://www.youtube.com/playlist?list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl (2023.04.14)


책과 강의를 통해 학습한 내용을 요약 정리했습니다.
profile
인간은 적응의 동물

0개의 댓글