하드웨어 구조 - 6
레지스터 - 2
실수 계산용 레지스터
범용 레지스터는 일반적으로 정수 계산이나 주소계산을 위해 사용되기에 실수계산은 메모리의 스택을 이용하거나 아래의 레지스터를 사용한다.
1. FPU 레지스터
- R0 ~ R7라는 이름의 부동 소수점 데이터 레지스터가 있다(각각 80bit)
- 컨트롤 레지스터, 상태 레지스터, 태그 레지스터가 있다(각각 16bit) 실질적으로 코딩할때 다룰 수 있는 부분이 이 세가지 레지스터이다.
- Opcode 레지스터가 있다(11bit)
- FPU Instruction Pointer Register와 FPU Data Pointer Register가 있다(각각 64bit)
- 세부 내역은 다음 링크를 참조하면 좋다
참조 : http://www.ray.masmcode.com/tutorial/fpuchap1.htm
2. MMX 레지스터
- MM0 ~ MM7까지 레지스터가 있다(각각 64bit)
- 원래는 범용 레지스터보다 크기가 큰 정수연산용으로 만들어졌으나 그냥 부동소수점 연산에 사용된다.
3. XMM 레지스터
- 하나의 명령어로 여러개의 값을 동시에 계산하기 위해 만들어진 레지스터이다. 이러한 방식을 SIMD라고 하며 이 것을 확장한 것이 SSE이다.
- XMM0 ~ XMM15 레지스터가 있다(각각 128bit)
- MXCSR 레지스터가 있다(32bit) SSE 명령어의 상태 및 제어에 사용된다.
시스템을 위한 레지스터
이전에 설명했던 내용은 계산이나 함수 반환값을 위한 레지스터였다면 아래에서 서술하는 레지스터는 CPU의 모드를 변경하거나 CPU에서 지원하는 명령어 세트를 사용하기 위한 레지스터이다.
1. CR0
- 운영 모드를 제어하는 레지스터이다.
- 16bit 리얼모드에서 32bit 보호 모드로 전환하기 위해서 필요하다.
- 캐시와 페이징 기능을 활성화할 수 있따.
2. CR1
- 예약된 레지스터라서 사용자가 쓸 수 없다.
3. CR2
- 페이지 폴트 발생시 해당 선형 주소를 저장한다.
- 페이징을 활성화 하고 난 다음에나 제대로 된 값을 가진다
4. CR3
- 페이지 디렉터리의 물리 주소와 페이지 캐시에 관련된 기능을 설정하는 레지스터이다.
5. CR4
- 프로세서가 지원하는 각종 확장 기능을 제어한다.
- 페이징 크기 확장이나 메모리 영역 확장 등의 기능을 활성화한다.
- 메모리 영역 확장의 경우 64bit 모드로 전환시 꼭 필요하므로 해당 레지스터가 없으면 64Bit 모드로 전환이 불가하다.
6. CR8
- 64bit 모드에서만 사용가능하다.
- 태스크 우선순위 레지스터 값을 제어한다.
- 프로세스 외부 인터럽트를 걸러준다.
7. 플래그 레지스터
- 산술 연산 결과의 상태를 알려주는 레지스터이다.
- 32bit 모드일때 32비트, 64bit 모드일때 64비트이나 사실 33~64번째까지 예약이라 사실상 동일하다.
- 세부 내용은 다음의 링크를 참조하는게 빠르다.
참조 : https://en.wikipedia.org/wiki/FLAGS_register
8. 글로벌 디스크립터 레지스터(GDTR)
- job에 대한 디스크립터 table이 어디에 위치하는지 주소를 갖고 있는 레지스터이다.
- 32bit 모드의 경우 48비트, 64bit 모드의 경우 80비트의 크기를 가진다.
9. 인터럽트 디스크립터 레지스터(IDTR)
- 인터럽트나 예외 발생시 수행해야할 핸들러의 주소를 저장해둔 table이 어디에 위치하는지 주소를 갖고 있는 레지스터이다.
- 32bit 모드의 경우 48비트, 64bit 모드의 경우 80비트의 크기를 가진다.
10. 로컬 디스크립터 레지스터(LDTR)
- 16비트의 크기이다.
- GDT와 비슷한 LDT를 담는데 쓸수있다.
11. 태스크 레지스터
- 16비트의 크기이다.
- 현재 프로세서가 수행중인 태스크의 정보를 관리한다.
12. 모델 고유 레지스터
- MSR이라고도 불리며 프로세서 모델마다 특수하게 정의되어있다.
- 크게 6가지 종류가 있고 다음과 같다.
디버깅 및 성능 측정
하드웨어 에러 검사
메모리 범위와 메모리 타입 설정
온도와 전력 관리
특수 명령어 지원
프로세서 특성과 모드 지원
참고 문헌
- 64Bit 멀티코어 OS의 구조 - 한승훈 저
- SIMPLY FPU
- 위키피디아 - FLAGS Register
This post is licensed under CC BY 4.0 by the author.