操作系统:进程与线程(一)进程与线程的概念及处理机调度算法

news2024/11/19 13:15:08

一战成硕

    • 2.1 进程与线程
      • 2.1.1 进程的概念和特征
      • 2.1.2 进程的状态与转换
      • 2.1.3 进程的组织
      • 2.1.4 进程控制
      • 2.1.5 进程的通信
      • 2.1.6 线程和多线程模型
    • 2.2 处理机调度
      • 2.2.1 调度的概念
      • 2.2.2 调度的目标
      • 2.2.3 调度的实现
      • 2.2.4 典型的调度算法

2.1 进程与线程

2.1.1 进程的概念和特征

  1. 进程的概念
    实现操作系统的并发性和共享性。
    系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。
    由程序段、相关数据和PCB三部分构成了进程实体(进程映像)。
    所谓创建进程,实质上是创建进程实体中的PCB,而撤销进程,实际是撤销PCB。
    进程映像是静态的,进程则是动态的。
    PCB是进程存在的唯一标志。

进程从不同的角度有不同的定义:

  1. 进程是程序的一次执行
  2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
    3)进程是具有独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位。
  1. 进程的特性
    1)动态性
    2)并发性
    3)独立性
    4)异步性

2.1.2 进程的状态与转换

在这里插入图片描述
基本状态
1)运行态:进程正在处理机上运行。在单处理机中,每个时刻仅有一个进程处于运行态。
2)就绪态:进程获得处理机外一切所需资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常排成一个就绪队列。
3)阻塞态:又称等待态。进程正在某一个事件而暂停运行,如等待某资源可用(不包括处理机)或等待输入输出完成,即使处理机空闲,也不能运行,根据阻塞原因不同设置多个阻塞队列。
非基本状态
4)创建态:进程正在被创建
5)结束态:进程从系统中消失,进一步处理资源释放和回收工作。

2.1.3 进程的组织

  1. 进程控制块
    PCB是进程实体的一部分,是进程存在的唯一标志。
    在这里插入图片描述

常见组织方式有两种:链式和索引

  1. 程序段
    被进程调度程序调度到cpu执行的程序代码段。程序可被多个进程共享,即多个进程可以运行同一个程序。
  2. 数据段
    可以是进程对应程序加工的原始数据,也可以是程序执行时产生的中间或者最终结果。

在这里插入图片描述

2.1.4 进程控制

原语:执行具有原子性,不可中断,一气呵成。
关中断指令
开中断指令
cpu执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后,才会恢复检查。

  1. 进程的创建
    允许一个进程创建另一个进程,创建者称为父进程,被创建者称为子进程,可以继承父进程所拥有的资源,子进程撤销,继承的资源也归还父进程。父进程撤销,其所创建的子进程也通常同时撤销。
    操作系统创建一个新进程的过程如下(创建原语):
    1)为新进程分配唯一一个进程标志。并申请一个空白的PCB,若PCB请求失败,则创建失败。
    2)为进程分配其运行所需资源,如果资源不足,则并不是创建失败,而是处于创建态。
    3)初始化PCB,主要包括初始化标志信息,初始化处理机状态信息和初始化处理机控制信息,以及设置进程优先级。
    4)若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。

在这里插入图片描述

  1. 进程的终止
    引起进程终止的事件有:
    a正常结束
    b异常结束
    c外界干预

操作系统终止进程的过程如下(终止原语):
1)根据被终止进程的标识符,检索出该进程的PCB,从中读出该进程的状态。
2)若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
3)若该进程还有子孙进程,则应将其所有子孙进程终止。
4)将该进程所拥有的全部资源,或归还其父进程,或归还操作系统。
5)将该PCB从所在队列链表中删除。
在这里插入图片描述

  1. 进程阻塞和唤醒

进程可通过调用阻塞原语(block)使自己由运行态变为阻塞态,阻塞是进程自身的一种行为。
只有处于运行态的进程(获得cpu)才能将其转变为阻塞态,阻塞原语执行过程如下:
1)找到将要被阻塞进程的PCB
2)若该进程为运行态,则保护其现场,将其转换为阻塞态,停止运行。
3)把该PCB插入相应等待队列,将处理机资源调度给其他就绪进程。

