[操作系统笔记]调度与死锁杂项知识点

news2024/11/28 4:51:49

部分定义截取自书本

在这里插入图片描述

管态和目态

这说的是处理机的执行状态

管态又称为特权态,系统态,核心态。CPU在管态下可以执行指令系统的全集。如果程序处于管态,则该程序可以访问计算机的任何资源,它的资源访问权限不受限制,通常,操作系统在管态下运行。

目态又称为常态或者用户态。机器处于目态时,程序只能执行非特权指令,不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间。

一般情况下,用户程序只能在用户态运行

管态时可以执行所有指令(除访管指令)

目态到管态的切换方式

  • 系统调用
  • 异常
  • I/O设备的中断

其中系统调用可以认为用户进程主动发起,异常和外部设备中断是被动的

从目态到管态的转换是由硬件完成的,因为此操作频繁且快速,所以需要硬件实现

访管指令

访管指令不是特权指令

访管指令是可以在目态下执行的指令。用以解决用户程序要完成在目态下无法完成的工作的问题。用户程序的访管指令在执行时被中央处理器取到,就产生一个中断事件,中断装置就会把中央处理器转换成管态,并让操作系统处理该中断事件。操作系统分析访管指令中的参数,在管态下由操作系统完成用户程序的请求。系统调用功能完成后,操作系统把中央处理器的管态改为目态,并返回到用户程序。

中断

可以看计算机组成原理——程序中断方式

用户程序在目态下使用特权指令引起的中断属于:访管中断

由当前正在执行的进程之外的源引起的中断属于:外部中断

中断处理是操作系统必须提供的功能

中断系统一般由相应的硬件和软件组成的。(一般的中断请求由硬件实现,中断处理由软件完成)

计算机系统中判断是否有中断事件发生应是在执行完一条指令后

能影响中断响应次序的技术是中断屏蔽技术

中断是现代操作系统必须提供的功能

PV操作与信号量

用PV操作实现进程间的同步和互斥,PV操作分为P操作原语和V操作原语,操作对象是信号量

用V操作唤醒一个等待进程时,进程进入就绪态,并且能够唤醒说明原本mutex值小于0,

  • 互斥信号量初值只能为1(取值范围只有-1、0、1)
  • 用作同步的信号量初值需要根据问题来确定(用户决定,大于等于0)
操作行为作用
P操作(wait)将信号量的值减1如果信号量>=0,则该进程继续执行,否则进程进入等待队列,置为等待状态
V操作(signal)将信号量的值加1如果信号量>0,则该进程继续执行,否则释放等待队列中第一个等待信号量的进程

注意这里的继续执行条件,P是信号量>=0,而V是信号量>0,这是不一样的(看下面代码就一目了然了)。

拿互斥信号量S举例子,初始值为1,有一个进程A要使用临界资源,于是A.wait(S),此时S为0,还是可以执行的。然后另一个进程B也要使用临界资源,于是B.wait(S),但是执行不到S--,一直在while循环,所以不能执行临界区操作。只有A用完了临界资源并A.signal(S),此时S变为了1,然后正在执行且卡在while循环里的B.wait(S)就能运行到S--,然后B.wait(S)就执行完了,就可以执行B要进行的临界区操作了。

wait(S){
	while(S <= 0);
	S--;
}
signal(S){
	S++;
}

图解及题目看这个:图解PV操作

临界资源与临界区

临界区:每个进程中访问临界资源的那段程序

临界资源:一次仅允许一个进程使用的共享资源。

临界区是系统提供的一种数据结构,程序中可以声明一个该类型的变量,之后用它来实现对资源的互斥访问。

调度原则

  1. 如果有若干进程请求进入空闲的临界区(空闲即0进程访问),一次仅允许一个进程进入。
  2. 任何时候,处于临界区内的进程不可多于一个(0或1),若已有进程进入自己的临界区,则其它想进入自己临界区的进程必须等待。
  3. 进行临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
  4. 如果其它进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

