[rCore学习笔记 015]特权级机制

写在前面

本随笔是非常菜的菜鸡写的。如有问题请及时提出。

可以联系:1160712160@qq.com

GitHhub:https://github.com/WindDevil (目前啥也没有

官方文档

仍然是一上来就丢出来的官方文档.

只摘抄了我觉得有意思的部分:
实现特权级机制的根本原因是应用程序运行的安全性不可充分信任。
由于二者通过编译器形成一个单一执行程序来执行,导致即使是应用程序本身的问题,也会让操作系统受到连累,从而可能导致整个计算机系统都不可用了。

包括之前做MCU开发的时候,实际上都是这样的,也很难理解为什么可以做到应用是应用,操作系统是操作系统,之前使用RT-ThreadMCU开发的过程中,如果出现某一个线程出现问题, 貌似 还是会出现整体的问题.包括能不能分别编译,能不能实现安装与卸载都是我对操作系统(Linux,windows)的刻板印象.

解决问题的方法:
应用程序不能访问任意的地址空间(这个在第四章会进一步讲解,本章不会涉及)
应用程序不能执行某些可能破坏计算机系统的指令(本章的重点)

有一部分指令不能在应用程序中执行,就可以保证操作系统出现问题吗?怎么体现呢?体现之后,那怎么实现应用程序的功能呢?

具体实现指令分级的方法:
处理器设置两个不同安全等级的执行环境:用户态特权级的执行环境和内核态特权级的执行环境。且明确指出可能破坏计算机系统的内核态特权级指令子集,规定内核态特权级指令子集中的指令只能在内核态特权级的执行环境中执行。处理器在执行指令前会进行特权级安全检查,如果在用户态执行环境中执行这些内核态特权级指令,会产生异常。
为了让应用程序获得操作系统的函数服务,采用传统的函数调用方式(即通常的 call 和 ret 指令或指令组合)将会直接绕过硬件的特权级保护检查。为了解决这个问题, RISC-V 提供了新的机器指令:执行环境调用指令(Execution Environment Call,简称 ecall )和一类执行环境返回(Execution Environment Return,简称 eret )指令。

操作系统要做什么:
硬件具有了这样的机制后,还需要操作系统的配合才能最终完成对操作系统自身的保护。首先,操作系统需要提供相应的功能代码,能在执行 sret 前准备和恢复用户态执行应用程序的上下文。其次,在应用程序调用 ecall 指令后,能够检查应用程序的系统调用参数,确保参数不会破坏操作系统。

这张图就很明了了,把原来的执行环境栈从特权级的架构去看待,那么现在只需要在SBIABI两部分做编程实现上述功能就可以了:

这里也是比较重要的一点:
执行环境的另一种功能是对上层软件的执行进行监控管理。监控管理可以理解为,当上层软件执行的时候出现了一些异常或特殊情况,导致需要用到执行环境中提供的功能,因此需要暂停上层软件的执行,转而运行执行环境的代码。

把一部分代码放在操作系统里,这样就实现了ABI,每次要执行为好到操作系统的操作的时候都需要操作系统亲自执行,这样如果出现错误,那么一些错误就会被阻止.

因为M模式的内容是在SBI里边的,所以这一部分的内容专注于S模式和U模式的特权级切换.

可以看到,为了执行一部分需要在内核中使用的功能的时候就需要进行特权级切换,这里官方文档和常规控制流进行对比,把入校流程称为 异常控制流

  1. 上层软件执行过程中出现了一些异常或 特殊情况 , 需要用到执行环境中提供的功能
    1. 这里可以看到虽然都叫做 异常 但是实际上有一部分情况是特殊情况需要使用执行环境中的功能,不能非黑即白地把 异常 理解为 坏的
    2. 用户态应用直接触发从用户态到内核态的异常的原因总体上可以分为两种
      1. 其一是用户态软件为获得内核态操作系统的服务功能而执行特殊指令
        1. 指令本身属于高特权级的指令,如 sret 指令(表示从 S 模式返回到 U 模式)
        2. 指令访问了 S模式特权级下才能访问的寄存器 或内存,如表示S模式系统状态的 控制状态寄存器 sstatus 等
      2. 其二是在执行某条指令期间产生了错误(如执行了用户态不允许执行的指令或者其他错误)并被 CPU 检测到
  2. 暂停上层软件的功能,转而运行执行环境的代码 (伴随 特权级切换 )
  3. 回到上层软件暂停的位置继续执行