阻塞进程所期待的事件出现时,调用唤醒原语(wakeup)将该等待进程唤醒,唤醒原语执行过程如下:
1)找到PCB
2)将其从等待队列中移出,并设置其状态为就绪态。
3)把该PCB插入就绪队列,等待调度程序调度。

注意,阻塞和唤醒原语要成对使用。

在这里插入图片描述

  1. 进程的切换
    在这里插入图片描述

2.1.5 进程的通信

进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式,高级通信方法有以下三类。

  1. 共享存储
    在通信进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读写操作实现进程之间的信息交换。
    在这里插入图片描述
    在对共享空间进行读写操作时,需要使用同步互斥工具(如P操作,V操作)对共享空间的读写进行控制。
    共享存储又分为两种,低级共享是基于数据结构的共享,高级共享是基于存储区的共享。
    操作系统只负责提供共享空间和同步互斥工具,数据交换则由用户自己安排读写指令完成。
    注意,进程空间一般是独立的,进程运行期间一般不能访问其他进程空间,想让两个进程共享空间,必须通过特殊的系统调用实现。而进程内的线程是自然共享进程空间的。

  2. 消息传递

在消息传递系统中,进程间的数据交换一格式化的消息(Message)为单位。若通信间的进程不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程提供系统提供的发送消息和接收消息的两个原语进行交换,这种方式隐藏了通信的细节,通信对用户透明,简化了通信的程序设计。
在这里插入图片描述

  1. 管道通信
    所谓管道,是指连接一个读进程和一个写进程以实现他们之间的通信一个共享文件,又名pipe文件(管道文件)。
    管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。
    在这里插入图片描述
    在linux中,管道是一种使用频繁的通信机制。本质上管道也是一种文件,但又和一般文件不同,管道可以克服使用文件通信的两个问题,具体表现如下:
    1)限制管道大小
    2)读进程可能工作地比写进程快。

注意:管道只能支持半双工通信,要实现互动通信,要定义两个管道。

在这里插入图片描述

2.1.6 线程和多线程模型

  1. 线程的基本概念

引入线程的目的是减小程序在并发执行时所付出的时空开销,提高操作系统并发性能。
线程可以理解为轻量级的进程,是一个基本的cpu执行单元,也是程序执行流的最小单元。由线程ID,程序计数器,寄存器集合和堆栈组成。
线程是进程的一个实体,是被系统独立调度和分配的基本单元。线程不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程可以并发执行。由于线程直接相互制约,致使线程在运行中呈现间断性。
线程也有就绪阻塞运行三种状态。
在这里插入图片描述

  1. 线程与进程比较
    1)调度:线程切换代价低于进程
    2)并发性:使操作系统具有更好的并发性
    3)拥有资源:线程不拥有资源
    4)独立性:进程有独立地址和资源,同一进程中线程共享进程的地址空间和资源
    5)系统开销:创建撤销进程系统开销明显大于创建撤销线程
    6)支持多处理机系统:单线程进程,进程只能运行在一个处理机,多线程进程,可将多个线程分配到多个处理机上执行。

  2. 线程的属性
    在这里插入图片描述

  3. 线程的状态与转换
    在这里插入图片描述

在这里插入图片描述

  1. 线程的组织与控制
    在这里插入图片描述
  2. 线程的实现方式
    线程的实现可以分为两类:用户级线程、内核级线程(内核支持的线程)
    (1)用户级线程
    在这里插入图片描述
    (2)内核级线程
    在这里插入图片描述
  3. 多线程模型

在这里插入图片描述

2.2 处理机调度

2.2.1 调度的概念

在这里插入图片描述

  1. 调度的基本概念
    处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发执行。

  2. 调度的层次
    一个作业从提交开始直到完成,往往要经历以下三级调度:
    在这里插入图片描述
    (1)高级调度(作业调度)
    内存与辅存之间的调度。对于每个作业只调入一次,调出一次。
    (2)中级调度(内存调度)
    中级调度实际上是存储器管理中的对换功能。
    (3)低级调度(进程调度)
    按照某种算法从就绪队列中选取一个进程,将处理机分配给它,是一种基本调度。

  3. 三级调度联系
    在这里插入图片描述
    在这里插入图片描述

  4. 补充:七状态模型
    在这里插入图片描述

