Operating system 谁来决定哪些指令要保留特权?是硬件制造商还是操作系统开发者

Operating system 谁来决定哪些指令要保留特权?是硬件制造商还是操作系统开发者,operating-system,cpu-architecture,processor,machine-instruction,Operating System,Cpu Architecture,Processor,Machine Instruction,我读到在我们的系统中有一些特权指令可以在内核模式下执行。但我无法理解是谁让这些指令具有特权。是硬件制造商在模式位的帮助下将一些有害指令硬连线为特权指令,还是使指令具有特权的操作系统设计者使其仅在特权模式下工作。内核与用户模式,以及哪些指令在用户模式下不被允许,是ISA的一部分。这是在硬件上烤出来的 CPU架构师通常非常清楚操作系统需要做什么,并且希望阻止用户空间做什么,因此这些选择至少使特权级别成为可能,即用户空间不可能简单地接管机器 但这并不是全部情况:在某些ISA上,如x86,后来的ISA

我读到在我们的系统中有一些特权指令可以在内核模式下执行。但我无法理解是谁让这些指令具有特权。是硬件制造商在模式位的帮助下将一些有害指令硬连线为特权指令,还是使指令具有特权的操作系统设计者使其仅在特权模式下工作。

内核与用户模式,以及哪些指令在用户模式下不被允许,是ISA的一部分。这是在硬件上烤出来的

CPU架构师通常非常清楚操作系统需要做什么,并且希望阻止用户空间做什么,因此这些选择至少使特权级别成为可能,即用户空间不可能简单地接管机器


但这并不是全部情况:在某些ISA上,如x86,后来的ISA扩展添加了控制寄存器标志位,让操作系统选择其他指令是否具有特权。在x86上,这是为可能泄漏有关通道的信息或使定时侧通道更容易的指令而做的

例如,
rdpmc
(读取性能监视器计数器)只能在内核特别启用的情况下从用户空间使用。默认情况下,可以从用户空间读取(读取时间戳计数器),但CR4中的TSD(时间戳禁用)标志可以将其使用限制为priv级别0(内核模式)。阻止用户空间使用高分辨率定时是防御定时侧通道攻击的一种强力方式

另一个x86扩展防止内核地址泄漏,使内核ASLR更加保密;CR4.UMIP(用户模式指令预防)禁用读取GDT虚拟地址的指令,如
sgdt
首先,这些指令对用户空间基本上是无用的,而且与
rdtsc不同,rdtsc总是可以轻松地获得特权。

启用此扩展的Linux内核选项:

用户模式指令预防(UMIP)是较新英特尔处理器中的一项安全功能。如果启用,如果在用户模式下执行SGDT、SLDT、SIDT、SMSW或STR指令,则会发出一般保护故障。这些指令不必要地公开有关硬件状态的信息

绝大多数应用程序不使用这些指令。对于极少数这样做的人,软件仿真在特定情况下以受保护和虚拟8086模式提供。仿真结果是虚假的


为IDT/GDT/LDT(例如)设置新地址当然是一条特权指令;这些让你接管了机器。但在内核ASLR成为一种东西之前,没有任何理由阻止用户空间读取地址。它可能位于一个页面中,该页面的页表条目仅设置为内核,从而阻止用户空间使用该地址进行任何操作。(…直到熔毁使得用户空间可以使用推测性侧通道从缓存中处于热状态的纯内核页面读取数据。)

意味着特权指令是ISA的一部分。但是操作系统可以选择一些其他指令作为特权。如果启用,操作系统还可以在用户模式下提供一些特权指令。@divyami:只有在ISA允许操作系统选择的情况下。大多数指令在ISA中被固定为特权指令或非特权指令。我现在明白了。谢谢彼得的帮助。