计算机操作系统-第十二天

news2024/11/15 21:35:17

目录

进程控制的基本概念

什么是进程控制

如何实现进程控制

如何实现原语的”原子性“

与进程控制相关的原语

进程创建中的原语

进程终止中的原语

进程的阻塞和唤醒中的原语

进程的切换中的原语

 知识滚雪球-程序是如何运行的?:

本节思维导图


进程控制的基本概念

什么是进程控制

        进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。简单理解就是:进程控制就是要实现进程状态转换

如何实现进程控制

        利用微内核中的”原语“实现,前面我们提到原语是一种特殊的程序,它的执行具有原子性,也就是说,这段程序的运行必须一气呵成,不可中断。也就是说进行进程转换的过程要一气呵成这又是为什么? 

假设PCB中的变量state表示进程当前所处状态,1表示就绪态、2表示阻塞态...

假设此时进程2等待的事件发生,则操作系统中,负责进程控制的内核程序至少需要做两件事:

①将PCB2的state设为1

②将PCB2从阻塞队列放到就绪队列

如果此时不能一气呵成,那么假设完成第一步后内核程序接收到了中断信号,那么虽然PCB2的state = 1但是它仍然被放在阻塞队列中,很明显这样是不对的。

所以,如果进程转换不能做到一气呵成,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。

如何实现原语的”原子性“

用"关中断指令”和“开中断指令”这两个特权指令实现原子性

        在我们之前的学习中,我们可以知道当CPU执行完每条指令后都会进行外部中断信号的检查,当检测到外部中断信号后就会先执行中断处理程序然后才会去执行下一条指令。

        而我们当CPU执行关中断这个特权指令后,就不会再进行上述判断是否有外部中断信号的操作,CPU会依次执行关中断指令后的指令,直到遇到开中断指令后才会恢复检查外部中断信号的操作。

还有一点需要注意的是,这两条指令都只允许内核程序使用,不允许用户程序使用

与进程控制相关的原语

进程创建中的原语

进程终止中的原语

进程的阻塞和唤醒中的原语

进程的切换中的原语

 知识滚雪球-程序是如何运行的?:

        我们在之前的学习中知道了,CPU会从内存中取出指令,而CPU中会设置很多“寄存器”,用来存放程序/指令在运行过程中所需要的某些数据。常见的寄存器有PSW(程序状态字寄存器)、PC(程序计数器寄存器)、IR(指令寄存器)、通用寄存器、ACC、MQ、MAR、MDR......

其中,PC寄存器用于存放下一条指令的地址,IR用于存放当前正在执行的指令,而通用寄存器中会储存一些其它必要的信息

        如果当执行完指令3后,另一个进程也开始上CPU运行,而另一个进程在运行过程中也会使用各个寄存器,这就可能导致该进程会覆盖指令3在寄存器中存储的内容,那么该如何切换回之前的进程?

解决办法:在进程切换时先在PCB中保存这个进程的运行环境(只保存一些必要的寄存器信息,比如PSW寄存器,PC寄存器、通用寄存器中的内容),当原来的进程再次投入运行时,可以通过PCB恢复它的运行环境。

 

本节思维导图

其实,无论哪个进程控制原语,要做的无非三类事情:

1、更新PCB中的信息(修改进程状态state、保存/恢复运行环境)

2、将PCB插入合适的队列

3、分配/回收资源 

~over~

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

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

相关文章

数据可视化与GraphQL:利用Apollo创建仪表盘

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

第二证券:风电概念强势拉升,威力传动“20cm”涨停,双一科技等大涨

风电概念20日盘中强势拉升,到发稿,威力传动“20cm”涨停,双一科技涨超17%,顺发恒业亦涨停,金雷股份、大金重工涨约7%,新强联、海力风电涨超5%。 音讯面上,9月以来江苏、广东海风项目加快推动&a…

前端数据可视化之【title、legend、tooltip、toolbox 】配置项

目录 🌟Echarts配置项🌟Echarts配置项之 title组件🌟Echarts配置项之 legend组件🌟Echarts配置项之 tooltip组件🌟Echarts配置项之 toolbox组件🌟写在最后 🌟Echarts配置项 ECharts开源来自百度…

如何解决香港服务器使用的常见问题

​  站长们在选择香港服务器租用时会考虑到它的各种性能以及稳定性,这是必须的。但是使用过程中还有些问题也不容忽视,比如:带宽资源是否短缺,是否存在安全漏洞,连接是否正常等这些问题也要考虑到。 香港服务器使用中…

百度地图API:JavaScript开源库几何运算判断点是否在多边形内(电子围栏)

百度地图JavaScript开源库,是一套基于百度地图API二次开发的开源的代码库。目前提供多个lib库,帮助开发者快速实现在地图上添加Marker、自定义信息窗口、标注相关开发、区域限制设置、几何运算、实时交通、检索与公交驾车查询、鼠标绘制工具等功能。 判…

