시스템 프로그래밍

4-1. 컴퓨터 구조의 접근방법

CalebHong 2022. 5. 11. 12:20

컴퓨터를 디자인 하자

* 프로그래머 관점

 - 컴퓨터 구조를 잘 아는 프로그래머도 컴퓨터 디자인에 참여

 - 컴퓨터 디자인은 레지스터와 명령어 디자인

 

* 레지스터 디자인의 핵심(기본 구성)

 - 레지스터는 몇 비트로 구성할 것인가?

   ㄴ n 비트 시스템이라면 명령어 길이에 따라 레지스터도 n비트로 구성

 - 몇 개 정도로 레지스터를 구성할 것인가?

 - 레지스터 각각을 무슨 용도로 사용할 것인가?

   ㄴ 레지스터는 특별한 목적을 가진 저장장치

   ㄴ 따라서 용도를 정하면 명령어가 단순해지고, 속도가 빨라짐

 

ex) 레지스터 디자인 예

r0
r1
r2
r3
r4    ir
r5    sp
r6    lr
r7    pc

- r0 ~ r3: 범용(연산) 레지스터로 구성

- ir: instruction register

- sp: stack pointer

- lr: link register

- pc: program counter

 

명령어 구조 및 명령어 디자인

* 명령어의 기본 모델

 - n비트 시스템에선 n비트 명령어

 - 예제에서는 16비트 명령어로 정함

 

* 사칙 연산 명령어 구성

ex) ADD 라는 명령어의 구성을 만들어 본다면

예약 연산자 저장소 피연산자1 피연산자2
    A D D r 2   r 1     7      

 - 저장소: 연산 결과는 보통 레지스터에 저장

 - 피연산자1, 2: 레지스터 or 숫자

 * 어떻게 명령어가 구성되어 있는 지를 먼저 정해져 있어야 ALU가 파악하여 명령어를 실행하도록 전달할 수 있음.

연산의 의미 심볼 2진 코드
덧셈 ADD 001
뺄셈 SUB 010
곱셈 MUL 011
나눗셈 DIV 100
레지스터 심볼 2진 코드
r0 000
r1 001
r2 010
r3 011
r4, ir 100
r5, sp 101
r6, lr 110
r7, pc 111

Q. 2진 코드가 레지스터를 의미하는지 아니면 숫자를 의미하는지 구분을 어떻게 하면 좋을까?

  A. 가장 앞의 비트를 가지고 구분할 수 있음

Q. 그러면 나머지 3비트로 많은 수를 표현하고 연산할 수 있을까?

  A. 

 

* RISC와 CISC

 - RISC(Reduced Instruction Set Computer)

   : 단순화시킨 명령어를 사용하는 구조, 오늘날 대부분의 CPU의 구조

 - CISC(Complex Instruction Set Computer)

   : 명령어가 복잡함, 다양한 형태로 명령어를 조합할 수 있는 구조

 

cf) 명령어를 실행하는 과정: Fetch -> Decode -> Excution

각각의 과정마다 한 클럭이 소요(최소 3클럭)

CISC의 경우 명령어 5개를 처리하는데 15클럭이 소요(n*3, 하나의 명령어가 Excution되면 다음 클럭에서 Fetch가 가능)

RISC의 경우 명령어 5개를 실행하는데 7클럭이 소요(n+2, 명령어가 다음 단계로 가면 다음 명령어를 바로 처리 가능)

 - 적을 열이 발생하도록 클럭수를 낮추되 최대한 많은 명령어를 실행할 수 있도록 구조가 디자인 됨

'시스템 프로그래밍' 카테고리의 다른 글

5-1. 프로세스의 생성과 소멸  (0) 2022.05.12
4-2. Load & Store 명령어 디자인  (0) 2022.05.12
3. WIN32 & WIN64  (0) 2022.05.11
2-2 MBCS와 WBCS 동시 지원  (0) 2022.05.09
2-1 Windows의 유니코드(UNICODE)  (0) 2022.05.04