第 5 章 操作系统
进程管理
进程管理-进程的状态
三态模型:
运行状态:运行的所有所资源都已经配备足够了,并且给他CPU资源
就绪状态:其他的所有资源都配足够了,只缺CPU资源----万事俱备只欠东风
等待状态:除了没有CPU资源,还缺其他资源(不是必须缺少,但是肯定缺CPU资源)
运行时缺少某个资源,进入等待状态,等到资源配备足够以后,**不能直接**进入运行状态,
要重新排队获取到最为核心的CPU资源之后才能进入运行态(时间片),在所属的时间片到达之前需要等待
时间片轮转:一个进程从就绪到运行,只能够运行一个时间片,运行完之后重新回到就绪态,等待下一次的时间片到达,再次运行
五态模型:
静止就绪:挂起操作(人为),人为的将进程挂起,但是并不缺其他的资源
Eg:听歌接到电话,暂停歌曲(挂起)
阻塞对应着之前三态模型的等待
活跃是系统的
静止是用户的
进程管理-前驱图
考虑哪些任务是有先后顺序的,哪些工作是可以并行的
**前驱图的目的**:要完成的一些活动的先后的约束关系
进程管理-进程的同步与互斥
**互斥的反义词:共享**
**同步的反义词:异步**
互斥
:
同一个资源不能服务于很多进程
同步:
同步和互斥不是对立的
单缓冲区中同步与互斥同时存在
同步:生产者必须等待消费者使用了市场里的产品后才能继续往市场里放产品,出现了
明显的等待,这就是同步
互斥:市场(资源)里一次只能放一个产品,生产者(进程)不能同时"放"(放
也是一个进程)多个产品到市场(使用资源)
多缓冲区无非是一次多放了几个产品,与单缓冲区一样
进程管理
进程管理-PV操作(核心部分)
临界区:是访问临界资源的代码
信号量:
PV操作:两大原子操作的组合 P操作+V操作
P操作:
就是对信号量进行自减1(目的:为了加锁),当信号量<0时将其放入进程等待队列中去
即,哪怕(信号量)没有了,依旧可以执行,只有(信号量)为负数才会停止,被
放入进程等待队列
V操作:
对信号量进行自加1(目的:为了解锁),当信号量<=0时将其放入进程等待队列
即,一旦(信号量)没有了,就立刻放入进程等待队列,
P操作和V操作相互交叉出现在两个不同的进程之间可以实现两个进程的互锁与解锁
例题:
1.假设没有PV操作
生产者先执行
这样可能市场已经满了,但是生产者依旧会往里面放东西,造成溢出
消费者先执行
由于初态没有产品,消费者去取就会发生问题
2.假设有PV操作
P操作信号量自减一,没有小于0就继续执行
加锁和解锁
P加锁 V解锁
这样P和V分别出现在生产者和消费者的队伍里,实现了双方的互锁与解锁
进程管理-死锁问题
第一类问题:
给定一定数量的进程,告诉每一个进程需要多少资源,要计算的是系统最少具有多少资源就不可能发生死锁
第二类问题:
死锁的预防和避免的问题
死锁概念:
系统没有足够的资源,有的进程缺少资源,但是又不愿意释放自己占用的资源,使整个系统没有多余的资源分配给缺少资源的进程,造成系统无法运行的情况
即使系统只有五个资源呢也有可能避免死锁的产生,即限制一次只分配一个资源
系统有13个资源:
先给每个进程都分配4个资源,那么无论把最后一个资源给谁都不会发生死锁的情况
不发生死锁的最少的资源数:num=k*(n-1)+1
K为进程个数,n为每个进程所需要的资源数(默认每个进程所需要的资源数都相等)
方法:先预先给每个进程分配"所需资源数-1"个资源
存储管理
页式存储组织
**核心**:
逻辑地址与物理地址之间的转化
方法:
把用户程序等分为同样大小的页,把内存当中的存储区也分为同样大小的页(和用户程序的页相同),用多少放多少页进去内存
用户程序的页号对于内存中的块号
由于需要查表才能进行用户程序的页和内存中的对应关系的确定
逻辑地址和物理地址:
页内地址相同
但是页号和块号不一定相等,需要查表才能得知
物理块号==页帧号
第一个问题:
给出了逻辑地址5A29H,求物理地址
由于页面的大小是4K==2^12,所以可以得知页内地址是12位
段式存储组织
按照逻辑结构进行划分,比如main一个段,func1一个段,func2一个段。。。。。。
所以每个段的大小不确定
段页式存储组织
**先分段,再分页**
快表
快表是放在Cache当中的
慢表(段表、页表)是放在内存当中的
页面置换算法
**应用于分层的存储体系当中**
将内存和cache当中的暂时不用的页淘汰出去
上面两个一般不用
**先进先出算法容易产生抖动**
**最近最少使用不会产生抖动**
最优:
知道要访问的序列是怎么样的,知道什么时候淘汰什么页面淘汰什么页面,没有普
遍的规律,没法直接应用。主要起到一个对比的作用(写出来,与其他的算法进行对比)
抖动:
分配更多资源,希望把事情做的更好一些,但是却使效率降低了。
比如:分配三个页面,缺页次数为10次,增加到4个页面,但是缺页次数增加到
了10次以上
练习题:
先要在内存上查一下表才能读取相应的块,每读一个块要访问两次内存
默认指令无论他是占到几个页
注意页和块的对象的不同
对程序进行分页存储
对内存进行分块存储
所以说两者一定程度是相同的,只是针对的对象不同