0 引言

本文是在linux系统编程中所沉淀。主要从代码层面出发,直觉感受CPU特权级别的作用,然后初步讲解CPU特权级别的概念。

1 反汇编代码

本部分从两个代码示例出发。

反汇编代码访问RAX寄存器的内容,其代码示例如下

#include <iostream>
#include <cstdlib>
#include <cstdint>int64_t get_rcx() {asm volatile("push %rcx\n\t""movq $10, %rcx\n\t""movq %rcx, %rax\n\t");asm volatile("pop %rcx");
}int main() {std::cout << "Hello, inline assembly: [RCX] = " << get_rcx() << "\n";return 0;
}

上述输出结果为

Hello, inline assembly: [RCX] = 10

反汇编访问CR0控制寄存器,其代码如下

int64_t get_cr0() {asm volatile ("movq %cr0, %rax");
}int main() {std::cout << "Hello, inline assembly: [CR0] = " << get_cr0() << "\n";return 0;
}

其输出结果如下

Segmentation fault (core dumped)

那么,为什么应用程序访问cr0控制寄存器会coredump呢?

2 CPU特权级

出于操作系统及其控制的硬件资源的安全性、稳健性和正确性等原因,所有现代 CPU 都包含特权级别的概念。

现代 CPU 将支持至少两个特权级别或模式,通常由如下两部分构成:

  • 特权(Supervisor)
  • 用户

代码(即机器指令)在 CPU 上以给定的特权级别或模式运行。 设计和实现操作系统的人可以自由地利用处理器特权级别。 这正是现代操作系统的设计方式。 下表总结了通用 CPU 特权级别

权限级别或模式名称

特权级别

 目的

术语

特权

内核代码跑在此层

内核空间

用户

用户代码跑在此层

用户空间

下面以x86架构讲解CPU的特权级别(ring), 英特尔处理器支持四种特权层级,分别为

  • ring0
  • ring1
  • ring2
  • ring3

上图箭头方向 特权级别逐渐升高 ,ring0特权级别最高,内核代码运行在此;ring3特权级别最低,应用程序在此。

为了进一步理解CPU特权级别,需要明白当前特权级别的概念,也即CPL。

当前特权级别 (CPL) :处理器当前执行代码的特权级别。

譬如,在一个处理器上有如下两条指令

  • 机器指令a有特权级别(Ring0)
  • 机器指令b有用户特权级别(Ring3)

因此,对于执行这些机器指令的正在运行的应用程序,会出现下表所示现象

机器指令

允许特权

CPL

是否work

a

特权(0)

0

3

b

用户(3)

0

3

故可知,高特权级可以使用低特权层级,而低特权层级无法运行高特权层级的指令。

故在第一部分会出现CR0寄存器时,出现coredump。

4 总结

本文针对cpu特权层级进行了初步讲解,通过本文可以初步明白cpu特权级别(内核态,用户态)相关概念。

初步探索CPU特权级别相关推荐

  1. Intel X86 CPU之特权级别

    Intel的X86处理器具有四个特权级别,分别是RING0.RING1.RING2.RING3,RING0层拥有最高权限,依此向下RING3层即拥有最低的权限. 应用程序工作在RING3层,就只能访问 ...

  2. 电子游戏理论基础知识的初步探索(转)

    电子游戏理论基础知识的初步探索(转)[@more@] 抛砖引玉,请读者指正. 一.游戏(Game) 约翰?赫伊津哈和弗里德里?希格奥尔格?容格尔在<游戏的人>(1938年)和<玩游戏 ...

  3. Cortex-M3的工作模式和特权级别

    文章目录 1 Cortex-M3的工作模式和特权级别 1.1 工作模式和权限级别分类 1.2 特权级别的切换 1 Cortex-M3的工作模式和特权级别 1.1 工作模式和权限级别分类 处理器的工作模 ...

  4. python socket发送数组_利用pyprocessing初步探索数组排序算法可视化

    [经过两次更新,功能基本完成]最终效果请直接下拉到最后一个视频观看 背景说明 这篇文章旨在初步探索利用pyprocessing的强大的可视化功能,以及pyprocessing和Ipython之间的本地 ...

  5. Cortex-M3操作模式和特权级别

    Cortex-M3支持两种操作模式,还支持两种特权级别: 两种模式为handler模式和线程(thread)模式,这两种模式是为了区别正在执行代码的类型:handler模式为异常处理例程的代码:线 ...

  6. 带你探索CPU调度的奥秘

    摘要:本文将会从最基础的调度算法说起,逐个分析各种主流调度算法的原理,带大家一起探索CPU调度的奥秘. 本文分享自华为云社区<探索CPU的调度原理>,作者:元闰子. 前言 软件工程师们总习 ...

  7. Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

    Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索 简介 在上篇文章中,了解了连接池的应用场景和本地运行了示例,本篇文章中,我们尝试来探索下Alibaba Druid数据库连接池的整 ...

  8. Redis主从复制架构初步探索 http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11

    Redis主从复制架构初步探索 目录http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11 ·  一.主从复制架构简介 ·  1.1 源于关系数据库的读写分离 ...

  9. 企查查app sign算法破解初步探索

    企查查app sign算法破解初步探索 之前有说过企查查的sign的解密,但这次是企查查app的sign算法破解,目前是初步进程. 目前我们需要做查壳,具体方法可以百度搜索,企查查用的360加固,很简 ...

最新文章

  1. SpringSecurity学习:1(第一个SpringSecurity项目)
  2. 计算机系统验证课件,回顾性验证及再验证简介(ppt 42页)
  3. python【力扣LeetCode算法题库】2-两数相加
  4. Python知识:opencv实现的直方图
  5. OpenGL HDR渲染
  6. 一.JavaScript基础
  7. 简单的ViewPager了解Scroller类
  8. 字节字符区别Java_【JAVA基础】字符数组与字节数组的区别
  9. 【PAT - 甲级1017】Queueing at Bank (25分)(优先队列,模拟)
  10. javascript浮点数学习总结之0.1+0.2
  11. [debug] 延长Linux中sudo密码在终端的有效时间
  12. 帧中继多点子接口下配置OSPF
  13. 一篇文章了解数据库系统
  14. 数据分析 超市条码_深圳超市通道摆闸常见故障解决|指示灯|摆闸|通道|限位
  15. 改变this指向的方法
  16. 如何让新建网站被搜索引擎快速收录
  17. 光猫是什么?光纤猫的工作原理及应用范围介绍!
  18. 「TJOI 2018」碱基序列
  19. Codeforces Round #817 (Div. 4)
  20. python爬虫导入自己事先定义好的配置文件,在服务器运行出现ImportError: No module named 'a005_BanGuMi_spider_subject' 错误

热门文章

  1. linux pppd-GPRS和以太网同时在线,解决拨号默认网关
  2. wifidog php,wifidog-ng
  3. 安利一个学习数据结构的宝藏网站
  4. 企业为什么要开通银企直联_胜意费控云 | 什么是银企直联,它有什么作用?
  5. Golang学习笔记(九)for循环语句
  6. 直接选择排序(c语言)
  7. 掘金量化—Python SDK文档—5.API 介绍(2)
  8. Android安卓获取ID号,本机号码,手机型号,系统版本
  9. win7发送到桌面快捷方式丢失解决方案
  10. linux下怎样快速截图工具栏,ubuntu中截图工具及快捷键设置