rcore day6

批处理系统 (Batch System) 出现于计算资源匮乏的年代,其核心思想是: 将多个程序打包到一起输入计算机;当一个程序运行结束后,计算机会 自动 执行下一个程序

 

应用程序难免会出错,如果一个程序的错误导致整个操作系统都无法运行,那就太糟糕了。 保护 操作系统不受出错程序破坏的机制被称为 特权级 (Privilege) 机制, 它实现了用户态和内核态的隔离

 

本章在上一章的基础上,让我们的 OS 内核能以批处理的形式一次运行多个应用程序,同时利用特权级机制, 令 OS 不因出错的用户态程序而崩溃

 

 

特权级的软硬件协同设计

实现特权级机制的根本原因是应用程序运行的安全性不可充分信任。如上一章的LibOS,应用和OS紧密连接,应用出bug,可能会连累OS,导致整个系统不可用

 

所以,限制应用程序运行在另外一个无法破坏操作系统的受限执行环境中:

  • 应用程序不能访问任意的地址空间
  • 应用程序不能执行某些可能破坏计算机系统的指令

RISC-V 特权级架构

级别

编码

名称

0

00

用户/应用模式 (U, User/Application)

1

01

监督模式 (S, Supervisor)

2

10

虚拟监督模式 (H, Hypervisor)

3

11

机器模式 (M, Machine)

级别的数值越大,特权级越高,掌控硬件的能力越强

到目前为止,(Hypervisor, H)模式的特权规范还没完全制定好,所以本书不会涉及

M 模式软件 SEE 和 S 模式的内核之间的接口被称为 监督模式二进制接口 (Supervisor Binary Interface, SBI),而内核和 U 模式的应用程序之间的接口被称为 应用程序二进制接口 (Application Binary Interface, ABI),当然它有一个更加通俗的名字—— 系统调用 (syscall, System Call) 。而之所以叫做二进制接口,是因为它与高级编程语言的内部调用接口不同,是机器/汇编指令级的一种接口。事实上 M/S/U 三个特权级的软件可分别由不同的编程语言实现。因此只有将接口下降到机器/汇编指令级才能够满足其跨高级语言的通用性和灵活性

执行环境的另一种功能是对上层软件的执行进行监控管理。监控管理可以理解为,当上层软件执行的时候出现了一些异常或特殊情况,导致需要用到执行环境中提供的功能,因此需要暂停上层软件的执行,转而运行执行环境的代码。由于上层软件和执行环境被设计为运行在不同的特权级,这个过程也往往(而 不一定 )伴随着 CPU 的 特权级切换 。当执行环境的代码运行结束后,我们需要回到上层软件暂停的位置继续执行

用户态应用直接触发从用户态到内核态的异常的原因总体上可以分为两种:其一是用户态软件为获得内核态操作系统的服务功能而执行特殊指令;其二是在执行某条指令期间产生了错误(如执行了用户态不允许执行的指令或者其他错误)并被 CPU 检测到

复习之前知识

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

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

相关文章

Linux系统学习Day2——在Linux系统中开发OpenCV

一、OpenCV简介 OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉和机器学习库,广泛应用于图像处理、视频分析、物体检测等领域。它提供了丰富的算法和高效的工具集,支持C、Python等多种语言&#xff0c…

SAP Overview

SAP—企业运营的数字化引擎 在数字化转型的浪潮中,SAP以其全面的企业应用软件套件,为全球企业提供了强大的运营支持。SAP的模块化解决方案覆盖了企业运作的每一个关键环节,从销售到仓库管理,每个模块都是针对特定业务需求精心设计…

Kafka 中的幂等机制

Kafka 中的 幂等性(Idempotence) 是生产者端的重要机制,旨在确保即使在网络抖动、重试、Broker 重启等情况下,同一条消息不会被重复写入到 Topic 中。这是实现可靠消息传递、避免重复消费的关键手段之一。 ✅ 什么是幂等性&#…

用c语言写一个linux进程之间通信(聊天)的简单程序

使用talk 用户在同一台机器上talk指令格式如下: ​ talk 用户名ip地址 [用户终端号] 如果用户只登录了一个终端,那么可以不写用户终端号,如: talk userlocalhost可以使用who指令来查看当前有哪些用户登录,他的终端号…

深入探索Scala:从基础到进阶的全面总结

在大数据技术领域,Scala语言凭借其独特优势占据重要地位。它与Spark紧密相连,为大数据计算提供强大支持。今天,让我们一同深入回顾Scala从基础到进阶的关键知识点。 Scala开发环境搭建是入门的第一步,需确保JDK安装成功&#xff0…

【每日一个知识点】分布式数据湖与实时计算