2.2.2 调度的目标

评价标准:
1)cpu利用率:
在这里插入图片描述
2)系统吞吐量:
表示单位时间内cpu完成的作业数量
3)周转时间:
在这里插入图片描述
4)等待时间:
进程处于处理机等待时间之和
衡量一个算法的优劣,常常只需简单地考察等待时间。
5)响应时间
用户提交请求到系统首次响应所用时间。是重要衡量标准。

2.2.3 调度的实现

在这里插入图片描述

  1. 调度程序(调度器)
    在这里插入图片描述
    在这里插入图片描述
  2. 调度的时机、切换与过程
    在这里插入图片描述
  3. 进程调度方式
    在这里插入图片描述
    在这里插入图片描述
  4. 闲逛进程
    在这里插入图片描述
  5. 两种线程的调度
    在这里插入图片描述

在这里插入图片描述

2.2.4 典型的调度算法

  1. 先来先服务(FCFS)调度算法
    每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使其投入运行,直到运行完成或因某种原因而阻塞才释放处理机。
    在这里插入图片描述
    在这里插入图片描述

  2. 短作业优先(SJF)调度算法
    从后备队列中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 高响应比优先(HRRN)调度算法
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 时间片轮转(RR)调度算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 优先级调度算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 多级反馈队列调度算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

MODBUS-TCP通信客户端如何访问服务器端RS485总线上的从站(SMART PLC梯形图程序)

SMART PLC的 MODBUS-TCP通信请参考下面文章链接: S7-200SMART PLC ModbusTCP通信(多服务器多从站轮询)_matlab sumilink 多个modbustcp读写_RXXW_Dor的博客-CSDN博客文章浏览阅读6.2k次,点赞5次,收藏10次。MBUS_CLIENT作为MODBUS TCP客户端通过S7-200 SMART CPU上的以太网…

若依ruoyi-nbcio如何做一个仿钉钉流程设计器的思考

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 看到有些流程图采用仿钉钉的流程设计,比如下面界面: 这种方式虽然简单&#xff0c…

Python 中的 Pexpect

我们将通过示例介绍Python中的Pexpect。 Python 中的 Pexpect Python 是一种非常流行的语言,用于数据科学和机器学习。 它是一种非常强大的语言,因为 Python 具有可用于不同目的的内置库。 在这篇文章中,我们将研究Python中的pexpect。 Pex…

找不到msvcr90.dll无法继续执行代码怎么解决

msvcr90.dll是Microsoft Visual C 2008 SP1可再发行程序包中的一个动态链接库文件。它包含了用于支持C编程语言的类和函数。动态链接库是一种可重用的代码模块,它可以在多个应用程序之间共享,从而减少代码量并提高开发效率。那么遇到msvcr90.dll丢失怎么…

【计算机网络】从输入URL到页面都显示经历了什么??

文字总结 ① DNS 解析:当用户输入一个网址并按下回车键的时候,浏览器获得一个域名,而在实际通信过程中,我们需要的是一个 IP 地址,因此我们需要先把域名转换成相应 IP 地址。浏览器会首先从缓存中找是否存在域名&…

【继承之extends关键字和super关键字】

文章目录 继承是什么?为什么要继承?怎么继承?继承的语法 关键字extends 子类中访问父类的成员变量1.子类和父类的成员变量不同名2.子类和父类成员变量同名 子类中访问父类的成员方法1. .子类和父类的成员方法名字不同2..子类和父类的成员方法…

JUC并发编程之Synchronized锁优化

目录 1. Java对象头 2. Synchronized锁优化 2.1 偏向锁 2.2 轻量级锁 2.3 重量级锁 2.4 各种锁对比 1. Java对象头 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance D…

数据结构 C语言 2.1 线性表抽象数据类型 2.2 小议顺序表

一、线性表抽象数据类型 线性表的定义 定义:零个或多个数据元素的有限序列 线性表的特点: 1.它是一个序列 数据元素之间是有序的 数据元素之间是一对一的关系 2.有限性 线性表的数据元素个数是有限的 注意:零个数据元素的有限序列又…

