利用。
28:调度算法:先来先服务,短作业调度算法,优先权调度算法(抢占和非抢占),响应比优先调度算法(动态优先权,(等待时间+要求服务时间/等待时间)),时间片轮转法,多级反馈队列调度(按照每个优先级划分队列,程序一来,就是最高优先级队列,然后执行一个时间片,执行完以后放入下一个优先级队列,每个优先级队列的对应的时间片长度不一样优先级越高,就时间片越小)
29:实时调度算法:要求系统处理能力强,大部分采用抢占式,具有快速切换机制。最早截止时间优先EDF,最低松弛度优先级LLF(least laxity first)(紧急程度越高,就优先级越高,比如人物要在200ms内完成且自身时间就要100ms,这就是紧急程度。)
30:产生死锁的必要条件:互斥,请求和保持,不剥夺,环路等到。
31:预防死锁:摒弃“请求和保持”条件(运行之前申请到所有资源),摒弃不剥夺条件(当进程提出的资源请求得不到满足的时候,就放弃手上的所有资源),摒弃环路等待条件(所有进程都必须按照一定的顺序申请资源,比如打印进程必须先申请输入机,再申请打印机,再。。) 32:银行家算法:维护6种数据结构。
(1)available[j]=K,表示系统中现在有空闲的J类资源K个。
(2)MAX[i][j]=K,表示进程i需要j类资源最多k个。 (3)allocation[i][j]=k,表示进程i已经得到j类资源k个。 (4)need[i][j]=k,表示进程i还需要j类资源k个。 (5)work[j]=k,表示整个系统含有可用的j资源的数目k。和available类似,只不过work用于安全性算法中。 (6)finish[i]=true,表示系统是否有足够多的资源分配给进程i
执行时,进程i发出request[j]=k,表示要j资源k个,然后判断是不是request[j]《= need[i][j],如果不是就出错,如果是就判断request[j]《= available[j],如果不是就等待,如果是就试探分配资源,并修改available,allocation,need。然后执行安全性算法,如果安全,就分配资源,如果不是,就恢复被修改的available,allocation,need,进程等待。
安全性算法:在所有进程中,找到一个进程,finish=false,并且need[i,j]《=work[i]。如果没找到,if所有的finish都是true,就都处于安全状态,if need[i,j]》work[i] 说明系统不安全。如果找到了,就work[i]= work[i]+ allocation[i][j] finish[i]=true
比如现在有01234 五个进程,ABC三种资源,维护max allocation need available 4张表,首先对现在进行安全性算法,一开始 work=available finish都是false ,然后看work是不是大于0的need,发现小于,那么看1,work
大于1的need,于是执行1(不是真正的执行),然后收回1的资源,work变多了,然后判断是不是大于2的need,不大于,然后判断是不是大于3的need,大于,再收回3的allocation,然后判断是不是大于4的,大于,收回,再判断是不是大于0的,大于,收回,再判断是不是大于2的,大于,每次收回以后都要把finish=true,最后全部的finish都是true这样就得到一个安全序列,13420。
下面就开始真正的执行,进程1发出request(1.0.2)小于need也小于available,说明可以分配,然后修改四个表,再判断分配给进程1后的安全性算法,得到一个安全序列。
进程4发出request(3.3.0),request(3.3.0)小于need但是大于available 由于1进程占据资源,于是进程4等待。
0发出request,request
存储器管理
34:存储器由高到低:寄存器,主存(高速缓存,主存,磁盘缓存),磁盘,可移动存储介质。
35:程序装入内存:先把源代码编译成多个目标模块,然后把模块链接起来形成装入模块,然后装入内存。有绝对装入(装入程序按照模块中的地址讲程序和数据装入内存,程序的逻辑地址和实际内存地址完全相同),可重定位装入(程序中的地址都是以0开始的,装入内存以后也用相对地址来改变程序中的地址成绝对地址),动态运行时装入(在程序执行的时候再把相对地址改变成绝对地址)
36:程序的链接:静态链接,装入时动态链接,运行时动态链接。
37:连续分配方式:一个用户程序分配一个连续的内存空间,单一连续分配(内存分为系统区和用户区,用于单用户),固定分区分配(用户空间划分成若干个固定的大小区域,每个分区只装入一道作业,这样划分成几个分区就有几个用户并行作业),动态分区分配(根据进程的实际需要,动态为之分配内存空间,每个分区的大小不一样,比如伙伴系统)。可重定位分区分配(内存中有很多碎片,为了移动碎片,就必须移动文件,就是重定位文件)
38:进程的换入换出:首先选择处于阻塞且优先级最低的进程换出,然后启动磁盘,把该进程的程序和数据传送到磁盘
的对换区上。
39:分页存储:连续分配会有很多碎片,如果整合随便开销巨大,那么我们希望一个程序不要连续分配,于是引入页。内存被划分成大小相等的页面。进程分配空间的时候就把进程放在若干个可以不相邻的页面中,只有最后一个页面允许空位。分页地址的地址结构:低12位为页内位移,高20位为页号。地址变换机构只是变化页号,页内位移是不变的,有三种,基本地址变换(从页表寄存器读出页表起始地址,然后页号加上起始地址就是页在页表中对应页表项,然后从页表项中读出物理地址,加上页内位移),快表(页表示在内存中的,CPU存取一个数据要两次访问内存,不爽,加入缓存)。多级页表
40:分段存储:页面使固定分区到动态分区,目的是提高内存利用率。段的大小不固定,那么引入分段是为了方便程序员并且容易实现共享(如果是页,或许一个程序的代码有20页,那么每个共享的程序都要维护一个20个页表项的页表)。段内位移16位,段号16位,用户可以按照自己作业的逻辑关系划分成若干个段,也有段表和地址变换机构。 41:段页存储:集合二者所长先通过段号在段表中找到段并提取段表项的页表起始地址,然后通过页号找到页表项。 42:虚拟存储器:有的作业很大,要求的内存超过了内存总量,每次只能调一部分进去。但是用户看到的大容量是一种