gpt4 book ai didi

operating-system - 模式位在哪里?

转载 作者:行者123 更新时间:2023-12-03 20:10:23 25 4
gpt4 key购买 nike

我刚刚在Silberschatz,p。的“操作系统概念”中阅读了此内容。 18:


称为模式位的位已添加到计算机的硬件中
指示当前模式:kernel(0)或user(1)。通过模式位,
我们能够区分代表执行的任务
操作系统和代表该操作系统执行的操作系统
用户。


模式位存储在哪里?

(这是CPU中的寄存器吗?您可以读取模式位吗?据我所知,CPU必须能够读取模式位。它如何知道哪个程序将模式位0设为0?特殊地址获取模式位0?谁设置模式位/如何设置?

最佳答案

请注意,您的问题在很大程度上取决于CPU的版本。尽管这种情况很少见,但您可能会遇到某些处理器,其中甚至没有这种用户级别/内核级别的概念。


cs寄存器还有另一个重要功能:它包含一个2位
字段,用于指定CPU的当前特权级别(CPL)。的
值0表示最高特权级别,而值3表示
最低的。 Linux仅使用级别0和3,分别是
称为内核模式和用户模式。


(摘自“了解Linux内核3e”的第2.2.1节)
另请注意,正如您可以清楚地看到的那样,这取决于CPU,并且会从一个CPU变为另一个CPU,但是通常来说,这个概念仍然有效。


谁设定的?通常,内核/ cpu和用户进程无法更改它,但让我在这里进行解释。

这是一个过分的简化,请不要原谅
假设已经加载了内核,并且第一个应用程序刚刚启动(第一个外壳程序),内核加载了该应用程序要启动的所有内容,设置了cs寄存器中的位(如果您正在运行x86),然后跳转到代码壳程序。

在此上下文中,shell将继续执行其所有指令,如果进程包含某些特权指令,则cpu将获取该指令并将不执行该指令。它将给出一个异常(硬件异常),该异常告诉内核有人试图执行特权指令,并且此处内核代码处理该作业(CPU将cs设置为内核模式并跳转到某个已知位置以处理此类错误) (也许终止该过程,也许还有其他事情)。

那么,一个进程如何做一些特权呢?例如与某个设备通话?
这里是系统调用;内核将为您完成这项工作。

发生了以下情况:
您可以在某些寄存器中设置所需的内容(例如,您要设置要访问的文件,文件位置为x,正在访问以进行读取等)(内核文档会告诉您),并且然后(在x86上)您将调用int0x80指令。

这会中断CPU,停止您的工作,将模式设置为内核模式,将IP寄存器跳转到具有为文件IO请求提供服务并从那里移出的代码的已知位置。
数据准备就绪后,内核会将这些数据设置在您可以访问的位置(内存位置,注册;这取决于CPU /内核/您所请求的内容),将cs标志设置为用户模式,然后跳回到您的指令位于it int 0x80指令旁边。

最终,每当发生切换时就会发生这种情况,内核会得到一些通知,从而使CPU终止当前的指令,更改CPU的状态并跳转到处理该事件的代码所在的位置。粗略地说,上面解释的过程适用于内核模式和用户模式之间的切换。

关于operating-system - 模式位在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com