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


    部分定义截取自书本

    在这里插入图片描述

    管态和目态

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

    管态又称为特权态,系统态,核心态。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++;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    图解及题目看这个:图解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

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

    其他

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

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

  • 相关阅读:
    【SQL学习】常用命令
    Elasticsearch:ES|QL 中的数据丰富
    SQLite基础语法速用大法(Flutter)
    Java上传文件大小受限怎么解决
    【AI视野·今日Sound 声学论文速览 第二十期】Fri, 6 Oct 2023
    Vue路由钩子在生命周期函数的体现
    Java获取AD域内所有用户
    【JDBCUtils ---DbUtils工具】
    LC-3 汇编语言 Nim游戏
    如何把一个视频分割成不同时长的多个小视频
  • 原文地址:https://blog.csdn.net/qq_39377889/article/details/127830772