百科问答小站 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实际保存的地方是段寄存器的隐藏部分,这部分是不可见也不能直接修改的。




  

相关话题

  现在鸿蒙操作系统讨论很热,大家认为为什么当年微软没有搞起来手机操作系统呢? 
  Unix网络编程里的阻塞是在操作系统的内核态创建一个线程来死循环吗? 
  如果现在微软重写Windows会怎么样? 
  为什么win10不出一个mini.iso版本的镜像,安装过程实时在线下载? 
  为什么WinXP的驱动无法用于Win7、Vista,但是Win7,Vista驱动可用于Win10? 
  我听说以前的系统没有图形界面,那他们是用 C# 等语言直接敲代码吗? 
  鸿蒙 OS 预计 2021 年底连接设备将突破 3 亿台,意味着什么?将会带来哪些改变? 
  如何评价微软官宣将会在 6.24 发布下一代 Windows 操作系统的信息? 
  电脑如何自动开启程序并自动输入账号密码登陆?(PS:不借助外界软件,公司有限制) 
  如何看待 Google 的新操作系统 Fuchsia? 

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





© 2025-02-21 - tinynew.org. All Rights Reserved.
© 2025-02-21 - tinynew.org. 保留所有权利