CPU受限直接执行

news2025/8/12 3:17:34

目录

1. 虚拟化CPU

2. 进程 

2.1 进程的机器状态

2.2 进程创建

2.3 进程的状态

3. 受限直接执行

3.1 直接执行 

3.2 受限制的操作

3.3 在进程之间切换

3.3.1 协作方式:等待系统调用

3.3.2 非协作方式:操作系统进行控制

3.3.3 保存和恢复上下文

3.3.4 在系统调用期间发生时钟中断


参考资料:Operating Systems: Three Easy Pieces
第4章 抽象:进程
第6章 机制:受限直接执行

1. 虚拟化CPU

时分共享(time sharing)CPU 技术:通过让一个进程只运行一个时间片,然后切换到其他进程,操作系统提供了存在多个虚拟 CPU 的假象。

要实现 CPU 的虚拟化,操作系统就需要一些机制(mechanism)和策略(policy)。

机制是一些低级方法或协议,例如,

上下文切换(context switch)让操作系统能够停止运行一个程序,并开始在给定的 CPU 上运行另一个程序。

策略是在操作系统内做出某种决定的算法,例如,

调度策略(scheduling policy)利用历史信息(例如,哪个程序在最后一分钟运行得更多?)、工作负载知识(例如,运行什么类型的程序?)以及性能指标 (例如,系统是否针对交互式性能或吞吐量进行优化?)决定运行哪个程序


2. 进程 

进程就是运行中的程序。

2.1 进程的机器状态

进程的机器状态(machine state):程序在运行时可以读取或更新的内容。

在任何时刻,机器的哪些部分对执行该程序很重要?

内存。
指令存在内存中。正在运行的程序读取和写入的数据也在内存中。
因此进程可以访问的内存(称为地址空间,address space)是该进程的一部分。

寄存器。
许多指令明确地读取或更新寄存器。
有一些非常特殊的寄存器构成了该机器状态的一部分。例如,

程序计数器(Program Counter,PC)(有时称为指令指针,Instruction Pointer 或 IP)告诉我们程序当前正在执行哪个指令;

栈指针(stack pointer)和相关的帧指针(frame pointer)用于管理函数参数栈、局部变量和返回地址。

2.2 进程创建

代码和静态数据(例如初始化变量)加载到内存中

为程序的运行时分配一些内存(存放局部变量、函数参数和返回地址)

执行与 I/O 设置相关的任务
UNIX 每个进程 3 个打开的文件描述符(file descriptor),用于标准输入、输出和错误。

启动程序,在入口处运行,即 main()

2.3 进程的状态

运行(running)

就绪(ready)

阻塞(blocked):该状态下,进程执行了某种操作,直到发生其它事件时才会准备运行,例如
当进程向磁盘发起 I/O 请求时,它会被阻塞,因此其它进程可以使用处理器。

初始(initial):表示进程在创建时处于的状态。
最终(final):表示进程处于已退出但尚未清理的状态(僵尸状态)。

3. 受限直接执行

虚拟化CPU的挑战

性能:如何在不增加系统开销的情况下实现虚拟化?

控制权:如何有效地运行进程,同时保留对 CPU 的控制?

3.1 直接执行 

受限的直接执行(limited direct execution)

直接执行 -> 只需直接在 CPU上运行程序即可

当 OS 启动程序运行时,它会在进程列表中为其创建一个进程条目,为其分配一些内存,将程序代码(从磁盘)加载到内存中,找到入口点,例如main()函数,并开始运行用户的代码。表 6.1 展示了这种基本的直接执行协议(没有任何限制),使用正常的调用并返回跳转到程序的 main(),并在稍后回到内核。

存在的问题
第一,如果我们只运行一个程序,操作系统怎么能确保它不做任何我们不希望它做的事
第二,当我们运行一个进程时,操作系统如何让它停下来并切换到另一个进程

3.2 受限制的操作

直接执行的明显优势是快速。

如果进程希望执行某种受限操作(如向磁盘发出 I/O 请求或获得更多系统资源),该怎么办?

=> 采用受保护的控制权转移

硬件通过提供不同的执行模式来协助操作系统。在用户模式(user mode)下,应用程序不能完全访问硬件资源。在内核模式(kernel mode)下,操作系统可以访问机器的全部资源。还提供了陷入(trap)内核和从陷阱返回(return-from-trap)到用户模式程序的特别说明,以及一些指令,让操作系统告诉硬件陷阱表(trap table)在内存中的位置。

