[CS] Register & Bus

얄루얄루·2022년 8월 22일
0

Computer Science

목록 보기
3/10
post-custom-banner

레지스터는 메모리의 일종이다

그런데 메모리에는 RAM만 있는 게 아니다

컴퓨터 메모리라고 하면 통상적으로 손바닥 절반 정도 크기 되는 막대기

그러니까 이걸 생각하곤 하는데

보다 큰 의미의 메모리는 저 RAM 뿐만 아니라

이렇게 많은 종류의 메모리들이 있다.

삼각형 안을 보면 power on이라고 되어 있는 위쪽 3개가 주 메모리,
power off라고 되어 있는 아래 3종류가 보조 메모리이다.

레지스터에 대해 알아보자

컴퓨터 내에서 가장 빠르고, 단위 당 가격이 가장 비싸다.

CPU 안에 들어있기 때문에 RAM처럼 일반인이 볼 일은 없다.

이 레지스터는 저장되는 정보의 종류에 따라

  • 주소 레지스터
  • 데이터 레지스터
  • 상태 레지스터

3가지로 나뉜다.

또한, 사용자가 임의로 값을 변경할 수 있는 지/없는 지에 따라

  • 사용사 가시 레지스터
  • 사용사 불가시 레지스터

이렇게도 분류 할 수 있다.

레지스터는 이전에 설명했던 MAR, MBR, AC, IR 이외에도

General Purpose Register (GPR) : 이름 그대로 범용 목적의 레지스터로 데이터 처리 시 편의를 위한 임시보관에 이용되며 address와 data 둘 다 저장 할 수 있다.

Data Register (DR) : CPU의 작업공간으로 데이터를 가져오거나, 처리된 데이터를 주변 장치로 내보낼 때 데이터를 임시로 보관한다.

Address Register (AR) : 피연산자의 주소를 담고 있다. 때때로 GPR처럼 이용되기도 한다. 몇몇 AR은 특정 주소지정 모드 전용으로 이용되기도 한다.

특정 AR의 종류

  • Segment Pointer Register (SPR) : 메모리 내에서 데이터는 여기저기 흩어져 있기에 이를 조각나있다(Segmented)고 표현 할 수 있다. SPR은 이 조각들의 시작 주소를 저장한다.
  • Index Register (IR, Instruction Register와 헷갈리지 말자) : 초기값은 0이며, 인덱싱 된 주소지정에 사용된다. 일반적인 메모리 위치 탐색에 이용된다고 보면 된다. 각 참조 후에 작업의 특성에 따라 1씩 증가하거나 감소한다.
  • Stack Pointer Register (SPR) : Stack Control Register라고 불리기도 한다. 메모리의 스택을 관리하며 스택의 top을 가리키고 있다.

Status Register (SR) : Flag Register (FR)이나 Condition Code Register (CCR) 라고도 불린다. CPU의 상태를 나타내는 정보를 저장하며, 이는 관련된 명령을 실행해야 하는지/아닌지를 결정하는데 이용된다.

Program Status Word (PSW): Status를 나타내는 신호.

신호이름설명
ZZero flag산술/논리 연산의 결과가 0인지 표시
CCarry flag캐리가 발생하였는 지 표시
SSign flag마지막 연산이 덧셈이었는 지 뺄셈이었는 지 표시
NNegative flag연산결과가 음수인지 표시
V,O,WOverflow flag연산이 레지스터에 담기에 너무 큰 지 표시
PParity flag비트 묶음의 비트 수가 홀수인지 짝수인지 표시
IInterrupt flag인터럽트가 발생했는 지 표시
SSupervisor flag프로세서가 Supervisor 모드/User 모드로 실행되고 있는 지 표시

Working Register (WR) : Accumulator (AC)의 다른 이름이다.

레지스터의 크기

몇몇 특수 목적의 레지스터들을 제외하면, 레지스터들은 같은 크기의 주소, 데이터를 돌려쓴다.

레지스터의 역사적으로 8, 16, 32, 64 bits 만큼의 크기를 가진다.

요즘은 거진 대부분이 64bits이다.

그리고 CPU는 이 레지스터들을 이용하여 데이터를 처리하기에

레지스터의 크기프로세서의 기본 데이터 처리 단위라고 할 수 있다.

그런데...32비트? 64비트?
어째 WindowsX64, WindowsX86이 생각나지 않는가?

OS 또한 기본 데이터 처리 단위가 있다. 이는 프로세서의 기본 데이터 처리 단위를 고려하여 설계된 것이기에 둘이 숫자가 맞아 떨어지는 것이다.

