Computer System Architecture 제 6 장 중앙처리장치 컴퓨터구조 Computer System Architecture 멀티미디어공학과 김 해영 hykim@tu.ac.kr
제 6 장 중앙처리장치 컴퓨터 레지스터 산술 논리 연산장치(ALU) 컴퓨터 명령어 CISC와 RISC 구성
제 6 장 중앙처리장치 중앙처리장치 명령어 수행 기능 + 수행 순서를 제어 3가지 주요 구성 요소 (1) Register Set (2) ALU (3) Control
컴퓨터 레지스터 컴퓨터 레지스터: 중앙처리장치 내의 임시 기억 장소 레지스터의 종류 (데이터의 종류에 따른 분류) 중앙처리장치 내에는 다음 번에 수행될 명령어의 주소가 저장될 장소 메모리에서 읽어 온 명령어의 주소가 저장될 기억장소 연산의 수행에 필요한 데이터와 연산 결과의 값을 임시적으로 저장할 수 있는 기억장소 컴퓨터 시스템 내부에서의 데이터 이동은 레지스터를 통하여 이루어지며, 레지스터 들은 공통 버스를 통해 정보를 교환함 주기억장치의 접근 횟수를 줄일 수 있어서 프로그램의 수행 속도를 높일 수 있음 레지스터의 종류 (데이터의 종류에 따른 분류) 주소를 기억하는 레지스터 주소 레지스터(Memory Address Register) : 주소를 기억하는 레지스터 프로그램 카운터(Program Counter) : 다음 번에 수해할 명령어의 주소를 저장 스택 포인터(Stack Pointer) : 메모리상에서 정의한 스택의 주소를 저장 메모리 제어 레지스터(Control Memory Address Register) : 제어 메모리 주소를 저장 인덱스 레지스터(IndeX Register):인덱스 주소를 저장 베이스 레지스터(Base Register): 기준 주소를 저장
컴퓨터 레지스터 레지스터의 종류 (데이터의 종류에 따른 분류) 명령어를 기억하는 레지스터(Instruction Register) 중앙처리장치가 메모리에 저장된 명령어를 인출 한 후, 이 명령어의 수행을 위해 연산 코드 부분을 제어장치내의 레지스터로 전송할 때 사용되어지는 레지스터 데이터를 기억하는 레지스터 메모리 버퍼 레지스터(Memory Address Register) : 메모리에서 읽어 온 데이터나 메모리에 기억시키기 전의 데이터를 저장, Data Register라고도 함 누산기(ACcumulator):ALU의 연산 결과를 저장 임시 레지스터(Temporary Register) : 연산 중에 중간 결과 값을 임시적으로 저장 CPU의 상태를 기억하는 레지스터 프로그램 상태 레지스터(Program Status Register) : CPU 에서 수행되고 있는 프로그램의 상태 정보를 기억 프로그램 상태 워드(Program Status Word) : 현재까지의 프로그램 수행 진도를 나타내는 정보와 프로그램 수행을 위해 사용된 레지스터들에 기억된 정보 및 각종 플래그에 기억된 정보 등을 저장
컴퓨터 레지스터 레지스터 전송 : 레지스터들 사이의 정보 전송 병렬 전송 R1 ← R2 P : R1 ← R2 레지스터 사이의 정보 전송 동작 : 마이크로 연산(micro-operation) 마이크로 연산 : 레지스터에 저장된 데이터를 가지고 실행되는 동작으로 하나의 클록펄스 동안에 실행되는 기본적인 동작 병렬 전송 한 클록 펄스 동안 레지스터의 모든 비트가 동시에 전송 : 레지스터 전송 언어 R1 레지스터 : 목적지 레지스터, R2 레지스터 : 근원지 레지스터 제어 함수(control function) : 레지스터 전송이 정해진 조건일 때만 발생하도록 결정하는 이진 상태(0/1) 전송조건 R1 ← R2 P : R1 ← R2 레지스터 전송을 위한 기본 기호
컴퓨터 레지스터 레지스터 전송 병렬 전송 P : R1 ← R2 제어 변수 비트수 실제적인 전송
컴퓨터 레지스터 레지스터 전송 직렬 전송 시프트 레지스터로서 클록과 동기되어 한 번에 한 비트씩 전송 비트 타임(bit time) : 인접한 두 비트 사이의 전송에 걸리는 시간 워드 타임(word time) : 레지스터의 모든 내용이 전송되는데 걸리는 시간 S : B1←A4, A1←A4, Ai←Ai-1, Bi←Bi-1, i=2, 3, 4 제어 함수
컴퓨터 레지스터 버스 전송과 메모리 전송 버스 전송 메모리 전송 : 주기억 장치와 외부회로와의 사이에서 이루어지는 전송 CPU 내의 전 레지스터들 사이의 정보 전송을 위한 연결 통로를 각각 구현하면 내부회로가 복잡해짐 공통 버스를 이용하여 한 번에 하나의 레지스터만이 데이터를 전송하면 연결 통로의 상당수를 줄일 수 있음 메모리 전송 : 주기억 장치와 외부회로와의 사이에서 이루어지는 전송 읽기(READ) : 메모리 외부장치로 정보 전송 쓰기(WRITE) : 외부 장치 메모리로 정보 전송
컴퓨터 레지스터 공통 버스 구조 공통 버스(Common Bus) 레지스터 상호간의 연결선수가 너무 많음 회선 비용 증가, 제어 복잡 예 각 레지스터가 1비트 : 6개의 데이터 경로(path)가 필요 각 레지스터가 n비트인 경우 : 6n개의 회선이 요구 한 번에 하나의 레지스터만이 정보 전송이 가능하게끔 회선사용에 제한 n개의 공통선으로 회선 수를 감소 버스를 이용한 정보 전달은 병렬 전송
컴퓨터 레지스터 공통 버스 구조 내부 버스 산술 연산장치와 레지스터 사이의 정보 전송 경로 외부 버스 : CPU와 CPU외부의 장치 사이의 정보 전송 경로 주기억장치 버스 : CPU와 주기억장치 사이 입출력 버스 : 입출력장치와 CPU 사이 범용 레지스터 CPU 구조의 내부 버스 단일 누산기 CPU 구조의 내부 버스
컴퓨터 레지스터 공통 버스 구조 버스의 구현 : 멀티플렉서 S1S0 : BUS ← C X Y : D ← BUS 예 : 4개의 4비트 레지스터에 대한 버스 시스템 C 레지스의 내용을 버스에 전달 11 10 01 00 S1S0 : BUS ← C 버스의 내용을 D 레지스터에 전달 X Y : D ← BUS 11 10 01 00
컴퓨터 레지스터 공통 버스 구조 버스의 구현 : 3-상태 버퍼 게이트 3-상태 : 0, 1, 고저항 상태(high-impedance state) 회로 open 회로 open 디코더의 인에이블 입력이 1이고 선택선의 입력 S1S0=01이라면 버스에는 B 레지스터의 내용이 전송 3-상태 버퍼를 이용한 버스 시스템
산술 논리 연산 장치 산술 논리 연산 장치 Fig. 6-14 산술 마이크로 연산(arithmetic micro-operation) : 덧셈, 뺄셈, 증가(increment), 감소(decrement) 논리 마이크로 연산(logical micro operation) : AND, OR, XOR, 보수(Complement) 등의 논리 마이크로 연산 시프트 마이크로 연산(shift micro operation) 등을 수행하는 장치 Fig. 6-14 ALU의 구성
산술 논리 연산 장치 산술 연산 회로 Fig. 6-15 전가산기를 이용한 병렬 가산기로 구성 일반적으로 n비트의 2진 병렬 가산기는 n개의 전가산기로 구성 병렬 가산기의 입력 제어 다양한 산술 마이크로 연산을 수행 Fig. 6-15
산술 논리 연산 장치 산술 연산 회로 산술 마이크로 연산을 위한 하나의 산술 연산 회로 단위 S1S0과 Cin의 값 제어 8가지 산술 마이크로 연산 수행
산술 논리 연산 장치 산술 연산 회로 Fig. 6-18 상태 레지스터(Status register)와 플래그 ALU에서의 연산 수행 후 상태 레지스터의 비트들이 세트 상태 플래그 : C(carry bit), S(sign bit), Z(zero bit), V(overflow bit) Fig. 6-18 ALU의 상태 레지스터 세팅
산술 논리 연산 장치 논리 연산 회로 레지스터에 저장된 각 비트들에 대한 이진 연산 논리 마이크로 연산 : AND, OR, XOR, Complement 연산 수행 논리 연산회로 한 단위(one stage) : Fig. 6-19 논리 연산 함수표
산술 논리 연산 장치 시프트 연산 회로 시프트 마이크로 연산 수행 : 좌측/우측 시프트, 순환 시프트 시프트 장치(조합회로) : 산술 연산 회로와 논리 연산 회로의 출력단에 연결 하나의 클록펄스 기간 동안에 연산의 수행을 완료로 조합회로를 이용해 효율을 높임 4비트 조합 회로 시프트 : Fig. 6-20 함수표
산술 논리 연산 장치 산술 논리 시프트 장치 Fig. 6-21 산술 연산 논리 회로(Fig.6-17), 논리 연산 회로(Fig.6-19), 시프트 회로(Fig.6-20)의 한 단위 회로(one stage) Fig. 6-21 ALU의 한 단위 회로
컴퓨터 명령어 컴퓨터 명령어 Fig. 6-22 컴퓨터에게 어떤 일을 수행해야 하는지를 나타내는 비트들의 집합 명령어와 이의 수행에 필요한 데이터는 주기억장치에 연속적으로 위치 CPU에 의하여 하나씩 순차적으로 수행되는 “내장 프로그램” 구조 기억장치에 저장된 명령과 데이터를 읽어내어 명령어의 2진 코드를 해석한 후, 명령의 수행을 위한 일련의 마이크로 연산이 이루어지도록 필요한 제어 함수를 발생시켜 명령을 실행 Fig. 6-22 내장 프로그램 구조
컴퓨터 명령어 명령어 형식(Instruction Format) 모드 필드 Fig. 6-24 CPU의 구조와 밀접한 관계 필드 : 모드 필드, 연산 코드 필드, 주소 필드(최대 3개) 모드 필드 : 직접 번지와 간접 번지 구분(I=0 : 직접 번지, I=1 : 간접 번지) 연산 코드 필드 : 수행하여야 할 연산의 종류(함수 연산, 전달, 제어, 입출력 기능) 주소 필드 : 피연산자의 주소 모드 필드 직접모드: 오퍼런드부에서 지정된 주소를 사용하여 억세스된 데이터가 연산장치 등에 서 사용 간접모드: 오퍼런드부에서 지정된 주소를 사용하여 억세스 된 데이터가 주소임 복수의 메모리 참조 과정을 통하여 최종적인 어퍼런드 데이터가 얻어짐 오퍼런드(operand): 주소부, 자료의 주소 및 주소를 구하는데 필요한 정보, 명령을 수행하기 위한 자료의 개수와 주/보조기억 장치에 위치한 자료의 저장 번지를 표시 Fig. 6-24 직접모드 간접모드 간접번지 유효주소 피연산자 피연산자
컴퓨터 명령어 연산 코드(operation code) 함수 연산, 전달, 제어, 입출력 기능 기본 컴퓨터 명령어
컴퓨터 명령어 주소 필드 명령어의 길이 연산(operation) 피연산자(operand)나 유효 주소가 결정되는 방법 CPU의 구조에 따라 주소 필드의 수 결정 0-주소 명령어, 1-주소 명령어, 2-주소 명령어, 3-주소 명령어 명령어의 길이 컴퓨터의 성능에 여러 가지 영향 명령어의 길이 ≥ 주기억장치 워드(word) 한 번 이상의 주기억장치 접근 요구 명령어의 길이 ≤ 주기억장치 워드(word) 주기억장치 밴드 폭을 효율적으로 사용 연산(operation) 동작 수행을 위해 주기억장치나 레지스터에 기억되어 있는 데이터를 필요로 함 두 개의 피연산자(operand) : 모두 레지스터에 저장, 레지스터 주소에 의해 지정 하나의 피연산자 : 레지스터, 다른 하나의 피연산자 : 주기억장치 명령을 수행하기 위해서는 레지스터의 주소와 주기억장치의 주소가 필요 두 K비트의 레지스터 주소 2k개의 레지스터 중 하나를 지정할 수 있다 ADD R1, R2 의미 : R1 ← R1 + R2 ADD R1, X 의미 : R1 ← R1 + M[X]
컴퓨터 명령어 0-주소 명령어 A B D C A+B C+D 스택 구조 컴퓨터에서 사용 명령의 수행에 필요한 두 개의 피연산자를 스택에 저장 피연산자가 기억되어 있는 주소를 알 수 있으므로 명령어 형식에 주소 필드를 나타내지 않아도 됨 예외 : push, pop 연산, 하나의 주소 필드가 필요 예 : Y=(A+B)*(C+D) 0-주소 명령어 형식 A B A+B C D (A+B)x (C+D) C+D 스택 Top of Stack Push down Push down 가산 Push down Push down 가산 승산
컴퓨터 명령어 1-주소 명령어 단일 누산기 구조 컴퓨터 명령의 수행에 누산기(AC) 사용, 하나의 주소 필드 연산에 사용되는 피연산자는 명령어에 나타난 주소 필드에 의하여 얻어지는 피연산자와 누산기에 기억되어 있는 피연산자 임 연산 결과를 누산기에 저장 명령어 수행전의 누산기에 기억되어 있던 데이터는 명령어 수행 후에 상실 됨 예 : Y=(A+B)*(C+D) 1-주소 명령어 형식
컴퓨터 명령어 2-주소 명령어 범용 레지스터 구조 컴퓨터 : 중앙처리장치 내의 두개의 프로세서 레지스터를 사용하여 연산을 수행 주소 필드 : 레지스터 주소 혹은 주기억장치의 주소를 지정 두 개의 주소 필드 예 : Y=(A+B)*(C+D) 2-주소 명령어 형식
컴퓨터 명령어 3-주소 명령어 범용 레지스터 구조 컴퓨터 주소 필드 : 레지스터 주소 혹은 주기억장치의 주소를 지정 프로그램의 길이를 짧게 할 수 있는 있지만, 명령어의 길이가 너무 길어짐 3개의 주소 필드 예 : Y=(A+B)*(C+D) 3-주소 명령어 형식
컴퓨터 명령어 단항 함수 연산 기능 명령어 CMA (AC ← AC) 명령어 형식에 의한 컴퓨터 구조 CLA ( AC ← 0) 컴퓨터 명령어 : 연산의 종류와 실행할 연산을 기술하는 연산 코드로 나타냄 단일 누산기 구조, 범용 레지스터 구조, 스택 구조 단일 누산기 구조 1개의 프로세서 레지스터(누산기) 를 가지며, 1-주소 명령어 사용 명령어는 두 개의 부분으로 구성 실행할 연산을 나타내는 연산 코드 피연산자가 저장된 주기억장치 내의 주소 단항 함수 연산 기능 명령어 CMA (AC ← AC) CLA ( AC ← 0) 이항 함수 연산 기능 명령어 ADD X (AC ← AC + M[X]) 전달기능의 명령어 LDA X (AC ← M[X]) STA X (M[X] ← AC)
컴퓨터 명령어 범용 레지스터 구조 그림 6-30 2개 이상의 프로세서 레지 스터를 사용 2-주소/3-주소 명령어 사용 연산코드 피연산자가 저장된 주기억 장치 내의 주소 중앙처리 장치 내의 레지스터 주소 함수 연산 기능의 명령어 ADD R1, R2, R3 (R1 ← R2 + R3) ADD R1, R2 (R1 ← R1 + R2) ADD R1, X (R1 ← R1 + M[X]) 전달 기능의 명령어 LD R1, X (R1 ← M[X]) ST R1, X (M[X] ← R1) MOV R1, R2 (R1 ← R2) 그림 6-30
컴퓨터 명령어 마이크로 연산(micro-operation)의 예 (그림 6-30) R1 ← R2 + R3 제어 장치가 그림 6-30에 있는 여러 가지 선택선들의 입력 조합에 대한 제어 신호를 발생시켜 ALU를 통한 정보 흐름 지시 네 개의 제어 선택 변수에 대한 제어 신호가 동시에 얻어져야 하고, 하나의 클록펄스 간격 동안 수행 하나의 클록 펄스 동안에 두 개의 근원지 레지스터(R2, R3)로부터 정보가 멀티플렉서, ALU, 목적지 버스를 통하여 목적지 레지스터 R1에 전달된다 (1) MUX A 선택선(Select A) : R2의 내용을 A 버스에 놓는다. (2) MUX B 선택선(Select B) : R3의 내용을 B 버스에 놓는다. (3) ALU Function 선택선(OPR) : R2+R3를 위한 덧셈 연산을 하게 한다. (4) 디코더의 선택선(Select D) : 목적지 버스 D를 통하여 연산 결과를 R1에 전송한다.
컴퓨터 명령어 마이크로 연산(micro-operation)의 예 (그림 6-30) 제어 워드(control word) 레지스터 선택의 인코딩(Tab. 6-10) 마이크로 연산(micro-operation)의 예 (그림 6-30) 제어 워드(control word) 세 개(A,B,D)의 제어 선택 변수 들이 가질 수 있는 2진 코드값
컴퓨터 명령어 스택 구조 0-주소 명령어 함수 연산 기능 ADD 전달 기능 PUSH X (M[SP] ← MBR) POP X 스택이 비어있는지를 나타내는 상태플래그 단지 수를 세는 역할만 하는 주소 레지스터 PUSH X (M[SP] ← MBR) POP X (MBR ← M[SP]) # 예외적으로 주소 필드가 필요
컴퓨터 명령어 레지스터 스택과 메모리 스택 Fig. 6-33 레지스터 스택 : Fig. 6-32 프로그램, 데이터, 스택을 가진 컴퓨터의 메모리
컴퓨터 명령어 수식 표기법 PUSH Fig. 6-34 중위 표기법(Infix) : A + B 전위 표기법(Prefix 혹은 Polish) : +AB 후위 표기법(Postfix 혹은 reverse Polish) : AB+, 스택 연산에 적합 예 : A * B + C * D를 후위 표기법 AB * CD * + 연산의 예 : (3*4) + (5*6) 34*56*+ 식의 복잡성에 관계없이 괄호가 전혀 사용되지 않음 수식을 왼쪽에서 오른쪽으로 하나씩 읽어나가면서 연산자이면 왼쪽에 있는 두개의 피연산자에 대한 연산을 실행한 후, 두 개의 피연산자와 연산자를 제거하고 그 위치에 연산의 결과를 둚 PUSH Fig. 6-34 3*4 + 5*6을 계산하는 스택 동작
컴퓨터 명령어 주소 지정 방식 묵시적 주소 지정 방식 (implied addressing mode) 명령어의 정의에 따라 피연산가 묵시적으로 정의 단일 누산기 컴퓨터 구조에서 많이 사용 예 : CMA, CLA 등 0-주소 명령어 : 묵시적 모드 명령 즉치 주소 지정 방식 (immediate addressing mode) 명령어 자체 내에 데이터가 포함 주소 필드의 값 = 데이터 직접 번지와 간접 번지 주소 지정 방식 Fig. 6-24 참조 레지스터 주소 지정 방식 (register addressing mode) 피연산자 : CPU내의 레지스터에 저장 기억장치에 접근하지 않아도 되므로 CPU 수행 간이 단축됨 CPU 내의 레지스터의 제한이 있어 범용으로 사용
컴퓨터 명령어 주소 지정 방식 레지스터 간접 주소 지정 방식 (register indirect addressing mode) 주소 필드 : 피연산자의 유효 주소를 가지고 있는 레지스터를 지정 직접 번지 지정 방식으로 주기억장치의 주소를 지정하는 것보다 적은 비트 소요 자동 증가/ 자동 감소 주소 지정 방식 (auto-increment/decrement) 레지스터 간접 번지 지정 방식과 동일 자동 증가 주소 지정 방식: 기억장치 접근 후 레지스터의 값, 1 증가 자동 감소 주소 지정 방식 : 기억장치 접근 전에 1 감소 후 기억장치를 엑세스
컴퓨터 명령어 주소 지정 방식 상대 주소 지정 방식 (relative addressing mode) 유효 주소 = 주소 필드 + 프로그램 카운터 값(PC) 기준 주소 : 명령어의 주소 필드 값, 상대적 변위(displacement) : PC의 값 기억장치의 전체 주소를 지정하는 것보다 적은 비트를 사용할 수 있어 주소필드가 짧아짐 베이스 레지스터 주소 지정 방식 (base register addressing mode) 기준 주소 : 베이스 레지스터의 값, 명령어의 주소 필드 : 변위 값 베이스 레지스터의 내용이 명령어의 주소 필드에 더해져서 유효 주소가 결정됨
컴퓨터 명령어 주소 지정 방식 베이스 레지스터 주소 지정 방식 (base register addressing mode) 인덱스 주소 지정 방식 (index addressing mode) 베이스 레지스터 주소 지정 방식과 반대 주소 필드 : 기준 주소, 인덱스 레지스터 : 변위 값 명령어의 주소 필드에 인덱스 레지스터의 내용이 더해져서 유효 주소가 얻어짐
컴퓨터 명령어 주소 지정 방식 실제 예 PC = 100, R1 = 300, XR = 100 (1) 명령어의 주소 필드에 피연산자의 유효주소 지정 (2) 명령어 자체 내에 데이터가 포함 (3) 명령어의 주소 필드에 실제 피연산자가 위치해 있는 유효 주소를 기억 (4) 상대 주소 = 명령어 주소+ (PC 주소+1) (5) 명령어 주소 필드에 인덱스 레지스터의 내용이 더해져 유효주소가 얻어짐 (1) (2) (3) (4) (5) (6) (7) 400 400 ( ) 인덱스 레지스터 400(700) 700( ) (400+100+1)501( ) (400+100) 500( ) R1 R1(300) 300 ( ) R1(300) 300 ( ) R1(300 –1)299 ( ) (6) 실제 데이터가 저장되어 있는 유효 주소를 레지스터를 명령어 주소 필드에서 지정 (7) 기억장치에 억세스 하기 전에 주소 값이 하나 감소 함
CISC와 RISC CISC(Complex instruction set computer) 다양한 데이터 형태와 주소 지정 방식 제공 CISC 구조 블록도 RISC(Reduced instruction set computer) 고정된 명령어 형식 사용 주소 지정 방식도 간단 레지스터 주소 지정 명령어 세트와 제어 장치 간단 복잡한 명령어 집합 컴퓨터 간소화된 명령어 집합 컴퓨터
CISC와 RISC CISC RISC CISC와 RISC의 비교 구조적 특성 명령어 세트 크기와 명령어 형식 많은 수의 명령어: 100-250개 가변 길이 명령어 형식 (명령어 당 16-64비트) 상대적으로 적은 수의 명령어 세트 고정길이 명령어 형식 (32 비트) 대부분 레지스터 참조 명령 주소지정 방식 5-20 가지 3-5 가지 정도 범용 레지스터 8-16 개 정도의 범용 레지스터 32-192 개의 범용 레지스터 CPU 제어 대부분 제어 메모리 사용 하드 와이어 제어 방식 사용 구현 복잡한 마이크로 명령어 가변 실행 시간 복잡한 파이프 라인 하드웨어, 간단한 마이크로 명령어 단일 사이클의 명령어 실행 단순한 파이프 라인 명령어 수행 마이크로 명령어에 의해 해석 후 실행 하드웨어에 의해 직접 실행 단점 마이크로 명령어의 설계가 어렵다 컴파일러의 설계가 어렵다 제품의 예 IBM370, VAX, MC68000 Intel 80x86 / Pentium series SPARK, IBM RS 6000, M88000, MIPS R4000, AMD29000