NewStarCTF2023week4-依旧是空白(snow隐写)

打开附件的空白图片,CRC报错,很可能是高度被修改 爆出图片正确的宽度和高度并修复 打开看到密码 password: s00_b4by_f0r_y0u 另一个文件是空白的txt文档,大致看了一下像是不可见字符,尝试 white_space,发现不是&…

Uservue 中 keep-alive 组件的作用

目录 前言 用法 代码 理解 keep-alive 是 Vue.js 中一个内置的组件,它能够将不活动的组件实例保存在内存中,防止其被销毁,以便在后续需要时能够快速重新渲染。这个功能在一些需要频繁切换但不希望每次都重新渲染的场景中非常有用&#xf…

详解预处理(2)

目录 #undef 命令行定义 条件编译 NO1. NO2.多个分支的条件编译 NO3.判断是否被定义 NO4.嵌套指令 文件包含 头文件被包含的方式 本地文件包含 库文件包含 嵌套文件包含 其他预处理指令 今天接着继续讲解预处理的点,前面已经深入学习了#define。 #unde…

基于Springboot 游戏娱乐信息平台-计算机毕设 附源码 04691

Springboot 游戏娱乐信息平台 目 录 摘要 1 绪论 1.1研究内容 1.2国内外研究慨况 1.3研究方法 1.4论文结构与章节安排 2 游戏娱乐信息平台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性…

EvilAppleJuice(邪恶苹果汁)-ESP32C3项目(iphone疯狂弹窗)

原作者作品页: ckcr4lyf/EvilAppleJuice-ESP32: Spam Apple Proximity Messages via an ESP32 (github.com) 代码优化一下,增加呼吸灯效果方便知道设备运行情况,我是用arduino烧录 仅作交流学习使用,请勿在公开场合滥用 运行效果…

黑豹程序员-Python入门-for循环

文章目录 1、for循环语法2、巩固案例:长安三万里你记得的三位诗人?实现步骤:第一步:新建一个列表,存储诗人姓名第二步:列表用[]表示,元素之间用逗号,分隔第三步:用列表[索引]的方法将…

莫名其妙el-table不显示问题

完全复制element-ui中table代码,发现表格仍然不显示,看别人都说让降低版本,可我不想降低啊,不然其他组件有可能用不了,后来发现可以通过配置vite.config.js alias: {: path.resolve(__dirname, src),vue: vue/dist/vue…

【Docker】Python Flask + Redis 练习

一、构建flask镜像 1.准备文件 创建app.py,内容如下 from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostos.environ.get(REDIS_HOST,127.0.0.1),port6379)app.route(/) def hello():redis.incr(hits)return f"Hello Container W…

nexus5x 刷机root

刷机 进入fastboot模式 adb reboot bootloader 或者开机 音量减 解锁bootloader fastboot oem unlock 刷入rom包 下载 Nexus 和 Pixel 设备的出厂映像 | Google Play services | Google for Developers 选一个合适的ROM包下载到电脑的某个位置,然后unzip解…

国家网信办发布第十三批境内区块链信息服务备案编号

2019年2月15日《区块链信息服务管理规定》(以下简称《管理规定》)正式实施以来,国家互联网信息办公室依法依规组织开展备案审核工作,已发布2批次共506个境内区块链信息服务名称及备案编号,近日正式发布第三批共224个境…

剪映怎么合并两个视频?几个步骤轻松搞定!

合并两个视频可以方便我们管理、节省存储空间、提高处理效率、满足特定要求或实现特定效果等目的。而剪映作为我们常用的视频处理软件,如何利用其合并两个视频呢?一起来看看吧~ 方法一:使用剪映专业版 1、运行剪映,主…

关于maven项目中依赖无法下载的解决方案

场景描述 在下载selenium的依赖时,虽然相依的jar包已经存在,但是在idea中依然报红 解决方案 在jar无法正常下载时可以尝试使用——找到下载的文件夹,删除整个文件夹后重新通过链接下载 过程演示 C:\Users\lenovo\.m2 所有依赖的jar包都在这…