제 5 장  중앙처리장치

5장 중앙처리장치

ꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏ

5.1 CPU 의 구성과 기능

5.2 산술 논리 연산 장치(ALU)

5.2 산술 논리 연산장치(ALU)

5.3 연 산

5.4 RISC 와 CISC

5.5 주소지정방식

5.6 명령어 형식

5.7 마이크로 프로세서의 종류

ꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏꠏ

◎ CPU 의 구성과 기능

5장 중앙처리장치

○. CPU 의 기능

- 메모리에서 명령어를 인출하고 해석하여 실행하는 것

(1) 메모리의 주소를 지정하여 데이터를 전송하는 기능

(2) 입출력 제어 장치와 데이터를 전송하는 기능

(3) 산술 및 논리 연산을 행하는 기능

(4) 연산을 제어하는 기능

○. CPU 에서 명령어가 처리되는 과정

(1) 기억장치로부터 다음 명령어를 인출하여 명령어 IR에 넣는다.

(2) 다음 명령어를 지시하도록 프로그램 카운터를 변화시킨다.

(3) 인출된 명령어의 형태를 결정짓는다.

(4) 만약에 명령어가 기억 장치 안의 데이터를 필요로 하면, 그 데이터의 주소를 결정짓는다.

(5) 데이터가 있다면 그것을 인출하여 내부의 레지스터로 옮긴다.

(6) 명령어를 수행한다.

(7) 결과를 적당한 장소에 기억시킨다.

(8) 다음 명령어를 실행하기 위하여 1 단계로 간다.

그림 5-2. 단순한 CPU의 구성

그림 5-3. CPU 동작의 개관

○. CPU의 두 가지 전제 조건

(1) CPU는 가능한 여러 기술을 활용하여 빠르게 실행되도록 한다. 대부분의 컴퓨터 설계 비용은 속도에 따라 증가하므로 CPU를 구성하는 부품의 크기는 상대적으로 작아야 한다.

(2) CPU에서 필요로 하는 프로그램과 데이터를 저장하는 기억 장치는 용량이 커야 한다. 주기억 장치의 용량 문제로 인하여 보다 싼 가격의 메모리로 구성하여야 한다.

● 레지스터

컴퓨터 내부에서 데이터를 일정하게 정해진 절차에 따라 단계별로 처리하고, 정확한 시간에 요구되는 장치에 해당되는 결과를 전달하는 특정한 회로의 역할을 담당

[1] 레지스터의 종류

(1) 주소를 기억하는 레지스터

Address register(AR):	엑세스하려는 메모리의 어드레스를 기억

Program counter(PC): 다음에 실행할 명령어의 어드레스가 기억

Stack pointer(SP): 메모리에 정의한 stack의 제일 위 주소 기억

Index register(IR):	인덱스 주소를 기억

Base register(BR) /Relocation register(RR): 기준 주소를 기억

Page register(PR):페이지 주소 방식에 있어서 페이지번호를 기억

(2) 명령어를 기억하는 레지스터: Instruction register : IR)

(3) 데이터를 기억하는 레지스터

Memory buffer register(MBR):	메모리에 써넣기 의한 데이터 및 메모리에서 읽어낸 데이터를 기억

Accumulator (ACC) :	ALU 의 연산 결과를 넣어두기

Working register(WR):	연산 과정에서 중간결과의 일시적 기억

메모리 버퍼 레지스터 ⇔ data register (DR)

(4) CPU 의 제어정보를 기억하는 레지스터

Condition code (CC) : ALU 가 연산을 할 때 발생하는 캐리나, 연산 결과의 ＋, －, 0 등의 상태를 표시

Program status word (PSW): 인터럽트의 금지, 해제를 제	어하기 위한 플래그, 인터럽트 원인별로 금지/해제하기 위한 마스크 등을 일괄해서 기억

― 범용 레지스터(general purpose register : GR)

(1) 및 (3)의 두 가지 목적에 사용

MQ 누산기(multiplier quotient register):	곱셈을 연산할 때 누산기 하나로는 전체 결과를 기억할 수	없으므로 누산기를 보조하여 함께 한 부분을 기억

[2] 레지스터의 전송 방식

― 직렬 전송(serial transfer) : 한번의 clock 펄스 동안에 한 비트가 다른 레지스터로 전송됨 (word time, feed-back)

그림 5-6. 레지스터의 직렬 전송

― 병렬 전송(parallel transfer) : 한번의 클럭 펄스 동안에 레지스터의 모든 내용이 다른 레지스터로 전송되며, 속도 면에서는 직렬 전송 보다 빠르지만	회로 구성이 복잡하다는 단점

그림 5-7. 레지스터의 병렬 전송

[3] 버스 전송

― 레지스터 간의 정보 연결을 위한 복잡한 연결 회로를 단순화  시키기 위한 공통 회로인 버스를 통한 전송

― 그림 5-8 : 레지스터에 저장된 정보가 레지스터(A～D) 에서 레지스터	(A'～D')로 버스를 통하여 전송되는 과정을 표시한 것

그림 5-8. 레지스터 버스의 구조 .

● 프로세서 버스구조

CPU는 집적회로의 유용성으로 보아 레지스터와 다른 디지털 회로를 하나로 통합하는 것이 경제적이며, 대부분의 컴퓨터는 많은 수의 레지스터를 공통 버스를 통하여 정보를 교환

― 그림 5-9(a) :

