CPU의구조와기능 CPU 의명령어수행과정 명령어인출 (Instruction Fetch) : 기억장치로부터명령어를읽어온다 명령어해독 (Instruction Decode) : 수행해야할동작을결정하기위하여명령어를해독한다 모든명령어들에대하여공통적으로수행 데이터인출 (Data Fetch) : 명령어실행을위하여데이터가필요한경우에는기억장치혹은 I/O 장치로부터그데이터를읽어온다 데이터처리 (Data Process) : 데이터에대한산술적혹은논리적연산을수행 데이터쓰기 (Data Store) : 수행한결과를저장 명령어에따라필요한경우에만수행 1 2 2.1 CPU 의기본구조 CPU 의내부구성요소 산술논리연산장치 (Arithmetic and Logical Unit: ALU) 레지스터세트 (Register Set) 제어유니트 (Control Unit) ALU 각종산술연산들과논리연산들을수행하는회로들로이루어진하드웨어모듈 산술연산 : 덧셈, 뺄셈, 곱셈, 나눗셈 논리연산 : AND, OR, NOT, XOR 등 레지스터 (register) CPU내부에위치한액세스속도가가장빠른기억장치 레지스터들의수가제한됨 ( 특수목적용레지스터들과적은수의일반목적용레지스터들 ) 3 4
CPU 의내부구성요소 ( 계속 ) 2.2 명령어실행 제어유니트 프로그램코드 ( 명령어 ) 를해석하고, 그것을실행하기위한제어신호들 (control signals) 을순차적으로발생하는하드웨어모듈 명령어사이클 (instruction cycle) CPU 가한개의명령어를실행하는데필요한전체처리과정 명령어인출과명령어실행의부사이클로구성됨 CPU 내부버스 ALU와레지스터들간의데이터이동을위한데이터선들과제어유니트로부터발생되는제어신호선들로구성된내부버스 외부의시스템버스들과는직접연결되지않음 버퍼레지스터들혹은시스템버스인터페이스회로를통하여시스템버스와접속. 부사이클 (subcycle) 인출사이클 (fetch cycle) : CPU 가기억장치로부터명령어를읽어오는단계 실행사이클 (execution cycle) : 명령어를실행하는단계 5 6 기본명령어사이클 간단한 CPU 명령어집합 명령어 동작 LOAD addr AC M[addr] STA addr ADD addr M[addr] AC AC AC + M[addr] 반복실행 명령어사이클 JUMP addr 명령어형식 opcode LOAD 1(0001) STA 2(0010) PC addr 4-bit 12-bit ADD 5(0101) JUMP 8(1000) 7 8
CPU 레지스터 데이터경로가표시된 CPU 내부구조 CPU 레지스터 AC (Accumulator, 누산기 ) PC (Program Counter) CPU 내부에위치 IR (Instruction Register) MAR (Memory Address Register) MBR (Memory Buffer Register) 또는 MDR(Memory Data Reg) 시스템버스와의인터페이스에위치 9 10 CPU 내부레지스터들 CPU 내부레지스터들 ( 계속 ) 프로그램카운터 (Program Counter: PC) 다음에인출할명령어의주소를가지고있는레지스터 각명령어가인출된후에는명령어길이만큼주소를증가 분기 (jump) 명령어가실행되는경우에는목적지주소로갱신됨 명령어레지스터 (Instruction Register: IR) 가장최근에인출된명령어코드가저장되어있는레지스터 기억장치주소레지스터 (Memory Address Register: MAR) 명령어또는데이터의주소가시스템주소버스로출력되기전에일시적으로저장되는주소레지스터 기억장치버퍼레지스터 (Memory Buffer Register: MBR) 기억장치에쓰여질데이터혹은기억장치로부터읽혀진데이터를일시적으로저장하는버퍼레지스터 누산기 (Accumulator: AC) 데이터를일시적으로저장하는레지스터. 레지스터의크기는 CPU 가한번에처리할수있는데이터비트수 11 12
인출사이클 인출사이클의주소및명령어흐름도 마이크로연산 (micro -operation) 한 CPU 클럭주기에수행되는 CPU 내의동작 기계어명령어의실행 여러단계의마이크로연산들로이루어짐 (1) MAR PC 인출사이클의마이크로연산 (IR M[MAR]) t0 : MAR PC t1 : MBR M[MAR], PC PC + 1 t2 : IR MBR (3) IR MBR 13 (2) MBR M[MAR], PC PC + 1 14 실행사이클 Load, Store 명령어 CPU는실행사이클동안에명령어코드를해독 (decode) 하고, 그결과에따라필요한연산들을수행 실행사이클에서수행되는마이크로연산들은명령어에따라다름 CPU 가수행하는연산들의종류 데이터이동 : CPU 와기억장치혹은 I/O 장치간에데이터를이동 LOAD addr, STA addr 데이터처리 : 데이터에대하여산술혹은논리연산을수행 ADD addr 프로그램제어 : 프로그램의실행순서를결정 JMP addr LOAD addr (AC M[addr] ) 기억장치에저장되어있는데이터를 AC로이동하는명령어 실행사이클의마이크로연산 t0 : MAR IR(addr) t1 : MBR M[MAR] t2 : AC MBR STA addr (M[addr] AC) AC 레지스터의내용을기억장치에저장하는명령어 실행사이클의마이크로연산 t0 : MAR IR(addr) t1 : MBR AC t2 : M[MAR] MBR 15 16
ADD 명령어 ADD 명령어실행사이클 ADD addr (AC AC + M[addr]) 기억장치에저장된데이터를 AC 의내용과더하고, 그결과를다시 AC 에저장하는명령어 (1) MAR IR(addr) 실행사이클의마이크로연산 t0 : MAR IR(addr) t1 : MBR M[MAR] t2 : AC AC + MBR (3) AC AC + MBR 17 (2) MBR M[MAR] 18 JUMP 명령어 어셈블리프로그램실행과정의예 JUMP addr (PC addr) 오퍼랜드필드 (addr) 가가리키는주소의명령어로실행순서를변경하는분기 (branch) 명령어 실행사이클의마이크로연산 t0 : PC IR(addr) 19 20
어셈블리프로그램실행과정의예 ( 계속 ) 어셈블리프로그램실행과정의예 ( 계속 ) LOAD 250 인출 : 100번지의첫번째명령어코드가인출되어 IR에저장 PC = PC + 1 = 101 실행 : 250 번지의데이터 (0004) 를 AC 로이동 ADD 251 인출 : 두번째명령어가 101번지로부터인출되어 IR에저장 PC = PC + 1 = 102 실행 :AC 와 251 번지의내용을더하고, 결과를 AC 에저장 21 22 어셈블리프로그램실행과정의예 ( 계속 ) 어셈블리프로그램실행과정의예 ( 계속 ) STA 251 인출 : 세번째명령어가 102 번지로부터인출되어 IR에저장 PC = PC + 1 = 103 실행 :AC 의내용이 251 번지에저장 JUMP 170 인출 : 네번째명령어가 103 번지로부터인출되어 IR에저장 PC = PC + 1 = 104 실행 : 분기될목적지주소 (IR 의오퍼랜드부분 ) 가 PC 로적재, 즉, PC = 170 다음에 170 번지의명령어인출 23 24
간접주소지정방식 간접주소지정방식 (indirect addressing) 명령어에데이터의주소가아니라데이터의주소가저장된메모리주소를저장하는방식 간접주소지정을포함하는명령어형식 (A) 간접사이클 (indirect cycle) 간접사이클 간접주소지정방식을사용하는명령어실행에서메모리에저장된데이터의주소를인출하는사이클 명령어의간접비트 (I) 가 1 인경우에인출사이클과실행사이클사이에위치 I=0: 직접주소지정방식 addr = A, 오퍼랜드 = M[A] I=1: 간접주소지정방식 addr = M[A], 오퍼랜드 = M[addr] = M[ M[A] ] 오퍼랜드를얻기위해서메모리를두번읽어야함. 간접사이클에서수행될마이크로 - 연산 t0 : MAR IR(addr) t1 :MBR M[MAR] t2 : IR(addr) MBR 인출된명령어의주소필드내용을이용하여기억장치로부터데이터의실제주소를인출하여 IR의주소필드에저장 ADD [250] ; AC AC + M[ M[250] ] 25 26 2.3 명령어파이프라이닝 2- 단계명령어파이프라인 ( 계속 ) 명령어파이프라이닝 (instruction pipelining) CPU의프로그램처리속도를높이기위하여 CPU 내부하드웨어를여러단계로나누어여러명령어를중첩하여처리하는기술 2- 단계명령어파이프라인 2- 단계파이프라인을이용하면명령어처리속도가두배향상 일반적으로단계수만큼의속도향상 문제점 : 두단계의처리시간이동일하지않으면두배의속도향상을 얻지못함 ( 파이프라인효율저하 ) 해결책 : 파이프라인단계의수를증가시켜각단계의처리시간을같게함 ( 파이프라인단계의수를늘리면전체적으로속도향상도더높아짐 ) 27 28
4- 단계명령어파이프라인 파이프라인에의한속도향상 instruction fetch instruction decode operand fetch execute 전체명령어실행시간 * 비파이프라이닝 N x 4 클럭주기 * 파이프라이닝 N + 3 클럭주기 가정 파이프라인단계수 = k 실행할명령어들의수 = N 각파이프라인단계가한클럭주기씩걸린다고가정 파이프라인에의한전체명령어실행시간 T : T = k + (N - 1) 첫번째명령어를실행하는데 k 주기가걸리고, 나머지 (N - 1) 개의명령어들은각각한주기씩만소요 파이프라인되지않은경우의 N 개의명령어들을실행시간 T : T = k N 파이프라인에의한속도향상 S p T T 1 k k N k + ( N 1) 29 30 파이프라인효율저하요인및해결책 특정단계의소요시간증가 메모리접근시에소요시간이증가함 내부캐시메모리사용 복잡한연산실행 파이프라인단계증가, 연산을여러단계로나누어서실행 기억장치접근충돌 IF 단계와 OF 단계가동시에메모리를액세스하는경우에기억장치충돌 (memory conflict) 이일어나면지연이발생한다 명령어캐시와데이터캐시메모리를분리하여사용 파이프라인무효화 조건분기 (conditional branch) 명령어가실행되면, 미리인출하여처리하던명령어들이무효화된다 지연분기 ( 분기명령어다음의명령어실행후분기함 ), 분기예측 ( 분기명령다음에실행할명령어를예측하여인출 ), 분기목적지선인출 ( 다음명령어와분기목적지명령어함께인출 ) 슈퍼스칼라 (Superscalar) CPU의처리속도를더욱높이기위하여내부에여러개의명령어파이프라인들을포함시킨구조 m-way 슈퍼스칼라구조 m 개의명령어파이프라인을가진 CPU 구조 매클록주기마다각명령어파이프라인이별도의명령어를인출하 여동시에실행할수있기때문에, 이론적으로는프로그램처리속도가파이프라인의수만큼향상가능 슈퍼스칼라의속도저하 (Sp < m) 요인및해결책 동시실행가능한명령어수가 m 개미만 해결책 : 명령어실행순서재배치 : 명령어들간의데이터의존성제거 31 32
2-way 슈퍼스칼라명령어실행흐름도 예: Pentium 33 34 멀티-코어 CPU 코어 (core) : 명령어실행에필요한 CPU 내부의핵심하드웨어 ( 슈퍼스칼라 ) 모듈 멀티- 코어프로세서 (multi-core processor): 여러개의 CPU 코어들을하나의칩에포함시킨프로세서 듀얼-코어 (dual-core): 두개의CPU 코어포함 쿼드-코어 (quad-core): 네개의CPU 코어포함 single die (dual core) dual die (quad core) 각 CPU 코어는시스템버스와캐쉬공유 각코어는독립적으로프로그램을실행함 dual die (dual core) 35 36