[操作系统]关于进程的管理

news2024/11/7 13:37:54

首先注明:仍然是复习阶段,所以和课本可能有些许冲突和不同,只是图谱来自于王道考研2022操作系统,旨在快速梳理操作系统的基本知识

1.进程的定义,概念和特征:

多道程序环境下,多个程序并发执行,因此他们将会失去封闭性,不适宜于管理,所以引入了进程这种概念.

进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位

进程是一个动态的过程,代表的是进程实体的运行,其中进行实体是静态的

(1)进程实体可以分为三部分:

1.PCB(进程控制块):系统通过进程控制块来感知进程的存在,进程的存在和删除也是对应PCB的创建和删除,这是一个数据结构,里面有描述进程基本的运行情况以及运行状态,是进程存在的唯一标志

2.程序段:也就是代码部分,同一段代码可以创建多个进程

3.数据段:就是进程在运行规程中所需要的数据

这三个部分构成了进程实体,是静态的部分

(2)进程的特征

进程具有动态性,并发,独立,异步,结构等特征

(3)进程的状态和转换

进程一共有五种状态(至少目前理解为五种,在一些考研书上是七种....)

分别为:

1.创建态:进程刚开始创建的时候是这个状态

2.就绪态:进程在等待处理机资源的时候是这个状态

3.运行态:运行态是进程在处理机中执行任务

4.阻塞态:当进程需要某种io或者资源而暂时获取不到的时候,进程会暂时进入阻塞状态

5.结束态:当进程执行完毕,或者出现了异常,则进入结束状

他们的转化关系如下所示

 (注意一个可能会考的点,就是运行态到阻塞态是进程主动变化的,阻塞到就绪时被动的)


(4)关于进程的控制
进程控制主要包括进程的创建,终止阻塞唤醒,切换

在操作系统中,一般吧进程控制用的程序段称之为原语,原语的特点就是执行期间不许中断

调度指的是判断资源分配给哪个进程,是一种决策

执行是将资源分配给进程,是一种动作

(5)进程的通信:

进程的通信一共有三种方式

其实是有四种,因为通过PV传递信号量也是一种方式,但是相对来说比较低级

1.共享文件:指的是一片共享的文件空间,是同互斥工具,让每个进程都能访问到这个片其余,有数据结构和存储区两种实现方式

2.消息传递:使用操作系统一工地消息传递方法,在进程之间传递信息.有两种实现方式:第一种是直接发送信息,信息会挂载到收信者的消息缓冲队列下方.第二种简介通信,发送进程把消息发送到某个中间实体上.

3.管道:管道是一种单向的,互斥的结构,可以从一边读取,从另一边填入

当管道为空的时候,才可以向管道内填入数据,否则会发生阻塞

管道为满的时候,才能从管道向外读取数据,否则也会发生阻塞

2.关于线程

(1)线程的基本概念

引入线程的目的是未来减少程序在并发时候付出的开销,提高操作系统的并发性能.可以理解为一个轻量级的进程,同一个进程内的线程切换,是不需要修改上下文,也不需要修改资源

在传统的操作系统中,进程是资源调度和分配的基本单位.而在引入线程的操作系统中,线程是调度的基本单位,进程是调度的基本单位

 线程几乎不拥有系统资源,但是可以访问所在进程的资源.线程之间可以并发进行,增加了吞吐量

(2)线程的实现方式:

线程有两种实现方式:

1.用户级线程,线程的管理都由应用陈鼓型实现,操作系统不知道这种线程的存在

2.内核级线程,线程的管理由内核完成,应用程序只有一个到达内核的接口,不能直接操作内核级线程,每个内核级别线程与应用程序的一个线程相关联

(多线程模型详见课本)

3.处理机调度

(1)处理机调度的概念:

进程数量一般远大于处理机数目,就要按一定的算法,将处理机资源分配给就绪队列中的进程,实现程序的并发执行

(2)调度的层次(不单是进程)

1.作业调度/高级调度:指的是把要执行的作业从外存拉到内存中

2.内存调度/中级调度:如果在内存中有的任务暂时无法执行,就要放回内存.同样,如果外存中有任务能执行了,就调回内存   此外在这个过程中PCB一直驻留在内存中等待变化

3.进程调度/低级调度:指的是在就绪队列中按照某种顺序和算法给进程分配处理机

另外补充三种不能进行进程调度的情况

在处理终端的过程中,不能进行进程的调度和切换

还有进程在操作系统内核临界区代码段,以及进行其他需要屏蔽中断的原子操作中,都不能进行切换进程和调度

(3)进程调度的方式

进程调度和切换无非就是两种方式

1.非抢夺式调度:就算现在有一个紧急任务需要处理机,但是现在处理机仍然先执行完正在执行的任务,也就是说,当前的进程只能主动终止

举例:程序运行成功自动退出,或者io操作阻塞

2.抢夺式调度:紧急任务可以剥夺处理机,也就是说当前的进程可以被强行打断

