본문 바로가기
Computer Science/컴퓨터 구조

명령어 실행

by Luinesse 2024. 1. 2.
반응형

명령어 사이클

명령어 사이클은 CPU가 명령어 한개를 실행하는 데 필요한 전체 과정을 의미합니다.

명령어 사이클은 크게 2단계로 나뉘어집니다.

 

먼저 CPU로가 Main Memory로 부터 명령어를 읽어오는 인출 사이클과 인출된 명령어를 실행하는 실행 사이클로 나뉩니다.

 

명령어를 실행하기 위해서 CPU에는 다음과 같은 내부 레지스터가 존재합니다.

 

먼저 Program Counter(PC) 입니다. 다음에 인출할 명령어의 주소를 가지는 레지스터로 인출 후에는 자동으로 PC의 값이 증가합니다.

 

다음으로 AC(누산기)는 ALU의 계산 결과를 일시적으로 저장하는 레지스터로, 이 레지스터의 비트수는 CPU가 한번에 처리 가능한 데이터 비트수와 같습니다.

 

그리고 IR은 명령어를 일시적으로 저장하는 레지스터이고, PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전 일시적으로 저장되는 주소 레지스터인 MAR과 Main Memory에 저장될 데이터 혹은 Main Memory로 부터 읽혀진 데이터가 일시적으로 저장되는 레지스터인 MBR이 있습니다.

 

인출 사이클(Fetch Cycle)

Main Memory의 지정된 위치에서 명령어를 읽어오는 과정을 인출 사이클이라고 부릅니다.

 

인출 사이클에서 각 단계별로 수행하는 동작을 마이크로 연산으로 표현할 수 있습니다.

먼저 마이크로 연산이란, CPU 클록의 각 주기 동안 수행되는 동작을 의미합니다.

 

인출 사이클의 마이크로 연산은 다음과 같습니다.

 

t0 : PC → MAR

t1 : Main Memory[MAR] → MBR, PC + 1 → PC

t2 : MBR → IR

 

이때 총 수행 시간은 CPU의 클록 주파수에 따라 다른데, 클록 주파수가 1 GHz라면, 클록 주기는 1ns 이므로, 인출 사이클은 3ns가 걸립니다. (1 GHz = 10^9 cycles / sec, CPU Clock Cycle = 10^-9 = 1ns)

 

위 사이클을 천천히 해석하면, PC의 값을 MAR로 보냅니다. 그리고 MAR값이 가리키는 Main Memory 내의 장소를 찾아 시스템 버스를 통해 이동하여 값을 가져와서 MBR에 보냅니다. 그리고 동시에 PC의 값이 1 증가합니다. (실제로는 1이 아니라 분기문 혹은 주소 비트값만큼 상승, ex : PC + 4 (int = 4bit), JMP L1, L1은 0x0010)

 

그리고 MBR에 저장된 내용을 IR에 저장하면서 인출 사이클이 종료됩니다.

 

명령어 해독은 따로 사이클이 존재하지 않습니다.

 

실행 사이클(Execute Cycle)

실행 사이클에서는 인출된 명령어 코드를 해독하고 그 결과에 따라 필요한 연산을 수행합니다.

 

여기서 연산은 크게 4가지로 분류할 수 있습니다.

  1. 데이터 이동
  2. 데이터 처리
  3. 데이터 저장
  4. 프로그램 제어

먼저 데이터 이동을 위한 LOAD (Address) 의 마이크로 연산입니다.

 

t0 : IR[Address] → MAR (Fetch Cycle에서 가져온 주소)

t1 : M[MAR] → MBR

t2 : MBR → AC

 

Fetch Cycle에서 가져온 값이 저장된 IR에서 연산하기 위해 필요한 오퍼랜드 주소를 MAR로 보내서, 그 값을 통해 주기억장치에서 실제 값을 가져와 MBR에 저장하고 연산을 수행하기 위해 AC에 저장합니다.

 

다음으로 데이터 저장을 위한 STA (Address) 의 마이크로 연산입니다.

 

t0 : IR[Address] → MAR

t1 : AC → MBR

t2 : MBR → M[MAR]

 

IR에 저장된 저장될 기억장치의 주소를 MAR로 보내고, 저장될 내용이 저장되어 있는 AC 값을 MBR로 보냅니다.

그리고 MBR의 값을 MAR이 가리키는 주기억장치 주소에 저장합니다.

 

다음은 데이터 처리 중 하나인 ADD (Address) 의 마이크로 연산입니다.

 

t0 : IR[Address] → MAR

t1 : M[MAR] → MBR

t2 : AC + MBR → AC

 