进程与进程状态

详细内容看这篇【操作系统】第六话·线程是进程的(宝ᴗ宝)嘛?

引入进程的目的:更好地使多道程序并发执行,提高资源利用率和系统吞吐量。

引入线程的目的:减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能


  • 一个进程至少包含一个主线程(没说一定包含多个线程)

  • 线程是比进程更小的(但不能独立运行的)基本单位

  • 同一个进程中线程切换不会引起进程切换,不同进程的线程切换会引起进程切换。

进程调度

进程调度(Process Scheduling)是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程。

所以提到“进程被调度程序选中”,一定是由就绪态到运行态

进程死锁

死锁状态一定是不安全状态,产生死锁的根本原因是系统资源分配不足和进程推进顺序非法,资源的有序分配策略可以破坏死锁的循环等待条件

虽然进程在运行过程中可能会发生死锁,但产生进程死锁是必须具备一定条件的。综上所述不难看出,产生死锁必须同时具备下面四个必要条件,只要其中任一个条件不成立,死锁就不会发生:

(1)互斥条件。进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只能被一个进程占用。如果此时还有其它进程请求该资源,则请求进程只能等待,直至占有该资源的进程用毕释放。

(2)请求和保持条件。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。

(3)不可抢占条件。进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时由自己释放。

(4)循环等待条件。在发生死锁时,必然存在一个进程一资源的循环链,即进程集合 P 0 , P 1 , P 2 , … , P n {P_0,P_1,P_2,…,P_n} P0,P1,P2,,Pn中的 P 0 P_0 P0正在等待一个 P 1 P_1 P1占用的资源, P 1 P_1 P1正在等待 P 2 P_2 P2占用的资源,……, P n P_n Pn正在等待已被 P 0 P_0 P0占用的资源。

在这里插入图片描述

有序资源分配法是死锁的预防策略

资源分配图及其化简

在这里插入图片描述
(图源网络)书本上讲的老费劲了,其实很简单,甭管图长什么样子,圆圈代表进程,方框代表资源类型,方框中的圆圈/点代表该类资源中的一个资源。

  • 指向进程的代表已分配
  • 从进程指出去的代表请求

这就完事了。比如说上右图,R1指向P2就是说R1类型的一个资源分配给了进程P2,P3指向R3则意味着进程P3请求一个R3类型的资源


化简的结果只有两种,死锁或不死锁

或者说化简的目的就是检测检测系统处于该状态是否死锁

在这里插入图片描述

“请求”就是“有商榷余地”,比如上面图a, P 1 P_1 P1 P 2 P_2 P2都请求 R 2 R_2 R2 R 2 R_2 R2尚有一个空余,此时单拿某个进程(比如 P 2 P_2 P2)看,不看来自其他进程(相应的就是 P 1 P_1 P1)的请求分配,那么它可以满足运行的资源需求,所以可以删掉。但是图b就是死锁状态。

B站的这道题目解析:死锁定理

银行家算法

首先就是安全状态和安全序列。

安全状态就是安全性算法要确保的,就是从进程集合中找某个进程,它已分配的资源(或者加上现有的可分配的资源)能执行,然后让它执行了,释放掉所有资源,然后看剩余的进程集合,继续按上面的要求找,直到所有进程都执行且释放了,这个执行的顺序就是安全序列。也可能找不到,那么就没有安全序列。

不如看看这个:操作系统银行家算法模拟实现(C语言版)

系统处于不安全状态未必死锁,因为资源的释放可以打破死锁。系统处于不安全状态一定死锁(即死锁时一定处于不安全状态)

解除死锁

  • 资源剥夺法
  • 撤销进程

一般不从非死锁进程处抢夺资源

题目

下列调度算法中,( ) 调度算法是绝对可抢占的。

A. 先来先服务
B. 时间片轮转
C. 优先级
D. 短进程优先