일곱 개의 레지스터를 가진 CPU 의 버스 구조

(a) 블록 다이어그램

(b) 제어 워드

그림 5-9. CPU의 레지스터 set 블록 다이어그램과 제어 워드

― CPU 버스 시스템을 동작하게 하는 제어장치는 시스템내의 여러 가지 부분들을 선택함으로써 ALU를 통한 정보의 흐름을 지시

예)   R1 ← R2 ＋ R3

1. MUX A selector(SELA) :  R2 의 내용을 A 버스에 놓는다.

2. MUX B selector(SELB) :  R3 의 내용을 B 버스에 놓는다.

3. ALU operation selector(OPR) : A ＋ B 를 위한 연산동작을   준비하게 한다.

4. Decoder destination selector(SELD) : 출력 버스의 내용을 R1에 전달한다.

[1] 제어 워드와  연산 논리 장치

― 그림 5-9 (b): 14 비트 제어 워드가 정의되어 있는 데 이것은  4 개의 필드로 이루어져 있다. (SELA, SELB: 소스 레지스터를 선택, SELD: 목적지 레지스터를 선택, OPR: ALU 동작을 선택) 따라서 14 비트 제어 워드가 선택 입력에 적용되면 특정한 마이크로 오퍼레이션이 수행된다.

― 레지스터 선택의 코드표(표 5-1)

SELD = 000 일 때에는 목적지 레지스터가 선택되지 않으	나 버스의 내용이 외부 출력 단자에는 전달된다.

표 5-1. 레지스터 선택 필드의 코드표

2 진 코드,	SELA	SELB	SELD
000	Input	Input	None
001	R1	R1	R1
010	R2	R2	R2
011	R3	R3	R3
100	R4	R4	R4
101	R5	R5	R5
110	R6	R6	R6
111	R7	R7	R7

표 5-2.  ALU 오퍼레이션의 코드표

OPR select	오퍼레이션	기호
00000	Transfer A	TSFA
00001	Increment A	INCA
00010	Add A + B	ADD
00101	Subtract A - B	SUB
00110	Decrement A	DECA
01000	AND A and B	AND
01010	OR A and B	OR
01100	XOR A and B	XOR
01110	Complement A	COMA
10000	Shift right A	SHRA
11000	Shift left A	SHLA

● 스택 구조

대다수의 컴퓨터의 CPU가 가지고 있는 매우 활용도가 높은 기법

― 근본적으로는 단지 수를 세는 역할만 하는 주소 레지스터를 가진 메모리이다. 이러한 주소 레지스터를 스택 포인터(SP)

― 스택에서는 읽기 또는 쓰기만 할 수 있는 데, 이때 삽입되고 삭제되는 것이 메모리 워드의 내용이다.

[1] 레지스터 스택

스택은 대규모 메모리의 일부분에 놓일 수도 있고, 제한된 수의 메모리 워드나 레지스터들로 구성될 수도 있다.

그림 5-10 64-워드 스택의 블록 다이어그램

― 64 개의 워드를 가진 스택에서의 스택 포인터는 6 비트

― 1 비트의 레지스터 FULL 과 EMPTY

― 초기 상태: SP=0,  EMPTY=1, FULL=0

― 삽입동작의 마이크로 오퍼레이션

SP  ← SP + 1	SP의 값을 1 증가 시킴

M[SP]  ← MBR	탑에 품목을 씀

If (SP = 0) then (FULL ← 1)	스택이 full 인지 확인

EMPTY ← 0	스택이 empty가 아님을 표시

― 팝 동작의 마이크로 오퍼레이션

MBR ← M[SP]	스택에서 품목 읽기

SP ← SP － 1	SP 의 값을 1 감소 시킴

If (SP = 0) then (EMPTY ← 1)

스택이 empty 인지 확인

FULL ← 0	스택이 full이 아님을 표시

[2] 메모리 스택

스택은 독립적으로 존재할 수도 있지만, CPU 에 부착시킨 RAM 메모리를 이용하여 구현할 수 있다. 즉 메모리의 일부분을 스택 동작을 위해 할당하고 프로세서 레지스터 중에서 하나를 스택 포인터로 사용한다. (그림 5-11)

[Push] SP ← SP － 1, M[SP]  ← MBR

[Pop]  MBR ← M[SP], SP ← SP － 1

- Stack Overflow와 Underflow 조사

[3] 역 표기법(reverse Polish)

― 폴란드의 수학자 J. Lukasiewicz(1958)는 수식을 전위 표기법 개념으로 표현

예) 세 가지 표현방법

A ＋ B   중위 표기법(infix 개념)

＋ A B   전위 표기법(prefix 또는 Polish 개념)

A B ＋ 후위 표기법 (postfix) 또는 reverse Polish 개념

― 역 표기법은 스택으로 처리하기에 적합

A * B ＋ C * D⇒A B * C D * ＋

[4] 수식 계산을 위한 스택 오퍼레이션

역 표기법을 조합하여 가장 효율적인 것으로 알려진 수식 계산방법으로  이 방법은 우선 어떤 수식을 역 Polish의 형태로 바꾸어야 된다.

― 피연산자는 그들이 나타나는 순서대로 스택에 푸시된다.

― 연산자가 나타나면 다음과 같은 마이크로 오퍼레이션을 한다.

(1) 스택의 탑에 있는 두 개의 값이 연산에 사용된다.

(2) 스택의 값이 팝 되고 연산의 결과가 탑의 아래에 있는	피연산자의 자리를 차지한다.