举例:时间片用完,更高优先级进行剥夺

(4)几种经典的调度算法:

1.先来先服务(FCFS)

先来先服务,顾名思义就是一个先进先出的队列,会按照顺序执行进程

2.短作业优先(SJF)

短作业优先算法会在就绪队列中寻找运行时间最短的进行执行

3.优先级调度(PP)

给进程设置优先级,会根据优先级进行执行

4.时间片轮转(LU)

分配时间片,如果任务小于时间片,则会退化为先来先服务算法

4.关于进程同步

(1)进程同步的相关概念

多道程序环境下进程是并发执行的,但是会出现一些问题

1.临界资源:临界资源指的是那些被不允许并行访问的资源,一次只能被一个进程使用,对于这些资源的访问必须互斥进行

2.临界区:临界区指的是访问临界资源的那部分代码

正常来说,如果想要访问临界资源,需要分为四个部分

进入区(判断能否进入临界区,并且设置标识)
临界区(访问临界资源的代码)
退出区(恢复标识)
剩余区(代码的其他部分)

(2)关于信号量

信号量机制是哟中用来解决同步和互斥的方法

使用两个原语wait(P)和signal(P),来对信号量进行+1和-1的操作,(也被称为P操作和V操作)

这两个原语也会在适当的时候发生阻塞

(3)关于管程和条件变量

除了信号量机制以外,管程也能用来处理同步和互斥方法

管程会把共享资源和访问这些资源的方法封装在一起,好像类一样,同一个时间内只允许一个进程进入管程完成操作,这个互斥机制是编译器实现的

如果某个进程不释放管程,则其他进程无法进入管程的捏,并且会被阻塞,阻塞的进程会放在一个队列中,这个队列就会被称作条件变量,根据不同的阻塞原因设置多个条件变量

如果对应条件满足,就会从某个条件变量中唤醒

5.关于死锁

死锁最简单的定义就是:资源的竞争,导致了死循环

死锁产生有四种必要条件,也是四个现象

(1)互斥:被争抢的资源无法共享

(2)不剥夺:无法通过剥夺来抢占资源

(3)保持并请求:死锁的进程自身抱有至少一个资源,并且还在试图获取别的资源

(4)循环等待:存在一个循环等待资源链,链中每个进程获得的资源都被其他进程请求

(另外注意,即使构成了循环等待链,也不一定是死锁,因为其他的进程(不在链中的)可能释放某个必要资源)

(2)处理死锁

1.死锁的预防

死锁的预防指的就是破坏上面四种情况:

(1)可以通过某些技术让资源能共享

(2)破解不剥夺有两种思路:第一种是如果一个进程进入死锁,就把被请求的资源全都吐出来.第二种是在操作系统的协助下,从别的进程身上剥夺资源

(3)保持并请求的破解方法为静态分配,在进程开始阶段就分配全部所需的进程,否则不运行

(4)循环的破解方法为给资源编号,进程只能按顺序请求资源,这个样可以保证已经被获取的资源不能被再次请求

2.死锁的避免

首先要说明一个概念:不安全队列

所谓不安全队列,其实指的是进程的推进顺序,如果某个推进顺序导致了资源分配不够而死锁,这个就算不安全队列.我们要避免进入不安全队列,防止死锁的发生

如果队列安全,则死锁一定可以避免.如果队列不安全其实也不一定死锁,因为其他进程可能会释放一些资源

银行家算法根本不会,笑死了

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

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

相关文章

Python自动化测试:pytest实现关键字驱动

在上一篇文章中,我编写了一个非常简单的关键字驱动程序, 不过这个程序只是跑通了功能,还有很多可以优化的地方,这篇文章我想通过 pytest 来简化自动化测试用例的编写,使用的是比较基础的 pytest 功能。 下篇文章我再写…

spark安装部署