时间片轮转


下列关于死锁的说法正确的有( )。
I.死锁状态一定是不安全状态
II.产生死锁的根本原因是系统资源分配不足和进程推进顺序非法
III.资源的有序分配策略可以破坏死锁的循环等待条件
IV.采用资源剥夺法可以解除死锁,还可以采用撤销进程方法解除死锁

全正确


关于优先权大小的论述中,正确的是()。

A、计算型作业的优先权,应高于IO型作业的优先权
B、用户进程的优先权,应高于系统进程的优先权
C、在动态优先权中,随着作业等待时间的增加,其优先权将随之下降
D、在动态优先权中,随着进程执行时间的增加,其优先权降低

D。I/O设备和CPU可以并行工作。

【要点】:优先让I/O繁忙型作业优先运行的话,可以使I/O设备尽早投入工作。从而使资源利用率,系统吞吐量得到提升。

系统进程(如接收进程、对换进程、磁盘 I/O 进程)的优先权高于一般用户进程的优先权。对资源需求少的进程应赋予较高的优先权。


某计算机系统中有8台打印机,由K个进程竞争使用,每个进程最多需要3台打印机。该系统可能发生死锁的K的最小值是____

4,意思是4个进程,每个都需要3台打印机时,且都得到两台(此时无剩余),所以死锁


三个进程共享四个同类资源,这些资源的分配与释放只能一次一个。已知每-一个进程最多需要两个该类资源,则该系统( )。

A、有些进程可能永远得不到该类资源
B、必然有死锁
C、进程请求该类资源必然能得到
D、必然是死锁

C


系统的资源分配图在下列情况中,无法判断是否处于死锁的情况有()。
I.出现了环路
II.没有环路
II.每种资源只有一个,并出现环路
IV.每个进程结点至少有一条请求边

A、I、II、III、IV
B、I、II、IV
C、I、IV
D、以上答案都不正确

C

  • 出现了环路只是满足了循环等待的必要条件,满足必要条件不一定会导致死锁
  • 没有环路一定不会死锁
  • 如果每种资源只有一个,并出现环路,是一定死锁的(不是题目中的无法判断)

系统中有3个不同的临界资源R1、R2和R3,被4个进程p1、p2、p3及p4共享。各进程对资源的需求为: p1申请R1和R2,p2申请R2和R3,p3 申请R1和R3,p4申请R2。若系统出现死锁,则处于死锁状态的进程数至少是( )。
A、1
B、2
C、3
D、4

C。画个图就出来了

这个图是需求关系

R_1
R_2
R_3
p1
p2
p3
p4

这是一种死锁情况(虚线是由于别的进程占有而分配不成的情况)

R_1
R_2
R_3
p1
p2
p3
p4

若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中,正确的是()。
I. S1会限制用户申请资源的顺序,而S2不会
II. S1需要进程运行所需资源总量信息,而S2不需要
III. S1不会给可能导致死锁的进程分配资源,而S2会
A、仅I、II
B、仅II、III
C、仅I、III
D、I、II、III

B

资源分配顺序和用户的申请顺序是两码事,不过都会限制资源分配顺序

其他

操作系统提供给应用程序的接口是系统调用(不是库函数)

分时操作系统的时间片一定,那么用户数越多,则响应时间越长(用户数越多,单位时间就变长,则执行一次时间变长,即响应时间长)

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

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

相关文章

iOS16 中的 3 种新字体宽度样式

前言 在 iOS 16 中&#xff0c;Apple 引入了三种新的宽度样式字体到 SF 字体库。 Compressed Condensed Expend UIFont.Width Apple 引入了新的结构体 UIFont.Width&#xff0c;这代表了一种新的宽度样式。 目前已有的四种样式。 standard&#xff1a;我们总是使用的默认…

centos安装nacos

