进程调度-死锁-存储管理-固定分页分段

进程调度

  • 进程调度方式是指当有更高优先级的进程到来时如何分配CPU。分为可剥夺和不可剥夺两种,可剥夺指当有更高优先级进程到来时,强行将正在运行进程的CPU分配给高优先级进程;不可剥夺是指高优先级进程必须等待当前进程自动释放CPU。
  • 在某些操作系统中,一个作业从提交到完成需要经历高、中、低三级调度
    1. 高低调度:高级调度又称为“长调度”、“作业调度”或“接纳调度”,它决定处于输入池中的哪个后备作业可以调入主系统做好运行准备,成为一个或一组就绪进程。在系统中一个作业只需经过一次高级调度。
    2. 中级调度:中级调度又称“中程调度”或“兑换调度”,它决定处于交换区中的哪个就绪进程可以调入内存,以便直接参与对CPU的竞争。
    3. 低级调度:低级调度又称“短程调度”或“进程调度”,他决定处于内存中的哪个就绪进程可以占用CPU。低级调度是操作系统中最活跃、最重要的调度程序,对系统的影响很大。

调度算法

  • 先来先服务FCFS:先到达的进程优先分配CPU。用于宏观调度。
  • 时间片轮转:分配给每个进程CPU时间片,轮流使用CPU,每个进程时间片大小相同,很公平,用于微观调度。
  • 优先级调度:每个进程都拥有一个优先级,优先级大的先分配CPU。
  • 多级反馈调度:时间片轮转和优先级调度结合而成,设置多个就绪队列1,2,3……n,每个队列分别赋予不同的优先级,分配不同的时间片长度;新进程先进入队列1的末尾,按FCRS原则,执行队列1的时间片;若未能执行完进程,则转入队列2的末尾,如此重复。

死锁

  • 当一个进程在等待永远不可能发生的事件时,就会产生死锁,若系统中有多个进程处于死锁状态,就会造成系统死锁。
  • 死锁产生的四个必要条件:资源互斥、每个进程占有资源并等待其他资源、系统不能剥夺进程资源、进程资源图是一个环路。
  • 死锁产生后,解决措施是打破四大条件,有下列方法:
    • 死锁预防:采用某种策略限制并发进程对于资源的请求,破坏死锁产生的四大条件之一,使系统任何时刻都不满足死锁的条件。
    • 死锁避免:一般采用银行家算法来避免,银行家算法,就是提前计算出一条不会死锁的资源分配方法,才分配资源,否则不分配资源,相当于借贷,考虑对方还得起才借钱,提前考虑好以后,就可以避免死锁。
    • 死锁检测:允许死锁产生,但系统定时运行一个检测死锁的程序,若检测到系统中发生死锁,则设法加以解除。
    • 死锁解除:既死锁发生后的解决办法,如强制剥夺资源,撤销进程等。
    • 死锁资源计算:系统内有n个进程,每个进程都需要R个资源,那么其发生死锁的最大资源数为n*(R-1)。其不发生死锁的最小资源数为n*(R-1)+1

线程

  • 传统的进程有两个属性:可拥有资源的独立单位;可独立调度和分配的基本单位
  • 引入线程的原因是进程在创建、撤销和切换中,系统必须为之付出较大的时空开销,故在系统中设置的进程数目不宜过多,进程切换的频率不宜太高,这就限制了并发程度的提高。引入线程后,将传统进程两个基本属性分开,线程作为调度和分配的基本单位,进程作为独立分配资源的单位。用户可以通过创建线程来完成任务,以减少程序并发执行时付出的时空开销。
  • 线程是进程中的一个实体,是被系统独立分配和调度的基本单位。线程基本上不拥有资源,只拥有一点运行中必不可少的资源(如程序计数器、一组寄存器和栈),它可与同属一个进程的其他线程共享进程所拥有的全部资源,例如进程的公共数据、全局变量、代码,文件等资源,但不能共享线程独有的资源,如线程的栈指针等标识数据。

