进程管理【考研/408】

PCB(process control block)进程控制块

进程是动态的,程序是静态的

进程的状态:

  1. 运行态
  2. 就绪态
  3. 阻塞态
  4. 创建态
  5. 结束态

就绪态→运行态:就绪的程序分配到时间片,运行

运行态→就绪态:时间片用完了,让出处理机

运行态→阻塞态:(主动)进程请求某一资源的使用和分配或等待某一事件发生,比如要等一个IO输入

阻塞态→就绪态:(被动)等待的分配或请求来了,就可以就绪了

 

进程间通讯:

  1. 共享存储:

  1. 消息传递:

  1. 管道通信:

两个方向不能同时进行

 

进程通过调度获得处理器运行

 

进程间可能是无关的 也可能有交互性

 

进程的地址空间是各自私有的,不能相互访问

单系统中,可能都死锁

 

进程模型:

多对一:多个用户级线程映射到一个内核级线程 (并发度不高

      一个用户级线程阻塞就阻塞

一对一:每个用户级线程映射到一个内核级线程 (开销太大

多对多:多个用户级线程映射到多个内核级线程 (要求用户级线程数≥内核级线程数

 

设备分配是通过数据结构进行的,不需要进程

 

系统吞吐量=总作业(道)/总时间(秒)

 

周转时间=作业完成时间—作业提交时间

平均周转时间=(作业1周转时间+作业2周转时间……作业n周转时间)/n

带权周转时间=作业周转时间/作业实际运行时间

平均带权周转时间=(作业1带权周转时间+作业2带权周转时间……作业n带权周转时间)/n

 

典型的调度算法:

先来先服务:长作业友好

短作业优先:短作业友好,会导致长作业饥饿,具有最短的平均周转时间

优先级调度:优先考虑IO繁忙程序,后考虑计算型程序

高响应比有限:不会饥饿,响应比=(等待时间+要求服务时间)/要求服务时间

时间片轮转:必抢占

多级反馈队列:融合前几种算法

 

 

进程同步

临界段/临界区:程序中访问临界资源的代码

互斥:

1)空闲让进

2)忙则等待

3)有限等待

4)让权等待

实现临界区互斥的基本方法:

软件方法

单标志法:搞个公用变量turn,用于指示让进的程序 turn=0则𝑃0让进,但必须两个进程交替访问,所以一个进程无法访问,违背“空闲让进”

双标志法先检查:进入前检查临界区有没有正被访问,进入时𝑃i设置flag[i]=true,退出时设置flag[i]=false,但是当两个进程同时设置flag时,可能会同时进入临界区,违背“忙则等待”

双标志法后检查:与前一个类似 但是先设置flag,如果两个同时进入,就会都卡在while,导致“饥饿”

Peterson's Algorithm:再加一个turn来防止上一个算法的饥饿,如果你想进,我也愿意让你的,那你就先进吧

硬件方法

中断屏蔽(关中断只对当前处理机有效,若同时别的处理机也用,就尬住了

     ···

关中断

临界区

开中断

    ···

硬件指令

TestAndSet(TSL/TS):不满足“让权等待”

Swap/Exchange/XCHG:不满足“让权等待”

 

信号量:表系统中某种资源的数量(很喜欢考大题和小题都喜欢)

wait(S)/singal(S)

   P     /    V

整型信号量:不遵循“让权等待”,而是“忙等”

记录型信号量:遵循“让权等待”

 

管程:一种进程同步工具,使程序员无需自己实现互斥

包含:

管程的名称

局部于管程内部的共享结构数据说明

对该数据结构进行操作的一组过程

对局部于管程内部的共享数据设置初始值的语句

 

生产-消费者问题

 

 

多生产者-多消费者问题

因为盘子就一个 可以把临界区的PV去掉,因为最多只有一个进程可以进去用

如果盘子可以放大于1的水果,就可能父亲母亲同时放水果,所以需要临界区PV

所以当缓冲区>1时,必须设置mutex来互斥缓冲区

都加,就完事儿了,只不过,实现互斥的P一定要在实现同步的P之后进行,不然会死锁

 

吸烟者问题

 

读者写者问题

 

哲学家进餐问题

↓ 指的是第3个方法

 

 

 

公用队列是一种临界资源

 

PV操作是一种低级进程通信原语

 

死锁

主要考银行家算法和死锁预防/避免/检测的选择题

 

死锁:至少两个/两个以上的进程死锁,死锁时必在阻塞态。

饥饿:可能只有一个进程发生饥饿,可能阻塞态/就绪态

死循环:可能只有一个进程发生死循环,可以是运行态。

 

死锁产生必要条件:

1.互斥条件

2.不剥夺条件

3.请求和保持条件:

4.循环等待

死锁一定循环等待,循环等待不一定死锁

 

 

安全序列

 

银行家算法

 

死锁的检测

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值