Mint Flavor Chocolate DEV
CPU의 구조와 기능 본문
CPU의 구조와 기능
CPU의 기능
- 명렁어 인출
- 명령어 해독
- 데이터 인출
- 데이터 처리
- 데이터 쓰기
CPU의 내부 구성요소
- ALU : 각종 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진 하드웨어 모듈
- 레지스터 : 액세스 속도가 가장 빠른 기억장치
- 제어 유니트 : 프로그램 코드(명령어)를 해석하고, 그것을 실행하기 위한 제어 신호들을 순차적으로 발생하는 하드웨어 모듈
- CPU 내부 버스 : ALU와 레지스터들 간의 데이터 이동을 위한 데이터 선들과 제어 유니트로부터 발생되는 제어 신호 선들로 구성된 내부버스
명령어 실행에 필요한 내부 레지스터들
- 프로그램 카운터(PC) : 다음에 인출할 명령어의 주소를 가지고 있는 레지스터
- 누산기(Accumulator: AC) : 데이터를 일시적으로 저장하는 레지스터
- 명령어 레지스터(Instruction Register : IR) : 가장 최근에 인출된 명령어 코드가 저장되어 있는 레지스터
- 기억장치 주소 레지스터(Memory Address Register : MAR) : PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터
- 기억장치 버퍼 레지스터(MBR) : 기억장치에 쓰여질 데이터 혹은 기억장치로부터 읽혀진 데이터를 일시적으로 저장하는 버퍼 레지스터
인출사이클의 마이크로 연산
- t0 : MAR ← PC
- t1 : MBR ← M[MAR], PC ← PC + 1
- t2 : IR ← MBR
실행 사이클의 마이크로 연산
LOAD addr 명령어
- t0 : MAR ← IR(addr)
- t1 : MBR ← M[MAR]
- t2 : AC ← MBR
STA addr 명령어
- t0 : MAR ← IR(addr)
- t1 : MBR ← AC
- t2 : M[MAR] ← MBR
ADD addr 명령어
- t0 : MAR ← IR(addr)
- t1 : MBR ← M[MAR]
- t2 : AC ← AC + MBR
인터럽트 사이클
- 인터럽트 : 프로그램 실행 중에 CPU의 현재 처리 순서를 중단시키고 다른 동작을 수행하도록 요구하는 시스템 동작
- 인터럽트 서비스 루틴(interrupt service routine :ISR) : 인터럽트를 처리하기 위하여 수행되는 프로그램 루틴
인터럽트 사이클의 마이크로 연산
- t0 : MBR ← PC
- t1 : MAR ← SP, PC ← ISR의 시작주소
- t2 : M[MAR] ← MBR
다중 인터럽트
- 인터럽트의 서비스 루틴을 수행하는 동안에 다른 인터럽트 발생
다중인터럽트 처리방법
1) CPU가 인터럽트 서비스 루틴을 처리하고 있는 도중에는 새로운 인터럽트 요구가 들어오더라도 CPU가 인터럽트 사이클을 수행하지 않도록 방지 - 인터럽트 플래그, 시스템 운영상 중요한 프로그램이나 도중에 중단할 수 없는 동작 등을 위한 인터럽트 처리2) 인터럽트 우선순위 선정
간접 사이클
- 명령어에 포함되어 있는 주소를 이용하여, 그 명령어 실행에 필요한 데이터의 주소를 인출하는 사이클
- 간접 주소지정 방식에서 사용
- 인출 사이클과 실행 사이클 사이에 위치
- 간접 사이클에서 수행될 마이크로-연산
- t0 : MAR ← IR(addr)
- t1 : MBR ← M[MAR]
- t2 : IR(addr) ← MBR
- 인출된 명령어의 주소 필드 내용을 이용하여 기억장치로부터 데이터의 실제 주소를 인출하여 IR의 주소 필드에 저장
명령 파이프라이닝
- CPU의 프로그램 처리 속도를 높이기 위하여 CPU 내부 하드웨어를 여러단계로 나누어 동시에 처리하는 기술
2단계 명령어 파이프라인
- 인출 단계와 실행 단계라는 두 개의 독립적인 파이프라인 모듈로 분리
- 알반적으로 단계 수만큼의 속도향상 (여기선 2배)
- 문제점 : 두 단계의 처리시간이 동일하지 않으면 두 배의 속도향상을 얻지 못함
- 해결책 : 파이프라인의 단계의 수를 증가시켜 각 단계의 처리 시간을 같게 함
4단계 명령어 파이프라인
- 명령어 인출, 명령어 해독, 오퍼랜드 인출, 실행 단계로 구성
파이프라인에 의한 전체 명령어 실행 시간
- 파이프라인 단계 수 = k
- 실행할 명령어들의 수 = N
각 파이프라인 단계가 한 클럭 주기씩 걸린다고 가정한다면
파이프라인에 의한 전체 명령어 실행 시간 T :
T = k + (N -1)
파이프라인 되지 않은 경우의 N개의 명령어들의 실행 시간 T :
T = k × N예제 문제
파이프라인 단계 수 = 4,
파이프라인 클록 = 1GHz (각 단계에서의 소요시간 = 1 ns)일 때,
10개의 명령어를 실행하는 경우의 속도향상은?<풀이>
첫 번째 명령어 실행에 걸리는 시간 = 4 ns
다음부터는 매 1 ns 마다 한 개씩의 명령어 실행 완료
10개의 명령어 실행 시간 = 4 + (10 - 1) = 13 ns- 속도향상 = (10 × 4) / 13 ≒ 3.08 배
[예] k = 4일 때,
N = 100 이라면, Sp = 400/103 = 3.88
N = 1000 이라면, Sp = 4000/1003 = 3.988
N = 10000 이라면, Sp = 40000/10003 = 3.9988
N → ∞ 라면, Sp = 4
파이프라인의 효율 저하 요인들
- 모든 명령어들이 파이프라인 단계들을 모두 거치지는 않는다
- 파이프라인의 클록은 처리 시간이 가장 오래 걸리는 단계를 기준으로 결정된다
- IF 단계와 OF 단계가 동시에 기억장치를 액세스하는 경우에, 기억장치 충돌(memory conflict)이 일어나면 지연이 발생한다
조건 분기(conditional branch) 명령어가 실행되면, 미리 인출하여 처리하던 명령어들이 무효화된다.
조건분기시의 시간 흐름도
슈퍼스칼라
- CPU의 처리 속도를 더욱 높이기 위하여 내부에 두 개 혹은 그 이상의 명령어 파이프라인들을 포함시킨 구조
- 매 클록 주기마다 각 명령어 파이프라인이 별도의 명령어를 인출하여 동시에 실행할 수 있기 때문에,이론적으로는 프로그램 처리 속도가 파이프라인의 수만큼 향상 가능
파이프라인의 수 = m : m-way 슈퍼스칼라
명령어 수 N → ∞, Sp → m
슈퍼스칼라의 속도 저하 (Sp < m) 요인 :
명령어들 간의 데이터 의존 관계
하드웨어(ALU, 레지스터, 등) 이용에 대한 경합 발생
→ 동시 실행 가능한 명령어 수 < m<해결책>
명령어 실행 순서 재배치
→ 명령어들 간의 데이터 의존성 제거
하드웨어 추가(중복) 설치
→ 기억장치 및 레지스터에 대한 경합 감소
서브루틴 호출을 위한 명령어들
- CALL 명령어 : 현재의 PC 내용을 스택에 저장하고 서브루틴의 시작 주소로 분기하는 명령어
- RET 명령어 : CPU가 원래 실행하던 프로그램으로 복귀(return)시키는 명령어
CALL X 명령어에 대한 마이크로-연산
- t0 : MBR ← PC
- t1 : MAR ← SP, PC ← X
- t2 : M[MAR] ← MBR, SP ← SP - 1
현재의 PC 내용(서브루틴 수행 완료 후에 복귀할 주소)을 SP가 지정하는 스택의 최상위(top of stack)에 저장
만약 주소지정 단위가 바이트이고 저장될 주소는 16비트라면,
SP ← SP – 2 로 변경
RET 명령어의 마이크로-연산
- t0 : SP ← SP + 1
- t1 : MAR ← SP
- t2 : PC ← M[MAR]
'컴퓨터 구조' 카테고리의 다른 글
RAID의 구성 및 특성 (0) | 2017.12.21 |
---|---|
기억장치 시스템의 특성/구조 (0) | 2017.12.21 |
제어 유니트의 구조와 기능 (0) | 2017.12.21 |
컴퓨터의 기본구조 (2) | 2017.09.19 |