配合下图食用更加:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/743549.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从头构建和训练 GPT-2 |实战

引言 该项目[1]将引导您完成构建简单 GPT-2 模型的所有步骤,并使用 Taylor Swift引言 该项目将引导您完成构建简单 GPT-2 模型的所有步骤,并使用 Taylor Swift 和 Ed Sheeran 的一堆歌曲进行训练。本文的数据集和源代码将在 Github 上提供。 构建 GPT-2 架构 我们将逐步推进这…

易优eyoucms数据库配置文件是哪个在哪里?

易优eyoucms数据库配置文件位置在:网站根目录/application/database.php本文来自博客园,作者:黄文Rex,转载请注明原文链接:https://www.cnblogs.com/hwrex/p/18301555

DedeCMS模板目录的文件目录结构

templets ┣━ default 默认模板目录 ┃ ┣━ style 模板CSS样式目录 ┃ ┣━ js 模板JS脚本目录 ┃ ┗━ images 模板图片目录 ┃ ┣━ lurd LURD系统模板 ┃ ┣━ plus 插件模板目录 ┃ ┗━ system 系统底层模板目录本文来自博客园,作者:黄文…

易优CMS首页常用标签汇总

网站名称:{eyou:global name=web_name /} 网站标题:{eyou:global name=web_title /} 站点描述:{eyou:global name=web_description /} 默认关键词:{eyou:global name=web_keywords /} 网站logo:{eyou:global name=web_logo /} 网站备案号:{eyou:global name=web_recordnu…

Allegro画焊盘封装

Allegro画焊盘封装 根据自己的理解和参考其他人的书籍总结一下用Allegro软件画焊盘的过程。本文档用的是17.4的版本。画焊盘封装用Padstack Editor软件,画元器件封装用Allegro软件。下面开始介绍使用Padstack Editor软件画焊盘封装。 第一步: 软件打开界面如下,注意左下角的…

【转载】【内存】procmeminfo之谜完全揭秘

本文转发自:http://linuxperf.com/?p=142 应该是迄今为止对/proc/meminfo描述最全面与完整的一篇文章。free 命令是Linux系统上查看内存使用状况最常用的工具,然而很少有人能说清楚 “buffers” 与 “cached” 之间的区别:我们先抛出结论,如果你对研究过程感兴趣可以继续阅…

PMP-项目运行环境

影响项目环境有两大客观因素和人,两大客观因素:事业环境因素和组织过程资产。 事业环境因素 包括组织外部因素和组织内部因素,组织内部因素是组织可以改变的,但是项目不能我改变;在默认条件下事业环境因素是项目无法改变的。 事业环境因素是指项目团队不能控制的,将对项目…

易优cms伪静态后动态URL百度收录的内容404

伪静态后,动态URL百度已经收录过的内容404。怎么解?如果伪静态 动态打不开 你想不出现404 最简单的办法就是改为动态本文来自博客园,作者:黄文Rex,转载请注明原文链接:https://www.cnblogs.com/hwrex/p/18301468

User red has exceeded the max_updates resource (current value: 500)

错误记录: User red has exceeded the max_updates resource (current value: 500) 错误原因: 在mysql数据库的下有一个库为mysql,它其中有一个表为user这里面的纪录每一条都对应为一个mysql用户的授权。其中字段 max_questions max_updates max_connections分别记录着最大查…

11、Oracle中的视图

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。 视频链接: 【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用 如果有侵权,请联系删除,谢谢。学习目标:描述视图 创建和修改视图的定义,删除视图 从视…

廉价平替esphome水浸 雨水传感器diy

esp8266 nodemcu + 雨水传感器 diy厨房水浸传感器 首先在esphome中添加设备esp8266 nodemcu + 雨水传感器 diy厨房水浸传感器esphome 配置编写 # 8266平台配置 esp8266:board: nodemcuv2 # 水浸 雨水 传感器 binary_sensor:- platform: gpiopin:number: GPIO2inverted: truenam…

关于win显示器开启HDR后B站截图出现过曝情况的临时解决方法

在显示器开启HDR后,最近发现截图B站时会出现图片过曝光,只有视频截图异常,其他截图页面正常,如下按照网上的教程 解决windows显示开启HDR后chrome内截图泛白问题 设置了chrome 浏览器的色彩,但是还是无法解决,怀疑是视频播放器的原因,目前只能通过如下方法暂时规避:在网…