더하기 연산을 수행할 값이 저장되어 있는 기억장치 상의 주소를 MAR로 보내어 기억장치의 MAR 위치의 값을 MBR에 저장합니다. 그리고 AC의 값과 MBR의 값을 더하기 연산 수행하여 AC에 다시 저장합니다. (덮어쓰기)

더하기 과정에서는 ALU를 거쳐 더하기 연산을 수행합니다.

 

마지막으로 프로그램 제어를 위한 JMP (Address) 의 마이크로 연산입니다.

 

t0 : IR[Address] → PC

 

분기문은 PC의 값을 해당 명령어가 가리키는 주소로 변경만 해주면 끝입니다.

 

인터럽트 사이클

먼저 인터럽트는 프로그램 실행 중 CPU의 현재 처리 순서를 중단하고, 다른 동작의 수행 요구가 CPU로 들어왔을 때를 말합니다.

 

인출 사이클 도중 인터럽트가 들어오게 되면, 바로 다른 동작을 수행하는 것이 아닌 실행 사이클의 완료 후 인터럽트를 수행합니다.

 

인터럽트 서비스 루틴(Interrupt Service Routine, ISR)은 인터럽트 처리를 위한 서비스 루틴으로, 인터럽트가 요구됐을 때, CPU가 인터럽트 요구 장치를 위해 ISR을 호출합니다. ISR이 종료 후 다시 중단된 프로그램으로 돌아가서 프로그램을 지속합니다.

 

다시 중단된 프로그램을 지속하기 위해 인터럽트 시 PC, IR, MAR, MBR, AC 등의 레지스터 값을 Stack에 저장합니다.

 

위처럼 인터럽트 요구 신호를 검사하고, 현재 레지스터 내용을 스택에 저장한 다음 ISR 주소를 PC에 적재하는 과정을 인터럽트 사이클이라고 부릅니다.

 

인터럽트 사이클의 마이크로 연산은 다음과 같습니다.

 

t0 : PC → MBR

t1 : SP → MAR, ISR의 시작 주소 → PC

t2 : MBR → M[MAR], SP - 1 → SP

 

현재의 PC 내용을 MBR에 먼저 저장합니다. (추후 인터럽트 종료 후 다시 복귀해야하므로)

그리고, Stack Pointer의 값을 MAR에 저장합니다. 그와 동시에 PC의 값은 ISR의 시작 주소로 변경됩니다.

그리고, MBR의 값을 MAR이 가리키는 주기억장치의 위치에 저장하고, Stack Pointer는 1 감소합니다. (이것도 똑같이 1이 아닐 수 있음, 프로그램 상 스택은 top에서 감소하는 형식)

 

ISR을 처리하는 도중에 또 인터럽트가 발생하는 경우를 다중 인터럽트라고 부릅니다.

 

이때 처리하는 방법으로는 크게 두가지가 있습니다.

 

먼저 다중 인터럽트 요구를 거절하는 방법입니다.

Interrupt Flag를 인터럽트 불가능 상태로 지정합니다. 이는 주로 중요한 프로그램이나 도중에 중단이 불가능한 경우, 데이터 입출력을 위한 인터럽트 처리 시 사용합니다.

 

두번째로는 우선순위에 기반하여 처리하는 방법입니다.

우선순위가 낮은 인터럽트가 처리되는 동안 우선순위가 더 높은 인터럽트가 들어오면 우선순위가 더 높은 인터럽트를 우선적으로 처리합니다.

 

간접사이클

간접 사이클은 실행 사이클에서 사용될 데이터의 실제 주소를 주기억장치로부터 읽어오는 과정입니다.

해당 사이클은 인출 사이클과 실행 사이클 사이에 존재하며, 간접 주소지정 방식(Indirect Addressing)에서 사용합니다.

 

간접 사이클의 마이크로 연산은 다음과 같습니다.

 

t0 : IR[Address] → MAR

t1 : M[MAR] → MBR

t2 : MBR → IR[Address]

 

명령어의 오퍼랜드가 가리키는 주소를 MAR에 저장하고 MAR이 가리키는 주기억장치의 값을 MBR로 가져와서 명령어의 오퍼랜드가 가리키는 주소로 치환합니다. (주소가 가리키는 주소를 가져와서 저장해놓으므로, 다음 실행사이클에서는 실제 값을 사용하게 됨)

반응형

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

명령어 세트(Instruction Set)  (1) 2024.01.04
명령어 파이프라이닝  (1) 2024.01.03
CPU의 구조  (0) 2024.01.02
컴퓨터 구조의 발전  (0) 2024.01.02
컴퓨터 시스템의 구성 및 동작 원리  (0) 2023.12.28