计算机操作系统课程期末考试复习文档

本篇摘自计算机操作系统课程复习文档,感谢文档的整理者,感谢操作系统老师,感谢发我文档的静姐,如有侵权之处,请联系删除。

1、OS定义、基本特征、四大组成部分
操作系统OS:操作系统是一组能有效组织和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序集合(1.2.3-3)
基本特征:并发、共享、虚拟、异步(1.3.1/1.3.2/1.3.3/1.3.4)
四大组成:处理机管理、存储器管理、设备管理、文件管理(1.4)
四大组成部分
2、三种基本类型的OS?
批处理,分时系统,实时系统
3、并行与并发、共享、虚拟、异步? (1.3.1/1.3.2/1.3.3/1.3.4)
并行与并发:
并行性:两个或多个时间在同事发生(多CPU)
倘若计算机系统中有多个处理机,这些可以并发执行的程序便可被分配到多个处理机上,实现并行操作
并发性:两个或多个时间在同一时间间隔内发生(单CPU)
每个时刻有且仅有一道城促执行,故微观上这些程序只能是分时交替执行
共享:共享资源又称资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用
互斥共享方式:如打印机、磁带机
同事访问方式:允许在一段时间内由多个进程“同时”对它进行访问
虚拟:“空分复用”“时分复用”,将一条物理信道变为若干条逻辑信道,使原来只能供一对用户通话的物理信道,变为能供多个用户同时通话的逻辑信道
异步:使进程的执行通常都不可能是“一气呵成”,而是“停停走走”的方式运行
4、多道程序? (1.2.3)
用户提交的作业先存放在外存上,并排成一个队列,成为“后备队列”。然后由作业调度程序按一定算法,从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的资源。(在一个作业的IO间隙时,CPU是空闲的,这时利用CPU的空闲时间去做另一个作业,多道程序交替运行,使CPU在忙碌状态)
5、进程的定义、进程的基本状态及转换原因
进程:(1)进程是程序的一次执行
(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动
(3)进程是具有独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分 配和调度的一个独立单位
*进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
进程的三个基本状态:(1)就绪(ready)
(2)执行(running)
(3)阻塞(block)
转换原因:

6、阻塞、唤醒、挂起、激活 (2.3.4/2.3.5)
引发阻塞和唤醒的事件:
(1)向系统请求共享资源失败:
一进程请求使用打印机,由于打印机已被分配给写的进程,则无可再分配可用的打印机,则请求者进程被阻塞,(其他进程释放打印机时,请求进程被唤醒)
(2)等待某种操作完成:
进程启动了某I/O设备,如果只有在I/O设备完成了制定的I/O操作任务后才能执行,则该进程在启动了I/O设备后便自动进入阻塞状态去等待,(I/O操作完成后,再由中断处理程序将该进程唤醒)
(3)新数据尚未到达:
有两个进程,A进程用于输入数据,B进程对数据进行加工,假如A正在输入还未完成,则B将被阻塞(A输入完毕后便去唤醒B)
(4)等待新任务的到达
常见于网络环境下的OS,比如在网络环境中的发送进程,其任务是发送数据包,若已有数据包已全部发送完毕,无心的数据包发送,则进程被自己阻塞,(仅当有新的数据包到达时,将进程唤醒)
进程阻塞的过程:调用block阻塞原语将自己阻塞(**自己阻塞自己)
进程唤醒的过程:调用wakeup唤醒原语,将等待该事件的进程唤醒
**有阻塞,就一定有唤醒,否则将永远处在阻塞状态,没有机会继续运行
进程的挂起:用suspend原语将处在阻塞的进程挂起
(1)检查被挂起的进程的状态,若处于活动就绪状态,则改为静止阻塞就绪状态(处 在活动阻塞状态,改为静止阻塞状态)
(2)为了方便用户或父进程考察该进程的运行情况,把该进程的PCB复制到制定的内 存区域
(3)若被挂起的进程正在执行,则转向调度程序重进调度
进程的激活:用active原语
(1)将进程从外存调入内存,检查现行状态(静止就绪–>活动就绪,静止阻塞–>活动阻塞)
(2)抢占调度策略:每当有禁止就绪进程被激活进入就绪队列时,检查是否要重新调度(比较优先级,如果被激活进程优先级低,不用重新调度,否则,立即剥夺当前进程的运行,把处理机分配给刚刚激活的进程)
7、PCB(2.2)、TCB(2.7.2-3)、JCB(3.2.1-2)、FCB等及其作用
PCB:进程控制块,为了使参与并发执行的没个程序(含数据)都能独立运行,描述进程的基本情况和活动过程,进而控制和管理进程
TCB:线程控制块,进程是拥有资源的资本单位,线程已不是可执行的实体(进程、线程的比较)
JCB:作业控制块,保存系统对作业进行管理和调度所不要的全部信息,每当一个作业进入系统时由“作业注册”程序为改作业建立一个作业控制块JCB,再根据作业类型将它放到相应的作业后备队中等待调度。作业运行期间,系统按照JCB中的信息和作业说明书队作业进行控制。当作业执行结束进入完成状态,系统负责收回分配给他的资源,撤销该作业控制块。
FCB:文件控制块,有三类信息,基本信息(文件名,文件物理位置,文件逻辑结构,文件物理结构),存取控制信息(存取权限),只用信息(建立日期,上一次修改日期,当前使用信息)
8、处理机管理的功能和任务 1.4.1
功能:(1)创建和撤销进程(2)对诸进程的运行进行协调(3)实现进程之间的信息交换(4)按照一定算法把处理机分配给进程
任务:(1)进程控制:为作业创建进程、撤销(终止)已结束的进程,以及控制进程在运行过程中的状态转换
(2)进程同步:进程互斥方式,对临界资源进行访问时应采用互斥的方式
进程同步方式:在相互合作去完成共同任务的诸进程间,由同步机制对他们的执行次序进行协调
(3)进程通信:由源进程利用发送命令直接将消息message挂到目标进程的消息队列上,以后由目标进程利用接收命令从其队列中取消息
(4)调度
作业调度:(磁盘)作业调度的基本任务是从后备队列按照一定的算法选择出若干个作业,为它们分配运行所需要的资源,在这些作业调入内存后,分别为它们建立进程,使它们都成为可能处理机的就绪进程,并将它们插入就绪队列
进程调度:(内存)进程调度的任务是从进程的就绪队列中按照一定算法选出一个进程将处理机分配给他,并为他设置运行现场,使其投入执行
9、进程创建、撤销等的步骤 2.3.2 ~2.3.5
进程的创建:
(1)引起创建进程的事件:
用户登录:当分时系统中,用户在终端键入登录命令后,若登录成功,系统将为该用户建立一个进程,并把它插入就绪队列中
作业调度:在躲到程序系统中,当作业调度程序按一定算法调度到某个作业时,便将它们装入内存,为它们创建进程,并把它们插入就绪队列中
提供服务:例如,用户程序进程要求进行文件打印,操作系统将为它们创建一个打印进程,这样不仅可使打印进程与该用户进程并发执行,而且还便于计算为完成打印任务所需要花费的事件。
应用请求:由用户进程自己创建新的进程,以便使新的进程以同创建者进程并发的形式完成特定任务
(2)进程创建步骤:
1、申请新的PCB
2、为新的进程分配其运行所需的资源
3、初始化进程控制块
4、如果进程就绪队列能够接纳新锦成,便将新进程插入就绪队列
进程的终止:
(1)引起进程终止的事件:
正常结束:进程已经完成,准备退出运行
异常结束:比如,越界错、保护错、非法指令、特权指令错、运行超时、等待超时、I/O故障、算数运算错
外界干预:操作员或操作系统干预(例如:发生了死锁)、父程序请求(子进程完成了父进程要求的任务,父进程可以提出请求结束该子进程)、因父进程终止
(2)进程终止过程:
1、根据终止进程标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态
2、若被终止进程正处在执行状态,应立即终止该进程的执行,并置调度标志为真,用于只是该进程被终止后应重新进行调度
3、若该进程有子孙进程,还应将其所有子孙进程终止,以防它们成为不可控的进程
4、将被终止的进程所拥有的全部资源或者归还给其父进程,或归还系统
5、将被终止的进程PCB从缩在队列(或链表)中移出,等待其他程序来搜集信息
10、原语及其特点
11、进程和程序?
进程在并发时(1)间断性:由于在并发时共享系统资源,以及为完成同一项任务而相互合 致使在这些并发执行的程序之间形成了相互制约的关系,时程序具有“执行-暂停-执行” 这种间断性的活动规律
(3)失去封闭性:例如,当处理机已被分配给某个进程运行时,其他程序必须等待, 可能会更改该进程所需的资源
(4)不可再现性:由于失去了封闭性,其计算结果必将与并发程序的执行速度有关, 从未使程序的执行失去可再现性
12、系统态和用户态
一个最主要原因是要把用户程序和系统程序区分开,以利于程序的共享和保护。显然,这也是以增加系统复杂度和系统开销为代价的
13、处理机调度层次(作业调度、内存调度、进程调度)3.2/3.3
高级调度:长程调度、作业调度
低级调度:短程调度、进程调度
中级调度:内存调度
14、作业调度算法(FCFS、SJF、HRRN) 3.2.3&3.2.4
FCFS先来先服务调度算法:按照作业到达的先后次序来尽心调度
SJF短作业有限的调度算法:作业越短,其优先级越高,时间长短由作业所要求的运行时间来衡量
HRRN高响应比优先调度算法:优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
可以看出:(1)如果作业等待时间相同,则要求服务的时间越短,其优先权愈高,有利于短作业(2)当要求服务的时间相同,作业的优先权取决于等待时间,先来先服务(3)对于场作业的优先级,可以随等待时间的增加而提高,等待时间足够长时,也可以过得处理机
15、进程调度算法(轮转RR、优先级、多队列调度算法) 3.3
轮转法:将所有的就绪进程排成一个就绪队列,并可设置每隔一段时间间隔产生一次中断,激活系统中的进程调度程序,完成调度,将CPU分配给队首的进程,令其执行。当该进程的时间片耗尽或运行完毕时,系统再次将CPU分配给新的队首进程。由此,可保证就绪队列中的所有进程在一个确定的时间段内,都能获得一次CPU执行。
切换时机:(1)若一个时间片尚未用完,正在执行的进程便已经完成,就立即激活调度程序,就将它从就绪队列中删除,再调度就绪队列中队首的运行,并启动一个新的时间片(2)在一个时间片用完时,计时器中断数理程序被激活,如进程尚未完成,调度程序将把它送往就绪队列队尾
优先级调度算法:
(1)非抢占式优先级调度算法:
一旦把处理机分配给就绪队列优先级最高的进程后,该进程会一直执行下取,直至完成,或者因为该进程发生了某事件放弃处理机时,系统才将处理机
(2)抢占式优先级调度算法:
把处理机分配给优先级最高的进程,使之执行,执行期间出现了比他优先级高的进程,调度程序会把处理机分配给信道的优先级最高的进程
多队列调度算法:
将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的㐉分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可设置不同的优先级。
16、实时调度算法(抢占、非抢占)(最早截止时间有限) 3.4.3
非抢占轮转式调度算法:由一台计算机控制若干个相同的对象,为每个被控对象建立一个实时任务,并将它们排成一个轮转队列。调度程序每次选择队列中的第一个任务投入运行。当该任务完成后,便将它挂到轮转队列的末尾等待,调度程序再选择下一个队首任务运行。(用于不太严格的实时控制系统)
非抢占式优先调度算法:(同上)
基于时钟中断的抢占式优先级调度算法:当某实时任务到达后,如果他的优先级高于当前任务,并不立即抢占当前任务的处理机,而是等到时钟中断发生时,调度程序才剥夺当前任务的执行,将处理机分配给信道的高优先级任务。
立即抢占的优先级调度算法:一旦出现外部中断,只要当前任务未处在临界区,便立即剥夺当前任务的执行,把处理机分配给请求中断的紧迫任务。
EDF最早截止时间优先算法:根据任务的截止时间确定任务的优先级,任务截止的时间越早,其优先级越高(同样有抢占和非抢占两种,和上面的原理一样)
17、进程通信 2.6
类型:(1)共享存储器系统(2)管道通信技术(3)消息传递系统(4)客户机-服务器系统
直接消息传递系统实例:
(1)消息缓冲队列通信机制中的数据结构
消息缓冲区:
typedef struct message_buffer{
Int sender;//发送者进程标识符
int size;//消息长度
Char *text;//消息正文
Struct message_buffer *next;//指向下一个消息缓冲区
}
PCB有关通信的数据项:
typedef struct proccesscontrol_block{

sruct message_buffer *mq;//消息队列队首指针
semaphore mutex;//消息队列互斥信号量
semaphore sm;//消息队列资源信号量

}
(2)发送原语
发送进程在利用发送原语发送消息钱,应先在自己的内存空间设置一发送去a,把待发送的消息正文、发送进程标识符、消息长度等信息填入其中,然后调用发送原语,把消息发送给目标(接收)程序。发送原语首先根据发送区中所设置的消息长度a.size来申请一缓冲区i,接着把发送区a中的信息复制到缓冲区i中。为了能将i挂在接收进程的消息队列mq上,应先获得接收进程的内部标识符j,然后将i挂在j.mq上。由于该队列属于临界资源,故在执行insert操作的前后都要执行wait和signal操作。
void send(receiver, a){//receiver为接收进程标识符,a为发送区首地址
getbuf(a.size,i);//根据s.size申请缓冲区
i.sender=a.sender;
i.size=a.size;
copy(i.text,a.text);//将发送区a中的信息复制到消息缓冲区i中
i.next();
getid(PCBset,receiver.j);//获得接收进程内部的标志符
wait(j.mutex);
inset(&j.mq,i);//将消息缓洪区插入消息队列
signal(j.mutex);
signal(j,sm);
}
(3)接收原语
接收进程调用原语receive(b),从自己的消息缓冲区队列mq中摘下第一个消息缓冲区i,并将其中数据的复制到以b为首地址的制定消息接收区。
void receive(b){
j=internal name;//j为接收进程内部标志符
wait(j.sm);
wait(j.mutex);
remove(j.mq,i);//将消息队列中第一个消息移出
signal(j.mutex);
b.sender=i.sender;
b.size=i.size;
copy(b.text,i.text);//将消息缓冲区i中的信息复制到接收区b
releasebuf(i);//释放消息缓冲区
}
18、临界资源 2.4-2
在一定时间只能为一个进程访问的资源
19、互斥与临界区 2.4.1-3
临界区:每个进程中访问临界资源的那段代码成为临界区
保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问:
每个进程进去临界区之前,应先对欲访问的临界资源进行检查,看它是否正在被访问。
如此刻临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正在被访问的标志;如果此刻临界资源正在被某进程访问,则本进程不能进入临界区。
因此,必须在进去临界区之前加一段进入区代码,用来进行检查临界资源,在临界区后加一段退出去代码,用于将领街区正被访问的标会恢复为未被访问标志。
while(TRUE)
{
进入区
临界区
退出区
剩余区
}
同步机制应遵循的规则:
(1)空闲让进
(2)忙则等待
(3)有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免进入死等待
(4)让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态
20、信号量及其值的含义(>0、=0、<0) 2.4.3Semaphores
(1)整型信号量
PV操作:整型信号量S表示资源数目,与一般整型数量不同,除初始化之外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问。
wait(S){
while(S<=0);//do no-op
S–;
}
signal(S){
S++;
}
这两个操作在执行时不可中断,其他进程不可同时对该信号进行修改
(2)记录型信号量
在整型信号量机制中的wait操作,只要是信号量S<=0,就会不断测试,因此并未遵循“让权等待”的准则,而是使进程处于“忙等”状态。记录信号量机制则是一种不存在“忙等”现象的进程同步机制。信号量机制中,有一个用于代表资源数目的整型变量value和一个进程链表指针list,用于链接的所有等待进程。
typedef struct{
int value;
struct process_control_block *list;
}semaphore;
wait(semaphore *S){//批操作
S->value- -;//信号量减1
if(S->value<0) block(S->list);//没有此资源时阻塞
}
signal(semaphore *S){//堆操作
S->value++;
if(S->value<=0) wakeup(S->list);//唤醒
}
信号弹S说明:S>0 可用资源
S=0 没有资源
S<0 S的绝对值表示被阻塞资源个数
P操作:信号量减1,判断是否阻塞
v操作:信号量加1,判断是否唤醒
(3)引号量运用
利用信号量实现进程互斥
1、设mutex为互斥信号量,值为1,取值范围(-1,0,1),mutex=1时表示两个进程皆未进入临界区;当mutex=0时,表示有一个进程进入临界区运行,另一个必须等待;当mutex=-1时,表示有一个进程正在领街区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前在临界区运行的程序退出时唤醒
2、代码描述

semaphore mutex=1;
Pa(){
while(1){
waite(mutex);
临界区;
signal(mutex):
剩余区;
}
}
Pb(){
while(1){
waite(mutex);
临界区;
signal(mutex):
剩余区;
}
}
利用信号量实现前驱关系:

P1(){S1;signal(a);signal(b);}
P2(){wait(a);S2;signal©;signal(d);}
P3(){wait(b);S3;signal(e);}
P4(){wait©;S4;signal(f);}
P5(){wait(d);S5;signal(g)}
P2(){wait(e);wait(f);wait(g);S6;}
main(){
semaphore a,b,c,d,e,f,g;
a.value=b.value=c.value=d.value=e.value=f.value=g.value=0;
cobegin
P1();P2();P3();P4();P5();P6();
coend
}
21、P、V操作及应用 2.4
P操作:信号量减1,判断是否阻塞
v操作:信号量加1,判断是否唤醒
2.5程序题:生产者-消费者;哲学家进餐;读者写者;
22、死锁定义及死锁必要条件 3.5.3
死锁定义:一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的
死锁必要条件:
(1)互斥条件:进程对所分配到的资源进行排他性使用
(2)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源要求,而该资源被其他进程占有
(3)不可抢占条件:进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完毕时由自己释放
(4)循环等待条件:发生死锁时,必然勋在一个进程-资源的循环链
23、处理死锁的方法(预防、避免、检测与解除) 3.6&3.7&3.8
(1)预防死锁
破坏“请求和保持”条件:允许一个进程只获得运行出气所需要的资源后,便开始运行,进程运行过程中再逐步释放已分配给自己的、且已经用完的全部资源,然后再请求新的资源
破坏“不可抢占”条件
破坏“循环等待”条件:系统对所有资源类型进行线性派速后,规定没个进程必须按照序号递增顺序请求资源。例如,当某进程需要同时使用打印机和磁带机时,由于磁带机序号低,而打印机序号高,故必须现请求磁带机,在请求打印机。假如,一个进程已经请求到一些序号高的资源,后来它又想请求一个序号低的资源时,它必须先释放所有具有相同和更高序号的资源后,才能申请序号低的资源。
(2)避免死锁
把系统分为安全状态和不安全状态,当系统处于安全状态时可避免死锁,反之则可能进入死锁
(3)检测死锁:资源分配图
圆圈代表进程,方框代表一类资源,请求边是进程->资源,分配边是资源->进程
死锁定理:书P116 死锁的充分条件是:S状态的资源分配图是不完全简化的
(4)解除死锁
终止所有死锁进程
逐个终止进程:
“代价最小”依据:
1、进程的优先级大小
2、进程已经执行了多少时间,还需要多久可完成
3、进程在运行中使用资源的多少,以后还需要多少资源
4、进程的性质是交互式还是批处理式
24、安全状态、银行家算法(书上例子)3.7.1&3.7.2
安全状态:系统能按某种进程推进顺序(P1,P2,…,Pn)为没个进程Pi分配其所需要的资源,直至满足没个进程对资源的最大需求,使每个进程都可顺利地完成。此时称(P1,P2,…,Pn)为安全序列
例:
假定系统中有三个进程P1,P2,P3,共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台,假设在T0时刻,进程P1,P2,P3已经分别获得5台、2台和2台磁带机,尚有3台空闲未分配,如下表:

进程 最大需求 已分配 可用
P1 10 5 3
P2 4 2
P3 9 2
可见,在T0时刻系统是安全的,因为在这一时刻及存在一个安全序列(P2,P1,P3),按照此序列分配,将剩余的3台磁带机,取两台分配给P2,,使之继续运行,P2完成后可释放出4台,于是将可用的5台磁带机分配给P1,使之运行完成后,将释放出的10台磁带机,P3便能够获得足够的资源,从而P1,P2,P3都可顺利完成。
利用银行家算法避免死锁:每个进程进入系统时必须声明在运行中可能运用到的各种资源类型和每种资源类型的嘴阀单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一些资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,则再进一步计算在这些资源分配给进程后,是否会使系统处于不安全状态,若不会,则将资源分配给他。否则等待。
例:
假定系统中有5个进程{P1,P2,P3,P4,P5}和三类资源{A,B,C}各种资源的数量分别是10,5,7,在T0时刻的资源分配如下:
资源情况
进程 Max Allocation Need Available
A B C A B C A B C A B C
P0

P1

P2
P3
P4 7 5 3

3 2 2

9 0 2
2 2 2
4 3 3 0 1 0

2 0 0
(3 0 2)
3 0 2
2 1 1
0 0 2 7 4 3

1 2 2
(0 2 2)
6 0 0
0 1 1
4 3 1 3 3 2
(2 3 0)

T0时刻是安全的,利用安全性算法对T0时刻的资源分配情况进行分析,存在一个安全序列{P1,P3,P4,P2,P0}
25、死锁定理 3.8.1(p124)
死锁定理:书P116 死锁的充分条件是:S状态的资源分配图是不完全简化的
26、重定位(静态、动态) 4.3.6(p143)
静态
动态重定义:重定位寄存器,用来存放程序数据在内存中的起始地址。程序执行时,真正访问的地址是相对地址与重定位寄存器中的地址相加而形成的。地址变换过程是在对程序执行期间,随着对每条指令或数据的访问自动进行的,故称重定义。(书P134页 图4-12)

27、连续/分区/分页/分段存储管理方式 4.3
单一连续分配:单道程序环境下,整个内存的用户空间被一道用户程序占据,这样的存储器分配方式是单一连续分配
固定分区分配:多道程序系统
分区大小相等
分区大小不等:为了增加存储器的灵活请,将存储器分区划分为若干个大小不等的分区,最好能对常在该系统中运行的作业大小进行调查,根据用户需要来划分。
分区说明表:

分区号 大小(kb) 起址(k) 状态
1 12 20 已分配
2 32 32 已分配
3 64 64 未分配
4 128 128 已分配

动态分区分配:可变分区分配
(1)分配内存
从空闲分区链表中找到所需大小的分区。请求分区大小为u.size,表中每个空闲分区大小可表示为m.size,若m.size-u.size<=size(size为事先规定不再分割的剩余分区的大小),说明多与部分太小,可不再分割,将整个分区分配给请求者。否则,从分区中按请求的大小划分出一块内存空间,分配出去,剩余部分仍然留在空闲分区链表中。然后将分区的首地址返回给调用者。
(2)回收内存:
1、收回区与插入点的前一个空闲分区F1邻接,此时收回区与插入点的前一段分区合并,不必为收回分区分配新表项,只需要修改前一分区F1的大小
2、回收分区与插入点的后一空闲分区F2邻接,此时也可以将两个分区河滨,形成新的空闲分区,使用回收区的首地址作为新空闲区的首地址,大小为二者之和
3、回收区同时与插入点的前后两个分区邻接,则将三个分区合并,使用F1的表项和F1的首地址,取消F2的表项,大小为三者之和
4、会收取既不与F1邻接,又不与F2邻接,这时把回收区单独建立一个新表项,写回收区的首地址和大小,根据首地址插入到空闲链中的适当位置
分页存储管理方式:
将用户程序的地址空间氛围若干个固定大小的区域,成为“页”或者“页面”。将内存空间分为若干个物理块或页框,页和块的大小相同。这样可将用户程序的任一页放入任一物理块中,实现离散分配
分段存储管理方式:
把用户程序的地址空间分为若干个大小不同的端,每段可定义一组相对完整的信息,存储器分配时以端为单位,这些端在内存中可以不相邻接,实现离散分配
28、顺序搜索的动态分区算法(首次、循环首次、最佳、最坏适应算法) 4.3.4
首次适应算法(FF)找第一个满足条件的分区
循环首次适应算法(NF)从上次分割的部分往下找,找到的第一个满足条件的分区
最佳适应算法(BF)总是把能满足要求,又是最小的空闲分区分配给作业,避免大材小用
最坏适应算法(WF)总是挑选一个最大的空闲分区,从中分割一部分存储空间给作业使用
29具有快表的地址变换机构 4.5.2(参考第四章课后题22,24)
为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊的高速缓冲寄存器,又称为“联想寄存器”或“快表”
变换过程:
在CPU给出有效地址后,由四只变换机构自动地将页号P送入高速缓冲寄存器,并将此页号与高速缓存中的左右页号进行比较,若其中有与此匹配的页号,便表示作妖访问的页表项在快表中。于是,可直接从快表中读取该页所对应的物理块号,并送到物理地址寄存器中。如在快表中没有找到相对应的页表项,则还需再访问内存中的页表,找到后,把页表项独处的物理快好送往地址寄存器;同时,再将此表项存入快表的一个寄存单元中,重新修改快表。但如果快表已满,也OS必须找到一个老的且已被人为是不再需要的页表项,将它换出。
习题22:具有快表时是如何实现地址变换的
习题24:在具有快表的段页式存储管理方式中,如何实现地址变址
30、快表命中率与存取时间的关系 4.5.3
命中率a 有效访问时间EAT
0 220
50 170
80 140
90 130
98 122

31、请求分页/分段存储管理(虚拟存储器) 5.2&5.5
请求分页中的硬件支持:要求一定容量的内存和外存,请求页表机制,缺页中断机构以及地址变换机构。
缺页率:f=F/A
访问页面成功(即所访问页面在内存中)的次数为S
访问页面失败(即所访问页面不在内存中,余姚从外存调入)的次数为F
该进程总的页面访问次数为A=S+F
32、页面置换算法(先进先出FIFO、最佳OPT、最近久未使用LRU) 5.3
最佳置换算法OPT:其选择的被淘汰页面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面
例:假定系统为某进程分配了三个物理块,并考虑有一下的页面引用串:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
过程如下:
(7)->(7,0)->(7,0,1)->(2,0,1)->(2,0,3)->(2,4,3)->(2,0,3)->(2,0,1)->(7,0,1)
先进先出页面置换算法FIFO:总是淘汰最先入内存的页面,选择驻留时间最早的淘汰
最近最久未使用和最少使用置换算法LRU:选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问依赖所经历的时间t,t值最大的淘汰
例:访问的页面的页面号序列为4,7,0,7,1,0,1,2,1,2,6
(4)->(4,7)->(4,7,0)->(4,0,7)->(4,0,7,1)->(4,7,1,0)->(4,7,0,1)(4,7,0,1,2)->(4,7,0,2,1)->(4,7,0,1,2)
->(7,0,1,2,6)
33、I/O系统定义、功能及层次结构 6.1.1 第六章开头文字,6.1.2.1
I/O系统定义:I/O系统是OS的重要组成部分,用于管理诸如打印机和扫描仪等I/O设备,以及用于存储数据,如磁盘驱动器和磁带机等各种存储设备
功能:(1)隐藏物理设备的细节
(2)与设备的无关性:只需要提供读或写命令,提供抽象的逻辑设备名,不必指明是那一台打印机,提高可移植性,方便使用,同时对OS而言,允许不需要重新编译操作系统的情况下,添加新的设备驱动程序,以便新的I/O设备的安装
(3)提高处理机和I/O设备的利用率:I/O设备间相互独立,能够并行操作,处理机与设备之间也能并行操作
(4)对I/O设备进行控制
(5)确保对设备的正确共享:独占设备:进程应互斥地访问这类设备;共享设备:在一段时间内允许多个进程同时访问的设备,如磁盘
(6)错误处理
层次结构:
用户层软件
设备独立性软件
设备驱动程序
中断处理程序
硬件

34、I/O软件的四个层次的基本功能 6.1.2.1
(1)用户层I/O软件:实现与用户交互的接口,用户可直接调用给层提供的、与I/O操作相关的库函数对设备进行操作
(2)设备独立性软件:用于涉嫌用户程序与设备驱动器的同意接口,设备明明、设备的保护,以及设备的分配与释放等,同时为设备管理和数据传递提供必要的存储空间
(3)驱动程序:与硬件直接相关用于具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序
(4)中断处理程序:用于保存被中断进程的CPU换进,转入相应的中断处理程序进行处理,处理完毕再回复被中断进程的现场后,返回到被中断的进程

35、块设备、流设备 6.1.3考概念
块设备:数据的存取和传输都是以数据块为单位的设备,基本特征:传输速率较高、可寻址
流设备:字符设备(数据的存取和传输是以字符为单位的设备),多为独占设备,必须采取互斥方式实现共享
36、对I/O设备的控制方式(轮询、中断、直接存储器DMA、通道) 6.4.3
使用轮训的可编程I/O方式:

37、假脱机SPOOLing系统、假脱机打印系统 6.6.2
SPOOLing假脱机系统:将一台物理I/O设备虚拟为多台逻辑I/O设备,这样也就允许多个用户共享一台物理I/O设备。该技术是利用专门的外围控制机,先将低速I/O设备上的数据传送到高速磁盘上,或者相反。这样当处理机需要输出数据时,便可以直接从吸盘上读取数据,极大地提高了输入速度。反之,在处理机需要输出数据时,也可以很快的速度把数据先输出到磁盘上,处理机便可以去做自己的事情。我们把这种联机情况下实现的同事外围操作的技术成为SPOOLing假脱机技术。
假脱机打印机系统:利用假脱机技术可将打印机改造成一台可供多个用户共享的打印设备,从而提高利用率,也方便了用户。
(1)磁盘缓冲区:在磁盘上开辟一个存储空间,用于暂时存储用户程序的输出数据,在该缓冲区可以设置几个盘块队列,如空盘块队列、满盘块队列
(2)打印缓冲区:用于缓和CPU和磁盘间的速度不匹配的矛盾,设置在内存中,暂存磁盘缓冲区送来的数据,以后再传输给打印设备打印
(3)假脱机管理进程和假脱机打印进程:由假脱机管理进程为每个要求打印的用户数据建立一个假脱机文件,并将它放入假脱机文件队列中,由假脱机打印进程一次对队列中的文件进行打印
38、缓冲(单缓冲、双缓冲、循环缓冲、缓冲池) 6.7
单缓冲区:每当用户进程发出一个I/O请求时,操作系统便在主存中为之分配一个缓冲区,字符设备输入时,缓冲区用于暂存用户输入的一行数据,在输入期间,用户进程被挂起以等待数据输入完毕;输出时,用户进程将一行数据输入到缓冲区后继续进行处理。当用户进程已有第二行数据输出时,如果第一行数据尚未被提取完毕则此用户进程应阻塞。
双缓冲区:设备输入时,先将数据送到第一缓冲区,装满后便转向第二缓冲区。此时操作系统可以从第一缓冲区中移出数据,并送入用户进程。接着由CPU对数据进行计算。
环形缓冲区:(1)多个缓冲区(2)多个指针
进程同步问题:(1)Nexti指针追上Nextg指针,这意味着输入进程输入数据的速度大于计算机进程的处理速度,已经把全部可用的空缓冲区装满,再无缓冲区可用,此时进程应阻塞(2)Nextg指针追上Nexti指针,这意味着输入数据的速度低于计算机进程的厨里速度,此时进程只能阻塞
缓冲池:
组成:(1)空白缓冲队列(2)输入队列(3)输出队列(4)收容输入数据的工作缓冲区、提取输入数据的工作缓冲区、收容输出数据的工作缓冲区、提取输出数据的工作缓冲区。
工作方式:(1)收容输入,调用Getbuf(emq)过程,从空缓冲队列emq的队首摘下一空缓冲区,把它作为收容输入工作缓冲区hin,然后把数据输入其中,装满后再调用Putbuf(inq,hin)过程,将它挂在输入队列inq上
(2)提取输入,计算进程调用Getbuf(inq)过程,从输入队列inq的队首取得一缓冲区,把它作为提取输入工作缓冲区sin,计算进程中提取的数据。计算进程用完该数据后,后再调用Putbuf(emq,sin)过程,将它挂到空缓冲队列emp上
(3)收容输出,计算进程调用Getbuf(emq),从空缓冲队列emq的队首取得一空缓冲区,把它作为收容输出工作缓冲区hout,其中装满输出数据后调用Putbuf(outq,hout)过程,将它挂在outq末尾
(4)提取输出。输出进程可调用Getbuf(outq)过程,从输出队列的队首去的一装满输出数据的缓冲区,作为提取输出工作缓冲区斗图,在数据提取完后,再调用Putbuf(emp,sout)过程,将它挂在空缓冲队列末尾

39、磁盘的数据组织 6.8.1
磁盘设备包括一个或多个物理盘片,每个磁盘分一个或两个存储面,每个盘面上有若干个磁道,磁道之间留有必要的间隙。为使处理简单起见,在每条磁道上可存储相同数目的二进制位,没条磁道又被从逻辑上划分成若干个扇区。
每个扇区包括两个字段:
(1)标识符字段(ID Field),利用磁道号Track、磁头号Head、扇区号Sectors三者来表示,CRC用于段校验
(2)数据字段DataField,存放512个字节的数据。
40、磁盘调度算法(FCFS、SSTF、SCAN、CSCAN) 6.8.2&6.8.3
FCFS先来先服务
SSTF最短寻到时间优先:
(从100号磁道开始)
被访问的下一个磁道号 移动距离(磁道数)
90 10
58 32
55 3
39 16
38 1
18 20
150 132
160 10
184 24
平均寻道长度:27.5
SCAN扫描算法:在SSTF算法基础上考虑当前磁头移动方向
CSCAN循环扫描算法:在SCAN的基础上因为磁盘本身循环,所以考虑磁头按单一方向运动
41、文件、目录 7.3
文件:指具有文件名的若干相关元素的集合
文件目录:一种数据结构,用于表示系统中文件及其物理地址,共检索时使用。
42数据项、记录和文件的层次关系 7.1.1
数据项:
基本数据项:用于描述一个对象的某种属性的字符集,例:学生的基本数据项有:学号、姓名、年龄、班级等
组合数据项:若干基本数据项组成
记录:一组相关数据项的集合,用于描述一个对象在某方面的属性,例:一个学生对他的描述应使用学号姓名,还可能包括他学过的课程名称、成绩等。关键字:唯一能标识一个记录的数据项。
文件:由创建者定义的,具有文件名的一组相关元素集合,可分为有结构文件,和无结构文件。
层次关系:

43、外存的组织方式(连续、链接、索引)及其优缺点 8.1(p268)
连续组织方式:要求每个文件分配一组相邻的盘块
链接组织方式:(1)隐式链接:在文件目录的每个目录项中,都需要含有只想链接文件第一个盘块和最后一个盘块的指针(2)显式链接:把用于链接文件各物理块的指针显式地存放在内存的一张链接表中。
44、FAT、i结点 8.1.2&8.1.3(p270~271)
FAT:利用文件分配表FAT来记录每个文件所有盘块时间的链接。
卷:将一个物理磁盘分为四个逻辑磁盘,每个逻辑磁盘就是一个卷(也叫分区),每个分区可以单独被格式化和使用的逻辑单元,供文件系统分配空间时使用。一个卷中包含了文件系统信息,一组文件以及空闲空间。每个卷都专门画出一个单独区域来存放自己的目录和FAT表,以及自己的逻辑驱动器字母。
45、文件存储空间管理(空闲表、空闲链表、位示图、成组链接法) 8.2.1&8.2.2&8.2.3
空闲表法:

存储空间的分配与回收:类似内存
空闲链表法:将所有空闲盘区拉成一条空闲链,根据构成链所用的基本元素不用,可把链表分成:
(1)空闲盘块链
磁盘上所有的空闲空间以盘块为单位拉成一条链,其中的每一个盘块都有只想后继盘块的指针。当用户因创建文件而请求存储空间时,从链首开始,依次摘下释放数目的空闲盘块分配给用户,删除文件释放空间时,系统将回收盘块挂在盘块链队尾。
(2)空闲盘区链
将所有磁盘是哪个的所有空闲盘区拉成一条链,在每个盘区上除了含有用于指示下一个空闲盘区的指针外,还应有指明盘区大小的信息。分配回收与内存相似,通常采用首次适应算法。在采用首次适应算法是,为了 提高对空闲盘区的检索速度,可采用显式链接方法。
(3)位示图法
利用二进制的一位来表示磁盘中的使用情况,(0:空闲,1:已分配)
书8.8.2图8-10
盘块分配:1、顺序扫描位示图,找到一个或一组值为“0”的二进制位
2、转换成与之对应的盘号,例位于第i行,第j列,b=n(i-1)+j
3、修改位示图,令map[i,j]=1
盘块回收;1、将回收盘块的盘块号转换成位示图中的行号和列号,公式:
i=(b-1)DIV n+1
j=(b-1)Mod n+1
2、修改位示图,令map[i,j]=0
(4)成组链接法
空闲盘块的组织:
(1)空闲盘块号栈
(2)文件中的所有空闲盘块分成若干徐
(3)将第一组含有盘块总数N和该组所有的盘块号记入前一组的第一个盘块的S.free(0)~S.free(99)中,这样各组的第一个盘块号可连成一条链
(4)将第一组的盘块总数和所有的盘块号记入空闲盘块号栈中,作为当前可供分配的空闲盘块号。
(5)最末一组只有99个可用盘块,其盘块号分别记入其前一组的S.free(1)~S.free(99)中,S.free(0)存放“0”,作为空闲盘块链的结束标志。

猜你喜欢

转载自blog.csdn.net/weixin_52395571/article/details/112481867