본문으로 이동

프로세서 레지스터

위키백과, 우리 모두의 백과사전.
(레지스터 (컴퓨팅)에서 넘어옴)
레지스터 전송 수준 (RTL)으로 구현된 8비트 레지스터에 대한 상세 설명으로, 플립플롭을 사용하여 8비트 데이터를 저장하는 방법을 보여준다.

프로세서 레지스터(영어: processor register, 순화 용어: 기록기) 또는 단순히 레지스터는 컴퓨터의 프로세서에서 빠르게 접근할 수 있는 위치이다.[1] 레지스터는 일반적으로 소량의 빠른 저장 공간으로 구성되지만, 일부 레지스터는 특정 하드웨어 기능을 가지며 읽기 전용 또는 쓰기 전용일 수 있다. 컴퓨터 구조에서 레지스터는 일반적으로 주기억장치와는 다른 메커니즘으로 주소 지정되지만, DEC PDP-10, ICT 1900 등과 같이 메모리 주소가 할당될 수도 있다.[2]

로드-스토어 아키텍처 여부에 관계없이 거의 모든 컴퓨터는 더 큰 메모리에서 데이터를 레지스터로 로드한 다음, 해당 데이터를 산술, 비트 연산 및 기타 작업에 사용하며, 기계어 명령어를 통해 조작하거나 테스트한다. 조작된 항목은 동일한 명령어 또는 후속 명령어에 의해 종종 다시 주기억장치에 저장된다. 최신 프로세서는 주기억장치로 정적 또는 동적 RAM을 사용하며, 후자는 일반적으로 하나 이상의 캐시 레벨을 통해 접근된다.

프로세서 레지스터는 일반적으로 메모리 계층 구조의 최상단에 있으며, 데이터에 접근하는 가장 빠른 방법을 제공한다. 이 용어는 일반적으로 명령어 집합에 정의된 대로 명령어의 일부로 직접 인코딩된 레지스터 그룹만을 지칭한다. 그러나 최신 고성능 CPU는 레지스터 이름 변경을 통해 성능을 향상시키기 위해 이러한 "아키텍처 레지스터"의 복사본을 자주 보유하여 병렬투기적 실행을 허용한다. 최신 X86 설계는 펜티엄 프로, 사이릭스 6x86, Nx586 및 AMD K5의 출시와 함께 1995년경에 이러한 기술을 도입했다.

컴퓨터 프로그램이 동일한 데이터에 반복적으로 접근하는 것을 참조 국부성이라고 한다. 자주 사용되는 값을 레지스터에 보관하는 것은 프로그램 성능에 매우 중요하다. 레지스터 할당컴파일러코드 생성 단계에서 수행되거나 어셈블리어 프로그래머에 의해 수동으로 수행된다.

크기

[편집]

레지스터는 일반적으로 저장할 수 있는 비트 수로 측정된다. 예를 들어, 8비트 레지스터, 32비트 레지스터, 64비트 레지스터, 128비트 레지스터 등이 있다. 일부 명령어 집합에서는 레지스터가 다양한 모드에서 작동하여 저장 메모리를 더 작은 부분(예: 32비트를 4개의 8비트로)으로 분할하여 여러 데이터(벡터 또는 1차원 배열 데이터)를 동시에 로드하고 처리할 수 있다. 일반적으로 이는 메모리를 더 큰 레지스터에 매핑하는 추가 레지스터를 추가하여 구현된다. 여러 데이터에 대해 단일 명령어를 실행할 수 있는 프로세서를 벡터 프로세서라고 한다.

유형

[편집]

