WIPIVERSE

레지스터 파일

레지스터 파일(register file)은 중앙 처리 장치(CPU) 내부에 있는 프로세서 레지스터의 배열(array)이다. 컴퓨터의 명령어 집합 아키텍처(ISA)는 거의 항상 메모리와 칩의 기능 단위 사이에 데이터를 준비하는 데 사용되는 레지스터 세트를 정의하며, 이 레지스터들의 집합을 구성하는 하드웨어 구조를 레지스터 파일이라고 한다.

정의와 특징

레지스터 파일은 주소 지정이 가능한 레지스터들의 배열로서, 둘 이상의 포트(port)를 갖추어 배열 내의 레지스터를 동시에 읽고 쓸 수 있도록 설계된 것이 일반적이다. 각 포트는 읽기 포트 또는 쓰기 포트로 구분되며, 모든 포트는 접근할 레지스터를 지정하는 주소 입력을 가진다. 쓰기 포트는 저장할 값을 지정하는 데이터 입력과 쓰기 가능 신호를, 읽기 포트는 레지스터 값을 출력하는 데이터 출력을 가진다. 읽기 동작은 비파괴적(nondestructive)으로, 읽기 행위가 저장된 데이터를 변경하지 않는다.

레지스터 파일은 CPU의 아키텍처 일부로서 프로그래머에게 표시된다는 점에서, 하드웨어가 내부적으로 관리하는 투명 캐시(transparent cache)와 구별된다. 단순한 CPU에서는 아키텍처 레지스터가 물리적 레지스터 파일(PRF)의 항목과 일대일로 대응하지만, 보다 복잡한 CPU에서는 레지스터 이름 변경(register renaming)을 사용하여 특정 아키텍처 레지스터를 저장하는 물리적 항목의 매핑이 실행 중에 동적으로 변경된다.

구현 방식

최신 집적 회로 기반 레지스터 파일은 일반적으로 여러 개의 포트를 갖춘 고속 정적 RAM(SRAM)으로 구현된다. 일반 멀티포트 SRAM이 동일한 포트를 통해 읽기와 쓰기를 모두 수행하는 것과 달리, 레지스터 파일의 RAM은 전용 읽기 포트와 전용 쓰기 포트를 구분하여 사용하는 것이 특징이다.

레지스터 파일은 항목당 포트마다 하나의 워드 라인(word line), 읽기 포트마다 비트 폭당 하나의 비트 라인(bit line), 쓰기 포트마다 비트 폭당 두 개의 비트 라인을 가진다. 이 때문에 와이어 피치 면적은 포트 수의 제곱에 비례하여 증가한다. 포트 수가 많아지면 면적과 지연 시간이 증가하므로, 특정 지점을 넘어서면 단일 레지스터 파일에 많은 읽기 포트를 두는 것보다 소수의 읽기 포트를 가진 여러 개의 중복 레지스터 파일을 두는 것이 더 작고 빠를 수 있다.

레지스터 뱅킹

레지스터 뱅킹(register banking)은 운영 모드에 따라 단일 이름을 사용하여 여러 개의 서로 다른 물리적 레지스터에 접근하는 방법이다. 예를 들어 ARM 프로세서는 처음 여덟 개의 범용 레지스터(R0~R7)를 모든 모드가 공유하지만, 뱅크 처리된 레지스터(R8~R14)가 가리키는 물리적 레지스터는 해당 프로세서의 운영 모드에 따라 달라진다. x86 프로세서는 컨텍스트 스위칭을 사용하고, MODCOMP 및 8051 호환 프로세서는 프로그램 상태 워드의 비트를 사용하여 활성 레지스터 뱅크를 선택한다.

응용 분야

레지스터 파일은 CPU의 프로세서 레지스터 외에도 FIFO(선입선출)의 데이터 메모리, 하드웨어 가속기 등 다양한 응용에 사용된다. 레지스터 윈도우(register window) 방식 또한 레지스터 파일의 특수한 응용으로, SPARC ISA에서 5비트의 아키텍처 레지스터 이름이 수백 개 항목을 가진 훨씬 큰 레지스터 파일의 윈도우를 가리키도록 구현된 사례가 대표적이다.

참고 문헌

레지스터 파일의 설계와 동작에 관한 주요 참고 자료로는 Patterson과 Hennessy의 《Computer Organization and Design》과 Farkas, Jouppi, Chow의 "Register file design considerations in dynamically scheduled processors"(1995) 등이 있다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기