[시스템] CPU정리② - 레지스터와 CPU 동작방법
- 컴퓨터공학과/Computing System
- 2012. 5. 26.
이전글 : [시스템] CPU정리① - CPU 내부 들여다보기 + CPU꿀정보
레지스터 종류
o CPU 전용 레지스터(Invisible) : PC, AC, MAR, MBR, IR
o USER 레지스터(visible) : 프로그램 시 사용 가능
CPU 전용 레지스터
o Accumulator(AC, 누산기) : 데이터를 일시 저장하는 레지스터
기억장치로부터의 읽어온 데이터와 누산기에 적재되어 있던 데이터가 지정된 연산을 수행한 후 그 결과 값을 다시 누산기에 적재한다. 누산기 내용을 전부 지워 0으로 만들 수 있으며, 왼쪽이나 오른쪽으로 몇 자리씩 움직일 수도 있다. 누산기의 비트 수는 CPU가 한 번에 처리할 수 있는 데이터 비트 수인 word의 길이와 같다.
- 데이터 일시저장
- AC <- AC의 현재 값 + 메모리로부터 읽어온 값
o Program Counter(PC, 프로그램 카운터) : 다음에 수행될 명령어의 주소를 가지고 있는 레지스터
PC 값은 word의 크기에 따라 1 또는 명령어 길이(바이트 수)만큼 씩 증가되어 기억장치에 저장되어 있는 명령어를 연속적으로 수행한다. 그러나 만일 분기 명령어가 실행되는 경우에는 그 목적지 주소로 갱신된다.
- 다음에 수행될 명령어 주소
- 인터럽트
- CPU 명령처리순서
o Instruction Register(IR, 명령어 레지스터) : 현재 실행 중인 명령어를 기억하고 있는 레지스터
o Memory Address Register(MAR, 기억장치주소 레지스터) : 다음에 수행 될 명령어를 인출하기 위해 현재 PC에 들어있는 내용(주소)이 시스템 주소버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터
- (주소버스), PC -> MAR
o Memory Buffer Register(기억장치 버퍼 레지스터) : 기억장치로 쓰일 데이터나 기억장치로부터 읽어온 데이터를 임시로 저장하는 레지스터
- (데이터버스), MAR의 실제 콘텐츠(데이터, 명령어)
- Memory와 CPU의 인터페이스
o Index Register(인덱스 레지스터) : 인덱스 주소지정방식에서 사용되는 레지스터
o Stack Pointer(스택 포인터)
- 스택 주소지정 방식에서 사용되어지며, 스택의 최상위를 지정
o Status Register(상태 레지스터) (=psw program status word)
- 모든 정보를 비트단위로, 하드웨어적으로 1 아니면 0으로 셋팅 시켜 현재 상태를 표시
* Buffer버퍼는 A와 B 사이의 인터페이스 역할
- 접근속도·처리속도 상이할 때, 실행환경 경계가 다를 때 사용
* CPU에서는 변수 사용 불가, 오직 레지스터에서만 변수 사용
중앙처리장치의 동작
1) 명령 Instruction Cycle
2) 인출 Fetch Cycle : Instruction from memory
3) 수행 ExecutionCycle : Execute by ALU
4) 간접 Indirect Cycle : Indirectly access the data
5) 인터럽트 Interrupt Cycle
* 인터럽트 사이클이 수행되지 않으면 새로운 일을 수행하기 위해 실행중이던 일이 모두 끝날 때까지 기다려야함
→ 하던 일을 빠져나오게 하고 새로운 일을 수행한 후 다시 돌아와서 하던 일을 처리함으로써 효율을 높임
동작흐름
o Fetch → Execute : 명령어·데이터 실행
o Execute → Fetch : 저장
o Fetch → Indirect : (직접 접근할 수 없는) 데이터
o Indirect → Execute : Indirect로 얻은 데이터 실행
o Execute → Interrupt : 인터럽트 요청이 들어오면 현재 명령어 실행 끝낸 후 CPU는 다른 프로그램을 실행한다.
* A = 3 ; 직접 데이터 접근 방식
* A = B[3] ; 간접 데이터 접근 방식
* 직접 접근 : CPU가 직접 접근(↔ Indirect)
레지스터를 활용한 CPU 동작 (마이크로 연산 표기)
인출 사이클
기억장치의 지정된 위치로부터 CPU로 명령어를 가져오는 단계 (Memory → IR)
C0 : MAR ← PC
C1 : MBR ← M(MAR), PC ← PC+1
C2 : IR ← MBR
* CU, Decoding with IR : CPU는 IR(명령어 레지스터)에 어떤 명령어가 들어있는지 알 수 없으므로 CU(제어장치)가 명령어 포맷에 따라 명령어가 어떤 연산을 요청했는지 판단한다.
* PC(프로그램 카운터) + 1 : 1은 다음 명령어를 뜻하는 상징, 명령어 길이만큼 더해준다
* ( ) : 내용을 의미, add : 그냥 주소
- (add) : 그 주소에 있는 내용
- OPR( ) : 명령어 레지스터 안의 내용
실행 사이클
인출된 명령어를 해독하고 직접 명령을 실행하는 사이클
Decoding instruction in IR → Executing ALU by CU
* Instruction : Operator by ALU(ACC참조) + operand by user
LDA(Load Address) 명령
C0 : MAR ← IR(addr)
C1 : MBR ← M(MAR)
C2 : AC ← MBR
ADD 명령
C0 : MAR ← IR(addr)
C1 : MBR ← M(MAR)
C2 : AC ← AC + MBR
STA(Store AC) 명령
C0 : MAR ← IR(addr)
C1 : MBR ← AC
C2 : M(MAR) ← MBR
* 예시
A = A(ope1) + B(ope2) 계산
MAR ← OPR(ope1)
MBR ← M(MAR)
AC ← MBR // AC ← A
MAR ← OPR(ope2)
MBR ← M(MAR)
AC ← AC + MBR // AC 최종 값
MBR ← AC
MAR ← OPR(ope1)
M(MAR) ← MBR // A 위치에 최종 AC 값 저장
BUN(Branch Uncondition; not step by step) 명령
C0 : PC ← IR(addr) // pc에 적용시키면 된다! pc값만 바꿔줌
* 예시
BUN abc : abc의 주소가 PC값으로 들어간다!
인터럽트 사이클
- 인터럽트 발생 시 현재 수행 중이던 처리 과정을 저장한 후에 인터럽트 사이클 시작
- 처리 끝나면 원래의 프로그램으로 복귀
* 인터럽트 : 현 사이클과 관계없이 CPU의 정상적인 처리를 방해하는 예기치 않았던 사건
Short Time-Job이 Long Time-Job을 기다리지 않고 CPU효율적으로 수행
간접 사이클
인출 사이클에서 읽어 들인 명령어가 간접 주소지정 방식의 명령어일 경우에 기억장치로부터 유효주소를 읽어오는 과정
- 주소를 읽어 와야 실행할 수 있기 때문에 인출사이클과 실행사이클 사이에 위치
'컴퓨터공학과 > Computing System' 카테고리의 다른 글
[시스템] 예외처리① - Exception과 Vector Table (0) | 2012.06.02 |
---|---|
[시스템] 운영체제 정리 - Regular OS, Multi-Processing OS, Network OS, Distributed OS, Real-Time OS (0) | 2012.06.02 |
[시스템] CPU정리① - CPU 내부 들여다보기 + CPU꿀정보 (1) | 2012.05.26 |
[system] Computing system3 (0) | 2012.05.25 |
[시스템] 정보처리 기본 원리 - 폰노이만(John Von Neumann) 아키텍처 (1) | 2012.05.25 |