컴퓨터구조 - 명령어 사이클과 인터럽트

Leezi·2023년 2월 27일
0

컴퓨터구조

목록 보기
7/7

명령어 사이클(instruction cycle)

CPU가 하나의 명령어를 처리하는 과정에는 정해진 흐름이 있고 CPU는 그 흐름을 반복하며 명령어들을 처리해 갑니다. 명령어 사이클은 각각의 명령어들이 일정하게 반복하면서 실행하는 주기를 의미합니다.
즉, 프로그램 속 각각의 명령어들은 인출/간접/실행/인터럽트 사이클이 반복되며 실행됩니다.

명령어 인출 사이클(fectch cycle)

명령어 인출 사이클이란 명령어를 CPU로 가지고 오는 단계를 의미합니다.
fectch cycle

t0 : MAR <- PC

  • PC(프로그램 카운터)안에 있는 명령어 주소를 MAR(메모리 주소 레지스터)로 전달합니다.

t1 : MBR <- M[MAR], PC <- PC+1

  • CU(제어장치)의 '메모리읽기' 제어신호와 MAR(메모리 주소 레지스터)는 전달받은 명령어주소값이 제어버스와 주소버스를 통해 전달되어 메모리를 읽고 데이터버스를 통해서 MBR(메모리 버퍼 레지스터)로 전달됩니다.
  • PC(프로그램 카운터)가 1 증가합니다.

t2: IR <-MBR

  • MBR(메모리 버퍼 레지스터)에 저장된 값은 IR(명령어 레지스터)로 이동합니다.

명령어 간접 사이클(fectch cycle)

간접 사이클이란 명령어의 오퍼랜드(operand)가 간접 주소 지정방식인 경우에 유효주소를 계산하기 위해서 메모리에 접근하는 단계를 의미합니다.

간접 주소 지정방식이란 유효주소의 주소를 오퍼랜드 필드에 명시하는 방식

t3: MAR <- IR(addr)

  • 명령어 레지스터인 IR에 있는 명령어의 오퍼랜드(addr)값을 MAR로 전달합니다.

t4 : MBR <- M[MAR]

  • 명령어 유효주소의 주소를 통해서 메모리를 읽고 데이터 버스를 통해서 MBR에 전달합니다.

t5 : IR(addr) <-MBR

  • MBR의 데이터는 명령어의 유효주소 데이터 이므로 IR(명령어 레지스터)의 오퍼랜드(addr)에 저장합니다.

명령어 실행 사이클 (execution cycle)

실행 사이클은 CPU로 가져온 명령어를 실행하는 단계를 의미 합니다. 제어장치가 명령어 레지스터에 담긴 값을 해독(decode)하고 그 결과에 따라 연산을 수행하기 위해 제어 신호를 발생시킵니다.

실행 사이클에서 수행되는 마이크로-연산들은 명령어의 연산코드(operation code)에 따라 결정 됩니다.

  • 데이터 이동 : CPU와 기억장치 간 혹은 I/O 장치간의 데이터를 이동합니다.
  • 데이터 처리 : 데이터에 대한 산술 혹은 논리 연산을 수행합니다.
  • 데이터 저장 : 연산 결과 데이터 혹은 입력장치로 부터 읽어 들인 데이터를 기억장치에 저장합니다.
  • 프로그램 제어 : 프로그램의 실행 순서를 결정합니다.

1. 데이터의 이동(LOAD addr 명령어)

IR(명령어 레지스터에)에 저장되어 있는 데이터를 CPU 내부 레지스터인 AC(ALU 내부 레지스터)로 이동하는 명령어

t0: MAR <- IR(addr)

t1 : MBR <- M[MAR]

t2 : AC <- MBR

2. 데이터의 저장(STA addr 명령어)

AC 레지스터의 내용을 기억장치에 저장하는 명령어

t0 : MAR <- IR(addr)

t1 : MBR <- AC

t2 : M[MAR] <- MBR

3. 데이터 처리(ADD addr 명령어)

기억장치에 저장된 데이터를 AC의 내용과 더하고, 그 결과를 다시 AC에 저장하는 명령어

t0 : MAR <- IR(addr)

t1 : MBR <- M[MAR]

t2 : AC <- AC + MBR

4. 프로그램 제어(JUMP addr 명령어)

오퍼랜드(addr)가 가리키는 위치의 명령어로 실행 순서를 변경하는 분기(branch) 명령어

t0 : PC <- IR(addr)


명령어 인터럽트 사이클(interrupt cycle)

CPU가 수행중인 작은 방해 받아 잠시 중단 될 수 있는데, 이 때 CPU의 현재 처리 순서를 중단시키도록 하는 신호를 인터럽트(interrupt)라고 합니다.
인터럽트의 종류는 크게 2가지 예외(동기 인터럽트), 인터럽트(비동기 인터럽트)가 있습니다.

  • 예외(exception, synchronous interrupts)는 CPU에 의해 발생하는 일터럽트로 프로그래밍상의 오류와 같이 CPU가 내부에서 명령어들을 수행하다가 예상치 못한 상황이 발생했을때 발생하는 인터럽트
  • 인터럽트(intterupt, asynchronous interrupts)는 주로 입출력 등에서 알림처럼 CPU 외부에서 처리할 예외 상황이 발생할때 발생하는 인터럽트
  • 소프트웨어 인터럽트(software intterupt) :

인터럽트 서비스 루틴(ISR, Interrupt Service Routine)

인터럽트 서비스 루틴(ISR) 혹은 인터럽트 핸들러(Interrupt handler)는 인터럽트를 처리하기 위해 수행하는 프로그램 루틴을 의미합니다.

정리

명령사이클

설명

인출사이클

(Fetch Cycle)

- 주기억장치로부터 수행할 명령어를 CPU로 가져오는 단계

- 하나의 명령을 수행한 후 다음 명령을 메인 메모리에서 CPU로 꺼내 오는 단계

- 명령어의 Operand가 간접 주소일 경우: Indirect Cycle로 진행

- 명령어의 Operand가 직접 주소일 경우: Execute Cycle로 진행

간접사이클

(Indirect Cycle)

- 명령어의 Operand가 간접주소 지정이 된 경우 유효 주소를 계산하기 위해 주기억장치에 접근하는 단계

- 명령의 실행을 위해 Execute Cycle로 진행됨

- 명령어에 포함되어 있는 주소를 이용하여, 그 명령어 실행에 필요한 데이터의 주소를 인출하는 사이클

실행사이클

(Execute Cycle)

- 명령의 해독결과 이에 해당하는 타이밍 및 제어신호를 순차적으로 발생시켜 실제로 명령어를 실행하는 단계

- 명령어 코드를 해독하고, 그 결과에 따라 필요한 연산들을 수행

- 실행 사이클에서 수행되는 마이크로 연산들은 명령어에 따라 다름

인터럽트사이클

(Interrupt Cycle)

- 인터럽트 발생시 인터럽트 처리를 위한 단계

- 인터럽트에 대한 처리가 완료되면 Fetch Cycle 진행

0개의 댓글