[ Register ]창
Register window![]() |
컴퓨터 공학에서 레지스터 창은 내부 레지스터의 서브셋을 프로그래머가 볼 수 있는 고정 레지스터에 동적으로 앨리어스함으로써 서브루틴에 전용 레지스터를 할당하는 기능입니다.레지스터 윈도우는 함수 호출 및 반환에 필요한 스택 조작 수를 줄임으로써 프로세서의 성능을 향상시키기 위해 구현됩니다.Berkeley RISC 설계의 가장 영향력 있는 기능 중 하나로 AMD Am29000, Intel i960, Sun Microsystems SPARC, Intel Itanium 등의 명령 세트 아키텍처에 구현되었습니다.
일반 조작
프로그램의 다른 부분에 대해 여러 세트의 레지스터가 제공됩니다.레지스터는 여러 서브루틴이 프로세서 자원을 공유하도록 하기 위해 프로그래머로부터 의도적으로 숨겨집니다.
레지스터를 투명하게 하는 것은 효율적으로 구현할 수 있습니다.CPU는 프로시저 호출 중에 프로그램의 한 부분에서 다른 부분으로의 이동을 인식합니다.이것은 소수의 명령(프롤로그) 중 하나에 의해 수행되며, 마찬가지로 작은 세트(에필로그) 중 하나로 끝납니다.버클리 설계에서는, 이러한 콜에 의해서, 그 시점에서 새로운 레지스터 세트가 「스왑 인」되거나, 콜이 종료했을 때에 「데드」(또는 「재이용 가능」)로 마크 됩니다.
CPU 응용 프로그램
버클리 RISC 설계에서는 총 64개의 레지스터 중 8개만 프로그램에 표시됩니다.레지스터의 전체 세트는 레지스터 파일이라고 하며, 8개의 특정 세트는 창이라고 합니다.이 파일에서는 최대 8개의 프로시저 콜이 독자적인 레지스터 세트를 가질 수 있습니다.프로그램이 8콜 이상의 콜 다운 체인을 호출하지 않는 한 레지스터를 흘릴 필요가 없습니다.즉, 레지스터 액세스에 비해 느린 프로세스입니다.
이에 비해 Sun Microsystems SPARC 아키텍처는 각각 8개의 레지스터를 4세트씩 동시에 확인할 수 있습니다.각각 8개의 레지스터의 세 세트가 "윈도우"됩니다.8개의 레지스터(i0~i7)가 현재의 프로시저 레벨에 대한 입력 레지스터를 형성한다.8개의 레지스터(L0~L7)는 현재 프로시저 레벨에 대해 로컬이며 8개의 레지스터(o0~o7)는 현재 프로시저 레벨에서 호출된 다음 레벨로 출력됩니다.프로시저가 호출되면 레지스터 창이 16개의 레지스터만큼 이동하며 이전 입력 레지스터와 이전 로컬 레지스터를 숨기고 이전 출력이 새 입력 레지스터를 등록합니다.파라미터 전달에는 공통 레지스터(이전 출력 레지스터 및 새 입력 레지스터)가 사용됩니다.마지막으로 8개의 레지스터(g0~g7)가 모든 프로시저 레벨에서 글로벌하게 표시된다.
AMD 29000 에서는, 윈도우의 사이즈를 가변으로 할 수 있기 때문에, 1개의 콜에 8개 미만의 레지스터가 필요한 일반적인 케이스에서의 사용율이 향상되었습니다.또한 레지스터를 64개의 글로벌 세트로, 윈도우를 위한 128개의 추가 세트로 분리했습니다.마찬가지로 IA-64(Itanium) 아키텍처에서도 가변 크기의 창이 사용되었으며 32개의 글로벌 레지스터와 96개의 윈도우가 사용되었습니다.
Infineon C166 아키텍처에서 대부분의 레지스터는 레지스터로서 액세스 가능한 추가 속성을 가진 내부 RAM 내의 위치입니다.이 중 16개의 범용 레지스터(R0~R15)의 주소는 고정되어 있지 않다.대신 R0 레지스터는 "Context Pointer"(CP) 레지스터가 가리키는 주소에 배치되고 나머지 15개의 레지스터는 [1]그 후에 순차적으로 이어집니다.
등록 창은 업그레이드 경로도 쉽게 제공합니다.추가 레지스터는 프로그램에서는 보이지 않으므로 언제든지 추가 창을 추가할 수 있습니다.예를 들어 객체 지향 프로그래밍을 사용하면 "소형" 콜이 많아지는 경우가 많습니다.예를 들어 창을 8개에서 16개로 늘리면 콜에 대응할 수 있습니다.이것은 SPARC에서 사용된 접근법입니다.SPARC에는 새로운 세대의 아키텍처에 더 많은 레지스터 창이 포함되어 있습니다.결과적으로 레지스터 윈도우 오버플로우 빈도가 낮기 때문에 느린 레지스터 윈도우 유출 및 채우기 작업이 줄어듭니다.
비판
레지스터 창만이 레지스터 성능을 향상시키는 방법은 아닙니다.스탠포드 대학의 MIPS를 설계한 그룹은 버클리 대학의 작업을 보고 문제는 레지스터의 부족이 아니라 기존 레지스터의 활용도가 낮다는 데 있다고 결정했다.대신 컴파일러의 레지스터 할당에 더 많은 시간을 투자하여 MIPS에서 사용할 수 있는 더 큰 집합을 현명하게 사용하도록 했습니다.이것에 의해, 1개의 프로시저가 큰 가시적인 레지스터 공간을 이용할 수 있는 경우에, 잠재적으로 더 높은 퍼포먼스를 제공하는 한편, 총 레지스터 수의 1/2로 칩의 복잡성이 경감되었습니다.결국 최신 컴파일러를 사용하면 프로시저 [citation needed]호출 중에도 MIPS는 레지스터 공간을 효율적으로 사용할 수 있습니다.
레퍼런스
- ^ "Infineon C166 Family Instruction Set Manual" (PDF). Keil. Retrieved 2020-03-12.
- Frantzen, Mike; Shuey, Mike (2001). "StackGhost: Hardware Facilitated Stack Protection". Proceedings of the 10th Usenix Security Symposium. USENIX. pp. 55–66. Retrieved 27 August 2010.
- Magnusson, Peter (April 1997). "Understanding stacks and registers in the Sparc architecture(s)". Archived from the original on 24 December 2012. Retrieved 27 August 2010.
- Mueller, Frank. "setjmp/longjmp". 윈도우 설정 때문에 복잡한 Sparc 구현에 대해 논의합니다.