操作系统学习总结二

来源:互联网 发布:sql server 下载地址 编辑:程序博客网 时间:2024/05/21 12:43

1.内存池,进程池,线程池

内存池是一种内存的分配方式,程序中通过new,malloc去申请,因为申请的内存大小不同,所以会产生内存碎片,而且如果申请过于频繁,内存的创建回收也是一笔开销。内存池是在实际的内存使用之前,先申请一部分内存,通常情况下申请的内存块大小相等。在程序中需要用到内存时,先去内存池中申请,用完后再将申请后的那部分内存标记为可用。而不是真的去创建释放内存,只是一个内存标识而已。这样做的好处在于减少了内存的开销。第二点则是减少了内存碎片。(关于这一点我没有找到相关资料说明,根据内存池申请的都是大小相等的内存块来想,可能是按块分,这样减少了外部碎片,但是内部碎片相应应该是增多了,笔者也不懂这一点,还望懂的人告知啊)

有了上边的概念,那么内存池和线程池就不难理解了,就是预先创建一些进程/线程,在有需要的时候去掉用,不需要时也不释放,只是让相应的进程线程处于阻碍状态,这样减少了创建与释放的开销,提高了系统性能。

2.死所的概念,形成死所的原因

死锁可以被定义成一组竞争系统资源或互相通信的进程间相互永久阻塞。死锁原因是两个或多个进程间处于阻塞状态,而每个进程都获取了对方进程所需要的资源,处于永久相互等待的状态。

3.死锁的四个条件

  1. 互斥:一次只有一个进程可以访问某个资源,一旦访问,其他进程不能在访问。
  2. 非抢占:进程所占有的资源不可以被其他进程抢占。
  3. 占有并等待:进程在等待资源时,它所占有的资源不被释放,继续占有。
  4. 循环等待:在某个封闭进程链中,每个资源至少占有下一个进程所需的必要资源。

前三个是死锁的必要非充分条件,而上述4个则是死锁的充分必要条件。

4.死所的预防与避免

死锁预防的策略就是防止死锁的四个条件中任意一个条件的成立,而死锁避免是基于资源分配的当前状态做动态选择来避免死锁,它允许三个必要条件的发生,但通过调度,保证不会到达死锁点,因此死锁避免比死锁预防并发性更强。

死锁预防

  1. 互斥:一般情况下,阻止互斥条件是不现实的,因为操作系统需要支持互斥操作,比如文件的写权限,就需要互斥。
  2. 非抢占:两中解决方法,一是进程访问某资源被占用,则释放掉自己所占有的资源,一是操作系统允许进程抢占资源,但是这个必须给予两个不同优先级的进程。
  3. 占有并等待:可以让进程一次性访问所有需要的资源,如果都能访问成功访问,则全部访问,如果不能访问成功,就一个都不访问。这个方法是低效的,因为进程可能会被阻塞很长时间来等待资源。而且如果分配给一个进程的资源可能长时间都处于不可用状态,但在此期间不能被其他进程所用。另一个问题时进程可能实现不知道它需要的所有资源。
  4. 循环等待:通过对资源定义资源类型达到线性顺序访问,例如一个进程访问了一个r类型资源,之后它就只能访问r类型之后的资源。反证法,当i < j, 一个进程A获取i资源等待j,进程B获取j资源等待i,两进程死锁,但这表明i < j && j < i,所以是不可能出现的。这种方法也是低效的,使得进程执行速度变慢,而且在一些没必要的情况下拒绝访问资源。

死锁避免

  1. 如果一个进程的请求会导致死锁,则不启动该进程
  2. 如果一个进程增加资源的请求会导致死锁,则不允许此分配

进程启动拒绝,如果有一个新进程要启动,满足当前资源的分配则可行。资源分配拒绝,俗称银行家算法。这两条说的比较简单,弄清银行家算法,就会很简单了。

5.进程调度算法

调度算法是系统对资源的一种分配策略,它的选择调度策略分为两类:

  • 非抢占:这种情况下进程一旦到达运行状态,则不断执行知道终止,或者等待事件转到阻塞状态。
  • 抢占:当前运行的进程可能会被系统中断,转换到就绪态。抢占策略可能是一个新进程到达时,或者基于周期性的时间中断。

1.先来先服务,FCFS,最简单的调度策略,按进程的先后顺序调度。当每个进程就绪后,它加入就绪队列,当一个进程终止后,选择队列中存在时间最长的进程运行。FCFS自身对于单处理器系统并不是很有吸引力,但是经常和优先级策略一起使用。

2.时间片轮转法

FCFS并不适用于短作业,因为进程平均周转时间会变长。为了减少短作业情况,可以以一个周期性时间产生始终中断,之后接着执行FCFS策略选择下一个就绪的进程。

3.多级反馈队列

由时间片轮转结合优先级策略综合而来,设置多个就绪队列,每个队列有不同的优先级,当一个进程进入内存后,首先放到第一个队列(优先级最高)末尾,采用FCFS调度,如果在一个时间片内执行完毕就退出,否则将进程中断并放入第二个队列的末尾,以此类推。仅当高优先级队列执行完毕,才去执行低优先级队列。如果一个新的进程优先级比当前执行的进程优先级高,则抢先执行新进程,被抢占的进程回到原队列末尾。

4.最短进程优先

减少FCFS对长进程的偏向的另一种方法,简称SPN,这是一个非抢占策略,下一次选取进程中所需处理时间最短的进程。因此短进程会被先执行。弊端是如果短进程过多,长进程可能会被“饿死”。

5.最短剩余时间

简称SRT,是针对SPN增加了抢占机制。下一次选择中,总是选择剩余时间少的进程,如果此时有一个新进程加入就绪队列,且剩余时间比当前的进程少,则抢占。与SPN有同样的问题,但是比SPN有更好的性能,因为相对于一个正在运行的长作业,短作业可立即被运行。

6.最高响应比优先

简称HRRN,根据响应比来调度,响应比R = (w + s) / s。w表示等待处理器的时间,s表示期待服务时间。当前进程执行完毕或者阻塞,选取R值最大的进程。当偏向于短作业时,长进程得不到服务时间不断增加,从而扩大了比值,从而获取处理器,和SRT,SPN一样,HRRN需要估计进程期望服务时间。

0 0
原创粉丝点击