― 연속하여 피연산자를 스택에 푸시하고, 또 위에서 말한 대로의 오퍼레이션이 수행되면 마지막의 결과가 스택의 탑에 남게	된다.

예) ( 3 * 4 ) ＋ ( 5 * 6 ) 은 역 Polish 형태: 3 4 * 5 6 * ＋

그림 5-12. 수식 계산 스택 오퍼레이션의 예( 3 ＊ 4 ＋ 5 ＊ 6 )

[5] 파이프 라인 처리(pipeline processing)

하나의 프로세스를 서로 다른 기능을 가진 여러 개의 서브 프로세스(sub process)인 세그멘트(segment)로 나누어 이들 각 서브 프로세스가 동시에 서로 다른 데이터를 처리 하도록 하는 기법

― IBM 사가 1960년경 7030 Stretch Computer 에서 소개한 기술

그림 5-13. 부동 소숫점 데이터의 파이프라인 연산 과정

0.855 ＊ 103 ＋ 1.87 ＊ 102

=0.855 ＊ 103 ＋ 0.187 ＊ 103

=1.042 ＊ 103

=0.1042 ＊ 104

1) A, B 의 부동 소숫점 데이터에 대해서 지수를 통일된 형태로 처리하며,

2) 가수(mantissa)에 대해서 덧셈 연산을 하며,

3) 가수에 대해서 정규화 작업(normalization)을 수행

4) 각 단계 중간에는 계산된 결과를 저장할 수 있는 버퍼 레지스터(buffer register) R1, R2 가 필요하다. 이유는 연속적으로 입력되는 Ai 와 Bi 의 부동 소숫점 데이터의 중간 처리된 지수 처리와 가수의 덧셈 결과를 보관하기 때문

5) 부동 소숫점 데이터에 대한 파이프라인 된 연산은 계산 속도를 증가시킬 수 있다.

○ 산술 논리 연산 장치(ALU)

ALU 는 프로그램에서 주어진 명령어에 의하여 산술 연산(arithmetic expression)과 논리 연산(logical expression)을 수행

● 연산 장치의 구성

연산 장치의 구성은 덧셈을 하기 위한 가산기, 연산을 하기 위한 데이터나 결과를 잠시 보관하는 레지스터들, 보수를 만드는 보수기, 계산 결과의 상태를 체크하기 위한 장치들로 구성

그림 5-14. 전가산기의 구성도

(a) addition

(b) addition with carry

(c) A+B의 보수

(d) subtraction

(e) transfer A

(f) increment A

(g) decrement A

(h) transfer A

그림 5-15. 병렬 가산기에 의한 마이크로 오퍼레이션

S1 과 S0 가 B 단자의 입력을 조정: S1S0 =	00 이면 전가산기의 입력이 0 이 되고, S1S0 = 01 이면 Bi의 값이 입력되고, S1S0 = 10 이면 Bi의 보수가 입력되며,	S1S0 = 11이면 항상 1 의 값이 입력

그림 5-16. 단위 연산 회로의 구성도

S1	S2	출력	마이크로 연산
0 0 1 1	0 1 0 1	F = A ∧ B F = A ∨ B F = A ⊕ B F =	AND OR XOR Complement

그림 5-17. 논리 연산을 위한 회로 단위의 구성도

○ 연산

디지털 컴퓨터에서 기본적인 연산은 두 수를 더하거나 빼는 것이다. 이러한 연산은 기계어 수준에서 제공된다. 이러한 연산들은 AND, OR, NOT, Exclusive-OR 과 같은 기본적인 논리 연산과 함께 프로세서의 일부분인 ALU 안에서 구현된다.

● 연산(operations)의 종류

․데이터 전송 연산(data transfer)

․산술 연산(arithmetic)

․논리 연산(Logic)

․변환 연산(conversion)

․입․출력 연산(input/output)

․시스템 제어 연산(system control)

․제어의 이동 연산 (transfer of control)

― 표 5-3 은 이러한 구분에서 사용되는 명령어 형태

[1] 데이터 전송

― 데이터 전송 명령어 기능

첫째, 소스(source) 및 destination	operand의 위치를 명시

둘째, 전송될 데이터의 길이가 명시

셋째, 각 피연산자의 주소 지정 방식이 명시

― 두개의 주소 중 하나 혹은 둘 다 기억장치에 있을 경우 CPU의 오퍼레이션

1. 주소지정 방식에 따라 메모리의 주소를 계산

2. 주소가 가상 메모리인 경우 주소를 실제 메모리로 변환

3. 원하는 주소의 내용이 캐쉬 메모리에 있는 지 확인

4. 캐쉬 메모리에 없는 경우에는 메모리 모듈로 명령을 보냄

표 5-4. 연산을 위한 CPU 오퍼레이션들

표 5-5. IBM S/370의 데이터 전송 오퍼레이션의 예

[2] 산술 연산

컴퓨터는 덧셈, 뺄셈, 곱셈 및 나눗셈과 같은 기본적인 산술 연산들(arithmetic operations)을 제공

부호를 가진 정수(고정 소수점)

부동 소수점

2 진화 10 진수(BCD)

(1) 절대값(absolute) : 피연산자의 절대값을 구한다.

(2) 음수화(negate) : 피연산자의 음수값을 구한다.

(3) 증가(increment) : 피연산자를 1 증가시킨다.

(4) 감소(decrement) : 피연산자를 1 감소시킨다.

