하이퍼바이저는 한 파티션이 다른 파티션과 통신할 수 있는 두 가지 간단한 메커니즘인 메시지 및 이벤트를 제공합니다. 두 경우 모두 SynIC(합성 인터럽트 컨트롤러)를 사용하여 알림이 전송됩니다.
SynIC 메시지
하이퍼바이저는 한 파티션이 매개 변수가 있는 메시지를 다른 파티션으로 보낼 수 있도록 하는 간단한 파티션 간 통신 기능을 제공합니다. (메시지는 비동기적으로 전송되므로 게시되었다고 합니다.) 대상 파티션은 인터럽트를 통해 이 메시지의 도착 알림을 받을 수 있습니다. HvCallPostMessage 하이퍼콜을 사용하거나 하이퍼바이저에서 암시적으로 메시지를 보낼 수 있습니다.
Messages
메시지를 보내면 하이퍼바이저는 무료 메시지 버퍼를 선택합니다. 사용 가능한 메시지 버퍼 집합은 메시지 전송을 트리거한 이벤트에 따라 달라집니다.
하이퍼바이저는 메시지 버퍼를 "사용 중"으로 표시하고 메시지 헤더에 메시지 유형, 페이로드 크기 및 보낸 사람 정보를 채웁니다. 마지막으로 메시지 페이로드를 채웁니다. 페이로드의 내용은 메시지를 트리거한 이벤트에 따라 달라집니다.
그런 다음 하이퍼바이저는 메시지 버퍼를 수신 메시지 큐에 추가합니다. 수신 메시지 큐는 메시지 전송을 트리거한 이벤트에 따라 달라집니다. 모든 메시지 유형에 대해 SINTx는 암시적(메시지 가로채기의 경우), 명시적(타이머 메시지의 경우) 또는 포트 ID(게스트 메시지의 경우)로 지정됩니다. 메시지가 큐에 삽입될 때 대상 가상 프로세서가 명시적으로 지정되거나 하이퍼바이저에서 선택됩니다. SynIC 또는 SIM 페이지가 비활성화된 가상 프로세서는 잠재적인 대상으로 간주되지 않습니다. 사용할 수 있는 대상이 없으면 하이퍼바이저가 작업을 종료하고 호출자에게 오류를 반환합니다.
그런 다음 하이퍼바이저는 대상 가상 프로세서에 대한 SIM 페이지 내의 지정된 SINTx 메시지 슬롯이 비어 있는지 여부를 확인합니다. 메시지 슬롯의 메시지 형식이 HvMessageTypeNone(즉, 0)이면 메시지 슬롯이 비어 있는 것으로 간주됩니다. 이 경우 하이퍼바이저는 메시지 버퍼를 큐에서 제거하고 해당 내용을 SIM 페이지 내의 메시지 슬롯에 복사합니다. 하이퍼바이저는 메시지와 연결된 페이로드 바이트 수만 복사할 수 있습니다. 또한 하이퍼바이저는 지정된 SINTx에 대해 에지 트리거 인터럽트를 생성하려고 시도합니다. APIC가 소프트웨어를 사용하지 않도록 설정하거나 SINTx를 마스킹하면 인터럽트가 손실됩니다. 이 인터럽트를 도착하면 게스트에게 새 메시지가 도착했음을 알 수 있습니다. SIM 페이지를 사용하지 않도록 설정하거나 SIM 페이지 내의 메시지 슬롯이 비어 있지 않으면 메시지는 큐에 대기 상태로 유지되고 인터럽트는 생성되지 않습니다.
고정 우선 순위 인터럽트와 마찬가지로 PPR(프로세스 우선 순위 레지스터)이 SINTx 레지스터에 지정된 벡터보다 작고 인터럽트가 가상 프로세서에 의해 마스킹되지 않을 때까지 가상 프로세서에서 인터럽트를 승인하지 않습니다(rFLAGS[IF]는 1로 설정됨).
SINTx가 동일한 여러 메시지 버퍼는 가상 프로세서에 큐에 대기할 수 있습니다. 이 경우 하이퍼바이저는 첫 번째 메시지(즉, SIM 페이지에 쓰기)를 전달하고 세 이벤트 중 하나가 발생할 때까지 다른 메시지는 대기 상태로 둡니다.
- 다른 메시지 버퍼가 큐에 대기됩니다.
- 게스트는 APIC의 EOI 레지스터에 기록하여 "인터럽트 종료"를 나타냅니다.
- 게스트는 SynIC의 EOM 레지스터에 기록하여 "메시지의 끝"을 나타냅니다.
세 가지 경우 모두 하이퍼바이저는 하나 이상의 메시지 버퍼 큐를 검색하고 추가 메시지를 배달하려고 시도합니다. 또한 하이퍼바이저는 새 메시지가 도착했음을 나타내는 에지 트리거 인터럽트를 생성하려고 합니다.
SIM 페이지
SIM 페이지는 256비트 메시지의 16개 요소 배열로 구성됩니다( HV_MESSAGE 데이터 구조 참조). 각 배열 요소(메시지 슬롯이라고도 함)는 단일 SINTx(가상 인터럽트 소스)에 해당합니다. 슬롯에 있는 메시지의 메시지 유형이 HvMessageTypeNone과 같으면 메시지 슬롯은 "비어 있다"고 합니다.
SIM 페이지의 주소는 SIMP 레지스터에 지정됩니다. SIM 페이지의 주소는 각 가상 프로세서에 대해 고유해야 합니다. 이러한 페이지를 SIEF 또는 SIM 페이지의 다른 인스턴스 또는 다른 오버레이 페이지(예: 하이퍼콜 페이지)와 겹치도록 프로그래밍하면 정의되지 않은 동작이 발생합니다.
가상 프로세서에서 SIM 페이지에 대한 읽기 및 쓰기 액세스는 RAM에 대한 읽기 및 쓰기 액세스처럼 동작합니다. 그러나 하이퍼바이저의 SynIC 구현은 특정 이벤트에 대한 응답으로 페이지에 기록합니다.
가상 프로세서를 만들고 다시 설정하면 SIM 페이지가 0으로 지워집니다.
권장 메시지 처리
SynIC 메시지 배달 메커니즘은 대상 파티션 내에서 메시지의 효율적인 배달 및 수신을 수용하도록 설계되었습니다. 대상 파티션 내에서 ISR(인터럽트 서비스 루틴)을 처리하는 메시지는 다음 단계를 수행하는 것이 좋습니다.
- SIM 메시지 슬롯에 입금된 메시지를 검사합니다.
- 메시지 내용을 다른 위치에 복사하고 메시지 슬롯 내의 메시지 유형을 HvMessageTypeNone으로 설정합니다.
- APIC의 EOI 레지스터에 기록하여 벡터의 인터럽트 끝을 나타냅니다.
- 메시지에 내포된 모든 작업을 수행합니다.
메시지 원본
메시지 전송을 트리거할 수 있는 이벤트의 클래스는 다음과 같습니다.
- 인터셉트: 가상 프로세서의 모든 절편으로 인해 부모 파티션 또는 더 높은 VTL로 메시지가 전송됩니다.
- 타이머: 타이머 메커니즘으로 인해 메시지가 전송됩니다. 각 가상 프로세서와 연결된 4개의 전용 타이머 메시지 버퍼는 각 타이머에 대해 하나씩 있습니다. 수신 메시지 큐는 타이머가 메시지 전송을 트리거한 가상 프로세서의 SINTx에 속합니다.
- 게스트 메시지: 하이퍼바이저는 게스트 간의 파티션 간 통신 메커니즘으로 메시지 전달을 지원합니다. 이 섹션에 정의된 인터페이스를 사용하면 한 게스트가 다른 게스트에게 메시지를 보낼 수 있습니다. 이 클래스의 메시지에 사용되는 메시지 버퍼는 수신자의 포트당 게스트 메시지 버퍼 풀에서 가져옵니다.
메시지 버퍼
메시지 버퍼는 받는 사람에게 배달될 때까지 메시지를 저장하기 위해 하이퍼바이저에 내부적으로 사용됩니다. 하이퍼바이저는 여러 메시지 버퍼 집합을 유지 관리합니다.
게스트 메시지 버퍼
하이퍼바이저는 각 포트에 대한 게스트 메시지 버퍼 집합을 유지 관리합니다. 이러한 버퍼는 게스트가 한 파티션에서 다른 파티션으로 명시적으로 보낸 메시지에 사용됩니다. 포트가 만들어지면 하이퍼바이저는 포트 소유자의 메모리 풀에서 16개의 메시지 버퍼를 할당합니다. 이러한 메시지 버퍼는 포트가 삭제될 때 메모리 풀로 반환됩니다.
메시지 버퍼 큐
각 파티션 및 파티션의 각 가상 프로세서에 대해 하이퍼바이저는 가상 프로세서의 SynIC에서 각 SINTx(가상 인터럽트 소스)에 대해 하나의 메시지 버퍼 큐를 유지 관리합니다. 가상 프로세서를 만들거나 다시 설정하면 가상 프로세서의 모든 메시지 큐가 비어 있습니다.
게스트 메시지 버퍼의 안정성 및 시퀀싱
게스트가 성공적으로 게시한 메시지는 하이퍼바이저에서 배달을 위해 대기되었습니다. 대상 파티션의 실제 배달 및 수신은 올바른 작업에 따라 달라집니다. 파티션은 SynIC를 사용하지 않도록 설정하거나 SIMP를 사용하지 않도록 설정하여 특정 가상 프로세서에 메시지 배달을 사용하지 않도록 설정할 수 있습니다.
연결을 끊으면 배달되지 않은(큐에 대기된) 메시지에는 영향을 미치지 않습니다. 대상 포트를 삭제하면 사용 가능한지 아니면 배달되지 않은(큐에 대기 중인) 메시지가 포함되는지 여부에 관계없이 항상 모든 포트의 메시지 버퍼가 해제됩니다.
메시지가 성공적으로 게시된 순서대로 도착합니다. 수신 포트가 특정 가상 프로세서와 연결된 경우 메시지가 게시된 순서와 동일한 순서로 도착합니다. 수신 포트가 HV_ANY_VP 연결된 경우 메시지는 특정 순서로 도착하지 않습니다.
SynIC 이벤트 플래그
SynIC은 메시지 외에도 이벤트 플래그라는 두 번째 유형의 파티션 간 알림 메커니즘을 지원합니다. HvCallSignalEvent 하이퍼콜을 사용하거나 하이퍼바이저에서 암시적으로 이벤트 플래그를 명시적으로 설정할 수 있습니다.
이벤트 플래그 및 메시지
이벤트 플래그는 메시지보다 더 가벼우므로 오버헤드가 낮습니다. 또한 이벤트 플래그에는 하이퍼바이저 내에서 버퍼 할당 또는 큐가 필요하지 않으므로 리소스 부족으로 인해 HvCallSignalEvent가 실패하지 않습니다.
이벤트 플래그 배달
파티션이 HvCallSignalEvent를 호출하면 이벤트 플래그 번호를 지정합니다. 하이퍼바이저는 수신 가상 프로세서의 SIEF 페이지 내에서 비트를 원자성으로 설정하여 응답합니다. SynIC 또는 SIEF 페이지가 비활성화된 가상 프로세서는 잠재적인 대상으로 간주되지 않습니다. 사용할 수 있는 대상이 없으면 하이퍼바이저가 작업을 종료하고 호출자에게 오류를 반환합니다.
이벤트 플래그가 이전에 지워진 경우 하이퍼바이저는 수신 파티션에 에지 트리거 인터럽트를 생성하여 플래그가 설정되었음을 알리려고 시도합니다. 대상 가상 프로세서는 대상 SINTx와 함께 포트 생성의 일부로 지정됩니다. SINTx가 마스킹되면 HvSignalEvent는 HV_STATUS_INVALID_SYNIC_STATE 반환합니다.
고정 우선 순위 외부 인터럽트와 마찬가지로 PPR(프로세스 우선 순위 레지스터)이 SINTx 레지스터에 지정된 벡터보다 작고 인터럽트가 가상 프로세서에 의해 마스킹되지 않을 때까지 가상 프로세서에서 인터럽트를 승인하지 않습니다(rFLAGS[IF]는 1로 설정됨).
SIEF 페이지
SIEF 페이지는 256비트 이벤트 플래그의 16개 요소 배열로 구성됩니다( HV_SYNIC_EVENT_FLAGS 참조). 각 배열 요소는 단일 SINTx(가상 인터럽트 소스)에 해당합니다.
SIEF 페이지의 주소는 SIEF 레지스터에 지정됩니다. SIEF 페이지의 주소는 각 가상 프로세서에 대해 고유해야 합니다. 이러한 페이지를 SIEF 또는 SIM 페이지의 다른 인스턴스 또는 다른 오버레이 페이지(예: 하이퍼콜 페이지)와 겹치도록 프로그래밍하면 정의되지 않은 동작이 발생합니다.
가상 프로세서에서 SIEF 페이지에 대한 읽기 및 쓰기 액세스는 RAM에 대한 읽기 및 쓰기 액세스처럼 동작합니다. 그러나 하이퍼바이저의 SynIC 구현은 특정 이벤트에 대한 응답으로 페이지에 기록합니다.
가상 프로세서를 만들고 다시 설정하면 SIEF 페이지가 0으로 지워집니다.
권장되는 이벤트 플래그 처리
대상 파티션 내의 이벤트 플래그 인터럽트 서비스 루틴(ISR)은 다음 단계를 수행하는 것이 좋습니다.
- 이벤트 플래그를 검사하고 설정된 플래그(있는 경우)를 확인합니다.
- LOCK AND 또는 LOCK CMPXCHG와 같은 잠긴(원자성) 작업을 사용하여 하나 이상의 이벤트 플래그를 지웁니다.
- APIC의 EOI 레지스터에 기록하여 벡터의 인터럽트 끝을 나타냅니다.
- 설정된 이벤트 플래그에 내포된 모든 작업을 수행합니다.
포트 및 연결
한 게스트에서 다른 게스트로 전송된 메시지 또는 이벤트는 미리 할당된 연결을 통해 전송되어야 합니다. 연결은 차례로 대상 포트와 연결되어야 합니다.
포트는 수신기의 메모리 풀에서 할당되며 대상으로 지정할 가상 프로세서 및 SINTx를 지정합니다. 이벤트 포트에는 호출자가 해당 포트에 유효한 이벤트 플래그 범위를 지정할 수 있는 "기본 플래그 번호" 및 "플래그 수"가 있습니다.
연결은 보낸 사람의 메모리 풀에서 할당됩니다. 연결이 만들어지면 유효한 포트와 연결되어야 합니다. 이 바인딩은 간단한 단방향 통신 채널을 만듭니다. 이후에 포트가 삭제되면 포트가 남아 있는 동안 해당 연결은 쓸모가 없게 됩니다.
SynIC 레지스터
각 가상 프로세서에는 이러한 레지스터의 자체 복사본이 있으므로 독립적으로 프로그래밍할 수 있습니다.
x64 플랫폼에서 이러한 레지스터는 RDMSR 및 WRMSR 지침을 사용하여 MSR(모델별 레지스터)으로 액세스됩니다.
| MSR 주소 | 등록 이름 | 기능 |
|---|---|---|
| 0x40000080 | SCONTROL | SynIC 컨트롤 |
| 0x40000081 | SVERSION | SynIC 버전 |
| 0x40000082 | SIEFP | 인터럽트 이벤트 플래그 페이지 |
| 0x40000083 | 간체 | 인터럽트 메시지 페이지 |
| 0x40000084 | 엄 | 메시지 끝 |
| 0x40000090 | SINT0 | 인터럽트 원본 0(하이퍼바이저) |
| 0x40000091 | SINT1 | 인터럽트 원본 1 |
| 0x40000092 | SINT2 | 인터럽트 원본 2 |
| 0x40000093 | SINT3 | 인터럽트 원본 3 |
| 0x40000094 | SINT4 | 인터럽트 원본 4 |
| 0x40000095 | SINT5 | 인터럽트 원본 5 |
| 0x40000096 | SINT6 | 인터럽트 원본 6 |
| 0x40000097 | SINT7 | 인터럽트 원본 7 |
| 0x40000098 | SINT8 | 인터럽트 원본 8 |
| 0x40000099 | SINT9 | 인터럽트 원본 9 |
| 0x4000009A | SINT10 | 인터럽트 원본 10 |
| 0x4000009B | SINT11 | 인터럽트 원본 11 |
| 0x4000009C | SINT12 | 인터럽트 원본 12 |
| 0x4000009D | SINT13 | 인터럽트 원본 13 |
| 0x4000009E | SINT14 | 인터럽트 원본 14 |
| 0x4000009F | SINT15 | 인터럽트 원본 15 |
ARM64 플랫폼에서 이러한 레지스터는 다음 레지스터 이름으로 HvCallGetVpRegisters 및 HvCallSetVpRegisters 하이퍼콜을 사용하여 액세스합니다.
| HvRegister 이름 | 기능 |
|---|---|
| HvRegisterScontrol | SynIC 컨트롤 |
| HvRegisterSversion | SynIC 버전 |
| HvRegisterSifp | 인터럽트 이벤트 플래그 페이지 |
| HvRegisterSipp | 인터럽트 메시지 페이지 |
| HvRegisterEom | 메시지 끝 |
| HvRegisterSirbp | 인터럽트 응답 버퍼 페이지 |
| HvRegisterSint0 | 인터럽트 원본 0(하이퍼바이저) |
| HvRegisterSint1 | 인터럽트 원본 1 |
| HvRegisterSint2 | 인터럽트 원본 2 |
| HvRegisterSint3 | 인터럽트 원본 3 |
| HvRegisterSint4 | 인터럽트 원본 4 |
| HvRegisterSint5 | 인터럽트 원본 5 |
| HvRegisterSint6 | 인터럽트 원본 6 |
| HvRegisterSint7 | 인터럽트 원본 7 |
| HvRegisterSint8 | 인터럽트 원본 8 |
| HvRegisterSint9 | 인터럽트 원본 9 |
| HvRegisterSint10 | 인터럽트 원본 10 |
| HvRegisterSint11 | 인터럽트 원본 11 |
| HvRegisterSint12 | 인터럽트 원본 12 |
| HvRegisterSint13 | 인터럽트 원본 13 |
| HvRegisterSint14 | 인터럽트 원본 14 |
| HvRegisterSint15 | 인터럽트 원본 15 |
SCONTROL Register
이 레지스터는 가상 프로세서의 SynIC 동작을 제어하는 데 사용됩니다.
가상 프로세서를 만들 때 및 프로세서 재설정 시 이 SYNIC 컨트롤 레지스터(SynIC 컨트롤 레지스터)의 값이 0x0000000000000000. 따라서 메시지 큐 및 이벤트 플래그 알림이 비활성화됩니다.
| 비트 | 분야 | Description | Attributes |
|---|---|---|---|
| 63:1 | RsvdP | 값을 유지해야 합니다. | 읽기/쓰기 |
| 0 | Enable | 이 가상 프로세서를 설정하면 메시지 큐 및 이벤트 플래그 알림을 해당 SynIC에 게시할 수 있습니다. 지우면 메시지 큐 및 이벤트 플래그 알림을 이 가상 프로세서로 보낼 수 없습니다. | 읽기/쓰기 |
SVERSION Register
읽기 전용 레지스터이며 SynIC의 버전 번호를 반환합니다. 이 레지스터에 쓰려고 하면 #GP 오류가 발생합니다.
| 비트 | 분야 | Description | Attributes |
|---|---|---|---|
| 63:32 | RsvdP | Read | |
| 31:0 | SynIC 버전 | SynIc의 버전 번호 | Read |
SIEFP 레지스터
가상 프로세서 생성 시간과 프로세서 재설정 시 이 SIEFP(가상 인터럽트 이벤트 플래그 페이지) 레지스터의 값이 0x0000000000000000. 따라서 SIEFP는 기본적으로 사용하지 않도록 설정됩니다. 게스트는 비트 0을 설정하여 활성화해야 합니다. 지정된 기본 주소가 파티션의 GPA 공간 끝 이후이면 게스트가 SIEFP 페이지에 액세스할 수 없습니다. 레지스터를 수정할 때 게스트는 향후 호환성을 위해 예약 비트(1~11)의 값을 유지해야 합니다.
| 비트 | 분야 | Description | Attributes |
|---|---|---|---|
| 63:12 | 기본 주소 | SIEFP의 기본 주소(GPA 공간)(낮은 12비트가 사용하지 않도록 설정된 것으로 가정됨) | 읽기/쓰기 |
| 11:1 | RsvdP | 예약된 값은 보존해야 합니다. | 읽기/쓰기 |
| 0 | Enable | SIEFP 사용 | 읽기/쓰기 |
SIMP 등록
가상 프로세서 생성 시간과 프로세서 재설정 시 이 SIMP(가상 인터럽트 메시지 페이지) 레지스터의 값이 0x0000000000000000. 따라서 SIMP는 기본적으로 사용하지 않도록 설정됩니다. 게스트는 비트 0을 설정하여 활성화해야 합니다. 지정된 기본 주소가 파티션의 GPA 공간 끝 이후이면 게스트가 SIMP 페이지에 액세스할 수 없습니다. 레지스터를 수정할 때 게스트는 향후 호환성을 위해 예약 비트(1~11)의 값을 유지해야 합니다.
| 비트 | 분야 | Description | Attributes |
|---|---|---|---|
| 63:12 | 기본 주소 | SIMP의 기본 주소(GPA 공간)(낮은 12비트가 사용하지 않도록 설정된 것으로 간주됨) | 읽기/쓰기 |
| 11:1 | RsvdP | 예약된 값은 보존해야 합니다. | 읽기/쓰기 |
| 0 | Enable | SIMP 사용 | 읽기/쓰기 |
SINTx 레지스터
가상 프로세서를 만들 때 모든 SINTx(가상 인터럽트 원본) 레지스터의 기본값은 0x0000000000010000. 따라서 모든 가상 인터럽트 원본은 기본적으로 마스킹됩니다. 게스트는 적절한 벡터를 프로그래밍하고 비트 16을 지워 마스크를 해제해야 합니다.
폴링 비트를 설정하면 실제 인터럽트가 생성되지 않는다는 점을 제외하고 인터럽트 원본의 마스킹 해제 효과가 있습니다.
AutoEOI 플래그는 인터럽트를 가상 프로세서에 전달할 때 하이퍼바이저에서 암시적 EOI를 수행해야 임을 나타냅니다. 또한 하이퍼바이저는 가상 APIC의 "ISR(서비스 내 레지스터)"에서 해당 플래그를 자동으로 지웁니다. 게스트가 이 동작을 사용하도록 설정하면 인터럽트 서비스 루틴에서 EOI를 수행해서는 안 됩니다. 언제든지 AutoEOI 플래그를 켤 수 있지만 게스트가 진행 중인 인터럽트에서 명시적 EOI를 수행해야 하지만 타이밍 고려 사항으로 인해 특정 인터럽트에서 EOI가 필요한지 여부를 알기 어렵기 때문에 SINT가 마스크를 해제한 후에는 해당 설정이 변경되지 않는 것이 좋습니다. 마찬가지로, 언제든지 AutoEOI 플래그를 해제할 수 있지만, 기내 인터럽트와 동일한 문제가 적용됩니다.
벡터의 유효한 값은 16-255입니다. 잘못된 벡터 번호를 지정하면 #GP.
| 비트 | 분야 | Description | Attributes |
|---|---|---|---|
| 63:19 | RsvdP | 예약된 값은 보존해야 합니다. | 읽기/쓰기 |
| 18 | 폴링 | 폴링 모드 사용 | 읽기/쓰기 |
| 17 | AutoEOI | 인터럽트 배달 시 암시적 EOI를 수행해야 하는지 설정 | 읽기/쓰기 |
| 16 | 마스크 | SINT가 마스킹되었는지 설정 | 읽기/쓰기 |
| 15:8 | RsvdP | 예약된 값은 보존해야 합니다. | 읽기/쓰기 |
| 7:0 | Vector | 인터럽트 벡터 | 읽기/쓰기 |
EOM 레지스터
게스트가 EOM(메시지 끝) 레지스터에 쓰면 하이퍼바이저가 가상 프로세서와 연결된 내부 메시지 버퍼 큐를 검색합니다. 메시지 버퍼 큐에 큐에 대기된 메시지 버퍼가 포함된 경우 하이퍼바이저는 메시지를 배달하려고 시도합니다. SIM 페이지를 사용하도록 설정하고 SINTx에 해당하는 메시지 슬롯이 비어 있으면 메시지 배달에 성공합니다(즉, 헤더의 메시지 유형이 HvMessageTypeNone으로 설정됨). 메시지가 성공적으로 전달되면 해당 내부 메시지 버퍼가 큐에서 제거되고 무료로 표시됩니다. 해당 SINTx가 마스킹되지 않으면 에지 트리거 인터럽트가 전달됩니다(즉, IRR의 해당 비트가 설정됨).
이 레지스터는 게스트가 메시지에 대해 "폴링"하는 데 사용할 수 있습니다. 사용하지 않도록 설정된 SINTx(즉, 마스킹됨)에 대한 메시지 큐를 드레이닝하는 방법으로 사용할 수도 있습니다.
메시지 큐가 모두 비어 있으면 EOM 레지스터에 대한 쓰기는 no-op.
EOM 레지스터에서 읽기는 항상 0을 반환합니다.
| 비트 | 분야 | Description | Attributes |
|---|---|---|---|
| 63:0 | RsvdZ | 쓰기 전용 트리거 | 작성하다 |