지난 포스팅에서는 ISA 의 큰 두가지 분류 CISC, RISC의 특징과
RISC에 속하는 SPARC ISA의 멍령어 타입에 대해 정리하였다.
이번에는 컴퓨터 구조를 조금 더 들어가서, 기본적인 CPU가 연산 과정과
CPU Machine Type을 정리하고자 한다.
1. 메모리의 표현
32bit CPU 는 명령어(데이터) 의 사이즈가 32bit = 4byte = 1word 임을 의미한다.
연속된 메모리 공간의 칸을 나눠서 한칸에 1byte 라고 하였을 때
32bit 컴퓨터는 4byte 단위의 데이터를 처리하므로
4칸씩 묶어서 메모리 구조를 생각할 수 있다.
=> 한칸에 8bit 면 주소값이 8씩 증가하는게 맞지 않나 순간 궁금했는데,
메모리 주소는 '논리적인' 부분이니까 한 칸을 8bit 의 1byte 기본 단위로 정의했다면
기본 단위마다 주소값이 증가하는 것으로 이해했다.
이걸 다르게 표현하면 아래와 같이 표현할 수도 있다.
주소값이 4씩 증가한다는 말은, 4byte씩 증가한다는 의미이니 32bit CPU라는 의미
반대로 8씩 증가하면 64bit CPU로 이해할 수도 있다.
아무튼 메인 메모리를 이런 형식으로 표현할 수 있다.
2. 현대 CPU의 기본 연산 과정
CPU가 연산을 할 때는 메모리에 있는 데이터를 레지스터로 가져온 후,
레지스터의 데이터를 이용해 Processor 가 연산을 하면,
그 결과를 레지스터를 거쳐 메모리에 저장한다.
Z <- X+Y 를 수행하는 과정의 첫번째로
X, Y 주소의 값을 레지스터로 가져온다.
이를 위해 실행하는 어셈블리 명령어가 load 명령어이다.
ISA 에 따라 다르지만, 예시에서는 load memory주소, register주소 순으로 사용한다.
r2, r5 레지스터에 저장한 값을 토대로 + (add) 연산을 수행한다.
그 결과를 레지스터 r8 에 저장한다.
연산결과를 메모리에 저장한다.
Store 명령어를 이용한다.
3. CPU Machine Type
CPU 종류는 크게 3가지가 있다.
1. Stack Machine
레지스터 대신 Stack 을 이용한다.
연산 결과를 스택에 저장하며, 스택 구조의 특성상 '메모리주소' 값을 필요로하지 않는다.
A+B를 수행한다고 하면, A, B 라는 두 데이터를 스택에서 가져오면 되므로
그저 POP 을 두 번 할 뿐이다.
그리고 그 결과값은 다시 스택에 저장하므로, TOS(Top Of Stack) 에는 연산 결과값이 저장된다.
2. Single-Register Machine
레지스터를 이용하나, 단 하나의 레지스터를 이용한다.
중간 결과를 저장할 공간이 부족하기 때문에, 중간 결과를 메모리에 저장한다(..)
때문에 아주 연산이 느리다.
3. Multiple-Register Machine
현대의 CPU 형태이며, 레지스터를 여러개 사용한다.
> 그런데 그림을 보니 세가지 모두 PC와 IR 은 따로 존재한다.
PC와 IR은 공통으로 필요한 파트이고, 연산의 중간 값을 저장하는 용도의 레지스터 유무 및 개수로 구분하면 될 것 같다.
PC도 레지스터고, IR도 레지스터인데 왜 레지스터가 하나라고 함? 하는 의문이 들었었다.
'CS > 어셈블리' 카테고리의 다른 글
[SPARC] 6. Pipelining Hazard (2) | 2023.09.21 |
---|---|
[SPARC] 5. Pipelining Analogy & SPARC Pipeline Stage Example (1) | 2023.09.19 |
[SPARC] 4. Stack Machine, Single Register Machine, Multiple Register Machine (0) | 2023.09.14 |
[SPARC] 2. Computer System Organization (2) | 2023.09.08 |
[SPARC] 1. Introduction & Computer System Organization (2) | 2023.09.07 |