― 산술 명령어의 실행에는 피연산자를 ALU에 입력으로 데이터 전송시키는 것과 ALU의 출력으로 데이터의 전송을 시키는 것이 포함

[3] 논리 연산

비트 조작(bit twiddling)

― 연산들은 부울 연산(3장 참조)에 기반

표 5-6. 기본적인 논리 연산들

P	Q	NOT P	NOT Q	P AND Q	P OR Q	P XOR Q	P = Q
0	0	1	1	0	0	0	1
0	1	1	0	0	1	1	0
1	0	0	1	0	1	1	0
1	1	0	0	1	1	0	1

― EQUAL 은 2 진 검사(binary test)를 하는 데 유용

논리 연산의 예1)       (R1) = 10100101, (R2) = 00001111

(R1) AND (R2) = 00000101

예2)         (R1) = 10100101, (R2) = 11111111

(R1) XOR (R2) = 01011010

모든 비트들이 1 인 단어와의 XOR 연산은 1의 보수화.

(a) 논리적 우측 시프트

(b) 논리적 좌측 시프트

(c) 산술 우측 시프트

(d) 산술 좌측 시프트

(e) 우측 로테이트

(f) 좌측 로테이트

그림 5-18. 시프트와 로테이트 오퍼레이션들

[4] 변환 연산

변환(conversion) 명령어는 데이터의 형식을 바꾸는 데 사용되는 명령어

TR R1, R2, L

예) 숫자 1998 에 대한 EBCDIC 코드가 2100 번지 부터 저장되어 있고, 이것을 ASCII 코드로 변환한다고 가정하면,

2100 ～ 2103 번지에는 F1 F9 F9 F8 이 저장되어 있다.

R1은 2100을 가지고 있다.

R2는 1000을 가지고 있다.

이때, TR R1, R2, 4 이 수행되면, 2100 ～ 2103 번지의 내용은 31 39 39 38 로 바뀜

[5] 입․출력 연산

입출력 명령어

프로그램된 I/O(programmed I/O),

메모리 사상 I/O(memory mapped I/O),

DMA 및 I/O 프로세서의 사용

[6] 시스템 제어 연산

특권 명령어들(privileged instructions)로서 프로세서가 어떤 한 특권 상태에서 동작 중이거나 기억 장치의 특권 영역 내에 있는 프로그램을 수행중인 동안에만 실행된다.

― 전형적으로 이러한 명령어들은 운영체제의 사용을 위한 것

― 제어 레지스터의 내용을 읽거나 변경하는 명령어

― 저장 장치 보호	키(storage protection key)를 읽거나 수정하기 위한 명령어

― 다중 프로그래밍 시스템에서 프로세서 제어 블럭들을 액세스하는 데 사용되는 명령어

[7] 제어의 이동 연산

명령어들 중의 많은 부분이 명령어의 실행 순서를 바꾸는 기능을 위한 것들이다. 이러한 명령어들에 대하여 CPU 가 수행하는 동작은 PC의 내용을 메모리 내의 어떤 명령어의 주소로 변경하는 것

― 제어의 이동 연산이 필요한 중요한 이유

(1) 컴퓨터를 실제로 사용 시, 각 명령어를 한 번 이상 또는 수천 번 반복하여 실행할 수 있어야 한다. 이 경우에 모든 데이터들을 처리하기 위하여 일련의 명령어들이 반복적으로 실행된다.

(2) 모든 프로그램들은 어떤 형태의 의사 결정(decision making)을 포함하고 있다. 만약 조건이 만족된다면 컴퓨터가 어떤 일을 하고, 만족하지 않으면 다른 일을 하도록 할 수 있다.

(3) 대규모 프로그램이나 중간 규모 이상의 프로그램을 정확히 구성하는 것은 매우 어려운 작업이다. 만약 전체 프로그램을 여러 개의 작은 조각들로 나누어서 동시에 작성할 수 있는 구조가 있다면 도움이 될 것이다.

― 명령어 세트에서 가장 일반적인 제어 이동 연산

분기(branch), 스킵(skip), 서브루틴 호출(subroutine call) 등

● 산술 연산

― 산술 연산에 필요한 데이터 형(data type)

(1) 부호 절대값(signed magnitude)으로 표현된 고정 소숫점 2 진 데이터(fixed point binary data)

(2) 부호가 있는 2 의 보수(signed 2's complement)로 표현된 고정 소숫점 2 진 데이터

(3) 부동 소숫점 2 진 데이터(floating point binary data)

(4) 2 진화 십진수(BCD) 데이타(binary coded decimal data)

― 부호가 있는 2의 보수로 표현된 고정 소수점 2진 데이터와 부동 소수점 2진 데이터를 중심으로 산술 연산의 알고리즘을 설명

[1] 덧셈과 뺄셈

대부분의 컴퓨터에서 정수에 대한 산술 연산은 부호가 있는 2 의 보수 표현을 사용하고, 부동 소숫점 연산은 가수(mantissa)에 대하여 부호 절대값 표현을 사용한다.

― 2 의 보수로 표현된 데이터에 대한 덧셈과 뺄셈 알고리즘

그림 5-19. 부호가 있는 2의 보수 덧셈과 뺄셈을 위한 H/W구성

그림 5-20. 부호가 있는 2 의 보수로 표현된 숫자의 덧셈과 뺄셈

― 이 알고리즘은 부호 절대값 표현을 이용하는 것에 비해 매우 간단하기 때문에 대부분의 컴퓨터에서는 부호가 있는 2의 보수 표현을 사용한다.

[2] 곱셈

부호 절대값 형식으로 된 고정 소숫점 2 진수의 곱셈은 계속적인 시프트와 덧셈 연산을 반복 사용

예) 교재 222페이지

