제어 레지스터

Control register

제어 레지스터는 CPU 또는 다른 디지털 디바이스의 일반적인 동작을 변경하거나 제어하는 프로세서 레지스터입니다.제어 레지스터에 의해 실행되는 일반적인 작업에는 인터럽트 제어, 어드레싱 모드 전환, 페이징 제어 및 코프로세서 제어가 포함됩니다.

x86 시리즈의 컨트롤 레지스터

CR0

386 이상의 프로세서에서는 CR0 레지스터의 길이가 32비트입니다. 모드의 x64 프로세서에서는, 프로세서(및 다른 제어 레지스터)의 길이는 64비트입니다.CR0에는 프로세서의 기본 동작을 변경하는 다양한 제어 플래그가 있습니다.Register CR0은 이전 Machine Status Word(MSW) 레지스터의 32비트 버전입니다.i386 프로세서의 외관과 함께 MSW 레지스터가 컨트롤 레지스터로 확장되었습니다.

조금 이름. 풀네임 묘사
0 PE 보호 모드 활성화 1인 경우 시스템이 보호 모드이고 그렇지 않은 경우 시스템이 실제 모드입니다.
1 MP 모니터 보조 프로세서 CR0의 TS 플래그와 WAIT/FWAIT 지침의 상호 작용을 제어합니다.
2 전자파 에뮬레이션 설정된 경우 x87 부동소수점 유닛이 존재하지 않으며 클리어된 경우 x87 FPU가 존재합니다.
3 TS 태스크 전환 x87 명령을 사용한 후에만 작업 스위치에 x87 작업 컨텍스트를 저장할 수 있습니다.
4 ET 확장 유형 386에서는 외부 연산 코프로세서가 80287인지 80387인지를 지정할 수 있습니다.
5 NE 숫자 오류 설정 시 내부 x87 부동소수점 오류 보고 활성화, 그렇지 않으면 PC 스타일 x87 오류 검출 활성화
16 WP 쓰기 보호 권한 수준이 0인 경우 CPU가 읽기 전용 페이지에 쓸 수 없습니다.
18 오전 정렬 마스크 AM 설정, AC 플래그(EFLAGS 레지스터 내) 설정 및 권한 레벨이 3인 경우 정렬 점검이 활성화됩니다.
29 뉴웨이 쓰기 금지 라이트 스루 캐싱을 글로벌하게 활성화/비활성화합니다.
30 CD 캐시 사용 안 함 메모리 캐시를 글로벌하게 활성화/비활성화합니다.
31 PG 페이징 1 의 경우는, 페이징을 유효하게 해, CR3 레지스터를 사용합니다.그렇지 않으면 페이징을 무효로 합니다.

CR1

예약된 CPU는 액세스 시도 시 #UD 예외를 발생시킵니다.

CR2

Page Fault Linear Address(PFLA; 페이지 장애 선형 주소)라고 하는 값이 포함됩니다.페이지 결함이 발생하면 프로그램이 액세스를 시도한 주소가 CR2 레지스터에 저장됩니다.

CR3

4KiB 페이지의 주소 변환에 CR3를 사용하는 일반적인 방법

가상 어드레싱이 네이블로 되어 있는 경우, 즉 CR0에서 PG 비트가 설정되어 있는 경우에 사용됩니다.CR3를 사용하면 프로세서는 현재 태스크의 페이지 디렉토리페이지 테이블을 검색하여 선형 주소를 물리적 주소로 변환할 수 있습니다.일반적으로 CR3의 상위 20비트는 첫 번째 페이지 디렉토리의 물리 주소를 저장하는 Page Directory Base Register(PDBR; 페이지 디렉토리 베이스 레지스터)가 됩니다.CR4의 PCIDE 비트가 설정되어 있는 경우 프로세스 컨텍스트 식별자(PCID)[1]에는 하위12비트가 사용됩니다.

CR4