分区存储管理

  • 所谓分区存储组织,就是整存,将某进程运行所需的内存整体一起分配给它,然后再去执行,有三种分区方式

    • 固定分区:静态分区方法,将主存分为若干个固定的分区,将要运行的作业装配进去,由于分区固定,大小和作业需要的大小不同,会产生内部碎片。

    • 可重定位分区:可以解决碎片问题,移动所有已经分配好的区域,使其成为一个连续的区域,这样其他外部细小的分区碎片可以合并为大的分区,满足作业要求。只在外部作业请求空间得不到满足时运行。

    • 可变分区:动态分区方法,主存空间的分区是在作业转入时划分,正好划分为作业需要的大小,这样就不存在内部碎片,但容易将整片主存空间切割成许多块,会产生外部碎片。可变分区的算法如下:

  • 系统分配内存的算法有很多,根据分配前的内存情况,还需要分配9k空间,对不同的算法的结果介绍如下:

    • 首次适应法:按内存地址顺序从头查找,找到第一个>=9k空间的空闲块,既切割9k空间分配给进程。

    • 最佳适应法:将内存中所有空闲内存块按从小到大顺序,找到第一个>=9k空间的空闲块,切割分配,这个将会找到与9k空间大小最相近的空闲块。

    • 最差适应法:和最佳适应法相反,将内存中空闲块空间最大的,切割9k空间分配给进程,这是为了预防系统中产生过多的细小空闲块。

    • 循环首次适应法:按内存地址顺序查找,找到第一个>=9k空间的空闲块,而后若还需分配,则找下一个,不用每次都从头查找,这是与首次适应法不同的地方。

分页存储管理

  • 分页原理:将一个进程的地址空间划分成若干个大小相等的区域,成为页。相应的,将主存空间划分成与页相同大小的若干个物理块,称为块或页框。在进程分配主存时,将进程中若干页分别装入多个不相邻的块中。
  • 逻辑页分为页号和页内地址,页内地址就是物理偏移地址,而页号与物理块号并非按序对应的,需要查询页表,才能得知页号对应的物理块号,再用物理块号加上偏移地址才得出了真正运行时的物理地址。
  • 优点:利用率高,碎片小,分配及管理简单。
  • 缺点:增加了系统开销,可能产生抖动现象。


页面置换算法

  • 最优算法:OPT,理论上的算法,无法实现,是在进程执行完后进行的最佳效率计算,用来让其他算法比较差距。原理是选择未来最长时间内不被访问的页面置换,这样可以保证未来执行的都是马上要访问的。
  • 先进先出算法:FIFO,先调入内存的页先被置换淘汰,会产生抖动现象,既分配的页数越多,缺页率可能越多(既效率越低)。
  • 最近最少使用:LRU,在最近的过去,进程执行过程中,过去最少使用的页面被置换淘汰,根据局部性原理,这种方式效率高,且不会产生抖动现象,使用大量计数器,但是没有LFU多。
  • 淘汰原则:优先淘汰最近未访问的,而后淘汰最近未被修改的页面

快表

  • 是一块小容量的相联存储器,由快速存储器组成,按内存访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号
  • 快表是将页表存于Cache中;慢表是将页表存于内存上。慢表需要访问两次内存才能取出页,快表是访问一次Cache和一次内存,因此更快。

分段存储管理

  • 将进程空间分为一个个段,每段也有段号和段内地址,与页式存储不同的是,每段物理大小不同,分段是根据逻辑整体分段的,因此,段表也与页表的内容不同,页表中直接是逻辑页号对应物理块号,而下图所示,段表有段长和基址两个属性,才能确定一个逻辑段在物理段中的位置。
  • 优点:多道程序共享内存,各段程序修改互不影响。
  • 缺点:内存利用率低,内存碎片浪费大。


段页式存储管理

  • 对进程空间先分段,后分页,具体原理图和优缺点如下:
  • 优点:空间浪费小、存储共享容易、存储保护容易、能动态链接。
  • 缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降。
posted @ 2024-04-02 21:29  YhFei  阅读(15)  评论(0编辑  收藏  举报