3.3 在进程之间切换

3.3.1 协作方式:等待系统调用

在协作调度系统中,OS 通过等待系统调用,或某种非法操作发生,从而重新获得 CPU 的控制权。在这种风格下,操作系统相信系统的 进程会合理运行。运行时间过长的进程被假定会定期放弃 CPU,以便操作系统可以决定运 行其他任务。

3.3.2 非协作方式:操作系统进行控制

如何在没有协作的情况下获得控制权? -> 时钟中断(timer interrupt)

时钟设备可以编程为每隔几毫秒产生一次中断。产生中断时,当前正在运行的进 程停止,操作系统中预先配置的中断处理程序(interrupt handler)会运行。此时,操作系统 重新获得 CPU 的控制权,因此可以做它想做的事:停止当前进程,并启动另一个进程。

3.3.3 保存和恢复上下文

上下文切换:操作系统为当前正在执行的进程保存一些寄存器 的值(例如,到它的内核栈),并为即将执行的进程恢复一些寄存器的值(从它的内核栈)。 这样一来,操作系统就可以确保最后执行从陷阱返回指令时,不是返回到之前运行的进程, 而是继续执行另一个进程。

上表的时间线说明:

进程 A 正在运行,然后被中断时钟中断。硬件保存它的寄存器(在内核栈中),并进入内核(切换到内核模式)。

在时钟中断处理程序中,操作系统决定从正在运行的进程 A 切换到进程 B。此时,它调用 switch()例程, 该例程仔细保存当前寄存器的值(保存到 A 的进程结构),恢复寄存器进程 B(从它的进程结构),然后切换上下文(switch context),具体来说是通过改变栈指针来使用 B 的内核栈

最后,操作系统从陷阱返回,恢复 B 的寄存器并开始运行它。

3.3.4 在系统调用期间发生时钟中断

操作系统可能简单地决定,在中断处理期间禁止中断(disable interrupt)。这样做可以确保在处理一 个中断时,不会将其他中断交给 CPU。

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

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

相关文章

油藏生产业务+机器学习代理优化算法

前前处理,把后台需要的参数都读出来。写进name.txt 生成新的sch文件,需要在data里追加新sch名字 没改变的井就不用重新卸载关键字里了。 重启动模型:制作出来是空的,得自己加别的东西 模型要准确,否则不好和历史模型…

【吴恩达机器学习笔记】二、单变量线性回归

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。 📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记&…

OpenGL原理与实践——核心模式(三):Texture-纹理系统理论与应用

目录 初识——纹理系统是什么?怎么用? Texture —— UV坐标系统 Texture Wrapping:UV超过了[0,1]怎么办? Texture Filter:UV经过计算得到的是浮点数怎么办? 在OpenGL中该怎么做呢? Texture Unit——…

列表和标签企业报告版的完整报告解决方案