어떤 프로세서 위에서 어떤 OS가 동작할 수 있는가를 간단히 표로 만들어보면,

프로세서운영체제동작 가능
32bits32bitsO
32bits64bitsX
64bits32bitsO
64bits64bitsO

이렇게 표현할 수 있겠다.

재밌는 CS상식
32bits 시스템의 경우, 최대 32bits의 메모리 어드레싱이 가능하다는 소리가 된다.
메모리의 Addressing mode는 기본적으로 1Byte1개의 주소가 나오고, 각 bit는 0 or 1의 값을 가질 수 있으므로,
32bits 시스템은 최대 2^32Bytes의 메모리 주소 공간을 가지게 되는데, 이는 약 4GB이다.
그리고 이것이 32bits 시스템에서 4GB 이상의 메모리를 인식하지 못하는 이유이다.

레지스터들 간의 연결

이렇게나 많은 레지스터들은 서로 데이터를 주고 받으며 일을 하기에 데이터의 전달을 위해 서로 연결을 시켜주어야 한다.

이때 직접 연결을 하면

레지스터 개수의 제곱만큼의 복잡도가 발생한다.

레지스터는 하드웨어 적인 연결을 필요로 하기 때문에 이대로 하다가는 안 그래도 고가인 CPU가 금값이 되어버릴 수가 있다.

그래서 보다 가성비적인 데이터 전달 방식이 채택되었다.

바로 Bus를 통한 전달이다.

이때 어느 값을 전달할 지 결정하는 부분에 대한 설계가 필요한데,

대표적으로 MUX를 사용한 설계와

Decoder + Tri-state buffer를 사용한 설계가 있다.

먼저 MUX를 사용한 설계를 보자.

S0, S1에 의해 각 MUX 0123중 어느 회로가 출력될 지 결정된다.

예를 들어, 0과 0을 넣으면 0번 회로가 출력된다고 생각해보자.

MUX3에선 A3가, MUX2에선 A2가, MUX 2와 1에선 각각 A1, A0가 출력 될 것이다.

그렇게 출력 된 비트들을 비트 자리수에 따라 합치면 Register A가 담고 있던 데이터가 나오게 된다.

이런 식으로, Control Signal을 통해 MUX의 출력 회로를 결정해서 버스 입력 값을 정하는 설계를 할 수 있다.

  • 필요한 MUX의 개수는 Register의 비트 수와 같다.
  • 각 MUX의 크기는 Input Register의 개수와 같다

다음으론 Decoder를 이용한 설계를 보자.

하지만 그 전에 잠시 알아야 할 게 있다.

Tri-State Buffer이다.

얘는 말 그대로 데이터를 모아서 전송하는 버퍼의 역할을 하는데,

특이점이 하나 있다.

바로 Input이 2개이고, C값이 0이라면 High-impedence 상태가 된다.

이 상태가 되면 전기적으로 입력 단자에 아무것도 연결되어 있지 않는 것과 동일한 상태가 된다. 단순히 말해 전기적으로 절연 상태가 되는 것이고, 더 간단히 말하면 그냥 아무 일도 안 하게 된다.

그래서 버퍼의 상태를 나타내는 H, L 이외에도 Z 즉, high-impedence 상태가 추가되어 Tri-state buffer라는 명칭이 되는 것이다.

이를 잘 응용하면 Decorder와 합쳐 어느 Register의 값을 출력 할 지 결정할 수 있게 된다.

Decoder는 컨트롤 신호 값에 따라 출력0~N 중 하나만을 1를 만들 수 있는 회로이다.

위 그림에서 S0, S1 둘 다에 0를 입력한다면,

0번 출력만이 1이 될 것이고, 나머지는 0이 될 것이다.

그러면 B0, C0, D0이 연결된 TSF들은 Z상태가 되어 일을 하지 않는다.

오직 1의 값을 받은 A0과 연결된 TSF만이 값을 내보낼 것이고, 이게 Bus를 타고 가게 된다.

위의 회로는 1비트용이기에 각 비트마다 위의 회로를 구성해서 병렬적으로 연결시키면 결국 한 레지스터가 가지고 있던 값 전체를 Transfer 할 수 있게 된다.

이렇게 말이다.

  • 필요한 Decoder의 개수는 Register의 비트수와 같다.
  • Decoder의 크기는 Register의 수가 되어야 한다.
  • Tri-state buffer는 decoder의 크기 x decoder의 개수 만큼 필요하다.

References

profile
시간아 늘어라 하루 48시간으로!
post-custom-banner

0개의 댓글