본문 바로가기
[Public] 컴퓨터공학/컴퓨터구조

[컴퓨터구조] 프로세서를 만들어보자 (#1 전체적인 프로세서 작동원리)

by 차출발 2012. 5. 15.
반응형

프로세서를 배워야하는 이유는 무엇일가요?

먼저 컴퓨터의 성능을 결정짓는 요인에 대해 알아봐야합니다.

 

컴퓨터의 성능을 결정하는 3가지 주요요인은 무엇인가요?

명령어의 개수 (Number of Instructions)

클럭 사이클 시간 (Clock cycle time)

명령어당 클럭 사이클 개수 (Cycles per Instruction))

이 3가지가 컴퓨터의 성능에 결정 짓는다.

그렇다면 각각에 대해서 파헤쳐 봐야 한다.

 

 

먼저 명령어의 개수를 결정 짓는 요인은 무엇 이죠 ?

명령어의 개수를 결정 짓는 요인은 컴파일러와 명령어 집합 구조이다.

( 이거 같은 경우는 다음시간에 추후 설명 할 것이다.)

 

 

클럭사이클 시간과 명령어당 클럭사이클 수 (CPI)를 결정짓는 요인은 무엇인가요?

이는 프로세서의 구현방법이다.

프로세서의 구현 방법이라면 우리는 프로세서가 어떻게 구현되는지를 알아볼 필요가 있다.

그렇다 간단한 프로세서를 구성해보자!

이번 시간에 프로세서를 알아야 하는 목적을 알았으니 파헤쳐보자!!!!

 

 

먼저 알아야 할 것은 컴퓨터가 명령어를 처리하기 위한 사이클은?

Instruction Fetch (IF) -> Instruction Decode (ID) -> Execution (EX) -> Memory (MEM) -> Write Back (WB)

많이도 봐 왔을 것입니다.

 

 

그렇다면 각각의 사이클 역할은?

Instruction Fetch (IF)

메모리에서 명령어를 가져온다.

메모리를 읽어오는 것은 프로그램 내장방식 (폰노이만)이기 때문에 프로그램은 모두 메모리상에 올라와야 한다.

그래서 프로그램이 차지하고 있는 각각의 메모리 영역(Code, Data, Stack, Heap)에 접근하여 명령어를 모셔와야 하는 것입니다.

 

    Instruct Decode (ID)

        명령어 해독 및 레지스터 파일을 읽는다.

        명령어를 모셔왔으면 명령어가 하는 일을 파악해야 합니다. (방금 모셔온 명령어 너는 무슨 일을 하는 거니?)

        무슨 일을 하는지 파악을 하였으면 수행 당할 놈들을 레지스터에 각각의 할당을 해주면 됩니다.

        예를 들자면 1+2 란 명령어를 한다면, 명령어는 + 이고 수행 당할 놈들은 1 과 2 이놈들은 레지스터에 넣으면 됨

 

    EX (Execution)

        실행 또는 주소를 계산한다.

        그냥 수행하는 겁니다. 아까 레지스터에 넣어 떤 놈들을 그냥 명령어대로 ~~

 

    Memory (Memory)

        데이터 메모리에 있는 피 연산자에 접근한다.

        수행을 통하여 결과가 나왔습니다. 그럼 결과레지스터에 저장하기 위해서 메모리에 접근하는 겁니다.

 

    Write Back (WB)

        연산 결과를 타겟 레지스터에 저장을 한다.

        메모리를 접근하였으면 그냥 저장하면 됩니다.

결과물을 도출하는 단계로 Memory 도 이 영역에 속하지 않을 가 생각됩니다.

(보통 Memory 영역은 다 생략되고 Write Back만 있더라고요!)

 

명령어의 사이클을 알았으면 이제 어떻게 프로세서가 설계되는지는 짐작이 갈 것입니다.

여기서 이제 많이 사용되는 용어중 하나가 데이터패스 입니다.

 

 

그럼 데이터 패스가 무엇이냐?

프로세서에서 명령을 내리는 컨트롤 유닛이 있고

이를 실행하는 ALU도 있고 Shifter도 있을 것입니다.

이러한 명령을 내리는 것이 Control Word라는 형태로 명령이 내려지는데

이 명령을 실행되는 논리회로를 말하는 것입니다.

한마디로 말하자면 명령어가 실행기(프로세서)로 가는 통로를 생각하면 됩니다.

 

아래 그림을 보면 가장 기본적인 단일 데이터패스와 컨트롤을 나타내는 사진입니다.

 

 

 

그렇다면 데이터 패스는 어떻게 만들죠?

데이터를 구성하기 앞서 데이터 패스를 구성하는 요소를 먼저 알아야 합니다.

 

 

데이터패스의 구성요소?

데이터패스는 조합소자 상태소자로 이루어져 있습니다.

 

조합소자?

조합소자는 그들의 출력이 현재 입력에만 의존하는 것입니다.

한마디로 조합소자는 같은 입력이 주어지면 항상 같은 출력을 내는 것이죠

대표적인 예를 들자면 ALU가 여기에 속하는 것입니다.

ALU는 내부기억자가 없기 때문에 입력이 주어지면 항상 같은 출력을 내죠

    

 

상태소자?

상태소자는 소자 내부 기억장소를 가지고 있다면 상태를 가지게 됩니다.

컴퓨터의 플러그를 빼도 플러그 빼기 전에 소자가 갖고 있던 값들로 상태소자를 적재하면 다시 시작이 가능하죠

상태를 저장하기 때문에 컴퓨터가 꺼져도 된다는 것이죠

대표적인 예를 들자면 명령어 메모리, 데이터 메모리 및 레지스터가 속합니다.

그래서 이들은 적어도 두 개의 입력과 한 개의 출력을 가지는 거시죠

가장 간단한 상태소자 중 하나는 입력 두 개와 출력 하나로 구성되어 있는 D형 Flip-flop입니다.

 

 

여기서 상태소자에 대한 의문이 생길 수 있습니다. 입력과 출력이 있다면 언제 이를 수행하죠?

클럭킹 방법론이 여기서 나오게 되는 것이죠.

읽기와 쓰기를 타이밍을 명시하는 것이죠

 

 

클럭킹 방법론이 머죠?

예를 들자면

1+2 명령어 수행 후 결과를 A에, 다음에 2+3 명령어 수행 후 결과를 B에.

그래서 1+ 2 를 수행하고 3이라는 결과를 쓸려는 순간에

2+3 읽어 버리면서 2+3 Write Back하는 동작에서 B에 1+2의 결과인 3을 저장하는 불상사가 일어나선 안되겠죠

그래서 클럭에 따라 저장과 읽기 시점을 제어하는 것입니다. 이게 클럭킹 방법론입니다.

 

 

이제 데이터 패스를 만들 준비가 다 되었습니다.

다음 시간에 데이터 패스를 만들어 봅시다.

 

 

 

 

 

도움이 되거나 틀린 내용이 있다면, 답장 하나 남겨주는 센스~

관심 하나가 큰 힘이 됩니다 ^^