프로세서에는 종종 여러 종류의 레지스터가 포함되어 있으며, 저장할 수 있는 값의 유형 또는 작동하는 명령어에 따라 분류할 수 있다.

  • 사용자 접근 가능 레지스터는 기계어 명령어로 읽거나 쓸 수 있다. 사용자 접근 가능 레지스터의 가장 일반적인 구분은 데이터 레지스터와 주소 레지스터로 구분하는 것이다.
    • 데이터 레지스터숫자 데이터 값 (예: 정수)과 일부 아키텍처에서는 부동소수점 수, 문자, 작은 비트 배열 및 기타 데이터를 저장할 수 있다. IBM 704, IBM 709 및 후속 기종, PDP-1, PDP-4/PDP-7/PDP-9/PDP-15, PDP-5/PDP-8, HP 2100과 같은 일부 구형 아키텍처에서는 누산기로 알려진 특별한 데이터 레지스터가 많은 연산에 암시적으로 사용된다.
    • 주소 레지스터주소를 저장하며 주기억장치에 간접적으로 접근하는 명령어에 의해 사용된다.
      • 일부 프로세서에는 주소만 저장하거나 숫자 값만 저장하는 데 사용될 수 있는 레지스터(일부 경우에는 특정 주소에서 오프셋으로 값이 추가되는 인덱스 레지스터로 사용)가 포함되어 있다. 다른 프로세서는 레지스터가 두 종류의 양을 모두 저장할 수 있도록 허용한다. 피연산자의 유효 주소를 지정하는 데 사용되는 다양한 주소 지정 방식이 존재한다.
      • 스택 포인터와 프레임 포인터콜 스택을 관리하는 데 사용된다. 드물게 다른 스택은 전용 주소 레지스터에 의해 주소 지정된다( 스택 머신 참조).
    • 범용 레지스터 (GPRs)는 데이터와 주소를 모두 저장할 수 있다. 즉, 데이터/주소 결합 레지스터이다. 일부 아키텍처에서는 레지스터 파일이 통합되어 GPR이 부동소수점 숫자도 저장할 수 있다.
    • 부동소수점 레지스터 (FPRs)는 많은 아키텍처에서 부동소수점 숫자를 저장한다.
    • 상수 레지스터는 0, 1 또는 원주율과 같은 읽기 전용 값을 저장한다.
    • 벡터 레지스터SIMD 명령어(단일 명령어, 다중 데이터)에 의해 수행되는 벡터 처리를 위한 데이터를 저장한다.
    • 상태 레지스터는 특정 명령어가 실행되어야 하는지 또는 실행되지 않아야 하는지를 결정하는 데 자주 사용되는 진릿값을 저장한다.
    • 특수 목적 레지스터 (SPRs)는 프로그램 상태의 일부 요소를 저장한다. 여기에는 일반적으로 명령 포인터라고도 불리는 프로그램 카운터상태 레지스터가 포함된다. 프로그램 카운터와 상태 레지스터는 프로그램 상태 워드 (PSW) 레지스터로 결합될 수 있다. 앞서 언급된 스택 포인터도 때때로 이 그룹에 포함된다. 마이크로컨트롤러와 같은 임베디드 마이크로프로세서는 특수 하드웨어 요소에 해당하는 특수 기능 레지스터를 가질 수도 있다.
    • 제어 레지스터CPU와 같은 시스템 구성 요소의 동작을 설정하는 데 사용된다.
      • 모델별 레지스터 (기계별 레지스터라고도 함)는 프로세서 자체와 관련된 데이터 및 설정을 저장한다. 그 의미가 특정 프로세서의 설계에 연결되어 있으므로 프로세서 세대 간에 표준으로 유지될 것으로 예상되지 않는다.
      • 메모리 유형 범위 레지스터 (MTRRs)
  • 내부 레지스터는 명령어로 접근할 수 없으며 프로세서 작업에 내부적으로 사용된다.
  • 아키텍처 레지스터는 소프트웨어에 보이는 레지스터이며 아키텍처에 의해 정의된다. 레지스터 이름 변경이 기본 하드웨어에 의해 수행되는 경우 물리적 하드웨어와 일치하지 않을 수 있다.

하드웨어 레지스터는 비슷하지만 CPU 외부에 존재한다.