[3] 부스(Booth)의 곱셈 알고리즘

― 부스의 알고리즘: 부호가 있는 2 의 보수로 표현된 이진 정수에 대한 곱셈을	수행

― 알고리즘에서는 곱셈을 수행할 때, 승수에서 값이 0 인 자리들에 대해서는 그 곱을 더할 필요 없이 시프트만 하면 되고. 2k 에서 2m 까지의 값이 1 인 자리들은 2k+1 - 2m 과 동등하게 취급할 수 있다는 점을 이용

예) 2 진수 001110(+14) 는 23 에서 21 까지 (k = 3, m = 1)자리값이 1, 따라서 이 숫자는 2k+1 - 2m = 24 - 21 = 16 - 2 = 14 로 표시, 곱셈 M × 14 는 M × 24 - M × 21

이 연산의 곱은 이진 피승수 M 을 왼쪽으로 네 번 이동한 수에서 한번 이동한 수를 빼면 얻을 수 있는 것이다.

― 부스의 알고리즘은 부호가 있는 2의 보수로 표시된 수이면 부호에 관계없이 가능

(1) 승수의 1의 스트링에서의 처음 1을 만나게 되면 피승수를 부분 곱으로부터 뺀다.

(2) 승수의 0의 스트링에서의 처음 0을 만나게 되면 피승수를 부분 곱에 더한다.

(3) 승수에서 이전의 비트와 같은 비트가 나오면 부분 곱은 바뀌어 지지 않는다.

그림 5-21. 곱셈을 위한 부스 알고리즘

― 부스의 알고리즘을 위한 흐름도 : 그림 5-21

1) ACC 와 Qn+1 은 초기값 0 이 저장되고 SC 는 승수의 비트 수로 저장

2) Qn 과 Qn+1 비트를 조사하여

10 이면 ACC 의 부분 곱으로부터 피승수를 빼게 되고,	01 이면 부분 곱으로부터 피승수를 더하게 되며

동일하면 아무런 연산도 하지 않는다.

3) 이러한 과정을 승수의 비트 수만큼 시행하게 된다.

[3] 나눗셈 알고리즘

두 부호 절대값 고정 소숫점 2 진수의 나눗셈은 수작업으로 행할 때 연속적인 비교, 시프트, 그리고 뺄셈 연산으로 이루어진다.

― 2 진 나눗셈은 십진 나눗셈보다 간단

― 그림 5-22 : 나눗셈의 과정이 숫자를 사용한 예

[4] 환원 알고리즘(restoring algorithm)

그림 5-23. 나눗셈 연산 흐름도

[5] 다른 나눗셈 알고리즘

― 기타 나눗셈 방법

1) 비교 방법

2)비환원(nonrestoring)방법

[6] 부동 소숫점 산술 연산

(1) 기본적인 개념

부동 소숫점의 수를 저장하는 누산기는 가수 m 과 지수 e	의 두  부분으로 저장:  m × re  (단, r은 기수)

― 가수 : 소숫점 이하이거나 정수

― 기수점 위치/기수의 값:	레지스터에 표시 되지않는 약속사항

예) 소숫점 이하로 표시되고, 또 기수가 10인 경우

십진수 123.456 은 레지스터에 m = 123456, e = 3

0.123456 × 103 으로 해석된다.

― 정규화

부동 소숫점의 수에서 가수 부분의 최좌측 비트(most significant bit : MSB)의 수를 0 이 아닌 숫자가 오게 하는 것

― 정규화의 이점 : 가능한 많은 유효 숫자를 표시

부동 소숫점의 표현으로 주어진 레지스터에 저장할 수 있는	수의 범위를 확장시킬 수 있다.

― 부동 소숫점으로 표현된 두 수의 덧셈과 뺄셈

1. 먼저 기수점을 위치 조정

2. 위치 조정은 지수 부분의 값을 다른 것과 같아질 때까지 하나의 가수를 시프트 시키므로 이루어진다.

3. 정확성을 기하기 위해서는 일반적으로 작은 지수를 가진 가	수를 오른쪽으로 시프트 시키게 된다.

4. 정규화된 두 수가 더해졌을 때 그 합은 오버플로우된 수를	가질 수도 있다.

― 바이어스 지수(biased exponent)로 지수를  표현

― 바이어스(bias)는 양수로서, 모든 지수가 양수가 되도록 부동 소숫점 수가 만들어 질 때 지수에 더하여진다. 예를 들어	-50 부터 49 까지의 값을 취하는 지수인 경우, 이때 지수는 바이어스 50 을 지수에 더함으로써 부호가 없이도 두 개의	자로 표현이 가능하게 된다. 즉 이 레지스터에서 양수의 지수는 99에서 50까지의 숫자로 표시되고, 음수의 지수는	49에서 00까지 표시된다.

― 바이어스된 지수의 장점

1. 지수가 양수만 포함하기 때문에 가수를 위치를 조정할	때 지수 크기의 비교가 용이하다는 것

2. 가장 작은 값의 지수는 모두 0 이 된다는 것이다.

(2) 레지스터 구성

