[전자계산기] 명령어 사이클
명령어의 수행
순서
- 명령어 인출(Instruction Fetch)
- 명령어 해독(Instruction Decoder)
- 오퍼랜드 인출(Operand Fetch)
- 실행(Execute)
- 인터럽트 조사(Interrupt Search Into)
명령어 인출 과정에서 인터럽트가 발생하더라도 CPU는 인터럽트를 인지하지 못하고 하나의 명령어 실행이 완전히 끝난 상태에서 인터럽트의 발생 여부를 조사하여 인터럽트가 발생하였다는 것을 인지하게 되는 것이다
수행 시간
- Memory Read 또는 Write Cycle이 명령어 수행 시간에 지배적인 영향을 준다
- 수행 시간은 명령어 종류에 따라 약간씩 다르다
- 명령어 수행 시간은 여러 개의 Machine Cycle로 구성
성능
$명령어의 성능 = \frac{인스트럭션 수행 시간}{인스터럭션 패치 시간 + 인스트럭션 준비 시간}$
속도 단위
as(아토초) : 10-18 = 1/1018
fs(펨토초) : 10-15 = 1/1015
㎰(피코초) : 10-12 = 1/1012
㎱(나노초) : 10-9 = 1/109
㎲(마이크로초) : 10-6 = 1/106
㎳(밀리초) : 10-3 = 1/103
진동수 단위(Hz)
KHz : 1초에 103번 진동
MHz : 1초에 106번 진동
GHz : 1초에 109번 진동
THz : 1초에 1012번 진동
마이크로 오퍼레이션
- CPU에서 발생시키는 하나의 클록 펄스 동안 실행되는 기본 동작을 의미
- CPU에 있는 레지스터와 플래그의 상태 변환을 일으키게 하는 동작을 의미
- CPU에서 발생시키는 제어 신호에 따라 마이크로 오퍼레이션이 순서적으로 일어난다
- 명령어의 수행은 마이크로 오퍼레이션의 수행으로 이루어진다
일반 형식
단항 마이크로 오퍼레이션
Rd ← F(R1)
이항 마이크로 오퍼레이션
Rd ← F(R1, R2)
Rd: 결과가 들어갈 레지스터
F: 처리기
R1, R2: 연산 대상체가 들어 있는 레지스터
주요 동작
- MAR ← MBR(AD) : 기억 레지스터에 번지부 전송
- IR ← MBR(OP) : 명령 레지스터에 명령 코드 전송
- A ← CONSTANT : 레지스터 A에 상수 전송
- A ← A + B : A와 B를 합하여 A에 기억
- A ← A - B : A에서 B를 뺄셈하여 A에 기억
- A ← A`: A 내용의 1의 보수
- A ← A`+ 1 : A 내용의 2의 보수
- F ← A ∧ B : A와 B의 논리곱
- F ← A XOR B : A와 B의 베타적 논리합
- F ← A ∨ B : A와 B의 논리합
마이크로 사이클 시간
마이크로 사이클은 하나의 오퍼레이션을 수행하는 과정을 의미하며
마이크로 사이클을 실행하는 시간을 마이크로 사이클 타임 또는 CPU Clock Time이라 한다
동기 고정식(Synchronous Fixed)
- 여러 개의 마이크로 오퍼레이션 동작 중에서 마이크로 사이클 타임이 가장 긴 것을 선택하여 CPU의 클록 주기로 사용하는 방식
- CPU의 시간 이용이 비효율적
- 모든 마이크로 오퍼레이션 수행 시간이 유사한 경우 사용
- 제어 장치의 구현이 간단
동기 가변식(Synchronous Variable)
- 마이크로 오퍼레이션 동작들을 마이크로 사이클 타임에 따라 몇 개의 군으로 분류하여 군별로 CPU의 클록 주기를 따로따로 부여하는 방식
- 마이크로 오퍼레이션 수행 시간의 차이가 현저할 때 사용
- 클록 주기 시간은 정수배가 될 수 있도록 해야 각 집합 간 서로 다른 사이클 타임의 동기를 맞추기 쉽고 제어 장치 설계가 쉬워진다
비동기식(Asynchronous)
- 모든 마이크로 오퍼레이션에 대해 서로 다른 마이크로 사이클 시간을 부여하는 방식
- 하나의 오퍼레이션 동작이 끝나면 끝난 사실을 제어 장치에 알려 다음 오퍼레이션이 수행되도록 하여야 하므로 제어 장치가 복잡하게 된다
메이저 상태(Major State)
기억 장치의 주기 시간을 단위로 하여 해당 주기 동안에 기억 장치로 접근할 때 무엇을 위해서 접근하는지를 표시하는 주 상태와 시간에 관한 정보를 나타내는 시간 상태가 있다
메이저 상태(Major State
)는 CPU가 무엇을 하고 있는가를 나타내는 상태로 Machine Cycle이라고도 한다
시간 상태(Timing State
)는 메이저 상태에서 마이크로 오퍼레이션이 수행되는 시간을 나타내는 것으로 타이밍 상태 계수기를 이용하여 나타내며 하나의 마이크로 오퍼레이션이 수행될 때마다 하나씩 증가시켜 나타낸다
종류
메이저 상태는 주기억 장치에 무엇을 위해 접근하는지에 따라 인출, 간접, 실행, 인터럽트 4가지 상태가 존재하며, 이 상태는 F,R 플래그의 상태를 가지고 파악한다
상태 | F | R |
---|---|---|
인출 주기 (Fetch Cycle) |
0 | 0 |
간접 주기 (Indirect) |
0 | 1 |
실행 주기 (Execute) |
1 | 0 |
인터럽트 주기 (Interrupt) |
1 | 1 |
관계
인출 주기가 완료되면 해독 결과에 따라 직접 주소이면 바로 실행 주기로 진행하고, 간접 주소이면 간접 주기를 거쳐서 실행 주기로 진행된다
실행 주기에서는 인터럽트 발생 여부에 따라 인터럽트가 발생했으면 인터럽트 주기로 진행하고 그렇지 않으면 인출 주기로 진행
인터럽트 주기에서는 항상 인출 주기로 진행
메이저 사이클의 마이크로 오퍼레이션
인출 주기(Fetch Cycle)
- 명령어를 기억 장치에서 CPU로 읽어오는 주기
- 명령어를 해독하는 주기
- 명령어의 종류가 판단되는 주기
- PC가 하나 증가되어 다음 명령어를 지시하는 주기
간접 주기(Indirect Cycle)
- 유효주소를 얻기 위하여 기억 장치에 한 번 더 접근하는 주기
- 오퍼랜드에 표현된 주소가 간접 주소인 경우에 수행되는 주기
실행 주기(Execute Cycle)
- 기억 장치로부터 실제 데이터를 읽어다가 연산 동작을 수행시키는 주기
- 다양한 형태의 명령어가 분기 처리되는 주기
ADD 마이크로 동작
- ACC에 있는 내용과 메모리에 있는 내용을 더해서 결과를 ACC에 넣어놓는 연산
AND 마이크로 동작
- ACC에 있는 내용과 메모리에 있는 내용을 논리곱(AND)하여 결과를 ACC에 넣어놓는 연산
LOAD(LDA) 마이크로 동작
- ACC를 0으로 초기화하고 이 초기화된 누산기와 메모리에 있는 내용을 더해서 결과를 ACC에 넣어놓게 되면 메모리에 있는 내용을 누산기로 이동시킨 효과를 보게 된다
STORE(STA) 마이크로 동작
- ACC에 있는 내용을 지정된 메모리에 저장시키는 연산
BUN(JUMP) 마이크로 동작
- 프로그램의 수행 제어 순서를 지정된 유효 번지로 분기시키는 명령어
BSA(Branch and Save Return Address) 마이크로 동작
- 복귀 주소를 저장하고 서브 프로그램으로 분기하기 위한 명령어
ISZ(Increment and Skip if Zero) 마이크로 동작
- 프로그램의 수행 순서를 조건에 따라 결정하는 명령어
인터럽트 주기(Interrupt Cycle)
- 여러 가지 원인에 의해서 정상적으로 수행 과정을 계속할 수 없어 먼저 응급 조치를 취한 후에 계속 수행할 수 있도록 CPU의 현 상태를 보관하기 위해 기억 장치에 접근하는 주기
- 명령어 수행 과정에서 인터럽트가 발생하더라도 반드시 해당 명령어가 완료된 상태에서 인터럽트를 처리하게 된다. 따라서 인터럽트 처리가 완료된 상태에서는 반드시 인출 주기로 진행한다
댓글남기기