일부 아키텍처(예: SPARCMIPS)에서는 정수 레지스터 파일의 첫 번째 또는 마지막 레지스터가 읽을 때 항상 0을 반환하도록 하드와이어되어 있는 의사 레지스터이다(주로 인덱싱 모드를 단순화하기 위함). 이 레지스터는 덮어쓸 수 없다. 알파에서도 부동소수점 레지스터 파일에 대해 동일한 방식으로 구현된다. 이로 인해 레지스터 파일은 실제로 사용 가능한 레지스터 수보다 하나 더 많은 레지스터를 가진 것으로 흔히 인용된다. 예를 들어, 31개의 레지스터만 위에서 정의한 레지스터 정의에 부합하더라도 32개의 레지스터가 있다고 인용된다.

예시

[편집]

다음 표는 여러 주류 CPU 아키텍처의 레지스터 수를 보여준다. X86 호환 프로세서에서 스택 포인터(ESP)는 내용에 대해 사용할 수 있는 명령어 수가 제한적임에도 불구하고 정수 레지스터로 계산된다는 점에 유의해야 한다. 유사한 주의 사항은 대부분의 아키텍처에도 적용된다.

아래 나열된 아키텍처는 모두 다르지만, 거의 모두 헝가리계 미국인 수학자 존 폰 노이만이 처음 제안한 폰 노이만 구조로 알려진 기본 배열로 구성되어 있다. GPU의 레지스터 수가 CPU보다 훨씬 많다는 점도 주목할 만하다.

용법

[편집]

프로세서에서 사용할 수 있는 레지스터 수와 이 레지스터를 사용하여 수행할 수 있는 연산은 최적화 컴파일러가 생성하는 코드의 효율성에 상당한 영향을 미친다. 표현식 트리의 스트라흘러 수는 해당 표현식 트리를 평가하는 데 필요한 최소 레지스터 수를 나타낸다.

같이 보기

[편집]

각주