그림 5-24. 부동 소숫점 산술 연산을 위한 레지스터들

― 레지스터는 BR, ACC, QR의 세가지가 있으며 각 레지스터는 두 부분으로 나뉘어져 있다. 가수 부분은 대문자로, 지수 부분은 소문자로 표시된다.

― 각 부동 소숫점 수는 부호 절대값으로 표시된 가수와 바이어스된 지수로 구성되어 있다고 가정하고, 병렬 가산기는 두 개의 가수를 더해 A에 저장하고 캐리 비트는 E 에 저장한다. 가수 부분의 수 As에는 부호가 저장되고 a에는 지수가 들어 있다. A1 에는  A의 MSB 가 들어 있다는 것과	A가 정규화 되었다면, 이 위치에 들어 있는 값은 1이 됨

(3) 덧셈과 뺄셈

덧셈과 뺄셈에서 두 수는 각각 ACC 와 BR 에 저장되며 그 연산 결과는 ACC 에 저장된다. 이들 연산을 위한 알고리즘은 연속된 일련의 4 부분으로 나눌 수 있다.

① 0 인지의 여부를 조사

② 가수의 정렬

③ 가수의 덧셈 또는 뺄셈

④ 결과를 정규화

두 개의 부동 소숫점 수의 덧셈/뺄셈을 위한 흐름도:	그림 5-25

(4) 곱셈

부동 소숫점 수의 곱셈은 가수들을 곱하고 지수들을 더함으로써 이루어진다. 가수의 곱셈은 고정 소숫점 연산과 같이 계산되어 배정도(double precision)의 결과를 갖게 된다. 부동 소숫점 연산에서 지수와 단정도(single precision)의 가수로써 충분히 정확한 값을 구할 수 있기 때문에 가수의 곱셈 결과 의  MSB 중 절반 비트만을 취하게 된다.

곱셈 알고리즘은 다음과 같이 네 과정으로 구분된다..

① 가수가 0 인지를 조사한다.

② 지수를 더한다.

③ 가수를 곱한다.

④ 결과를 정규화한다.

그림 5-26. 부동 소숫점 숫자의 곱셉

(5) 나눗셈

― 나눗셈을 위한 알고리즘

① 0 인지 조사한다.

② 레지스터를 초기화 시키고 부호를 결정한다.

③ 피젯수를 정렬한다.

④ 지수의 뺄셈을 한다.

⑤ 가수의 나눗셈을 한다.

● IEEE 부동 소숫점 표준

― 1981년 IEEE Computer Society

2 진 부동 소숫점 연산에 대한 표준을 개발(시스템 간 호환성 증대 및 고성능 수치 소프트웨어 개발 고무)

― IEEE 754 부동 소수점 표준의 정규화 형

부동 소수점 연산을 보다 용이하게 하면서 질을 향상하기 위해 제정된 것

1.wwwwwwwww × 2xxxxxxxx

― IEEE 754 에서는 더 많은 유효 수자를 지원하기 위해 이 맨 앞의 1을 묵시적으로 가정한다.

― 단정도(single precision: 32비트)에서는 24 비트 크기의 가수부(23 비트 가수 필드)를,

― 배정도(double precision: 64비트)에서는 53 비트 크기의 가수부(52 비트 가수 필드)를 갖는다.

그림 5-28. IEEE 754 에 의한 부동 소수점 수의 필드 배치

― 바이어스 지수를 사용할 경우 부동 소수점 수의 크기의 계산

S를 부호 비트, F를 가수 필드, E를 지수 필드, B를 바이어스 지수에서 사용되는 바이어스 값(bias)

― 부동 소수점 수의 크기 :

(-1)S × (1 + F) × 2E-B

B 는 단정도일 경우 127,	배 정도일 경우 1023

예) -3.12510 을 IEEE 754 에 따라 단정도로 표시

0.12510 을 2 진수로 : 0.12510 = 1 / 23 = 2-3 = 0.0012

310 은 112 이므로 -3.12510 은 2 진수로 -11.0012

정규화를 하면 -1.10012 × 21	= (-1)1×(1+ 0.10012) × 2(128-127)

그림 5-29. 바이어스 지수를 이용한 비트 패턴

― 0의 저장:	지수 필드의 제일 작은 값인(바이어스 지수에서) 0 은 특별	한 의미로 약속.	즉, 지수 필드가 0 인 경우, 가수 필드의 앞에 1 을 붙여 해	석하지 않고 0 은 0000000…02 으로 표현

― 어떤 수를 0 으로 나눌 경우

비정상적인 상황을 위해 IEEE 754 표준은 특별한 비트 패	턴들을 마련

표 5-7.  IEEE 754 부동 소수점 수의 각 필드의 값과 의미

단정도		배정도		의미
지수 필드	가수 필드	지수 필드	가수 필드
0	0	0	0	0
0	0이 아닌 수	0	0이 아닌 수	비정규화 수
1～254	-	1～2046	-	부동소수점 수
255	0	2047	0	무한대(∞)
255	0이 아닌 수	2047	0이 아닌 수	NaN(Not A Number)

○ RISC(Reduced Instruction Set Computer)와 CISC(Complex ISC)

● 개념

표 5-8. RISC와 CISC 비교

CPU가 많은 명령어를 가지면 다양한 계산을 쉽게 처리할 수 있지만 명령어의 개수가 많음으로 인하여 각 명령어를 선택하고 실행하는 속도는 느려짐.

