명령어 사이클과 인터럽트

컴퓨터 구조

목록 보기
10/20

CPU 명령어 사이클과 인터럽트 개요


1. 명령어 사이클이란?

  • CPU가 메모리에 저장된 프로그램을 처리하는 정해진 흐름을 말합니다.
  • 일정한 주기를 반복하면서 명령어를 인출하고 실행합니다.
  • 일반적으로 인출(Fetch) → 실행(Execute) 주기를 따르며, 경우에 따라 간접(Indirect) 단계가 추가될 수 있습니다.


1) 인출 사이클 (Fetch Cycle)

  • 메모리에 저장된 명령어를 CPU로 가져오는 과정입니다.

  • 프로그램 카운터(PC)가 가리키는 주소에서 명령어를 읽어와 명령어 레지스터(IR)에 저장합니다.

2) 실행 사이클 (Execute Cycle)

  • 인출한 명령어를 해석하고 실제로 수행하는 과정입니다.

  • 제어장치가 명령어를 해석하여 적절한 연산(ALU 연산, 데이터 이동 등)을 수행합니다.

3) 간접 사이클 (Indirect Cycle)

  • 일부 명령어(간접 주소 지정 방식)는 인출 후에 추가적인 메모리 접근이 필요합니다.
  • 메모리에서 최종 데이터를 가져오기 위한 사이클이 추가됩니다.


2. 인터럽트란?

  • CPU의 정상적인 명령어 흐름을 방해하여, 긴급하거나 중요한 작업을 먼저 처리하도록 하는 신호입니다.
  • 인터럽트는 CPU가 수행 중인 작업을 일시 중단시키고, 새로운 작업(인터럽트 서비스 루틴)을 처리하게 만듭니다.

3. 인터럽트의 종류

구분동기 인터럽트 (Synchronous Interrupt)(예외)비동기 인터럽트 (Asynchronous Interrupt)(하드웨어 인터럽트)
발생 시점명령어 실행 중 예측 가능한 시점명령어 실행과 무관하게 발생
발생 원인명령어 실행 중 예외 상황 발생하드웨어 장치에서 발생
예시0으로 나누기, 페이지 폴트, 시스템 호출키보드 입력, 타이머 인터럽트, I/O 장치 신호
연관성실행 중인 명령어와 직접적인 관련 있음실행 중인 명령어와 직접적인 관련 없음
처리 방식현재 실행 중인 프로세스가 처리별도의 인터럽트 핸들러가 처리
발생 예측 가능 여부예측 가능예측 불가능

1) 동기 인터럽트 (Synchronous Interrupt)

  • CPU가 예기치 못한 상황에서 발생하는 인터럽트로, 주로 프로그램 내부 오류와 관련이 있습니다.
  • 예시:
    • 0으로 나누기 오류
    • 메모리 접근 오류
    • 디버깅 중단

2) 비동기 인터럽트 (Asynchronous Interrupt)

  • 주로 하드웨어 장치에 의해 발생하며, 입출력 장치의 작업 완료와 같은 알림의 역할을 합니다.
  • 예시:
    • 키보드 입력
    • 마우스 클릭
    • 프린터 작업 완료

4. 인터럽트 처리 절차


1) 인터럽트 요청 신호 (Interrupt Request Signal)

  • 입출력 장치나 하드웨어가 CPU에게 인터럽트 발생 요청을 보냅니다.

2) 인터럽트 플래그 확인

  • CPU는 명령어 실행 주기 중에 인터럽트 플래그를 확인하여, 인터럽트를 받아들일 수 있는지 판단합니다.
  • 일부 인터럽트(NMI, Non-Maskable Interrupt)는 막을 수 없습니다.
    • 예: 하드웨어 고장, 정전과 같은 긴급 상황

3) 인터럽트 서비스 루틴 실행

  • CPU는 현재 작업 상태(프로그램 카운터, 레지스터 값 등)를 스택에 백업한 후, 인터럽트 서비스 루틴(ISR)을 실행합니다.
  • ISR은 해당 인터럽트를 어떻게 처리할지에 대한 프로그램입니다.

5. 인터럽트 벡터(Interrupt Vector)

인터럽트 벡터(Interrupt Vector)는 인터럽트가 발생했을 때 실행해야 할 인터럽트 서비스 루틴(ISR)의 주소를 저장하는 테이블입니다.
쉽게 말해, "어떤 인터럽트가 발생하면, 어떤 함수를 실행할지 알려주는 목록"이라고 볼 수 있습니다.


쉽게 이해하는 인터럽트 벡터