[편집]
  1. “What is a processor register?”. 《Educative: Interactive Courses for Software Developers》 (영어). 2022년 8월 12일에 확인함. 
  2. “A Survey of Techniques for Designing and Managing CPU Register File”. 
  3. “Cray-1 Computer System Hardware Reference Manual” (PDF). 크레이 리서치. November 1977. 2021년 11월 7일에 원본 문서 (PDF)에서 보존된 문서. 2022년 12월 23일에 확인함. 
  4. “MCS-4 Micro Computer Set Users Manual” (PDF). 인텔. February 1973. 2005년 2월 24일에 원본 문서 (PDF)에서 보존된 문서. 
  5. “8008 8 Bit Parallel Central Processor Unit Users Manual” (PDF). 인텔. November 1973. 2007년 10월 4일에 원본 문서 (PDF)에서 보존된 문서. 2014년 1월 23일에 확인함. 
  6. “Intel 8080 Microcomputer Systems User's Manual” (PDF). 인텔. September 1975. 2010년 12월 6일에 원본 문서 (PDF)에서 보존된 문서. 2014년 1월 23일에 확인함. 
  7. 《Z80 Family CPU User Manual》 (PDF). 자일로그. 2016. 3쪽. UM008011-0816. 2023년 12월 26일에 원본 문서 (PDF)에서 보존된 문서. 2024년 1월 5일에 확인함. 
  8. “80286 and 80287 Programmer's Reference Manual” (PDF). 인텔. 1987. 2015년 7월 23일에 원본 문서 (PDF)에서 보존된 문서. 
  9. “Intel 64 and IA-32 Architectures Software Developer Manuals”. 인텔. 2019년 12월 4일. 
  10. “AMD64 Architecture Programmer's Manual Volume 1: Application Programming” (PDF). AMD. October 2013. 
  11. “Intel Architecture Instruction Set Extensions and Future Features Programming Reference” (PDF). 인텔. January 2018. 
  12. 《F8, Preliminary Microprocessor User's Manual》 (PDF). 페어차일드. January 1975. 
  13. 《F8 Guide to Programming》 (PDF). Fairchild MOS Microcomputer Division. 1977. 
  14. “Nios II Classic Processor Reference Guide” (PDF). 알테라. 2015년 4월 2일. 
  15. “Nios II Gen2 Processor Reference Guide” (PDF). 알테라. 2015년 4월 2일. 
  16. “M6800 Programming Reference Manual” (PDF). 모토로라. November 1976. 2011년 10월 14일에 원본 문서 (PDF)에서 보존된 문서. 2015년 5월 18일에 확인함. 
  17. “Motorola M68000 Family Programmer's Reference Manual” (PDF). 모토로라. 1992. 2024년 11월 10일에 확인함. 
  18. “CUDA C Programming Guide”. Nvidia. 2019. 2020년 1월 9일에 확인함. 
  19. Jia, Zhe; Maggioni, Marco; Staiger, Benjamin; Scarpazza, Daniele P. (2018). “Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking”. arXiv:1804.06826 [cs.DC]. 
  20. 《Control Data 6000 Series Computer Systems, Reference Manual》 (PDF). Control Data Corporation. July 1965. 
  21. 《IBM System/360 Principles of Operation》 (PDF). IBM. 
  22. 《IBM System/370, Principles of Operation》 (PDF). IBM. 1975년 9월 1일. 
  23. 《z/Architecture, Principles of Operation》 (PDF) Seven판. IBM. 2008. 
  24. “IBM Enterprise Systems Architecture/370 and System/370 - Vector Operations” (PDF). IBM. SA22-7125-3. 2020년 5월 11일에 확인함. 
  25. “IBM S/390 G5 Microprocessor” (PDF). 
  26. “MMIX Home Page”. 
  27. “Series 32000 Databook” (PDF). 내셔널 세미컨덕터. 2017년 11월 25일에 원본 문서 (PDF)에서 보존된 문서. 
  28. 《Intel Itanium Architecture, Software Developer's Manual, Volume 3: Intel Itanium Instruction Set Reference》 (PDF). Intel. May 2010. 
  29. Weaver, David L.; Germond, Tom (편집.). 《The SPARC Architecture Manual, Version 9》 (PDF). Santa Clara, California: SPARC International, Inc. 
  30. 《Power ISA Version 3.1B》 (PDF). OpenPOWER Foundation. 2021년 9월 14일. 
  31. 《Blackfin Processor, Programming Reference, Revision 2.2》 (PDF). Analog Devices. February 2013. 
  32. “Synergistic Processor Unit Instruction Set Architecture Version 1.2” (PDF). IBM. 2007년 1월 27일. 
  33. Leonard, Timothy E., 편집. (1987). 《VAX Architecture, Reference Manual》 (PDF). DEC books. 
  34. 《Alpha Architecture Reference Manual》 (PDF) Four판. Compaq Computer Corporation. January 2002. 
  35. “Learning 65816 Assembly”. 《Super Famicom Development Wiki》. 2019년 11월 14일에 확인함. 
  36. “Procedure Call Standard for the ARM Architecture” (PDF). ARM 홀딩스. 2013년 11월 30일. 2013년 5월 27일에 확인함. 
  37. “2.6.2. The Thumb-state register set”. 《ARM7TDMI Technical Reference Manual》. ARM 홀딩스. 
  38. 《Arm A64 Instruction Set Architecture, Armv8, for Armv8-A architecture profile》 (PDF). Arm. 2021. 
  39. 《MIPS64 Architecture For Programmers, Volume II: The MIPS64 Instruction Set》 (PDF). RISC-V Foundation. 2001년 3월 12일. 2024년 10월 6일에 확인함. 
  40. Waterman, Andrew; Asanovi, Krste, 편집. (May 2017). 《The RISC-V, Instruction Set Manual, Volume I: User-Level ISA, Document Version 2.2》 (PDF). RISC-V Foundation. 
  41. “Epiphany Architecture Reference” (PDF).