- CISC: 100개 이상의 많은 명령어를 인식할 수 있어서 대부분의 계산을 직접 실행할 수 있는 CPU. 다양한 명령어들이 모두 균일하게 사용되지 않음.

- RISC: 명령어의 수를 줄임으로써 하드웨어를 단순화 시켜 시스템의 성능을 더욱 개선하려는 컴퓨터 구조 기술. 즉, 속도를 빠르게 하기 위해 프로세서가 인식할 수 있는 명령어의 숫자를 최소로 줄인 CPU. CISC의 복잡하고 긴 명령어들을 자주 쓰이는 짧은 명령어의 조합으로 해결함. 기존의 CISC보다 평균 2배 이상 속도가 빨라짐.

[RISC의 기본 개념]

1. 모든 명령어는 고정 형식을 취하여 decoding 및 execution 과정을 단순화 함.

2. Super Scalar 기법을 사용하여 여러 명령어들 동시에 수행

3. CISC는 내부에 면적이 큰 마이크로 코드용 ROM이 있는 반면 RISC는 대량의 레지스터를 보유하여 작업 속도가 향상 됨.

- CISC이 RISC의 구조적 특징을 수용하게 됨.(펜티엄 프로)

○ 주소 지정 방식

● 주소 공간과 기억 공간

그림 5-32. 주소 공간과 기억 공간의 관계

― 주소 설계에서 고려할 점은 다음과 같은 세 가지가 있다.

첫째, 효율적인 표현,

공간(명령어 내의 주소 비트 수, 매팅 표/레지스터)과 시간(매핑, 읽기, 주소갱신 소요시간)의 절약

둘째, 주소와 기억 공간을 독립적인  활용.

프로그램이나 데이터가 기억장치 내의 어느 곳에 있든지 수행 가능(재배치 가능)→다중 프로그래밍 용이, 기억공간 이용의 능률향상

셋째, 사용자에게 편리함을 제공해야 한다.

가상저장체계: 실제로 존재하는 기억 공간 보다 훨씬 큰 용량의 기억공간이 있는 것과 같은 효과를 주는 주소방식

● 지정 방식

― 지정한 정보에 접근하는 방법:직접주소,	간접주소,	계산에 의한 주소, 정보자신

기준 주소 B	100
			51		95
ACC	150				ꠝ
			95		234
					ꠝ
			151		132

그림 5-33. 주소지정 방식

51이 직접주소이면 유효주소는 51아며, 수행 결과는 245,

51이 간접주소이면 유효주소는 95이며, 수행결과는 384,

51이 계산에 의한 주소이면 유효주소는 151이며, 수행결과는 282,

51이 정보자신이면, 수행결과는 201이 된다.

● 표현 방식

― 데이터의 주소를 표현하는 방식

.완전 주소

.약식 주소: 주소의 일부분을 생략한 것(예, 계산에 의한 주소)

.생략 주소: 주소를 나타낼 필요가 없는 경우(예, AC/stack 이용)

.데이터 자신

● 주소와 기억 공간

― 기억 공간과 연관시키는 방법

절대 주소: 직접 데이터에 접근 가능

상대 주소: 절대주소로 변환 후 데이터 접근가능

그림 5-34. 상대 주소에 의한 주소 지정 방식

● 주소의 정밀도

― 주소로 지정할 수 있는 정보의 양 : 주소의 정밀도

비트 단위 주소

바이트 단위 주소

단어 단위 주소

페이지(page) 단위 주소

블럭 단위 주소

― 주소의 정밀도를 높이려면, 극단적인 비트 단위의 주소 지정이 가능해야 하고, 주소를 나타내기 위한 비트가 많이 필요하다.

● 주소 사용의 형태

― 세 가지 특성

1) 프로그램이 수행되는 과정에서 일정한 시간 동안에 기억	장치 접근을 위하여 발생하는 주소는 기억 장치의 작은 영	역에 해당하며, 이 영역은 시간이 경과함에 따라서 서서히 움직인다.

⇒ 기억 장치 참조의 지역성(locality of reference)

2) 프로그램의 명령어에 나타난 주소의 수는 프로그램이 수행되기 위하여 실제 기억 장치에 매핑한 유효 주소의 수보다 훨씬 작다.(생략주소, 자동 인덱싱, 계산에 의한 주소, 상대주소를 이용한 프로그램의 재배치 등에 기인)

3) 프로그램이 수행될 때 명령어를 위하여 기억 장치에 접근하는 것은 브랜치나 서브루틴을 부를 때, 그리고 인터럽	트의 경우를 제외하고는 주소의 순서대로인 경향이 있으나 데이터를 위하여 기억 장치에 접근하기 위한 주소는 분산된 경향이 있다.

[이상의 형태가 컴퓨터 명령어를 포함한 아키텍처에 미치는 영향]

1) 기억장치 참조의 지역성: 완전주소 보다 약식 주소를 사용하여 명령어의 비트 수를 작게 함(n=(n-m)+m으로 구분하여 사용)

2) 프로그램 수행 중 임시데이터가 많이 발생함: 임시자료를 위한 stack을 두고서 생략주소로 이들을 사용함

3) 명령어와 이에 필요한 데이터를 하나의 기억장치에 기억시킬 필요가 없다. 이들을 각각 다른 기억장치에 기억시키고 각각에 대하여 기억 장치 접근 방식을 인접 수행 횟수에 준하여 최적화.

● 명령어 형식