列表和标签企业报告版的完整报告解决方案 无缝集成到所有主要开发环境和编程语言:Visual Studio、.NET/。NET核心(C#、VB.NET)、C/C、Delphi/VCL、Java、Progress、DataFlex、dBASE PLUS、Xbase等。 通过现代数据绑定灵活连接到任何数据源:List&Labe…

自适应点云配准(RANSAC、ICP)

点云配准 实验目标 任务一:将两个形状、大小相同的点云进行配准,进而估计两个点云之间的位姿。 任务二:将一些列深度图反向投影得到点云,经过配准后,得到每个深度图之间的位姿变换,并将相应的点云融合到一…

【云原生】Docker镜像的创建,Dockerfile

内容预知 1.Dokcer镜像的创建 1.1 基于现有镜像创建 1.2 基于本地模板创建 1.3 基于Dockerfile 创建 联合文件系统(UnionFS ) 镜像加载原理 容器中操作系统容量小的原因 Docker镜像结构的分层 Dockefile的引入 2. Dockerfile 操作命令的指令 2.1 FROM 镜像 2.2 MA…

股票接口实时交易数据怎么查询?

股票数据接口作为软件应用而言,很多资源和数据是由自身提供的,像其他一些功能还是需要调用第三方提供的服务,这其中就涉及到股票数据接口api的调用功能,通过api来获取实时交易数据查询更方便,因此,如果交易…

【学习笔记17】JavaScript作用域

笔记首发 一、作用域 😴我们学变量,不是在任何地方都可以使用😴变量有一个使用区间, 这个可以使用的区间就叫做作用域 1、全局作用域 😫 script标签内部声明的变量,就是全局作用域的变量😏在全局作用域声明…

计算机网络的定义和分类

计算机网络早期定义:自治互联的计算机集合 计算机网络系统的基本组成为:通信子网资源子网 计算机网络分类: 公用网通常是由电信公司出资建造的大型网络。 专用网通常是由某个部门为满足本单位特殊业务的需要建造的网络&#xff…

基于springboot+jpa+camunda实现简单的请假审批流程

整个camunda的绘图、具体使用,参照上一篇文章Camunda工作流引擎简记。 源码地址,相关技术储备如下 springboot–v2.5.4jpa–v2.5.4postgresql–v11camunda–v7.16.0 整个过程不需要建表,这就是JPA面向对象编程的好处,这也是我认…

33 - C++中的字符串类

---- 整理自狄泰软件唐佐林老师课程 1. 历史遗留问题 C语言 不支持真正意义上的字符串 C语言用 字符数组 和 一组函数 实现字符串操作 C语言 不支持自定义类型,因此无法获得字符串类型 解决方案 从C到C的进化过程 引入了 自定义类型在C中可以通过类完成字符串类型…

iOS上架app store详细教材

1、安装iOS上架辅助软件Appuploader 2、申请iOS发布证书(p12) 3、申请iOS发布描述文件(mobileprovision) 4、打包ipa 5、上传ipa到iTunes Conn 1、安装iOS上架辅助软件Appuploader2、申请iOS发布证书(p12)…

ImmunoChemistry艾美捷牛膜联蛋白V-荧光素凋亡检测试剂盒方案

ImmunoChemistry艾美捷牛膜联蛋白V-荧光素细胞凋亡检测试剂盒提供了一种经验证的方法,可使用重组荧光素结合的牛膜连蛋白V和碘化丙啶(PI)快速、轻松地区分两个死亡细胞群和活细胞群。这些细胞将被膜联蛋白V-荧光素(绿色荧光&#…

docker容器持久化

第六章容器持久化 容器数据卷 什么是容器数据卷? 容器之间可以有一个数据共享技术!docker容器中产生的数据,同步到本地! 这就是卷技术!目录的挂载,将我们容器内的目录,挂在到linux上面&#x…

线性时间选择(Top K)问题(Java)

线性时间选择(Top K)问题(Java) 文章目录线性时间选择(Top K)问题(Java)1、前置介绍2、分治法求解3、代码实现4、复杂度分析5、扩展6、参考资料1、前置介绍 定义 选择问题&#xff0…

docker可视化与制作和提交自己的镜像

第四章docker可视化 portainer docker的图形化管理工具!提供一个后台面板供我们操作! docker run -d -p 8080:9000 \--restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer 访问测试:外网…

Python_数据容器_元组tuple

一、元组tuple定义 为什么需要元组 列表是可以修改的,如果想要传递的信息不被篡改,列表就不适合了 元组和列表一样,都是可以封装多个不同类型的元素在内 最大的不同点在于: 元祖一旦定义完成,就不可修改 所以&am…

SpringBoot中使用JDBC

JDBC基础使用&#xff1a; JDBC基础使用_做测试的喵酱的博客-CSDN博客 一、SpringBoot使用JDBC&#xff0c;依赖 依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId&…

linux zookeeper kafka_2.12-2.2.0 集群

文章目录一、zookeeper服务搭建1. 下载2. 解压3. 创建目录4. 调整配置5. 配置myid6. 开放防火墙7.启动验证zk二、kafka集群搭建2.1. 下载软件2.2. 解压2.3. 配置2.5. 启动kafka三、测试验证3.1. 创建一个主题3.2. 发送消息3.3. 消费消息预先准备&#xff1a;上传软件至服务器19…

使用Avalonia跨Linux平台

Avalonia&#xff0c;读&#xff1a;阿瓦隆尼亚 这里的跨平台指的是&#xff0c;使用c#语言开发跨Linux平台。c#在Windows桌面开发中很强&#xff0c;但是在Linux桌面中&#xff0c;不能跨平台&#xff0c;Qt可以在Linux中跨平台&#xff0c;但是那是另外一门语言了。Avalonia…