💡 예제: 긴급 연락처 목록

  • 만약 불이 나면 → 119에 전화해야 함 🚒
  • 만약 강도가 들면 → 112에 전화해야 함 🚓
  • 만약 병에 걸리면 → 1339에 전화해야 함 🏥

각 상황(인터럽트)이 발생하면, 미리 정해진 번호(인터럽트 벡터)를 통해 해당 기관(ISR)으로 연결되는 것과 같습니다.


인터럽트 벡터 테이블(IVT, Interrupt Vector Table)

인터럽트 벡터는 단순히 "목록"이므로, CPU는 인터럽트 벡터 테이블(IVT)이라는 것을 사용합니다.
IVT는 인터럽트 번호와 해당 인터럽트 처리 함수(ISR)의 주소를 저장한 테이블입니다.

인터럽트 번호인터럽트 원인인터럽트 서비스 루틴(ISR) 위치
0x000으로 나누기 오류0x00008C00
0x08타이머 인터럽트0x00001234
0x09키보드 입력0x00005678
0x0E페이지 폴트0x00009ABC
0x21시스템 호출(BIOS)0x0000DEAD
  1. 인터럽트가 발생하면 CPU는 IVT에서 해당 인터럽트 번호를 찾음
  2. 해당 인터럽트에 대응하는 ISR 주소를 가져와 실행
  3. ISR 실행 후 원래 작업으로 복귀

인터럽트 벡터 활용 예제

💻 예제: 키보드 입력 인터럽트 처리
1. 사용자가 키보드를 누름 → 키보드 컨트롤러가 인터럽트 요청(IRQ 1)을 보냄
2. CPU는 인터럽트 벡터 테이블(IVT)에서 IRQ 1의 주소를 찾음
3. 해당 ISR(키보드 입력 처리 함수)을 실행
4. ISR이 눌린 키를 읽고 화면에 출력
5. ISR 실행이 끝나면 CPU는 원래 프로그램으로 복귀


인터럽트 벡터와 ISR의 차이

개념설명
인터럽트 서비스 루틴(ISR)특정 인터럽트를 처리하는 코드(함수)
인터럽트 벡터인터럽트 번호와 ISR 주소를 매핑하는 목록
인터럽트 벡터 테이블(IVT)여러 개의 인터럽트 벡터를 저장하는 메모리 영역

💡 쉽게 말하면:
인터럽트 벡터 = "주소록"
ISR = "주소록에 있는 사람"


6. 인터럽트 발생 시 흐름

  • 정상적인 흐름: 명령어 인출 → 실행 → 반복
  • 인터럽트 발생 시: 명령어 인출 → 실행 중단 → 인터럽트 서비스 루틴 실행 → 복구 후 작업 재개

7. 인터럽트 처리의 필요성

  • 인터럽트가 없을 경우, CPU는 입출력 작업 완료 여부를 주기적으로 확인해야 합니다.
  • 인터럽트가 있으면 입출력 작업이 완료될 때만 알림을 받아 효율적인 작업 처리가 가능합니다.
    • 예: CPU가 다른 작업을 수행하다가 프린터 작업 완료 인터럽트를 받으면 해당 작업을 즉시 처리

8. 명령어 사이클에 인터럽트 추가

  • 명령어 사이클에 인터럽트가 추가되면 다음과 같은 흐름이 됩니다:
    • 인출 → 실행 → 인터럽트 여부 확인 → 인터럽트 발생 시 인터럽트 사이클 추가

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

단계처리 과정
입출력 장치가 CPU에 인터럽트 요청 신호를 보냄
CPU는 실행 사이클이 끝난 후, 명령어 인출 전에 인터럽트 여부 확인
CPU는 인터럽트 요청을 확인하고, 인터럽트 플래그를 통해 인터럽트를 받을 수 있는지 검사
인터럽트를 받을 수 있으면, CPU는 현재까지의 작업을 백업
CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴(ISR)을 실행
ISR 실행 종료 후, ④에서 백업한 작업을 복구하고 실행을 재개

9. 인터럽트 플래그(Interrupt Flag)란?

인터럽트 플래그(Interrupt Flag, IF)CPU가 인터럽트를 처리할 수 있는 상태인지 여부를 나타내는 플래그(Flag) 비트입니다.
CPU 내부의 프로세서 상태 레지스터(PSW, EFLAGS 등)에 저장되며, 인터럽트의 허용 및 차단을 제어합니다.


인터럽트 플래그의 주요 역할

  1. 인터럽트 활성화(Enable) 및 비활성화(Disable) 제어

    • IF = 1인터럽트 허용 (인터럽트 요청을 받을 수 있음)
    • IF = 0인터럽트 차단 (인터럽트 요청을 무시함)
  2. CPU가 인터럽트를 처리할 수 있는 상태인지 확인

    • 실행 중인 코드가 중요한 연산을 수행할 때 일시적으로 인터럽트를 비활성화할 수 있음
    • 특정 명령어 실행 후 다시 인터럽트를 활성화하여 인터럽트 요청을 받을 수 있음

