명령어 사이클과 인터럽트

Woong·2022년 12월 19일
0

컴퓨터 구조

목록 보기
6/15

명령어 사이클

CPU가 하나의 명령어를 처리하는 과정에는 정해진 흐름이 있고 그 흐름을 명령어 사이클이라고 한다.

인터럽트

명령어 사이클이 도는 과정에서 흐름이 끊기는 현상이 발생할 수도 있는데 이를 인터럽트라고 한다.

명령어 사이클 종류

인출 사이클 → 메모리에 있는 명령어를 CPU로 가지고 오는 단계
실행 사이클 → CPU로 가져온 명령어를 실행하는 단계
간접 사이클 → 오퍼랜드 필드에 유효 주소의 주소가 명시되어있는 경우 인출 사이클 후 실행 사이클로 넘어가는것이 아니고 메모리에 더 접근해 명령어를 가지고 오는 단계
인터럽트 사이클 → 인터럽트(CPU의 작업을 방해하는 신호)로 인해 실행 사이클에서 실행중이었던 명령어를 잠시 중단시키고 백업한 뒤 인터럽트가 발생하는 단계

인터럽트?

CPU의 작업을 방해하는 신호

인터럽트의 종류

동기 인터럽트(CPU에 의해 발생) → 예외(Exception)
비동기 인터럽트(입출력장치에 의해 발생) → 하드웨어 인터럽트(알림)
→ 비동기 인터럽트는 막을 수 있는 인터럽트와 막을 수 없는 인터럽트가 존재하는데 막을 수 없는 인터럽트에는 정전, 하드웨어 고장 등이 있다고 한다.

비동기 인터럽트 처리 순서(하드웨어 인터럽트, +인터럽트 사이클)

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

Bold체 용어 정리

인터럽트 요청 신호 → 말 그대로 인터럽트가 가능한지 CPU에게 물어보는 신호
인터럽트 플래그 → 플래그 레지스터 속 인터럽트 플래그(0, 1로 활성화 되어있는지 판단)
인터럽트 벡터 → 수많은 인터럽트 서비스 루틴의 시작 주소를 식별하기(구분짓기) 위한 정보
인터럽트 서비스 루틴(인터럽트 핸들러) → 인터럽트를 처리하기 위한 프로그램

동기 인터럽트(예외, +인터럽트 사이클)

예외 → CPU가 하던 일을 중단하고 해당 예외를 처리하는 과정
폴트 → 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예외
트랩 → 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외(자주 사용했었던 디버깅..)
중단 → CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외
소프트웨어 인터럽트 → 시스템 호출이 발생했을 때 나타나는 인터럽트(운영체제 부분에서 SYSTEM CALL로 자주 등장하니 뒷장에 가서 확인해도 됨.)


출처 : 강민철님 , ⌜혼자 공부하는 컴퓨터구조 + 운영체제⌟, 한빛미디어, 2022, ~141쪽

profile
공부하는 주니어 개발자

0개의 댓글