- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道CPU有专门的寄存器来跟踪CPU的运行模式。我以为“保护环”和“CPU模式”是一回事,但是当我在维基百科上阅读有关“保护环”的文章时,我对真正的“保护环”是什么感到困惑。我的困惑点是维基百科文章中的这些行:
Ring protection can be combined with processor modes (master/kernel/privileged/supervisor mode versus slave/unprivileged/user mode) in some systems. Operating systems running on hardware supporting both may use both forms of protection or only one.
那么,“保护环”是操作系统级别的抽象吗?“保护环”和“CPU 模式”有什么区别?任何进一步的解释表示赞赏。
最佳答案
Are “Protection rings” and “CPU modes” the same thing?
这主要取决于 CPU 设计者/制造商如何定义他们的术语。
对于 80x86;该术语被定义为有多种 CPU 模式(实模式、保护模式、长模式等),并且一些 CPU 模式具有不是 CPU 模式的特权级别。但是,如果他们愿意,英特尔可以将其定义为“保护模式有 4 个子模式,每个子模式一个”。
对于其他 CPU,术语可能被定义为“管理员模式”和“用户模式”(可能还有其他模式——“虚拟化模式”、“IRQ 模式”等)。 ARM 像这样定义他们的术语(但如果他们愿意的话,他们可以更像“CPU 只有 2 种模式(正常模式和管理程序模式),其他一切都是别的东西(特权级别)”)来定义他们的术语。
So, is "Protection rings" an OS level abstraction? What's the difference between "Protection rings" and "CPU modes"?
一般来说,保护环的概念(将 OS 分成层并使层具有不同的权限/特权)比 80x86(至少与 1960 年代的 multics 一样古老,但可能更早并且可能追溯到 batch 1950 年代的处理系统),而 80x86 保护模式的设计仅仅是一个预先存在的概念的实现。
但是,没有现代操作系统(据我所知)使用这个概念(例如“所有用户代码都在一个保护域中”);相反,他们使用更多的隔离(例如“每个单独的进程在其自己的隔离保护域中”),这使得拥有超过 2 个特权级别(一个用于控制隔离,另一个用于控制彼此隔离的所有内容)变得毫无意义.
关于operating-system - "Protection rings"和 "CPU modes"是一回事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59812595/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎离题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a minim
家庭作业 必须同时重载 operator>(istream &in, Complex &value); public: // constructor Compl
这个问题在这里已经有了答案: What are the basic rules and idioms for operator overloading? (8 个答案) 关闭 5 年前。 有什么区别
这是文档中一个不清楚的示例,使用此运算符:http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#at 最佳答案 请注
我不明白这种行为: > sort([1,2,3,4]) ~~ sort([1,2,3,4]) False 你能给我解释一下吗? 为什么这两个列表(显然是相等的)根据 Perl 6 不相等。 更新 有趣
我正在尝试将 Ø 设为逻辑否定运算符。 ¬ True; multi sub prefix: ($n) { return not $n; } 当我运行上面的程序时,它返回以下错误: $
class Port { private: char * brand; char style[20]; // i.e., tawny, ruby, vintage int bo
早上好。我有一些问题。我有这些字段: name: "Mike", city: "NY", address: "something", pets: ["dog", "cat"] 我创建了索引 db.pe
我有以下代码使用 Javascript Webcrypto-API 解密 AES 加密数据,但它会导致“OperationError”并显示消息“操作因操作特定原因而失败”: function loa
我制作了一个自定义 Airflow 操作符,这个操作符接受一个输入,这个操作符的输出在 XCOM 上。 我想要实现的是使用一些定义的输入调用运算符,将输出解析为可在分支运算符内部调用的 Python,
int a = 1; a += ++a; cout << a << endl; // 4 int a = 1; a += a++; cout << a << endl; // 3 为什么这两个例子有不
我有这个队列的实现: #include using namespace std; template struct elem_q { T inf; elem_q* link; }; template
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我对 C++ 中的运算符重载有疑问。我有代表复数的结构,我正在重载运算符,所以我可以用复数进行计算。Visual Studio 2012 给我这个错误:1 IntelliSense:没有运算符“!=”
我正在尝试创建一个 BoolArray 类,它表示一个 bool 值数组,而不是为每个 bool 变量保存 1 个 bool 值。它使用 1 个字符变量来表示使用位的 8 个 bool 值,并节省内存
我类有 2 个运算符有点问题。 我的类(class)宣布: template class MyMap{ keyType keys[MAX]; valueType values[MAX
我有类的迭代器模板和用于 for 语句的类。 template class Itr2 { public: Itr2() { } ~Itr2() { } typedef t
Section 7.2 Enumeration declarations 没有说明任何关于 operator!=() 和作用域的 operator==()枚举。但是下面的代码可以编译。 #includ
我需要将一个 int 序列化到本地文件并将其读入内存。这是代码 #include "stdafx.h" #include #include using namespace std; int _tm
operator += 这样定义对吗?! void operator +=(const BigNumber& other) { *this=(*this) + other; } 在这样的类中:
我是一名优秀的程序员,十分优秀!