根据我的理解,操作系统内核有权执行一些其他程序无法执行的低级操作,例如一些低级别中断或处理多个内核。
是否有某种特殊说明可以启用此功能?
答案 0 :(得分:2)
这只是部分答案。
主要权限分离与地址空间有关:当以“管理员模式”运行时,CPU可以访问所有地址空间。 OS内核以此模式运行。用户进程没有。
这就是为什么,例如,32位Linux主机上的用户进程只有3 GB的地址空间可供使用,而理论上可用的地址空间是2 ^ 32 = 4 GB:“搁浅”的千兆字节只能访问由内核,内核将其数据结构映射到这个千兆字节。尝试访问该地址空间的用户进程将看到SIGBUS。这个边界也存在于64位机器上,但非常遥远。
在管理员模式下,正在运行的代码(内核)也可以修改地址空间的布局:例如,它可以表示它可以呈现视频卡的PCI地址空间或DMA地址空间在非监督模式下,您的设备,串行端口等对其他正在运行的代码(进程)完全不可见。
内核可以通过系统调用授予对低级操作(例如磁盘写入)的访问权限。触发系统调用时,内核将以管理员模式代表调用它的进程执行系统调用。系统调用完成或中断后,进程将以自己的权限恢复执行。
当今处理器中所有这些逻辑的一个核心部分是MMU(内存管理单元),因为这是允许地址空间重写的组件 - 这就是为什么你可以拥有超过4 GB RAM的32位机器,如果MMU不可用,这是不可能的事情。
答案 1 :(得分:0)
因为OS在启动和h / w初始化时将自己设置为最高权限所有者。操作系统在MMU硬件的帮助下完成此操作。例如,在基于x86的处理器中,有两种h / w提供保护的机制
<强>分割强>:
分段使您的内存看起来像段,并且您可以为这些段分配从0到3的权限级别(PL),0是最高权限。在启动和启动时初始化h / w你可以分配内核代码段0 PL,一旦它开始执行,用户进程内核就会分配PL 3。如果用户代码尝试跳转到更多特权内核代码,则h / w将生成一般保护(GP)故障(中断#13),这将执行内核代码,然后它可以选择终止用户进程。类似地,有lidt
,lgdt
等指令只能在0 PL中执行,如果用户代码尝试执行它们将生成GP错误。分段还解决了以下问题:
寻呼:
分页将内存划分为大小(4KB / 2MB / 4MB / 1GB)的页面,h / w的分页支持解决了以下问题:
如果用户代码试图违反操作系统设置的任何分页规则,h / w会生成页面错误,执行内核代码(因为操作系统在初始化中断/故障/异常处理程序时设置了这个),这样内核可以决定如何处理用户流程。
分段和分页都是更多涉及的主题,但这个答案仅在您的问题的上下文中。
答案 2 :(得分:-2)
理论上:是的,有大量的注入甚至是黑客攻击,你甚至可以使用低级指令集,但实际上这是不可能的,因为有太多的资源会在某个时候锁定某些区域。
使用标准语言和标准库,您很可能无法访问100%的硬件,因为这些设计的方式 - 消除关键和可能危险的决策是使复杂(和强大)框架成为可能的原因。使用OSS操作系统,您可能能够获得完全控制权,但最终您将面临同样的问题:内核操作与您自己的操作交叉,而无需大量修改内核将无法在任何时候获得完全控制。
如果您希望100.0%控制您的硬件,您将被迫编写自己的引导加载程序,内核和操作系统 - 通过Opcode级别的硬件指令,您可以操作几乎所有内容;使用任何编程语言(甚至是ASM)都会限制你。