[컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트

2026. 1. 23. 21:17·CS/컴퓨터구조

https://dev-dx2d2y-log.tistory.com/189

 

[컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터

https://dev-dx2d2y-log.tistory.com/188 [컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치https://dev-dx2d2y-log.tistory.com/185 [컴퓨터구조] 혼공컴구 독서 #2 - 명령어혼공컴구 책을 쭉 보니까 책 앞부분

dev-dx2d2y-log.tistory.com

저번에는 CPU를 이루고있는 부품들에 대해서 알아보았다. 이번에는 CPU에서 어떻게 명령어를 제어하는지에 대한 흐름을 알아볼 것이다.


명령어 사이클

프로그램을 실행시키면 거기에 저장된 매우 많은 명령어들을 하나씩 실행하게된다. 이 때 프로그램 속 명령어들은 일정주기로 반복되어 실행되는데, 이를 명령어 사이클(instruction cycle)이라고 칭한다.


사이클 종류

인출(fetch)

명령어 사이클의 첫 번째 과정으로, 메모리에 저장된 명령어를 CPU로 가져오는 것이다.

 

https://dev-dx2d2y-log.tistory.com/189

 

[컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터

https://dev-dx2d2y-log.tistory.com/188 [컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치https://dev-dx2d2y-log.tistory.com/185 [컴퓨터구조] 혼공컴구 독서 #2 - 명령어혼공컴구 책을 쭉 보니까 책 앞부분

dev-dx2d2y-log.tistory.com

 

[컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터

저번에 레지스터에 대해서 다룰 때 잠깐 다룬 적이 있는데, 위 과정 중에서 1번부터 6번의 명령어 레지스터로 이동 부분까지가 인출 사이클에 해당한다. PC레지스터에 값에 따라서 메모리에 저장된 명령어를 읽어오는 과정이다.

 

실행 (execution)

읽어온 명령어를 실행시킨다. 제어장치가 값을 해석하고 제어신호를 발생시키는 단계에 해당한다.

 

일반적인 경우에는 인출과 실행 사이클을 반복하여 실행한다. 메모리에서 값을 가져오고, 명령어를 가져오고, 그것을 실행하는 식으로.

 

간접(indirect)

다만 인출 후 곧바로 실행이 불가능한 경우도 있다. 대표적으로 간접 주소 지정방식은 메모리에서 값을 읽어온 후에 명령어 실행이 아니라 또 메모리 주소로 이동해서 저장된 값을 불러와야하는 것처럼 메모리에 한 번 더 접근해야할 때가 있는데, 이를 간접 사이클이라고 칭한다.


인터럽트

CPU가 실행 중이던 작업이 어떤 사유에서 방해를 받아 잠시 중단될 수 있는데, 이를 인터럽트라고 칭한다.

이런식으로 프로그램 작동 중에 ctrl + C를 눌러 강제종료 하는 경우 등이 이에 해당한다. 또는 작업을 실행하다가 우선순위가 더 높은 특정 작업을 수행하기 위해 기존 작업을 중단한다거나 하는 경우가 이에 해당한다.


동기 및 비동기 인터럽트

동기 인터럽트

CPU에 의해서 발생한다. CPU가 명령어들을 수행하다가 예기치 못한 오류가 발생했을 때 동기 인터럽트라고하며, 다른 말로는 예외라고 칭한다. 0으로 나눴다거나 메모리가 부족하다던가 등...

 

예외가 발생하면 CPU는 하던 일을 즉시 중단하고 예외를 처리한다. 그리고 처리 후에 본래 작업으로 돌아와 실행을 재개한다. 이 "본래 작업으로 돌아와"에서 약간의 차이가 생긴다.

 

폴트(fault)

예외 처리 후 예외가 발생한 명령어부터 실행을 재개한다. 대표적인 예시상황으로는, CPU가 명령어를 수행시키려하는데, 명령어가 메모리에 없고 보조기억장치에 있다면, 프로그램은 반드시 메모리를 읽어와야하지만 메모리에 정보가 없어서 예외가 발생한다. 이 때 CPU는 폴트를 발생시키고 보조기억장치에 있는 명령어를 메모리로 가져와서 다시 예외가 발생한 위치부터 실행시킨다. 이런 상황에서 폴트가 필요하다.

 

트랩(trap)

예외 처리 후 예외가 발생한 명령어 다음 명령어부터 실행을 재개한다. 대표적인 예시가 디버깅. 디버깅 시에는 코드 실행 후 잠깐 멈췄다가 다시 기존 작업을 실행해야할 때가 있는데, 이 때 예외를 발생시켜 잠깐 프로그램을 정지한 후에 다시 다음 명령어부터 실행을 이어나간다.

플래그 비트들 중에서 TF가 이런 기능을 담당한다.

 

중단(abort)

CPU가 실행 중인 프로그램을 강제로 중단해야하는 심각한 오류를 뜻한다. 하드웨어가 고장나거나 수습이 불가능할 정도로 메모리 오염이 발생하면 프로그램을 강제로 중단시켜버린다. 권한을 위반하거나, 메모리가 부족해서 강제로 메모리를 잡아먹는 프로그램을 종료해야할 때 등에서 사용된다.

 

소프트웨어 인터럽트

시스템 호출이 발생했을 때 나타나낟. 09장에서 다룰 예정

 

비동기 인터럽트

주로 입출력장치에 의해서 발생한다. 동기 인터럽트는 예기치 못한 오류에 해당해서 CPU가 명령어를 중단하고 해당부분을 확인하지만, 비동기 인터럽트는 알림과 비슷해 CPU가 입출력장치에게 작업을 맡긴 후에 작업이 끝났음을 알리거나 키보드와 같은 입출력장치가 입력을 받았을 때 CPU에게 입력이 들어왔음을 알리는 것이 대표적인 예시이다.

동기 인터럽트가 예외에 해당하므로 비동기 인터럽트를 그냥 인터럽트라고 부르는 경우도 있으나 책에서는 하드웨어 인터럽트라고 따로 칭한다.

 

하드웨어 인터럽트

알림과도 같은 인터럽트에 해당한다. 하드웨어 인터럽트를 사용하는 이유는 입출력장치는 기본적으로 처리속도가 느리기 때문에 CPU가 입출력장치에게 실행만 맡겨놓은 채로 다른 명령어를 수행한 후에 입출력장치로부터 실행이 끝났음을 알리는 알림을 받으면 다시 돌아오기 위해서, 즉 명령어 실행의 효율을 위해서 사용한다. 일종의 비동기처리라고 볼 수 있다.


하드웨어 인터럽트 순서

1. 인터럽트 요청신호

입출력장치가 어떤 이유에서 알림을 보내게될 때, CPU가 지금 처리하고 있는 명령어를 중단하고 입출력장치를 확인할 수 있는지 여부를 파악한다.

 

https://dev-dx2d2y-log.tistory.com/188

 

[컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치

https://dev-dx2d2y-log.tistory.com/185 [컴퓨터구조] 혼공컴구 독서 #2 - 명령어혼공컴구 책을 쭉 보니까 책 앞부분이 데이터와 명령어를 다루고 있다. 그런데 데이터는 이진수로 숫자와 문자를 표기하는

dev-dx2d2y-log.tistory.com

저번에 다룬 플래그비트들을 보면 IF라는 플래그가 존재하는데, 이 CPU가 인터럽트 요청 수용을 위해서는 IF가 활성화되어야햐있어야한다. 만약 IF가 활성화되지 않은 경우에는 무시한다.

 

단, 모든 하드웨어 인터럽트를 IF로 무시할 수 있는 것은 아닌데, 우선순위가 가장 높은 경우, 하드웨어 고장 등으로 인한 인터럽트는 IF로 무시할 수 없다.

 

CPU는 명령어를 인출해오기 전에 인터럽트 발생여부를 확인한다. 만약 발생했다면 IF를 확인하여 인터럽트를 받아들일 수 있다면 지금까지의 작업을 백업한 뒤 인터럽트를 처리하기 위하여 아래 과정을 거치게된다.

 

2. 인터럽트 서비스 루틴 (인터럽트 핸들러)

CPU는 인터럽트 요청을 받아들이기로했다면 인터럽트 서비스 루틴이라는 프로그램을 싱행한다. 이 프로그램에는 키보드, 마우스, 프린터 등에서 특정 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리할 지에 대해서 다루는 프로그램이다.

 

인터럽트 서비스 루틴은 키보드, 마우스 등 입출력장치마다 대응방식이 다르므로 여러 개가 저장된다. 따라서 이를 구분하기 위해 인터럽트 벡터라는 것을 사용한다. 이는 인터럽트 서비스 루틴을 식별하기 위한 정보로, 이를 알면 원하는 인터럽트 서비스 루틴의 시작 주소를 알 수 있다.

 

만약 키보드 입력으로 인터럽트가 발생했다면, 키보드에서 하드웨어 인터럽트와 인터럽트 벡터를 받아서 CPU가 메모리의 인터럽트 서비스 루틴을 읽어오는 식으로 실행된다. 이 과정은 인출과 실행 사이클과 동일하게 진행된다.

 

3. 백업

하드웨어 인터럽트가 발생했고, CPU가 이를 처리하기로했다면 CPU는 기존에 처리하던 작업을 저장해두어야한다. 가령 PC레지스터에 저장된 다음 명령어 주소를 기억해두는 것이 필요하다.

 

이를 위해서 사용되는 것이 스택이다.

메모리의 스택 영역에 하드웨어 인터럽트를 처리하기 전의 PC 레지스터에 저장된 다음 명령어주소를 임시로 스택에 저장해둔 다음, 인터럽트를 처리하고 스택에 저장된 명령어주소를 가지고 다시 명령어를 실행하는 셈.

 

https://dev-dx2d2y-log.tistory.com/189

 

[컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터

https://dev-dx2d2y-log.tistory.com/188 [컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치https://dev-dx2d2y-log.tistory.com/185 [컴퓨터구조] 혼공컴구 독서 #2 - 명령어혼공컴구 책을 쭉 보니까 책 앞부분

dev-dx2d2y-log.tistory.com

이전에 스택 포인터에 대해서 다룬 적이 있는데, 스택 포인터가 이 역할을 수행한다. PC레지스터 뿐 아니라 기존의 명령어 주소 레지스터, 메모리 버퍼 레지스터, 명령어 레지스터 등 기존 레지스터 정보들도 스택에 저장한 후에 빼오며 백업해둔다.


이처럼 프로그램은 인출과 실행, 그리고 간접사이클을 반복해가며 명령을 수행한다. 만약 인터럽트가 발생했다면, 인터럽트 사이클을 수행한 뒤에 다시 인출과 실행을 반복하는 일을 반복하는 것 뿐이다.

'CS > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] 혼공컴구 독서 #7 - ISA와 CISC, RISC  (0) 2026.01.30
[컴퓨터구조] OOO, OoOE, 토마슬로 알고리즘을 통한 비순차적 명령어 처리 + 혼공컴구 독서 #6 - CPU 성능향상  (1) 2026.01.25
[컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터  (0) 2026.01.20
[컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치  (0) 2026.01.17
[컴퓨터구조] 혼공컴구 독서 #2 - 명령어  (0) 2026.01.16
'CS/컴퓨터구조' 카테고리의 다른 글
  • [컴퓨터구조] 혼공컴구 독서 #7 - ISA와 CISC, RISC
  • [컴퓨터구조] OOO, OoOE, 토마슬로 알고리즘을 통한 비순차적 명령어 처리 + 혼공컴구 독서 #6 - CPU 성능향상
  • [컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터
  • [컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치
Radiata
Radiata
개발을 합니다.
  • Radiata
    DDD
    Radiata
  • 전체
    오늘
    어제
    • 분류 전체보기 (211) N
      • 신년사 (3)
        • 2025년 (2)
        • 2026년 (1)
      • CS (59) N
        • JVM (12)
        • 백엔드 (20) N
        • 언어구현 (1)
        • 객체지향 (1)
        • 논리회로 (5)
        • 컴퓨터구조 (9)
        • 데이터베이스 (1)
        • 컴퓨터 네트워크 (10)
      • 언어공부 (64)
        • Java | Kotlin (48)
        • JavaScript | TypeScript (9)
        • C | C++ (6)
      • 개인 프로젝트 (11)
        • [2025] Happy2SendingMails (3)
        • [2026] 골든리포트! (8)
        • [2026] 순수자바로 개발하기 (0)
        • 기타 이것저것 (0)
      • 팀 프로젝트 (29)
        • [2025][GDG]홍대 맛집 아카이빙 프로젝트 (29)
      • 알고리즘 (13)
        • 백준풀이기록 (11)
      • 놀이터 (0)
      • 에러 수정일지 (2)
      • 고찰 (24)
        • CEOS 23기 회고록 (2)
  • 블로그 메뉴

    • CS
    • 언어공부
    • 개인 프로젝트
    • 팀 프로젝트
    • 알고리즘
    • 고찰
    • 신년사
    • 컬러잇 개발블로그
  • 링크

    • 컬러잇 개발블로그
  • 공지사항

  • 인기 글

  • 태그

    144
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Radiata
[컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트
상단으로

티스토리툴바