― 명령어

CPU에서 실행되는 연산(operation)의 종류와 연산에 사용되는  피연산자(operand) 또는 데이터의 위치를 지정 (데이터 :  레지스터, 주기억 장치, 스택 또는 I/O 장치로 부터의 입력 데이터 또는 연산 결과의 데이터 등)

● 명령어의 구조

연산의 종류를 나타내는 연산자(operation code : OP code)와 데이터의 주소를 나타내는 주소 부분으로 구분

OP code		(a)
OP code	데이터	(b) 즉치 데이터
OP code	데이터의 주소 또는 특정 레지스터를 지정	(c) 직접 주소

그림 5-35. 명령어의 구조

― 명령어의 종류 : 연산자 세트(컴퓨터/기계어 명령어 세트)

예) 명령어의 연산자 부분이 i 개의 비트로 이루어질 경우 명령어 세트에는 최대 2i 개의 명령어가 존재

● 3-주소 명령어 형식(Three address instruction)

OP code	피연산자-1 주소	피연산자-2 주소	결과 주소

그림 5-36. 3-주소 명령어의 형식

● 2-주소 명령어 형식(Two address instruction)

OP code	피연산자-1 의 주소	피연산자-2의 주소 = 결과 주소

그림 5-37. 2-주소 명령어의 형식

● 1-주소 명령어 형식(One address instruction)

언제나 ACC를 사용하여 명령어 실행이 이루어짐(결과는 ACC에)

OP code	피연산자의 주소

그림 5-38. 1-주소 명령어의 형식

● 0-주소 명령어 형식(zero address instruction)

명령어의 구조 가운데 가장 짧은 길이의 명령어로서 명령어 내에 주소 부분이 없는 명령어. 연산의 실행을 위해 언제나 stack에 접근.

○ 마이크로 프로세서(micro processor)

1950 년부터 개발되기 시작한 IC 발전의 결과로서 등장하여 컴퓨터의 소형화, 고성능화 및 저가화를 이룰 수 있는 근간이 되고 있으며, 현재의 대부분의 컴퓨터시스템에서 CPU로 사용되고 있다.

● 개념과 발전 과정

― 마이크로 프로세서의 성능: 명령어 집합의 복잡도,	clock의 속도, 하나의 명령어를 실행하는 데 소요되는 clock의 개수

― 마이크로 프로세서 성능을 향상시키는 방법

1) 신호의 전달 지연을 방지

2) 클럭의 속도의 향상

3) CPU 와 ALU 의 일체화

4) 파이프라인 기법의 채택

5) 캐쉬 메모리의 내장

6) 레지스터의 수를 증가

7) 버스의 폭을 넓히는 것

― 이러한 CISC 마이크로 프로세서의 성능 향상과 고속화 방법도일정한 한계 때문에 나은 성능을 실현하기 위해서는 RISC 기술의 도입이 필요하다.

― 마이크로 프로세서는 일반적으로 취급하는 데이터 버스의 비	트 수, 주소 버스의 비트 수, 명령어 코드의 비트 수, 연산	용 레지스터와 내부 버스의 비트 수, 그리고 가상 주소의 비트 수 등의 크기에 따라 몇 비트 마이크로 프로세서라고	구분

표 5-9. 인텔 마이크로 프로세서의 발전 과정

종 류	발표 연도	클럭 속도 (MHz)	버스폭 (bit)	TR수(개)	지원메모리	주요 기능
				선폭(μm)	가상메로리
i4004	1971.11	-	4	2천3백	640B	최초의 마이크로프로세서, 4칙 연산
				10
i8008	1972.4	-	8	3천5백	16KB	데이터/문자 연산
				10
i8080	1974.4	2	8	6천	64KB	i8008의 10배 성능
				6
i8086	1978.6	4.77, 8, 10	16	2만9천	1MB	i8080의 10배 성능
				3
i8088	1979.6	4.77, 8, 10	8/16	2만9천	1MB	i8086의 8비트 버전
				3
i80286	1982.2	6, 8, 10, 12	16	13만4천	16MB	i8086의 3～6배 성능
				1.5	1GB
i386DX	1985.10	16, 20, 25, 33	32	27만5천	4GB	32비트 지원
				1	64TB
i386SX	1988.6	12, 16, 20, 25, 33	16/32	27만5천	4GB	i386DX의 16비트 버전
				1	64TB
i386SL	1990.4	16, 20, 25, 33	32	85만5천	4GB	i386DX 노트북 버전
				1	64TB
i486DX	1989.4	25, 33, 50	32	1백20만	4GB	PFU와 L1 캐시 내장
				1～0.8	64TB
i486SX	1991.4	25, 33	32	1백18만	4GB	PFU가 없는 i486DX 버전
				1	64TB
i486DX2	1992.1	66	32	1백20만/ 0.8	4GB	Speed doubler기술 채용
				0.8	64TB
펜티엄	1993.3	75～200	32/64	3백30만	4GB	superscalar 구조
				0.8	64TB
펜티엄 프로	1995.11	180～200	32/64	5백50만	4GB/ 64TB	동적 실행 구조와 L2 캐시 내장
				0.6～0.35	64TB
펜티엄-MMX	1997.1	150～255	32/64	4백50만	4GB	MMX 기술 채용
				0.35	64TB
펜티엄 Ⅱ	1997.5	233～400	32/64	7백50만	4GB	DIB와 SEC구조
				0.35～0.25	64TB