操作系统 第2章节 进程,线程和作业
一:多道程序设计
1-多道程设计的目的
for:提高吞吐量(作业道数/处理时间),我们可以从提高资源的利用率出发
2-单道程序设计缺点:
设备的利用率低,内存的利用率低,处理机的利用率低
比如CPU去访问内存,CPU空转.内存等待CPU访问也是没有任何操作的.要是有多个东西要去访问不冲突的设备,单道就只有一个一个的等(明明可以直接同时访问的)
通过多道程序处理
中间的CPU等待访问设备A的时候,可以处理程序B,同时允许多个不冲突的设备同时访问
3-多道程序设计的道数的选择:
最好与系统资源数量相当.因为:如果过少,系统资源利用率低,如果过多,系统调度等等的开销过大
4-随着多道程序设计的思想到来,同时也带来了许多问题:
1:如果程序个数多于处理机数量,应该如何分配
2:存储资源的管理应该如何处理,比如:存储器地址的独立性or共享性?内存外存交换的分配和去配?相对地址和绝对地址的地址转换?
3:设备资源如果分配,比如:分配机制,IO控制等等
二:进程的引入
在多道程序系统中,一个程序是:推进,暂停,推进,暂停的
暂停:需要我们保存现场(PSW+PC,REG)然后跳转到目标位置
推进:恢复现场(REG,PSW+PC)然后跳转到目前的地址
1:进程的概念:
可参与并发执行的程序,进程是具有一定独立功能的程序关于一个数据集合的一次运行活动
(强调了并发和运行):注意哦,不是并行(微观也是同时,要求多CPU),是并发(宏观同时,微观交替)
2:进程状态和状态的转换
运行态:占用CPU中
就绪态:可以运行,等待CPU
等待态:等待某一个时间的发生
就绪->运行:获得CPU
运行->就绪:被剥夺CPU
运行->等待:申请资源,但是还没有送到
等待->就绪:得到资源
当然用户感受不到上面的转换过程
3:进程控制块
是程序的静态描述
有着:进程的
描述信息:
-:进程标识:pid
-:所属用户uid
进程的控制信息:
CPU,磁盘,网络流的使用情况
当前的进程状态
进程占有的资源信息:
在使用那些文件
在使用那些内存区域
在使用那些IO设备
处理机相关信息:PSW ,PC reg的值
4:进程的组成和上下文
组成:PCB+程序(代码+数据+堆栈)
进程上下文:
进程的物理实体和支持进程运行的物理条件是指进程上下文:
包括:PCB+程序,
环境系统:地址空间,系统栈,打开文件表,地址映射寄存器,通用寄存器,PSW+PC
上下文切换:
由一个进程的上下文切换到另外一个进程的上下文
系统开销:
运行操作系统完成系统管理工作所花费的时间和空间
5.进程的组织
链接形式
进程控制块(PCB)以队列形式组织,队列类型不限于单向或双向,也不一定遵循FIFO原则。
就绪队列:系统可包含一个或多个就绪队列
等待队列:每个等待事件对应一个独立的等待队列
运行指示字:每个处理机配备一个运行指示字
索引方式
执行指针:指向当前正在执行的进程块
就绪表指针:指向存储就绪态PCB的就绪索引表
阻塞表指针:指向存储阻塞态(等待)PCB的阻塞索引表
6:进程的类型与特征
分为系统进程,用户进程
系统进程:运行操作系统程序,完成系统管理功能.
系统启动后一直存在直到系统的关闭,执行一个无限的循环
管态,执行所有指令,优先级高于用户进程
用户进程:为用户服务,不一定用户自己写的
特征:
--:并发性:可以和其他进程一起推进
--:动态性:动态的产生,消亡,等待等等
--:独立性:单独的调度1单元
--:交往性:可以和其他进程交互
--异步性:可以格子独立,不可预知速度的推进
--:结构性:每个进程只有一个PCB
7:进程间相互联系和相互作用
联系:
相关进程:同一家族的进程,可以共享文件,需要相互同学,协调推进,(父进程可以监视子进程,子进程完成父进程提供的任务)
无关进程:没有逻辑关系,同时执行,但是有资源的竞争,互斥,死锁,饿死的问题
作用:
直接相互作用:发生在相关进程之间,有意识,无中间媒介
间接相互作用:发生在任何的进程之间,有媒介
8:进程的创建和撤销
创建的时候,需要分配内存+加载程序_入就绪队列
撤销的时候:需要去配资源,撤销PCB,通知父进程(有可能是正常的终止,指发生了地址越界偶然非法指令or 被kill)
(除了初始进程,其他的进程都是被父进程创建并形成家族的)
如果考虑创建和撤销这两个状态,正常的进程的状态转移图:
9:进程与程序的联系和差别:
差别
1-程序(代码段,数据结构集)是静态的,是长期存放在磁盘的可执行文件,是一系列指令集合
2-进程是动态的,是程序的一次执行过程,有生命期
3-一个进程只能执行一个程序,一个程序可以被多个进程执行
联系:
进程包括一个程序,进程就是程序的几个运行
10.UNIX进程
PROC结构:保存的信息无论当进程在内存还是外存都是需要的
USER结构:内存中才是需要的,也可以和进程的程序一起移动到外存
-创建子进程
PID=fork() //子进程是父进程的复制品,返回值是父进程为子进程的编号,子进程为0
-加载并执行新的程序
execl(prog,arg0,arg1......,)
后面的argx为参数,执行prog
-:撤销
exit(Status) //Status为终止态, 然后唤醒父进程
-Abort终止进程
被终止子进程的父进程执行该指令.
可能因为:子进程使用资源过多or子进程任务超时or父进程退出OS,那么子进程也被禁止(但是在UNIX,子进程会以init为新的父进程)
当然也可以是kill来终止
pid=wait(&Status) //返回的是终止的子进程的PID,参数是子进程的终止状态
使用程序描述:
main()
{
int pid1,pid2,pid3,pid4,pid5,pid6,pid7,pid8;
int end_p1=end_p2=end_p3=end_p4=end_p5=…=end_p8=0;
int pid, status;
if((pid1=fork())= =0) execl("P1",0);
wait(&status);
if((pid2=fork())= =0) execl("P2",0);
if((pid3=fork())= =0) execl("P3",0);
if((pid4=fork())= =0) execl("P4",0);
do{ //等待P2结束
pid=wait(&status);
if(pid= =pid2) end_p2=1;
if(pid= =pid3) end_p3=1;
if(pid= =pid4) end_p4=1;
}while(end_p2= =0);
if((pid5=fork())= =0) execl("P5",0);
if((pid6=fork())= =0) execl("P6",0);
do{ //等待P3和P6结束
pid=wait(&status);
if(pid= =pid3) end_p3=1;
if(pid= =pid4) end_p4=1;
if(pid= =pid5) end_p5=1;
if(pid= =pid6) end_p6=1;
}while(end_p3= =0||end_p6= =0);
if((pid7=fork())= =0) execl("P7",0);
do{ //等待P4,P5,P7结束
pid=wait(&status);
if(pid= =pid4) end_p4=1;
if(pid= =pid5) end_p5=1;
if(pid= =pid7) end_p7=1;
}while(end_p4= =0||end_p5= =0||end_p7= =0);
if((pid8=fork())= =0) execl("P8",0);
wait(&status);
exit(0);
}
11.vfork和fork
fork:复制地址空间(code,data,stack)和控制结构(proc,user)
特点:父进程和子进程都有独立的数据拷贝
问题:不加载新的程序:不能数据共享,不能描述有解缓冲区
加载程序:复制可能没有意义,浪费空间
vfork:只复制了控制结构(proc+user),不复制地址空间
特点:
父进程和子进程共享地址空间
子进程可以使用execve改变其的虚拟地址空间
三:线程和轻进程
1.线程的引入:
为什么需要引入线程尼?
进程的切换需要上下文切换,但是内容太多了(PCB+程序+系统环境:地址空间,栈空间,文件表),开销太大了,而且一个进程可能也有很多个事情需要同时的去做,但是传统的进程不能够很好的去表达这些关系(没有良好的耦合关系),通讯也十分麻烦
所以就引入了线程,允许一个进程有多个线程,线程的上下文切换只涉及了reg和用户栈,而且线程之间的通讯也会更加的方便.
2.线程的概念:
概念:进程中的一个相对独立的执行流.
进程vs线程:
进程是资源的分配单位.
线程是执行的单位
多线程开发的优点:
-上下文切换快(地址空间不变)
-系统的开发小
-相关线程间的通讯容易(共享数据空间)
3.线程的结构:
下面是进程的:
下面是线程的:
4.线程控制块:
TCB:标志着线程存在的数据结构,其中包含了对线程管理所需要的全部信息
(包括了:线程标识,现场状态,调度参数,现场(通用寄存器,PC,SP),链接指针)
存放在对应的级别的空间:
用户线程:目态空间
核心线程:系统空间
5.线程的实现:
用户级线程ULT:
特点:
-基于library函数创建,系统不可见
-线程的创建,撤销,状态转换都发生在目态(TCB在用户空间)
-TCB在用户空间,一个进程一个系统栈
-进程的状态复杂
优点:
-不依赖操作系统,调度灵活
-同一进程中多线程切换快(不切换地址空间,共享数据空间)
缺点:
-同一个进程的线程不是真正的并行
-一个线程受阻,进程的其他线程阻塞
核心级线程KLT:
特点:
-基于系统调用实现
-创建,撤销和状态的转换由操作系统完成(TCB在系统空间)
-线程是CPU调度的基本单位,进程的状态没有意义
优点:
-同一个进程的多线程可以并行的执行
-一个现场进入核心等待,其他的进程可以执行(多CPU)
缺点:
-系统的开销大,同一个进程的多线程切换慢
-调度由系统实现,调度算法不够灵活
混合线程:
结构:
6.线程的应用:
-处理内在由多控制流,有合作,需要数据共享的背景
-多线程优于多进程(切换上下文数量级差100倍)
-提高处理机和设备的并行性
-多处理机环境适合多线程的运用
例子:
对于一个IDE,一个线程用于检查代码的语法逻辑,一个用于渲染代码不同意义的字体颜色,一个实现定时时钟的定时保存
再比如一个WEB server请求,直接pop up 一个线程让其去处理就好了
7.java线程:
四个状态:
New:新创建的线程
Runnable:可运行状态
Blocked:封锁状态
Dead:终止状态
JVM:
java虚拟机:处于java和操作系统之间,做到了java的良好的跨平台性质
java线程与操作系统线程之间的对应关系由JVM确定
四:作业
1.作业的概念:
用户要求计算机系统为其完成的计算任务集合
2.作业步:
作用处理过程中一个相对独立的步骤,一般一个作业步可由一个进程完成,某些作业步之间可以实现并行.
3.作业控制块:
表示作业存在的数据结构其中包含系统对作业管理所需要的全部信息:作业名称,作业状态,调度参数,资源需求,相关进程,作业长度,在输入井和输出井中的存放位置,记账信息
作业的分类:
批处理作业和交互式作业
-作业控制语言(JCL):描述批处理作业控制意图的语言
-作业说明书(JCL语句的序列):一般一个特殊符号起始
-作业控制程序:解释并处理作业说明书的程序
-作业控制进程:执行作业控制程序的进程
批处理作业:
-1:作业由假脱机输入程序输入到输入井
-2:经过OS的调度程序选中后进入内存
-3:同时由作业调度程序为其建立作业控制进程,执行作业控制程序
-4:作业控制进程解毒读作说明书的语句,并且根据作业步的要求建立对应的进程
交互式作业:
账户管理:
/etc/passwd文件(用户名,口令,用户根目录,同组用户,余额)
操作:
创建:由用户提供,or系统建立
撤销:删除用户目录机器对应的文件,在passwd中删除对应的entry
注册:
login:用户名
password:***
使用...
注销:
显式注销:logoff or 隐式注销(无操作)
作业
总结:作业进入内存后变为进程进行执行,一个作业一般有多个进程,一个进程一般又会划分为一个偶or多个线程进行执行(如果不支持的话就会单线程执行)
相关文章:

操作系统 第2章节 进程,线程和作业
一:多道程序设计 1-多道程设计的目的 for:提高吞吐量(作业道数/处理时间),我们可以从提高资源的利用率出发 2-单道程序设计缺点: 设备的利用率低,内存的利用率低,处理机的利用率低 比如CPU去访问内存,CPU空转.内存等待CPU访问也是没有任何操作的.要是有多个东西要去访问不冲…...
住宅IP的深度解析与合理运用
海外住宅代理IP作为全球化数字业务的核心工具,其配置与运用需兼顾技术适配性、业务需求与合规性。以下从类型选择、配置方法、应用场景、优化策略及风险控制五个维度进行解析: 一、类型选择:静态与动态住宅IP的核心差异 静态住宅IP 特性&…...

RT-Thread 深入系列 Part 2:RT-Thread 内核核心机制深度剖析
摘要: 本文从线程管理、调度器原理、中断处理与上下文切换、IPC 同步机制、内存管理五大核心模块出发,深入剖析 RT-Thread 内核实现细节,并辅以源码解读、流程图、时序图与性能数据。 目录 线程管理与调度器原理 1.1 线程控制块(T…...

在线caj转换word
CAJ格式是中国知网特有的一种文献格式,在学术研究等领域广泛使用,但有时我们需要将其转换为Word格式,方便编辑、引用文献。本文分享如何轻松将CAJ转换为word的转换工具,提高阅读和办公效率。 如何将CAJ转换WORD? 1、使用CAJ转换…...

25:三大分类器原理
1.分类的逻辑; 2.统计学与数据分析。 ************************ Mlp 多层感知系统 GMM 高斯混合模型-极大似然估计法 SVM 支持向量机建立一个超平面作为决策曲面,使得正例和反例的隔离边界最大化 Knn 1.MLP整个模型就是这样子的,上面…...
数据库插入数据时自动生成创建时间和修改时间
工具 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.time.LocalDateTime; Component public class MetaObjectHandlerConfig implements…...
Go语言中 源文件开头的 // +build 注释的用法
// build注释主要用于实现条件编译。借助设置不同的构建标签(build tags),我们能够指定在特定的操作系统、架构或者其他自定义条件下才编译某个文件 1、基本规则 格式要求: 这种注释必须出现在文件的开头部分。注释与包声明之间至…...

【从零开始学习微服务 | 第一篇】单体项目到微服务拆分实践
目录 引言 一、选择聚合结构进行拆分的优势 二、微服务模块创建步骤 (一)引入 pom 文件与修改 (二)创建 Spring Boot 启动类 (三)搭建基本包结构 三、配置文件的引入与调整 四、业务代码的引入与注意…...

【高并发】Celery + Redis异步任务队列方案提高OCR任务时的并发
线程池处理OCR仍然会阻塞请求的原因主要有以下几点,以及为什么CeleryRedis是更好的解决方案: 1. 线程池的阻塞本质 请求-响应周期未分离:即使使用线程池,HTTP请求仍需要等待线程池任务完成才能返回响应。当所有线程都繁忙时&#…...

2025数维杯数学建模竞赛B题完整参考论文(共38页)(含模型、代码、数据)
2025数维杯数学建模竞赛B题完整参考论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、定义与符号说明 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.2问题2…...
C#黑魔法:鸭子类型(Duck Typing)
C#黑魔法:鸭子类型(Duck Typing) 如果它走起路来像鸭子,叫起来像鸭子,那么它就是鸭子。 鸭子类型,主要应用于动态语言类型,比如JS、Python等,核心理念为:关注对象的行为(方法或属性…...

AI数据分析中的伪需求场景:现状、挑战与突破路径
在当今企业数字化转型浪潮中,AI数据分析产品如雨后春笋般涌现,但其中存在大量"伪需求场景"——看似创新实则难以落地的功能设计。本文将从技术限制、用户体验和商业价值三个维度,系统分析AI数据分析产品中常见的伪场景现象…...
大尺寸PCB如何重塑通信与新能源产业格局
在5G通信基站与新能源电站的机房内,一块块面积超过600mm600mm的PCB板正悄然推动着技术革命。作为电子设备的核心载体,大尺寸PCB凭借其高密度集成与复杂工艺,成为通信、能源等领域的“隐形功臣”。以猎板PCB为代表的厂商,凭借宽幅曝…...

base64与图片的转换和预览(高阶玩法)
1.完整的功能描述 功能概述 这是一个网页工具,支持用户输入不同格式的图片数据或上传本地图片文件,对图片进行预览、转换为多种格式,并支持导出不同格式的图片数据。 输入方式 1. 文本输入 :用户可以输入 Data URL、公网图片 UR…...

AI客服问答自动生成文章(基于deepseek实现)
小编一直在用AI做网站平台文章的润色或者二创。一直有一个想法,在自己网站加一个AI智能客服,通过文心或者deepseek来智能回答网友提出的问题,这样就能减少很多人工回复的麻烦,提高互动效率。 开发背景 其实很多网友提出的问题非…...
Langchain、RAG、Agent相关
ChatBot-销售型机器人 优化点:把相似度低于10条的请求Query打印出来。 RAG 类型:RAG、Latent RAG(产生一个回答,再用回答进行召回)、Logit RAG、Speculative RAG 个人感觉RAG召回可以分成3种:一种是que…...

Spring Web MVC基础理论和使用
目录 什么是MVC 什么是SpringMVC SpringMVC基础使用 建立连接 RequestMapping介绍 请求 传递参数 传递对象 参数重命名 传递数组 传递JSON数据 获取URL中参数 上传文件 获取Cookie/Session 获取Header 响应 返回静态页面 RestController和Controller的区别 返…...

课程审核流程揭秘:确保内容合规与用户体验
业务流程 为什么课程审核通过才可以发布呢? 这样做为了防止课程信息有违规情况,课程信息不完善对网站用户体验也不好,课程审核不仅起到监督作用,也是 帮助教学机构规范使用平台的手段。 如果流程复杂用工作流 说明如下ÿ…...

Mac电脑,idea突然文件都展示成了文本格式,导致ts,tsx文件都不能正常加载或提示异常,解决方案详细说明如下
有一天使用clean my mac软件清理电脑 突然发现idea出现了文件都以文本格式展示,如图所示 然后就卸载,计划重新安装,安装了好几个版本,并且setting->file types怎么设置都展示不对,考虑是否idea没卸载干净ÿ…...

HarmonyOS开发-组件市场
1. HarmonyOS开发-组件市场 HarmonyOS NEXT开源组件市场是一个独立的插件,需通过DevEco Studio进行安装,可以点击下载,无需解压,直接通过zip进行安装,具体安装和使用方法可参考HarmonyOsNEXT组件市场使用说明。Harmony…...
【Python 列表(List)】
Python 中的列表(List)是最常用、最灵活的有序数据集合,支持动态增删改查操作。以下是列表的核心知识点: 一、基础特性 有序性:元素按插入顺序存储可变性:支持增删改操作允许重复:可存储重复元…...

vison transformer vit 论文阅读
An Image is Worth 16x16 Words 20年的论文看成10年的哈斯我了 [2010.11929] 一张图像胜过 16x16 个单词:用于大规模图像识别的转换器 --- [2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 为什么transformer好训练&am…...
图像移动图像归类代码
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 图像移动图像归类代码 import os import shutilvalue_dir rJ:\IDM_data\cls_chinese_medicine\cls_chinese_medicine\traintrain_dir rJ:\IDM_data\cls_chinese_medicine\c…...
Day 15 训练
Day 15 对鸢尾花数据集进行处理,特征可视化,贝叶斯优化随机森林,Shap解释1. 导入必要的库2. 设置中文字体3. 加载数据集4. 查看数据5. 数据准备6. 贝叶斯优化随机森林7. 评估结果8. 绘制箱形图9. 绘制特征相关性热力图10. SHAP模型解释总结 对…...
Vue Router 3 使用详解:从零构建嵌套路由页面
Vue Router 是 Vue.js 官方的路由管理器,常用于构建单页面应用(SPA)。本文将手把手带你完成 vue-router3.6.5 的基本配置,并实现一个带有嵌套路由的页面结构。本文适用于 Vue 2.x 项目 一、安装 vue-router3.6.5 npm install vue…...

物理服务器紧急救援:CentOS系统密码重置全流程实战指南
前言 在企业IT运维实践中,物理服务器密码丢失是典型的"低概率高风险"事件。某金融科技公司曾因核心服务器密码遗失导致业务中断36小时,直接损失超过800万元。这起真实案例揭示了系统密码管理的关键性——当承载重要业务的物理服务器遭遇密码丢…...
第J7周:对于ResNeXt-50算法的思考
目录 思考 一、代码功能分析 1. 构建 shortcut 分支(残差连接的旁路) 2. 主路径的第一层卷积(11) 4. 主路径的第三层卷积(11) 5. 残差连接 激活函数 二、问题分析总结:残差结构中通道数不一致的…...
华为云短信接入实现示例
1)构建Springboot项目 2) 添加依赖 <dependency><groupId>com.huawei.apigateway</groupId><artifactId>java-sdk-core</artifactId><version>3.2.4</version> </dependency> 3) 配置文件 huaweiyun:sms:url:…...

Linux系统下使用Kafka和Zookeeper
Apache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目。它具有高吞吐量、可扩展性、持久性、容错性等特点,主要用于处理实时数据流。 Linux系统下使用Kafka 1.安装 Java Kafka 和 Zookeeper 都是基于 Java 开发的,所以需要先…...

Unity按钮事件冒泡
今天unity写程序时,我做了一个透明按钮,没图片,只绑了点击事件,把子对象文字组件也删了,空留一个透明按钮,此时运行时点击按钮是没有反应的,网上的教程说必须指定target graphic(目标…...