가상 8086 지원 등의 작업을 제어하기 위해 보호 모드에서 사용되며 I/O 중단점, 페이지 크기 확장 및 머신 체크 예외를 사용할 수 있습니다.

조금 이름. 풀네임 묘사
0 VME 가상 8086 모드 확장 설정되어 있는 경우 Virtual-8086 모드에서 Virtual Interrupt Flag(VIF; 가상 인터럽트 플래그) 지원을 netable로 합니다.
1 PVI 보호 모드 가상 인터럽트 설정했을 경우, 보호 모드로 Virtual Interrupt Flag(VIF; 가상 인터럽트 플래그)의 서포트를 netable로 합니다.
2 TSD 타임스탬프 비활성화 설정되어 있는 경우 RDTSC 명령은 링0 의 경우에만 실행할 수 있습니다.그렇지 않은 경우 RDTSC 를 임의의 특권 레벨로 사용할 수 있습니다.
3 DE 확장 디버깅 설정된 경우 I/O 공간 액세스에 대한 디버깅레지스터 기반의 브레이크가 유효하게 됩니다.
4 PSE 페이지 크기 확장 설정되지 않은 경우 페이지 크기는 4KiB이고 그렇지 않은 경우 페이지 크기가 4MiB로 증가합니다.

PAE가 유효하거나 프로세서가 x86-64 롱모드일 경우 이 비트는 [2]무시됩니다.

5 PAE 물리 주소 확장 설정된 경우 페이지 테이블 레이아웃을 변경하여 32비트 가상 주소를 확장 36비트 물리 주소로 변환합니다.
6 MCE 기계 검사 예외 설정되어 있는 경우, 머신 체크 인터럽트가 발생할 수 있습니다.
7 PGE 페이지 전역 사용 설정되어 있는 경우는, 주소 공간간에 주소 변환(PDE 레코드 또는 PTE 레코드)을 공유할 수 있습니다.
8 PCE 퍼포먼스 모니터링 카운터 활성화 설정되어 있는 경우, RDPMC는 임의의 특권 레벨로 실행할 수 있습니다.그렇지 않으면 RDPMC는 링0에서만 사용할 수 있습니다.
9 OSFXSR FXSAVE 및 FXRSTOR 명령 운영체제 지원 설정되어 있는 경우 스트리밍 SIMD 확장(SSE) 명령 및 고속 FPU 저장 및 복원을 활성화합니다.
10 OSXM EXCPT 마스크되지 않은 SIMD 부동 소수점 예외에 대한 운영 체제 지원 설정된 경우 마스크 해제된 SSE 예외를 활성화합니다.
11 UMIP 사용자 모드 명령 방지 설정되어 있는 경우 CPL이 0을 [1]넘으면 SGDT, SIDT, SLDT, SMSW 및 STR 명령을 실행할 수 없습니다.
12 LA57 57비트 리니어 어드레스 설정되어 있는 경우는, 5 레벨의 [3][4]: 2–18 페이징을 유효하게 합니다.
13 VMXE 가상 시스템 확장 사용 인텔 VT-x x86 가상화」를 참조해 주세요.
14 SMXE 안전 모드 확장 활성화 "TXT(Trusted Execution Technology)" 참조
16 FSGS 베이스 RDFSBASE, RDGSBASE, WRFSBASE 및 WRGSBASE 명령을 이니블로 합니다.
17 PCide PCID 활성화 설정되어 있는 경우, Process-Context Identifier(PCID; 프로세스 컨텍스트 식별자)를 netable로 합니다.
18 OSX저장 XSAVE 및 프로세서 확장 상태 활성화
20 SMEP[5] 슈퍼바이저 모드 실행 보호의 이니블화 설정된 경우 상위 링에서 코드를 실행하면 장애가 발생합니다.
21 SMAP 슈퍼바이저 모드접근 방지 이니블화 설정된 경우 상위 링의 데이터에 액세스하면 장애가 [6]발생합니다.
22 PCE 보호 키 활성화 인텔 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼을 참조하십시오.
23 CET 제어 흐름 적용 테크놀로지 설정되어 있는 경우는, 제어 플로우 적용 기술을 netable이네이블로 하겠습니다.[4]: 2–19
24 PKS 슈퍼바이저 모드페이지의 보호 키 활성화 설정되어 있는 경우, 4 레벨 또는5 레벨의 페이징을 사용하고 있는 [4]: 2–19 경우, 각 슈퍼바이저 모드의 리니어 주소가 보호 키에 관련지어집니다.

