CS

레지스터 종류

Jerry_K 2024. 11. 4. 09:17

PCB 내부에 무엇이 들어있나 갑자기 궁금해졌다.

그 안에는 레지스터의 여러 종류들이 보였고,

레지스터에 대해 좀 더 알고 싶어서 포스팅을 만든다.

 

✨ Address Registers 

  • PC (Program Counter, 프로그램 카운터)
    • PC는 일반적으로 순차적으로 진행
    • 현재 실행 중인 명령어의 다음 위치 가르키는 주소 저장
    • 순차적 실행 흐름이 끊기는 경우
      • 특정 메모리 주소로 실행 흐름을 이동하는 명령어 
      • 인터럽트 발생 
    • 함수 호출 시 PC 값을 스택에 저장하고, 함수 호출이 끝나면 스택에 저장된 값이 다시 PC로 복귀
  • MAR (Memory Address Register, 메모리 주소 레지스터)
    • 메모리에서 데이터를 읽거나 쓸 때 필요한 메모리 주소 저장
  • SP (Stack Pointer, 스택 포인터)
    • 스택 구조에서 가장 최근에 추가된 데이터 주소 가르킴
    • 스택 포인터가 가르키는 주소는 가상주소
    • 일반적으로 높은 주소에서 낮은 주소로 확장
    • 스택 포인터 주로 사용되는 상황 
      • 함수 호출 시
        • 매개변수, 반환 주소, 지역 변수를 스택에 저장
        • 스택 포인터는 스택의 최상단 가르킴
      • 함수 반환 시
        • 스택에 저장된 반환 주소로 이동
        • 스택 포인터를 이전 위치로 되돌림
      • 지역 변수 또는 임시 데이터
  • Base Register (베이스 레지스터)
    • 스택 내에서 기준 위치
    • 함수 호출 시 고정된 기준점 역할
    • 함수 호출되면 스택 포인터 값이 베이스 레지스터에 복사 (고정 기준점)
  • Segment Register (세그먼트 레지스터)
    • 세그먼트 단위로 나누어 관리
    • Code / Data / Stack / Extra Segment  등등

 

✨ Date Registers 

  • IR (Instruction Register, 명령어 레지스터)
    • 현재 CPU가 실행하고 있는 명령어
    • PC가 가리키는 메모리 주소에서 명령어 가져옴
    • 명령어 = 연산자 + 오퍼랜드
  • MBR (MBR, 메모리 버퍼 레지스터)
    • 메모리에서 읽어온 데이터 또는 쓸 데이터 임시 저장
    • 메모리와 CPU 간의 데이터 전송 과정에 중요 
  • General Purpose Register (범용 레지스터)
    • CPU 연산에 사용되는 다목적 레지스터
    • 일반적인 데이터 저장 또는 연산에 수행  
  • Flag Register (플래그 레지스터)
    • 연산 결과에 따라 다양한 상태 플래그
    • Zero / Sign / Carry / Overflow 등

 

 

위에 버퍼라는 단어가 나왔다. 버퍼 또한 속도를 위해 데이터를 저장한다.

그러면 버퍼와 캐시의 차이는 무엇일까 ?

  • 버퍼
    • 데이터 일지적 저장소
    • 데이터 전송 속도 차이 조정
    • 원활한 데이터 흐름 보장
    • 주로 I/O 장치와 CPU 간의 데이터 전송에 사용
    • 장치 간의 속도 차이 완충
  • 캐시
    • 데이터를 저장하여 접근 속도 높힘 (속도 최적화 목적)
    • 자주 접근하는 데이터 중복 저장
    • CPU, 디스크, 웹 브라우저 캐시 등 존재