一、安装JDK环境和MySQL环境 jdk环境安装:centos安装jdk1.8_java-zh的博客-CSDN博客 MySQL环境安装:centos安装mysql5.7_java-zh的博客-CSDN博客 二、拉取nacos项目 GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载页&#xff1a;https://…

ClickHouse教程 — 第一章 ClickHouse单机版安装

ClickHouse教程 — 第一章 ClickHouse单机版安装1 版本区别1.1 clickhouse-client-21.1.9.41以上版本1.2 clickhouse-client-21.1.9.41以下版本2 clickhouse-client-21.1.9.41以上版本2.1 下载2.2 解压安装2.3 启动2.4 clickhouse相关目录2.5 允许远程访问3 clickhouse-client-…

应用地球物理+AI:智能地球勘探

《地球物理人工之智能和信息前沿技术学术报告会》 主讲人&#xff1a;陆文凯 1. 地球物理学 地球科学的主要学科之一&#xff0c;是通过定量的物理方法&#xff08;如&#xff1a;地震、重、磁、电、测井、地热和放射能等方法&#xff09;研究地球以及寻找地球内部矿藏资源的一…

TD集群内存占用过高

1 TD简介 TDengine 是一款开源、云原生的时序数据库&#xff0c;专为物联网、工业互联网、金融、IT运维监控等场景设计并优化。它能让大量设备、数据采集器每天产生的高达 TB 甚至 PB级的数据得到高效实时的处理&#xff0c;对业务的运行状态进行实时的监测、预警&#xff0c;从…

pyinstaller打包记录|| 打包成功,含xgboost打包遇到的问题

文章目录1 requirements.txt2 项目介绍3 matplotlib的问题4 xgboost打包遇到的问题4.1 解决办法&#xff1a;5 总结流程5.1 打开命令行5.2 键入打包指令5.3 执行文件5.4 双击exe运行1 requirements.txt python3.6.15tensorflow-cpu2.2.0 netCDF41.5.6 Keras2.3.1 pandas1.0.3 …

盘点 | 云原生峰会重磅发布

11 月 5 日&#xff0c;2022 杭州云栖大会上&#xff0c;阿里巴巴研究员、阿里云智能云原生应用平台总经理丁宇在云原生峰会上发表主题演讲&#xff0c;提出云原生激活应用构建新范式。在分享中发布阿里云在云原生领域多款新产品与全新升级&#xff0c;持续引领行业云原生技术趋…

交通大数据应用场景——高速落地检

自11月11日进一步优化疫情防控二十条措施发布以来&#xff0c;国内各地针对核酸检测、人员管控等防控重点领域&#xff0c;陆续出台相关调整政策&#xff0c;进一步提高疫情防控的科学性、精准性、有效性。 “躺平”不可取&#xff0c;“躺赢”不可能&#xff0c;优化疫情防控…

【云原生 | Kubernetes 系列】--Gitops持续交付 ArgoCD自动同步策略

1. ArgoCD自动同步策略 自动同步策略允许ArgoCD在检测到GitRepo与实际状态之间存在差异时,自动启动同步操作. Prune Resource(自动修剪):在集群上某个资源在GitRepo中找不到对应的配置时,自动删除集群上的该资源 Self Heal(自愈): 因各种原因(如手动修改)集群上资源的实时状态…

艾美捷nickases-Cas9内切酶裂解试验展示

核酸内切酶&#xff08;endonuclease&#xff09;在核酸水解酶中&#xff0c;为可水解分子链内部磷酸二酯键生成寡核苷酸的酶&#xff0c;与核酸外切酶相对应。从对底物的特异性来看&#xff0c;可分为DNaseⅠ、DNaseⅡ等分解DNA的酶&#xff1b;RNase、RNaseT1等分解RNA的酶。…

ETF轮动+RSRS择时,加上卡曼滤波:年化48.41%,夏普比1.89

