百科问答小站 logo
百科问答小站 font logo



计算机怎么知道用户态和内核态? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

保护模式下CS寄存器的低两位决定了当前CPU的特权等级:

这部分虽然是显式的写在CS的值里的,但实际上是隐藏在段寄存器的隐藏部分的。

最开始的时候CS值是引导程序给的,引导程序置上PE位以后,代码还在16位模式下,CPU会给当前的CS寄存器隐藏部分添加一个RPL,这个RPL是0,之后等跳转到保护模式以后,由代码控制自己选择到那个RPL上跑。

如果自己写一个引导程序,到保护模式以后,不加准备直接切到R3级别的CS的话,那么后面的代码就是R3的权限了。

你懂机器码就一定能写出R0的代码吗?不一定。

你的代码是被OS的加载器加载的,加载的过程中,CS的初始值是确定的,如果操作系统没给你R0的权限,你的代码必然要在R3上执行,在保护模式下,R3状态下的指令想通过MOV来改变CS是有可能触发异常的,而OS能决定你的动作是否能触发异常。

所以如果OS把这些路否封死了,你的代码只能老老实实的在R3上执行。

我前面说了,引导程序可以在进入保护模式后直接把自己的代码设置成R3权限,这是没问题的,但如果切保护模式之前,没把该准备的东西准备好,那么你的代码可能就一直在R3模式下跑了,想从R3到R0是没门的。

另外,实模式下操作系统处于R0状态。

根据评论里的补充,前面有一块我说的不太正确,RPL虽然是在CS里,但CS只是个index selector,RPL实际保存的地方是段寄存器的隐藏部分,这部分是不可见也不能直接修改的。




  

相关话题

  Linux 的核心思想是什么? 
  安卓是否在逐渐走向闭源,为什么我国手机公司却仍不开发自己的系统呢? 
  半个月可以写出一个电脑操作系统吗? 
  Linux 为什么还要坚持使用宏内核? 
  在国内华为的鸿蒙系统能否在 10 年内替换 Windows 系统? 
  Windows 辨别文件为什么一定要扩展名?感觉 Linux 上要求就没有这么高? 
  假如世界上只有Windows和Android,从来没有iOS和macOS,生活会不会变得更简洁一点? 
  哪种操作系统可以兼容另一个操作系统的应用,但又不"基于"它? 
  如何评价华为发布的鸿蒙OS 2.0需要导入安卓部分SDK等功能? 
  为什么 iOS 来源于 FreeBSD 没有人讨论,但是鸿蒙使用部分来安卓代码,却被人一直在攻击? 

前一个讨论
有设计成这样的地铁站吗?
下一个讨论
青藏铁路西格段经历过哪些提速改造?现在的限速是多少?西格段在近期(五年内)能够开行和谐号动车组列车吗?





© 2024-06-10 - tinynew.org. All Rights Reserved.
© 2024-06-10 - tinynew.org. 保留所有权利