spark安装部署 需要指导私信 所有节点安装scala,安装scala需要安装openjdk-8-jre(当前用户如果没有sudo权限可将其加入sudo组里),以ubuntu2204-LTS为例: $ sudo apt update $ sudo apt-get install openjdk-8-jre-headless -y (红…

【03Eclipse 窗口说明】对每个窗口和视图的功能和用途的详细说明导航栏编辑器窗口项目资源管理器

Eclipse 窗口说明 简介 Eclipse 是一款功能强大的集成开发环境(IDE),提供了丰富的窗口和视图来支持开发工作。本教程将详细介绍 Eclipse 主要窗口和常见视图的功能和用途。 主要窗口 1. 导航栏 导航栏位于 Eclipse 窗口的顶部&#xff0…

Java学习路线(22)——测试框架Junit

一、单元测试概念 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法正确性。 二、Junit测试框架 (一)概念: Jun…

认识、使用 yarn

概念 npm 是前端开发过程中常常使用的命令,比如构建 Vue 项目,亦或下载 Vue 项目依赖但是该命令效率低下,且容易出错,有没有更好的解决方案呢?有,Yarn ta是一个快速、可靠且安全的 JS 包管理工具: 快速:Yamn 本地缓…

黑客松指南|如何快速注册参与Sui x KuCoin Labs Hackathon

由Sui和KuCoin Labs联合主办的夏季黑客松,将为开发者、设计师、创业者和区块链爱好者提供一个交流和合作的平台。参与者将有机会利用Sui的先进技术和KuCoin Labs的资源,开发创新的区块链应用和解决方案。 我们鼓励参与者围绕「基础设施和工具」、「NFT、…

如何使用Jemeter对HTTP进行接口压测?没有比这个更详细的教程

目录 前言 1、首先添加一线程组 2、因为是对HTTP接口进行压力测试,所以需要在线程组下添加一HTTP请求(通过鼠标右键->添加->Sampler->HTTP请求 完成) 3、紧接着就是对HTTP请求进行设置了,主要设置服务器名称或IP&#…

10年心路历程:一个女测试工程师功能测试转向自动化测试/开发

十年测试心路历程: 由于历史原因,大部分测试人员,最开始接触都是纯功能界面测试,随着工作年限,会接触到一些常用测试工具,比如抓包,数据库,linux等。 我大学学的计算机专业&#xff…

【力扣刷题 | 第四天】 1.两数之和 454.四数之和

1. 两数之和 - 力扣(LeetCode) 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同…

【QT】解决继承QThread的子线程导致程序无法关闭主线程关闭太快导致子线程中的槽方法未执行

背景 使用串口进行通信 一共有三个线程 主线程负责界面的显示子线程1负责检测当前系统可用的串口子线程2负责差串口通信 子线程实现 在发生问题的最初,因为要一直检测当前系统的可用线程,所以线程1我使用继承自QThread实现的线程,其中重写ru…

github下载的项目如何上传到gitee

1、安装git 省略 2、github下载项目 如何注册、登录省略 3、上传到gitee 注册账号 省略 新建仓库 iot-plat创建过了,用iot-plat1演示 创建完的仓库 此处的https地址要记住,等会要用到 到本地项目目录 项目里面 Git命令操作 空白处右键&#xff…

CSP-S 第一轮笔试重点题

CSP-S提高组笔试题重点题汇总: 今天我给大家分享一些 CSP-S 第一轮笔试中的一些重点题,包含讲解。 第一题: 1.十进制小数13.375对应的二进制数是()。 A.1101.011 B.1011.011 C.1101.101 D.1010.01 解析&#x…

一起学SF框架系列5.3-模块Beans-bean与Spring容器的交互方式

正常情况下,应用中的bean同spring容器关系如下图: 尽管应用bean是Spring容器创建并建立依赖关系,应用只需使用bean即可,因此对bean来说Spring容器就是无感知的(无侵入编程)。但是还是存在需求需要应用bea…

OkHttp 框架设计剖析(含面试题)

作者:Calculus_小王 概述 OKHttp是一个基于HTTP协议的网络请求框架,它支持HTTP/2协议,连接复用和连接池,缓存策略等功能。它的核心设计是拦截器(Interceptor),它将请求的复杂逻辑切分成多个独立…

详解Java内部类、匿名内部类

内部类 内部类:类的第五个成员 1.定义:Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类. 2.内部类的分类: 成员内部类(静态、非静态 ) vs 局部内部类(方法内、代码块内、…

全网最强总结,Selenium自动化测试异常+处理总结,吐血整理...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 当测试工程师执行…

LVS负载均衡群集部署——DR模式

LVS负载均衡群集部署——DR模式 一、LVS-DR集群概述1、LVS-DR 工作原理2、LVS-DR数据包流量分析(同一局域网)3、LVS-DR中的ARP问题4、LVS-DR处理问题后的流量分析5、LVS-DR 特性 二、构建LVS-DR集群1、构建LVS-DR集群的步骤(理论)…

网工内推 | 网安专场,CISP认证优先,带薪年假,六险一金

01 MATRIX TECH 🔷招聘岗位:安全工程师 🔷职责描述: 1、负责信息安全防护系统的日常管理 、监测和优化提升等安全运营工作,包括终端安全、防护、漏洞检测、补丁、入侵检测、拒绝服务攻击防护、源代码安全检查等&#…

cool-admin框架后端使用-node版本,线上宝塔部署

版本6.x 宝塔新建一个文件夹和创建好数据库,记录账号和密码,自行创建,不做说明 特别注意,如果用宝塔node管理那里运行,如果按照到有pm2的,要先卸载,不可以共存,会有冲突 cool-vue前端…

.gitignore忽略文件不生效

前言 .gitignore忽略文件时git仓库很重要的一个配置,在创建仓库时就会有模板选择和忽略文件。 .gitignore忽略文件意思是在上传到代码仓库时,控制把哪些代码文件不上传到代码仓库。 在实际开发中其实写的代码是没有多大的,主要的是插件本地…