본문 바로가기
2학년/2-2)마이크로프로세서

CPU의 프로그램 실행 순서 (+CPU, ALU

by 소요이 2022. 9. 7.
728x90

컴퓨터는 CPU, Memory로 이루어져 있다. 

 

CPU는 코어라고 불리며, ALU(산술연산장치), Register, Control Unit 으로 이루어져 있다.

CPU 에는 기계어로 이루어진 명령어가 들어가야 한다. (기계어: 1, 0으로 이루어진 언어)

기계어는

1. 산술연산(사칙연산)

2. 논리연산(AND, OR, NOT)

3. 데이터 이동(Data transfer)

4. 점프(branch)

 

CPU        = ALU + Register+etc...

 Memory

 

메모리에서 보낸 값을 CPU로 보내서 ALU가 계산을 하고, 다시 메모리에 덮어쓰기를 한다고 생각하면 된다.

이 때 메모리의 속도는 매우 느리다. (이유: 메모리 용량이 커야하는데, 따라서 고집적을 하지 못해 속도가 떨어진다)

따라서 CPU내의 ALU가 계산한 값을 CPU안에서 자체적으로 저장했다가 다시 사용하면 빨라진다.

그래서 CPU에 register라는 것이 있다.

 

register는 buffer(완충 장치)역할을 하며, 메모리에 비해 50배 가량 읽기&쓰기가 빠르다.

용량은 단지 32byte에 불과하다.(우리 기준) 따라서 한 번 사용 후 다른 값으로 덮어쓰기 하여 사용되며, 계산된 값은 바로 메모리에 백업해 놔야 한다.

메모리는 CPU의 Register에 연결되어 있다.(ALU와 바로 연결되지 않는다)

 


프로그램 실행 순서

 

  아래 그림에서 왼쪽 큰 사각형은 CPU, RAM은 Memory이다.

 

  회로를 심플하게 만들기 위해 Bus를 이용한다.(공용 라인) <-> 전용 line

         +On,  Off 장치... 

         아래 그림에는 Control Bus(빨), Data Bus(파), Address Bus(초) 가 있다.

 

Instruction Register에 명령어가 저장된다. 우리는 8bit짜리 명령어다(ex. 11001011).

그게 Decoder 로 들어가고, Decoder은 명령어에 따라 어떤 동작을 할지 컨트롤 한다. (ex. MUX를 동작, ALU의 뺄셈 회로 on, accumulator register를 on 등...)

MUX에는 여러 데이터가 들어가는데(ex. RAM에서 바로 온 데이터, Instruction Data, Program Counter 입력...)

 Decoder의 입력에 따라 들어간 데이터들 중 하나를 선택해서 내보낸다.

 

 Decoder = CU(Control Unit)

 

Program Conter는 어떤 역할을 하냐? 저장되어 있는 프로그램 명령어들의 주소값을 하나씩 순차적으로 세는 역할을 한다.

 이 때 위에 4가지 기계어 중 branch 명령어가 있는데, 이건 주소값을 한번에 여러 칸 세는 동작을 만든다. (ex. 1 ->7)

     + C로 치면 if, for, while... 등의 명령어를 사용한 것

 


동작 순서

 

 

reset버튼 누르면 PC가 0이 되며 시작.

1. Fetch) CPU의 Address Bus가 오른 쪽 MUX를 거쳐 메모리의 0번지를 띄운다. 그럼 0번지에 있던 기계어가 IR에 탑재가 된다.

 

2. Decode) INPUT ACC명령어를 실행하기 위해, 메모리의 6번지에 있는 데이터를 띄우려 Address Bus에 6번지를 띄운다.  그럼  RAM의 6번지에 있던 데이터가 CPU의 MUX로 들어간다. 이 때 6번지에 있던 것은 명령 기계어가 아닌 DATA이므로 IR로 들어가지 않는다.

ALU에 들어간 데이터 250은 Decoder가 MUX가 데이터를 보낼 수 있는 길을 모두 다 On시켰기 때문에 ALU를 그대로 지나 아래로 패스된 상태이다.

 

3. Execute 실행) Decoder의 명령에 따라(?) ALU의 계산값을 ACC Register에 업데이트 한다. 

4. Increment PC) 0번지에 있던 명령어를 모두 해결했기 때문에 1번지를 선택해야 한다. 아래 그림에서는 PC에 있던 값을 MUX로 보내고 Decoder의 명령에 따라 ALU 에서 +1을 하여 다시 PC 레지스터로 덮어썼다.

 

 

 

5. 다시 Fetch)  PC의 1이라는 값을 Address Bus를 통해 메모리 1번지를 띄우고 다시 실행한다. 이하 반복 ...

 

 


위 1)~4)의 과정들은 Clock 신호에 따라 동작한다.

rising edge, falling edge중 정해진 신호에 따라 움직임.

 여기서 올라가는 순간이 rising edge, 떨어지는 순간이 falling edge.

 

 

 

 

 

 

   *https://idlecomputer.tistory.com/89 Decoder에 대해... 참조했습니다.

  * https://woodforest.tistory.com/195 clock 신호, +chattering 참조

   *MUX: 입력으로 여러개가 들어왔을 때 어떤 걸 출력으로 내보낼 지 결정하는 것

'2학년 > 2-2)마이크로프로세서' 카테고리의 다른 글

마프 ~10.10 코드  (0) 2022.10.11
221005  (1) 2022.10.05
마프01.  (1) 2022.10.04