搭建一个windows的DevOps环境记录

边搭建边记录,整个DevOps环境的搭建可能会很久。。。 一、安装Jenkins: 参考:Jenkins基础篇--windows安装Jenkins-CSDN博客 注意上面选择JDK的路径,选择到安装目录,该目录并不一定要在path中配置了(就是…

Qt基础 QScatterSeries

QScatterSeries类是Qt Charts模块的一部分,用于表示散点图。 QScatterSeries* series new QScatterSeries(); // 创建离散点数据series->setName("圆点样式");series->setMarkerShape(QScatterSeries::MarkerShapeCircle); //设置位圆形series-&…

SpringBoot + MyBatis 在 jar 中可以启动但是 Idea中无法启动的原因

现象 在idea中启动始终卡住,查看线程堆栈发现一直在mybatis的处理过程中,细究了一下堆栈发现mybatis有使用远程方式加载类的情况,并且此时cpu会飙升, 在命令行中使用java -jar 的形式可以正常启动,但是在idea中启动始…

论文阅读 | RAFT: Recurrent All-Pairs Field Transforms for Optical Flow

RAFT: Recurrent All-Pairs Field Transforms for Optical Flow ECCV2020光流任务best paper 论文地址:【here】 代码地址:【here】 介绍 光流是对两张相邻图像中的逐像素运动的一种估计。目前碰到的一些困难包括:物体的快速运动&#xff…

UE4 UltraDynamicSky 天气与水体交互

最上面的Lerp的A通道为之前的水面效果,B是做的冰面效果 用Dynamic_Landscape_Weather_Effects的BaseColor的R通道四舍五入作为Lerp的Alpha值 使用一张贴图,乘以RadialGradientExponential对材质边缘做弱化,RadialGradientExponential的Raid…

4.7 IP多播

思维导图: **4.7.1 IP多播的基本概念** --- **1. 定义和背景** - IP多播:从一个源点发送信息至多个终点的技术。 - 1988年:Steve Deering首次提及IP多播。 - 1992年:IETF进行了首次IP多播试验,当时有20个网点参与。 …

Python算法:八大排序算法以及速度比较

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

大数据测试用例分析

基于大数据分析,对业务系统产生的日志进行智能分析,能够识别日志中的接口、参数、业务流,并依据分析的结果生成测试用例。 问题与背景 业务复杂 业务系统的复杂性,对测试人员的业务能力提出严格要求,加重测试成本。 …

【深度学习-第4篇】使用MATLAB快速实现CNN多变量回归预测

上一篇我们讲了使用CNN进行分类的MATLAB代码。 这一篇我们讲CNN的多变量回归预测。 是的,同样是傻瓜式的快速实现。 一、什么是多变量回归预测 多变量回归预测则是指同时考虑多个输入特征进行回归预测。举几个例子: 房价预测:给定一组房…

苹果开发者 Xcode发布TestFlight全流程

打包前注意事项 使用Xcode导出安装包之前,必须先确认账户的所有合约是否全部同意,如果有不同意的,在出包的时候会弹出报错 点击前往苹果开发者官网https://appstoreconnect.apple.com/agreements/ 登录自己的开发者账户后,可以看…

【LeetCode】61. 旋转链表

1 问题 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3] 示例 2: 输入:head [0,1,2], k 4 输出&…

用Nginx搭建一个具备缓存功能的反向代理服务

在同一台服务器上,使用nginx提供服务,然后使用openresty提供反向代理服务。 参考《Ubuntu 20.04使用源码安装nginx 1.14.0》安装nginx。 参考《用Nginx搭建一个可用的静态资源Web服务器》搭建静态资源Web服务器,但是/nginx/conf/nginx.conf里…

点云cloudpoint生成octomap的OcTree的两种方法以及rviz可视化

第一种:在自己的项目中将点云通过ros的topic发布,用octomap_server订阅点云消息,在octomap_server中生成ocTree 再用rviz进行可视化。 创建工作空间,记得source mkdir temp_ocotmap_test/src cd temp_ocotmap_test catkin_make…

系列一、文件

一、概述 文件对我们并不陌生,简单的讲文件就是保存数据的地方,比如大家经常使用的word文档,txt文件,excel文件,mp3音乐文件,mp4视频文件...等等,它既可以是一张图片,也可以是一段视…

C++之继承<2>【详解】

C之继承<2>【详解】 1. 派生类的默认成员函数1.1 1. 构造成员函数1.2 拷贝复制1.3 构造函数和析构函数的执行顺序 2. 继承和友元3. 继承与静态成员 1. 派生类的默认成员函数 1.1 1. 构造成员函数 派生类的构造函数必须调用基类的构造函数初始化基类的那…