大家可能听说过某个代码需要运行在ring 0的说法。但是ring 0究竟是什么,今天就给大家介绍下。


权限控制

我们都知道计算机中运行着许多的软件,有些软件是和硬件打交道的,比如驱动软件,操作系统软件,有些软件只是运行在操作系统之上的,比如浏览器,文本编辑软件等。

为什么要这样设计?

这是为了控制运行软件的权限,让一些特定的软件才能执行某些“危险”的行为,比如读写特定的内存等。

这里就引申出了我们常见的用户态,内核态的概念。那些涉及到计算机硬件资源的操作,就运行在内核态。

比如我们写一个读写文件的软件,我们在软件中进行字符串的拼接,处理,都是运行在用户态。但是当你想要把这些字符串写入文件时,只能通过系统提供的库函数的调用,在内核态“帮”你完成。

using (var file = new StreamWriter(@"C:\htx.txt"))
{file.WriteLine("黄腾霄"+"好瘦");
}

使用这种权限控制的好处在于计算机用户的软件不会危及系统的安全,只有稳定的系统软件才能够操作系统的关键内存等硬件设备。从而最大程度保证系统运行的稳定。

Ring

可以用下面这张图来表示这种权限关系

从内到外依次使用0-3标识,这些环(ring)。越内部的圈代表的权限越大。内圈可以访问,修改外圈的资源;外圈不可以访问,修改内圈的资源。

为什么会有4个ring?因为x86的cpu,在Data segment selector中使用了2个bits来描述权限。

我们最常见的是ring 0(内核态),和ring 3(用户态)。因为例如windows和unix这些常见的操作系统,只提供了两种权限模式,所以并没有完全使用整个ring架构。

所以我们在一般情况下,完全可以使用ring 0 表示内核态,ring 3表示用户态。


参考文档:

  • Protection ring - Wikipedia
  • Call gate (Intel) - Wikipedia
  • 系统调用 - 维基百科,自由的百科全书
  • 全局描述符表 - 维基百科,自由的百科全书
  • CPU Rings, Privilege, and Protection - Many But Finite

本文会经常更新,请阅读个人博客原文: https://xinyuehtx.github.io/ ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。

什么是ring0-ring3相关推荐

  1. ring0 ring3 kernel driver

    intel cpu的权限访问控制:ring0 ~ ring5. window.linux操作系统都只用了ring0,ring3,对应内核态和用户态. 驱动程序工作在内核态,没有main函数入口,而应用 ...

  2. 全虚拟化和半虚拟化的区别 cpu的ring0~ring3又是什么概念?

    ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之-- 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断 ...

  3. 《翻译》Intel 64 与 IA-32 架构软件开发者手册卷1翻译

    <前言> 翻译自官方的PDF版手册,可以从下述站点下载英文原版: http://www.intel.com/content/www/us/en/processors/architectur ...

  4. 20年前的程序员什么样?从版主到架构大牛的成长之路

    栏目导语:20年前,人们不会想到,衣食住行在手机屏幕上动动手指就可以解决:银行和社区都可以用生物特征进行加密:川流不息的车流中,自动驾驶成为了可能:民生业务架设在云端,互联网的速度则深植在5G基站.而 ...

  5. linux 内核空间与用户空间 简介

    本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space). 内核空间和用户空间 对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4 ...

  6. 关于滴水的VT调试器

    关于滴水的VT调试器 by 海风月影 论坛上今天吵的比较火热,主要是关于滴水的VT调试器,很多人不了解这个东西,我对Intel的VT技术略有了解,所以我来简单的介绍一下. 第一,什么是VT技术 VT是 ...

  7. KVM 虚拟化原理探究--启动过程及各部分虚拟化原理

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  8. VT-x,VT-d简介

    虚拟化分软件虚拟化和硬件虚拟化,没有VT-x也能虚拟化,很老的机器都可以跑VMWare,因为使用了软件虚拟化的方式,不过运行效率肯定没有硬件虚拟化的高: 硬件虚拟化分两种:CPU层和IO层/芯片层,在 ...

  9. 不同特权级代码段之间的跳转

    1.特权级 2.一致代码段和非一致代码段 3.DPL.RPL.CPL分别代表的含义,存储在什么位置,以及它们之间的关系 4.不同特权级数据段之间的访问规则 5.不同特权级代码段之间的转移 6.代码段之 ...

  10. Linux HOOK

    0 - 前言 1 - 绪论 2 - 介绍 2.1 - 什么是中断(interrupt)? 2.2 - 中断和异常(exception) 2.3 - 中断向量 2.4 - 什么是IDT? 3 - 异常 ...

最新文章

  1. PyTorch: 序列到序列模型(Seq2Seq)实现机器翻译实战
  2. 1503 - A PRIMARY KEY must include all columns in the table's partitioning function
  3. SSVEP脑机接口及数据集处理
  4. FJUT OJ 2466 T^T的叛乱计划(组合数学)
  5. 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架
  6. iPad+MacBook+安卓手机的图书馆工作方案!超高效率!堪比移动工作站!
  7. 进击的UI------------网络判断
  8. 一本书让你懂得人生的价值
  9. IE8不兼容你的网页 怎么办? - 简单开启兼容模式
  10. vue动态禁用控件绑定disable
  11. 基于Udp的Socket网络编程
  12. Web 3.0 宣言:为什么 Web 3.0 至关重要
  13. IS-IS详解(八)——深入探究IS-IS DIS选举机制
  14. ASP.NET MVC 在项目中使用面包屑导航
  15. python设置散点图点的大小_python_matplotlib分别使用plot()和scatter()画散点图,以及如何改变点的大小...
  16. 混迹职场N年后,人过中年,如何不被社会所淘汰?
  17. Windows-Server2003 关闭IE增强的安全配置堵塞方法
  18. TI公司TMS封装与引脚对应关系
  19. eclipse一次性开启多个工程
  20. 【Go】用 Go 访问 Redis

热门文章

  1. 04 vue3 scss 组件component kepp-alive缓存子组件 nextTick
  2. pythonend输出最后没有逗号_python不换行之end=与逗号的意思及用途
  3. agx上搭建ros2
  4. unity鼠标固定在屏幕中间_unity3D技术之屏幕内跟随鼠标移动
  5. Unity关于屏幕适配留黑边的做法
  6. 【QCM2150】WCN3680 WFA认证11ac AP 4.2.23测试FAIL
  7. pandas计算店家的每日营业额示例
  8. 热烈祝贺“UTONMOS第一届公会会长圆桌会议”圆满举行
  9. C++语言程序设计(郑莉)02 C++基本数据类型和表达式
  10. 富兰克林的13条人生箴言