原创文章第112篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑&#xff0c; AI量化投资”。 昨天我们设计了一个不错的策略&#xff1a;etf动量轮动大盘择时&#xff1a;年化30%的策略。ETF动量轮动RSRS择时&#xff0c;动量其实一直都有效&#xff0c;如何定义动量可…

java图形验证码到底是怎么生成的?

真正的大师,永远都怀着一颗学徒的心&#xff01; 一、项目简介 java图形验证码到底是怎么生成的&#xff1f;支持中文、gif、算术等类型 二、实现功能 支持gradle方式的引入 支持maven方式引入 支持jar包下载 支持10种漂亮的内置字体&#xff0c;不依赖系统字体 支持输出…

Codeforces Round #835 (Div. 4) A~G

比赛链接&#xff1a;https://codeforces.com/contest/1760 A. Medium Number 题目大意&#xff1a; t组测试&#xff0c;每组给三个数求中位数。 代码&#xff1a; #include<bits/stdc.h> #define rep(i,a,b) for (register int ia;i<b;i) #define per(i,a,b) …

无人驾驶(二)---室外导航之RTK配置与接入及GPS与UTM坐标转换

1. RTK 概述 RTK 载波相位差分技术&#xff0c;是实时处理两个测量站载波相位观测量的差分方法&#xff0c;将基准站采集的载波相位发给用户接收机&#xff0c;进行求差解算坐标。一般包含流动站 (移动站) 和基准站 (基站) 。本文中RTK定位采用千寻定位&#xff0c; 参考的也是…

39Java System类

目录 System类 1.定义 2.预备知识 3.常用方法 (1).currentTimeMillis返回系统时间 (2).exit终止虚拟机 (3).arraycopy拷贝数组 System类 1.定义 Java System类是一个提供与系统相关的方法 System类所在包为java.lang包&#xff0c;因此在使用的时候不需要进行导包。并且Sy…

外汇天眼:FCA 已向交易应用程序运营商发出警告,要求其停止交易游戏化

英国市场监管机构希望交易应用程序开发商重新考虑关键设计元素。 根据新的研究&#xff0c;游戏化可能会导致类似赌博的行为。 负责监管英国金融市场的金融行为监管局 ( FCA )周一发布了有关交易应用程序设计的市场警告。金融业监管机构担心零售交易越来越像一场游戏&#xff…

A. Row GCD(更相减损术+gcd的性质)

Problem - 1458A - Codeforces 给你两个正整数序列a1,...,an和b1,...,bm。对于每个j1,...,m&#xff0c;求a1bj,...,anbj的最大公除数。 输入 第一行包含两个整数n和m&#xff08;1≤n&#xff0c;m≤2⋅105&#xff09;。 第二行包含n个整数a1,...,an&#xff08;1≤ai≤101…

Linux学习记录——이 基本指令(2)

接着上一篇继续写指令。 man指令 man指令是一个手册功能的指令&#xff0c;可以查看系统内的接口&#xff0c;指令等等&#xff0c;也可以查看一个指令有什么用法。如果是需要查看C语言中的指令&#xff0c;比如printf&#xff0c;就可以man 3 printf。不过man大多数情况是用…

旋转数组的最小数字、二维数组中的查找、调整数组顺序使奇数位于偶数前面

文章目录1、 旋转数组的最小数字2、调整数组顺序使奇数位于偶数前面3、二维数组中的查找1、 旋转数组的最小数字 本题考点&#xff1a;核心考点&#xff1a;数组理解&#xff0c;二分查找&#xff0c;临界条件 牛客链接 题目描述&#xff1a; 有一个长度为 n 的非降序数组&am…

简述Spring Bean生命周期

前言 在Spring容器里&#xff0c;Bean的完整生命周期比较长。但是我们必须要掌握它。 Bean周期总览 Bean周期总体如下所示。 接下来会简单讲下各个步骤的主要功能。 Bean实例化 必须步骤。 此步骤主要是实例化一个Bean&#xff0c;例如new一个对象。这个步骤主要是设置be…