CR5-7

CR1과 같은 케이스로 예약되어 있습니다.

x86-64 시리즈의 추가 제어 레지스터

이퍼

확장기능 유효 레지스터(EFER)는 AMD K6 프로세서에 추가된 모델 고유의 레지스터로, SYSRET 명령 및 모드 시작 및 종료에 사용할 수 있습니다.이 레지스터는 AMD64에서 아키텍처가 되어 인텔에 의해 IA32_EFER로 채택되었습니다.MSR 번호는 0xC0000080 입니다.

조금 목적
0 SCE(시스템콜 내선번호)
1 DPE(AMD K6 한정: 데이터 프리페치 활성화)
2 SEWBED(AMD K6 한정: 투기적 EWBE# 비활성화)
3 GEWBED(AMD K6 한정: 글로벌 EWBE# 비활성화)
4 L2D(AMD K6 한정: L2 캐시 비활성화)
5-7 예약 완료, 0으로 읽기
8 LME(롱 모드 활성화)
9 예약필
10 LMA(롱모드 액티브)
11 NXE(No-Execute Enable)
12 SVME(Secure Virtual Machine Enable)
13 LMSLE(롱 모드 세그먼트 제한 활성화)
14 FFXSR(Fast FXSAVE/FXRSTOR)
15 TCE(변환 캐시 확장)
16–63 예약필

CR8

CR8은 REX 프레픽스를 사용하여 64비트모드로 액세스 할 수 있는 새로운 레지스터입니다.CR8은 외부 인터럽트에 우선순위를 부여하기 위해 사용되며 Task-Priority Register(TPR;[2] 태스크 우선 레지스터)라고 불립니다.

AMD64 아키텍처에서는 소프트웨어가 최대 15개의 외부 인터럽트 우선순위 클래스를 정의할 수 있습니다.priority 클래스 번호는 1 ~15로 priority 클래스1이 가장 낮고 priority 클래스15가 가장 높습니다.CR8은 4개의 하위 비트를 사용하여 태스크priority를 지정합니다.나머지 60비트는 예약되어 있기 때문에 0으로 쓸 필요가 있습니다.

시스템 소프트웨어는 TPR 레지스터를 사용하여 우선순위가 낮은 인터럽트가 우선순위가 높은 작업을 중단하는 것을 일시적으로 차단할 수 있습니다.이는 차단되는 가장 우선순위가 높은 인터럽트에 대응하는 값을 TPR에 로드함으로써 실현됩니다.예를 들어 값이 9(1001b)인 TPR을 로드하면 priority 클래스가 9 이하인 모든 인터럽트가 차단되고 priority 클래스가 10 이상인 모든 인터럽트가 인식됩니다.TPR에 0을 로드하면 모든 외부 인터럽트가 활성화됩니다.TPR에 15(111b)를 로드하면 모든 외부 인터럽트가 디세블이 됩니다.

TPR은 리셋 시 0으로 클리어 됩니다.

XCR0 및 XSS

XCR0 또는 Extended Control Register 0은 XSAVE/XRSTOR 명령을 사용하여 특정 CPU 기능과 관련된 레지스터의 저장 또는 로드를 전환하기 위해 사용되는 제어 레지스터입니다.또, 프로세서의 대응 명령 실행 기능을 유효 또는 무효로 하기 위해서도 사용됩니다.특권 XSETBV [7]및 비특권 XGETBV 명령을 사용하여 액세스 할 수 있습니다.

조금 목적
0 X87(x87 FPU/MMX 상태, 참고, '1'이어야 함)
1 SSE(XSAVE 피쳐 세트 MXCSR 및 XMM 레지스트에 대해 활성화)
2 AVX(AVX 활성화 및 XSAVE 기능 세트를 사용하여 YMM 레지스트 관리 가능)
3 BNDREG(MPX 활성화 및 XSAVE 피처 세트를 BND 레지스트에 사용할 수 있음)
4 BNDCSR(MPX 활성화 및 XSAVE 피처 세트를 BNDCFGU 및 BNDSTATUS 레지스트에 사용할 수 있습니다)
5 opmask(AVX-512 활성화 및 XSAVE 기능 세트를 AVX opmask, AKA k-mask, regs에 사용할 수 있음)
6 ZMM_hi256(AVX-512 활성화 및 XSAVE 피처 세트를 하위 ZM 레지스트의 상위 하프용으로 사용할 수 있음)
7 Hi16_ZMM(AVX-512 활성화 및 상위 ZMM 레지스트에 XSAVE 기능 세트 사용 가능)
8 예약필
9 PKRU(XSAVE 기능 세트를 보호 키 메커니즘의 일부인 PKRU 레지스터에 사용할 수 있습니다.)
10 예약됨('0'이어야 함)
11 Control-Flow Enforcement Technology(CET) 사용자 상태
12 Control-Flow Enforcement Technology(CET) 슈퍼바이저 스테이트
13–63 예약됨('0'이어야 함)

주소 0DA0h에 있는 IA32_XSS MSR도 있습니다.IA32_XSS MSR은 "슈퍼바이저" 상태로 간주되는 XCR0의 비트를 제어하며 일반 프로그램에서는 보이지 않아야 합니다.슈퍼바이저 스테이트를 사용하는 데이터에 추가함으로써 특권 XSAVES 및 XRSTORS 명령으로 동작합니다.간단히 말해 X87 상태가 XCR0에서 활성화되고 PT 상태가 IA32_XSS에서 활성화되면 XSAVE 명령은 X87 상태만 저장되며 특권 XSAVES는 X87 및 PT 상태를 모두 저장합니다.MSR이므로 RDMSR 및 WRMSR 명령을 사용하여 액세스할 수 있습니다.

조금 목적
0–7 [ Reserved ]는 필수입니다.
8 PT (9개의 프로세서트레이스 MSR 저장 및 로드를 유효하게 합니다)
9–12 [ Reserved ]는 필수입니다.
13 HDC(IA32_PM_CTL1 MSR의 저장 및 로드를 활성화합니다.)
14–63 [ Reserved ]는 필수입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Intel Corporation (2016). "4.10.1 Process-Context Identifiers (PCIDs)". Intel 64 and IA-32 Architectures Software Developer’s Manual (PDF). Vol. 3A: System Programming Guide, Part 1.
  2. ^ a b "AMD64 Architecture Programmer's Manual Volume 2: System Programming" (PDF). AMD. September 2012. p. 127 & 130. Retrieved 2017-08-04.
  3. ^ "5-Level Paging and 5-Level EPT" (PDF). Intel. May 2017. p. 16. Retrieved 2018-01-23.
  4. ^ a b c "Intel® 64 and IA-32 Architectures Software Developer's Manual" (PDF). Intel® Corporation. 2021-06-28. Retrieved 2021-09-21.
  5. ^ Fischer, Stephen (2011-09-21). "Supervisor Mode Execution Protection" (PDF). NSA Trusted Computing Conference 2011. National Conference Services, Inc. Archived from the original (PDF) on 2016-08-03. Retrieved 2017-08-04.
  6. ^ Anvin, H. Peter (2012-09-21). "x86: Supervisor Mode Access Prevention". LWN.net. Retrieved 2017-08-04.
  7. ^ "Chapter 13, Managing State Using The Xsave Feature Set" (PDF). Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture. Intel Corporation (2019). Retrieved 23 March 2019.

외부 링크