从内存加载寄存器而不是触发页面错误时是否可以"中止"?

Ian*_*ose 1 performance x86 cpu-architecture page-fault

我正在考虑' 在"走一个大图 "时最小化页面错误(和TLB错误)

' 如何知道指针是在物理内存中还是会触发Page Fault?'是从另一方面看问题的相关问题,但没有解决方案.

我希望能够将一些数据从内存加载到寄存器中,但如果内存当前被分页,则加载中止而不是出现页面错误.我需要代码在Windows和Linux上的用户空间中工作,而无需任何标准权限.

(理想情况下,我还想中止TLB故障.)

Mar*_*oom 5

TXT-NI功能的RTM(受限事务存储器)部分允许抑制异常:

必须暴露给软件的事务区域中的任何故障或陷阱都将被抑制.事务执行将中止,执行将转换为非事务执行,就好像从未发生过故障或陷阱一样.
[...]
同步异常事件(#DE,#OF,#NP,#SS,#GP,#BR,#UD,#AC,#XM,#PF,#NT,#TS,#MF,#DB在事务执行期间发生的#BP/INT3)可能导致执行不以事务方式提交,并且需要非事务性执行.这些事件被抑制,好像它们从未发生过一样.

我从来没有使用RTM,但它应该是这样的:

xbegin fallback

  ; Don't fault here

xend

; Somewhere else
fallback:
  ; Retry non-transactionally
Run Code Online (Sandbox Code Playgroud)

请注意,由于多种原因可以中止事务,请参阅英特尔手册第1卷的第16.8.3.2章.另请注意,RTM并不普遍.

除了RTM,我无法想到另一种抑制负载的方法,因为它必须返回一个值或最终发出中止条件(这与#PF相同).