操作系统 第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多个线程进行执行(如果不支持的话就会单线程执行)

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

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

相关文章

位移监测仪,精准测量,专业守护

地质灾害如滑坡、泥石流、地面沉降等具有突发性强、破坏性大的特点,传统人工巡查方式存在效率低、时效性差等缺陷。对人类生命财产构成严重威胁,因此需要实时、精准的位移监测手段。地质灾害监测预警系统集成了多种传感器,对地表及地下形变进…

dropout层

从你提供的图片来看,里面讨论了 Dropout 层,让我为你解释一下它的工作原理和作用。 Dropout 层是什么? Dropout 是一种常用的正则化技术,用于避免神经网络的 过拟合(overfitting)。过拟合是指模型在训练数…

C++八股 —— vector底层

vector底层为动态数组 类构成 class vector : protected _Vector_base_Vector_base: _M_start:容器元素开始的位置_M_finish:容器元素结束的位置_M_end_of_storage:动态内存最后一个元素的下一个位置 构造函数 无参构造 根据性能优先规则&a…

LLM量化方法:ZeroQuant、LLM.int8()、SmoothQuant、GPTQ、AWQ

文章目录 TLDR;量化分类量化时机量化粒度ZeroQuant: Efficient and Affordable Post-Training Quantization for Large-Scale Transformers细粒度硬件感知量化低成本逐层知识蒸馏(Layer-by-layer Knowledge Distillation, LKD) LLM.int8(): 8-bit Matrix…

SIGIR 2025端到端生成式推荐ETEGRec

文章目录 1. 背景2. 方法2.1 框架图2.2 问题定义2.3 Item Tokenizer2.4 Generative Recommender2.5 ⭐️Sequence-Item Alignment2.6 ⭐️Preference-Semantic Alignment2.7 交替优化 3. 总结 现阶段 GRM 大多是两阶段的模型,第一阶段进行内容理解-行为语义对齐&…

STM32CubeMX安装及使用分享

说是教程,属实是不敢当,只是把自己觉得较为正式的方式分享给各位,如有问题请提出大家一起讨论。 文章目录 软件下载软件安装软件使用开发板工程单片机工程单片机工程创建单片机工程配置界面单片机工程具体配置引脚功能配置系统时钟配置工程配…

MySQL报错解决过程

我在调试datagrip的时候,显示拒绝连接,开始的时候,我以为只是服务没有开启,结果到后来在网上搜索各种解决办法无果后,就选择卸载,卸载之后安装新的MySQL 以下就是我的解决过程。 如果只是在使用外置软件&…

动态规划-62.不同路径-力扣(LeetCode)

一、题目解析 机器人只能向下或向左,要从Start位置到Finish位置。 二、算法原理 1.状态表示 我们要求到Finish位置一共有多少种方法,记Finish为[i,j],此时dp[i,j]表示:到[i,j]位置时,一共有多少种方法,满…

Qt开发:项目视图(Item Views)的介绍和使用

文章目录 一、清单视图(List View)1.1 基本概念1.2 使用示例(文字列表)1.3 图标文字(图标模式)1.4 常用设置1.5 完整示例 二、树视图(Tree View)2.1 基本概念2.2 常用类简介2.3 快速…

GoWeb开发(基础)

Go(Golang)是一种高效、简洁的编程语言,特别适合Web开发。以下是详细的Go Web开发指南,涵盖从基础到进阶的内容。 --- 一、Go Web开发基础 1. 标准库 net/http Go 内置 net/http 包,支持快速构建 Web 服务。 - 基本示…

GSENSE2020BSI sCMOS科学级相机主要参数及应用场景

GSENSE2020BSI sCMOS科学级相机是一款面向宽光谱成像需求的高性能科学成像设备,结合了背照式(Back-Side Illuminated, BSI)CMOS技术与先进信号处理算法,适用于天文观测、生物医学成像、工业检测等领域。以下是其核心特点及技术细节…

【日撸 Java 三百行】Day 9(While语句)

目录 Day 9:While 语句的基本使用方法 一、基础知识及案例分析 二、代码及测试 拓展:流程控制语句专题补充 小结 Day 9:While 语句的基本使用方法 Task: while 语句本质上比 for 更基础, 因此可以替代后者. 但 for 在很多时候…

React 第三十七节 Router 中 useOutlet Hook的使用介绍以及注意事项

React Router 中的 useOutlet 是 v6 版本新增的 Hook&#xff0c;用于在父路由组件中访问当前嵌套的子路由元素。它提供了比 <Outlet> 组件更灵活的控制方式&#xff0c;适合需要根据子路由状态进行动态处理的场景。 一、useOutlet的基本用法 import { useOutlet } fro…

TDengine 在智慧油田领域的应用

简介 智慧油田&#xff0c;亦称为数字油田或智能油田&#xff0c;是一种采用尖端信息技术与先进装备的现代油田开发模式。该模式通过实时更新油气田层析图及动态生产数据&#xff0c;显著提高了油气田的开发效率与经济价值。 信息技术在此领域发挥着至关重要的作用&#xff0…

关于AI 大数据模型的基础知识 杂记

一、LM Studio LM Studio下载地址&#xff1a;LM Studio - Discover, download, and run local LLMshttps://lmstudio.ai/LM Studio是使用electron架构&#xff0c;引用的llama.cpp库。 下载后的模型存储于 /User/Admin/.lmstudio/models中。 二、llama.cpp库下载地址 llam…

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…

利用GPT实现油猴脚本—网页滚动(优化版)

在浏览网页的时候&#xff0c;发现有的网页没有直达最前这样的功能&#xff0c;所有心血来潮利用ChatGPT写了一个油猴脚本以实现此功能&#xff0c;在网站上出现一个可以自由拖动的滑块。 声明&#xff1a;引用或二创需注明出处。 如图&#xff1a; 点击即可直达当前网页最前、…

MySQL基础关键_013_常用 DBA 命令

目 录 一、MySQL 用户信息存储位置 二、新建用户 1.创建本地用户 2.创建外网用户 三、用户授权 1.说明 2.实例 四、撤销授权 五、修改用户密码 六、修改用户名、主机名/IP地址 七、删除用户 八、数据备份 1.导出数据 2.导入数据 &#xff08;1&#xff09;方式…

计算机视觉与深度学习 | 图像匹配算法综述

图像匹配算法综述 图像匹配 图像匹配算法综述一、算法分类二、经典算法原理与公式1. **SIFT (Scale-Invariant Feature Transform)**2. **ORB (Oriented FAST and Rotated BRIEF)**3. **模板匹配(归一化互相关,NCC)**4. **SuperPoint(深度学习)**三、代码示例1. **SIFT 特…

切比雪夫不等式详解

切比雪夫不等式详解 一、引言 切比雪夫不等式&#xff08;Chebyshev’s Inequality&#xff09;是概率论和统计学中最重要的基本定理之一&#xff0c;由俄国数学家切比雪夫&#xff08;P. L. Chebyshev&#xff0c;1821-1894&#xff09;提出。它为我们提供了一个强大工具&am…