컴퓨터(Computer Science)/컴퓨터구조(Computer Arichitecture)

CPU 기본구조와 프로세서, Processor [컴퓨터구조]

게임이 더 좋아 2020. 4. 8. 11:50
반응형
728x170

 

배웠던 것부터 다시 살펴보고

배울 것을 살펴보자

 

 

 

우선 컴퓨터의 성능은 연산속도와 비례했고

그것은 CPU의 성능과 직결된다.

 

CPU 성능은  클럭속도와 CPI에 의해 결정된다.

또한 MIPS를 통해 파이프라인을 알아볼 것이다.

 


 

해당 Instruction을 실행은 아래와 같이 이루어진다.

 

PC가 instruction을 가리키고

해당 Instruction을 decode하여 레지스터를 이용하고

해당 opcode와 같은 operation에 따라서 무엇을 할 지가 결정이 된다.

 

 

 


 

이 모든 것을 하는 CPU는 어떻게 생겼나

Abstraction 된 것을 보자.

**실제와는 다르다.

 

 

특징을 보면 위의 Instruction의 실행과 똑같다.

 

1. PC를 전달하고 PC는 PC + 4 연산이 진행된다.

2. 해당 PC +4 된 값은 또 가산기에 들어가서 업데이트 된다(branch target address)

3. 2개의 출력이 ALU에 들어감

4. ALU의 출력이 다시 Data Memory에 들어감.

5. Data Memory에서도 다시 출력이 레지스터로 들어간다.

 

우리는 이제 위의 구조를 바탕으로 점점 자세히 구체화시켜가는 것이다.

Abstraction은 우리가 이해하지 않아도 사용하게 만드는 것이고

Complexity는 이해하기 어렵지만 성능 향상을 위해 알아보는 것이다.

 


 

위의 그림에서 라인이 겹치는 곳이 나오는데

사실 그 부분에는 Multiplexer가 있어서 값을 선택할 수 있게 한다.(MUX)

아래가 조금 더 복잡해졌지만 더 실제같아진 구조이다.

 

 

**Control로 각 component들을 제어한다.

작동 - 1

X - 0

이런식이다.

AND도 마찬가지다. 값을 필터링하여 제어한다고 말할 수 있다.

 

 


 

컴퓨터구조를 이해하려면 논리회로를 잘 알아야 한다.

 

이러한 것들을 알고 넘어가자.

 

 

하드웨어에선 0과 1만 쓰며

한 라인, wire에는 1비트만 쓸 수 있다.

 

 

State element를 읽어서 Combination 연산을 한 후 다시 state element로 출력하는 그런 것이다.

 

 


 

Combination element란

 

데이터를 계산하는 것이다. 입력이 같으면 출력이 같게 나온다. (아래와 같이 Adder 같은 것들)

 

State element, Sequential element 란

 

상태 정보를 가지고 있다.(레지스터, 캐시 메모리, DRAM)

 

 

아래의 예는 data를 회로에 넣을 때

 

값이 rising, falling edge일 때 바뀌어서 Edge-triggered라고도 말한다.

얘는 기본적으로 rising일 때 값이 update 된다고 알고 있자.

 

 

write할 때

 

얘는 클럭이 rising이나 falling이면서 write가 1일 때 update되는 것이다.

 

 


 

클럭의 특징이 있다.

 

 

 

Combination Logic 같은 경우

한 번의 싸이클에 데이터의 연산이 다 끝나야만 한다.

 

즉, State element 1의 데이터를 받아서 Combination Logic 연산 수행 후 State element 2 까지 

한 번의 싸이클이 보장되어야 한다는 말이다.

 

때문에 클럭은 가장 긴 combination logic와 맞춰지는데 

즉, 때문에 하나의 복잡한 연산 때문에

다른 모두가 다음 클럭을 기다리고 있는 유휴시간이 많아지는 비효율을 초래할 수 있다.

 

 

 


 

다음은 Data Path다.

 

CPU의 구성요소 중 하나다.

 

데이터와 주소들을 처리해주는 요소다.

컴퓨터 구조를 배워가면서

아까 위의 그림에서 점점 추가되는 것이다.

 


 

 

Instruction을 저장하고 접근하는데에 2개의 State element가 필요하다.

1. Instruction memory

2. PC, program counter

 


 

 

다음은  R-format Instruction이다. (레지스터 간의 연산이다.)

++ add, sub, or, and 같은 것들

 

아까 말했다시피 Register File들은 State element다.

 

 

1. 2개의 레지스터의 값을 읽어서

2. 연산

3. destination register에 write

 

 


 

다음은 Load, Store instruction 이다.

 

 

즉, load라면 address에 대한 값이 Read data로 나올 것이고

store라면 address에다 write data가 써질 것이다.

 

Sign-extend하는 이유는 주소 계산할 때 offset이 16bit이라서 그렇다.

 

더 자세히보면

store

 

 

load

 

 

 


 

이번엔 branch instruction이다.

 

 

레지스터의 값을 읽고

Operand를 계산해서 subtract한 다음 그 값이 zero인지 아닌지 확인한다.

 

동시에 target address를 계산한다.

또한 주소를 얻어야 하므로 sign-extend한다.

 

자세히 datapath를 보면

 

 


 

Datapath 를 만들어봤다.

부분이 아니라 크게 다시보자

 

얘는 R-type, Load, Store instruction의 Datapath다.

 

아예 크게 보면

이렇게 생겼다.

 

 

 

728x90
반응형
그리드형