지난 포스팅에서는 프로세서가 각 명령어들을 빠르게 처리하기 위해
파이프라이닝을 사용할 경우 발생할 수 있는 해저드의 종류와 해결 방법을 정리하였다.
이번 포스팅에서는 SPARC 라는 ISA 의 아키텍처와 레지스터 종류에 대해 정리하여 본다.
우리 학교는 어셈블리 실습으로 SPARC를 사용한다.
이 SPARC 라는 ISA의 주요 특징은 다음과 같다.
1. RISC 타입이다.
2. 명령어와 데이터의 크기가 모두 32bits 이다.
따라서 레지스터 하나의 사이즈도 32bit 이다.
.3. 한번에 사용 가능한 레지스터의 개수가 32개이다.
하드웨어적으로는 더 많은 레지스터가 있지만, 한번에 32개씩만 쓸 수 있다.
(Register Window System)
SPARC 의 레지스터는 4가지 타입이 있다.
그리고 각 타입별 레지스터는 8개씩 있다.
1. g-register
2. o-register
3. l-register
4. i-register
하나씩 살펴보면
1. g-register
전역 공간으로 쓰이는 레지스터이다. (global register)
%g0~%g7 로 표현하며, %g0 의 값은 항상 0으로 고정되어 있다.
(ground 에 연결되어 있다.)
나머지 7개 값은 전역 공간으로 사용한다.
2. o-register
함수의 호출시, Caller 에서 사용하는 레지스터이다. (out register)
함수의 매개변수가 저장되는 레지스터로 쓰인다.
%o0 ~ %o7 로 표현한다.
%o6 은 %sp 로도 쓰며, 스택포인터로 기능한다.
%o7 은 return address를 저장하는 용도로 쓰인다.
(함수를 호출하고 나서 다시 원래 위치로 돌아올 때, 그 주소를 기억하는 용도)
3. l-register
지역 공간의 기능을 하는 레지스터이다. (local register)
%l0 ~ %l7 로 표현하며, 8개 레지스터 모두 지역 변수 할당의 역할을 한다.
4. i-register
피호출된 함수의 매개변수를 담는 저장공간 역할을 한다. (in register)
%i0 ~ %i7 로 표현을 한다.
%i6 은 %fp 로도 쓰며, 프레임 포인터로 기능한다. (스택 포인터와 동일하다)
%i7 은 return address 를 저장하는 용도로 쓰인다.
o-register / i-register 개수에 제한이 있기 때문에,
함수의 매개변수가 많은 경우에는 메모리를 활용하여 저장한다.
이제 이 내용을 함수의 호출 과정을 통해 살펴보며 그림으로 이해해보자.
func1 에서 func2 를 호출하고 있다.
이 경우 func1 은 caller (호출함수) 이고, func2는 callee (피호출함수) 가 된다.
SPARC는 함수마다 24개의 레지스터 공간을 할당받는데,
이때 호출함수의 o-register 와 피호출함수의 i-register 는 물리적으로 같은 공간을 점유하기 때문에
사실상 같다고 볼 수 있다.
o-register 는 func2(10,0) 에서 10과 0을 저장하는 용도이고,
i-register 는 func2 함수 정의부에서 a, b 변수의 실제 공간이다.
이렇게 호출함수의 o-register 와 피호출함수의 i-register가 물리적으로 겹치기 때문에
이를 Register Window System 이라고 부른다.
(Sliding Window 알고리즘처럼 창문을 옆으로 쓱쓱 밀듯이 메모리를 겹치게 써서 이런 이름이 붙은 것 같다.)
다음 글에서는 SPARC 어셈블리 언어의 기본 문법과 명령어의 종류에 대해 정리할 예정이다.
'CS > 어셈블리' 카테고리의 다른 글
[SPARC] 9. Assembly Language Programming (0) | 2023.09.30 |
---|---|
[SPARC] 8. SPARC Regsiter Window & Assembly Instruction Format (0) | 2023.09.27 |
[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 |