컴퓨터를 디자인 하자
* 프로그래머 관점
- 컴퓨터 구조를 잘 아는 프로그래머도 컴퓨터 디자인에 참여
- 컴퓨터 디자인은 레지스터와 명령어 디자인
* 레지스터 디자인의 핵심(기본 구성)
- 레지스터는 몇 비트로 구성할 것인가?
ㄴ 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 |