구분막을 수 있는 인터럽트 (Maskable Interrupt, MI)막을 수 없는 인터럽트 (Non-Maskable Interrupt, NMI)
정의소프트웨어 또는 하드웨어에 의해 무시하거나 지연할 수 있는 인터럽트무조건 처리해야 하며, 사용자가 막을 수 없는 인터럽트
발생 원인일반적인 하드웨어 요청 (I/O 장치, 타이머 등)심각한 오류 (전원 장애, 하드웨어 고장 등)
우선순위비교적 낮음매우 높음
CPU 제어 가능 여부CPU에서 Interrupt Mask Bit 설정을 통해 무시 가능CPU에서 무시 불가능, 반드시 처리해야 함
예시키보드 입력, 타이머 인터럽트, 네트워크 패킷 수신메모리 오류, 전원 장애, 하드웨어 오작동
사용 목적시스템 성능 최적화 (필요에 따라 처리 순서 조정 가능)시스템 보호 및 복구 (중대한 오류 감지 시 즉시 처리)
  • Maskable Interrupt (MI)

    • CPU가 인터럽트를 비활성화(mask)할 수 있는 인터럽트
    • 운영체제가 인터럽트 플래그를 조작하여 특정 시점에만 처리하도록 조정 가능
    • 일반적인 하드웨어 인터럽트(I/O 장치, 타이머 등)
  • Non-Maskable Interrupt (NMI)

    • CPU가 무조건 처리해야 하는 인터럽트
    • 심각한 하드웨어 오류(메모리 고장, 전원 장애 등)가 발생할 때 시스템 보호를 위해 즉시 개입
    • 대부분의 경우 인터럽트 우선순위에서 가장 높음

10. 인터럽트 서비스 루틴(ISR)이란?

인터럽트 서비스 루틴(ISR, Interrupt Service Routine)은 인터럽트가 발생했을 때 실행되는 특별한 함수입니다.
예를 들어, "누군가 초인종(인터럽트)을 누르면, 집주인(ISR)이 나가서 문을 열어주는 것"과 같습니다.


쉽게 이해하는 인터럽트 서비스 루틴(ISR) 동작 과정

💡 예제 상황: 스마트폰 전화 수신
스마트폰을 사용하고 있는데 전화가 오면(인터럽트 발생) → 전화 수락 또는 거절을 결정하는 기능(ISR)이 실행됩니다.

  1. 인터럽트 발생 → 전화가 옴 📞
  2. 현재 작업을 일시 중지 → 스마트폰이 현재 실행 중이던 앱을 멈춤
  3. ISR 실행 → "전화받기" 화면 표시
  4. ISR 종료 후 원래 작업으로 복귀 → 전화가 끝나면 다시 원래 앱 실행

이처럼 인터럽트가 발생하면 CPU는 특정 기능(ISR)을 실행한 후, 원래 작업으로 돌아갑니다.


컴퓨터에서 실제 ISR 동작 예시

💻 예제 1: 키보드 입력
1. 사용자가 키보드를 누름 → 키보드가 CPU에 인터럽트 요청(IRQ 1) 보냄
2. CPU는 현재 작업을 멈추고 ISR(키 입력 처리 함수)을 실행
3. ISR은 눌린 키를 읽고, 화면에 표시하도록 OS에 전달
4. ISR이 끝나면 CPU는 원래 작업으로 복귀

💾 예제 2: USB 장치 연결
1. 사용자가 USB를 컴퓨터에 꽂음 → USB 컨트롤러가 인터럽트 요청
2. CPU는 ISR을 실행하여 "새로운 장치가 연결됨" 메시지를 표시
3. ISR이 장치 드라이버를 로드하여 USB 사용 가능하도록 설정
4. CPU는 원래 작업으로 돌아감


11. 요약

  • 명령어 사이클은 CPU가 프로그램을 실행하는 기본 흐름입니다.
  • 인터럽트는 이 흐름을 중단시키고 중요한 작업을 먼저 처리하게 만듭니다.
  • 인터럽트 처리 과정은 요청 → 플래그 확인 → 서비스 루틴 실행 → 복구 후 재개로 이루어집니다.

이번 강의로 CPU의 명령어 사이클과 인터럽트 동작 원리를 이해할 수 있었습니다! 😊
다음 강의에서 더 심화된 내용을 다뤄보겠습니다.

0개의 댓글