在现代数据架构中,分布式数据湖(Distributed Data Lake) 结合 实时计算(Real-time Computing) 已成为大数据处理的核心模式。数据湖用于存储海量的结构化和非结构化数据,而实时计算则确保数据能够被迅速处理…

GPT-5、o3和o4-mini即将到来

原计划有所变更: 关于我们应有何期待的一些零散想法。 深度研究(Deep Research)确实强大但成本高昂且速度较慢(当前使用o3模型)。即将推出的o4-mini在性能上可能与o3相近,但将突破这些限制,让全球用户——甚至免费用户(尽管会有速率限制)——都能用上世界顶级AI研究助…

Spring Cloud LoadBalancer负载均衡+算法切换

目录 介绍核心功能负载均衡启动两个支付服务订单模块引入依赖LoadBalanced 注解启动订单服务测试结果 负载均衡算法切换总结 介绍 Spring Cloud LoadBalancer 是 Spring Cloud 提供的客户端负载均衡解决方案,提供更现代化的 API 和更好的 Spring 生态系统集成。它支…

Chrome 浏览器插件收录

1. Responsive Viewer 可以在同个窗口内,针对同一网站,添加多个不同设备屏幕显示。 在前端开发,需要多端适配,尤其是移动端响应式适配的网站开发中,可以同时测试多个不同屏幕的适配效果。 2. VisBug 提供工具栏&#x…

SQL 函数概述

SQL 函数概述 SQL 函数可以分为几大类,不同数据库系统可能有略微不同的实现。以下是主要的 SQL 函数分类: 1. 聚合函数 (Aggregate Functions) COUNT() - 计算行数 SUM() - 计算总和 AVG() - 计算平均值 MIN() - 找最小值 MAX() - 找最大值 GROUP…

MySQL学习笔记九

第十一章使用数据处理函数 11.1函数 SQL支持函数来处理数据但是函数的可移植性没有SQL强。 11.2使用函数 11.2.1文本处理函数 输入: SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 输出: 说明&#…

认识vue中的install和使用场景

写在前面 install 在实际开发中如果你只是一个简单的业务实现者,那么大部分时间你是用不到install的,因为你用到的基本上都是别人封装好的插件、组件、方法、指令等等,但是如果你需要给公司的架构做建设,install就是你避不开的一个…

【SpringCloud】构建分布式系统的利器

一、引言 在当今数字化时代,随着业务规模的不断扩大和用户量的急剧增长,单体应用逐渐暴露出诸多局限性,如可扩展性差、维护困难等。分布式系统应运而生,而 Spring Cloud 则成为了构建分布式系统的热门框架之一。它提供了一系列丰…

mkdir通配符详解

在 mkdir 命令中使用通配符可以简化批量创建目录的操作。通配符如 {} 和 * 可以用来生成多个目录名称,从而减少重复输入。以下是一些常见的使用方法和示例。 使用 {} 通配符 {} 通配符可以用来生成一系列的目录名称,语法如下: mkdir dir_{…

Transformer的Word Embedding

一、Transformer 中的词嵌入是什么? 1. 定义与作用 • 词嵌入(Word Embedding):将离散的词语映射为低维连续向量,捕捉语义和语法信息。 • 在 Transformer 中的位置: • 输入层:每个词通过嵌入…

Linux 进程间通信:信号机制

Linux 进程间通信:信号机制 在多进程操作系统中,进程之间的通信至关重要,尤其是在Linux系统中,信号(Signal)作为一种特殊的进程间通信方式,广泛用于进程之间的协调和控制。信号可以看作是操作系…

基于TRIZ创新方法论的九屏法分析系统

1. 文件头与库导入 # -*- coding: utf-8 -*- import streamlit as st import pandas as pd import numpy as np import plotly.graph_objects as go from datetime import datetime from sklearn.ensemble import RandomForestRegressor ​​作用​​:设置文件编码…

【LangChain框架组成】 LangChain 技术栈的模块化架构解析

目录 整体架构概述 整体架构层级划分 模块详细解析 1. 部署与服务层(LangServe & Deployments) 2. 应用模板层(Templates & Committee Architectures) 3. 核心功能层(LangChain) 4. 社区扩展…

自定义数据结构的QVariant序列化 ASSERT failure in QVariant::save: “invalid type to save“

自定义数据结构放入QVariant,在序列化时抛出异常 ASSERT failure in QVariant::save: “invalid type to save” 自定义数据结构如struct MyData,除了要在结构体后面加 struct MyData { ... } Q_DECLARE_METATYPE(MyData)如果需要用到流的输入输出&…

vxe-table 启用 checkbox-config.reserve 实现分页复选框选择功能、获取已选数据的用法

vxe-table 启用 checkbox-config.reserve 实现分页复选框选择功能、获取已选数据的用法 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table 效果 代码 获取已选择…