一、操作系统基础
操作系统位置
操作系统作用
嵌入式操作系统的特点
微型化 | 占用资源少、系统代码量少 |
可定制 | 能运行在不同的微处理器平台,能根据硬件变化等进行结构与功能上的配置 |
实时性 | 常用于过程控制、数据采集、传输通信等实时性要求比较高的场合 |
可靠性 | 应用具有高可靠性,关键要害措应用要有容错措施 |
易移植性 | 通过硬件抽象技术提高嵌入式操作系统的移植性 |
嵌入式操作系统的初始化
自底向上、从硬件到软件的次序依次为:
片级初始化---板级初始化---系统级初始化(软件为主,主要对操作系统进行初始化)。
二、进程
进程是操作系统中可以并发运行、分配资源的基本单位。
进程是运行中的程序,是程序在某个数据集合上的一次执行过程具有并发性和动态性。
从静态角度看,进程实体是由进程控制块(PCB)、程序段、数据空间三部分组成的。
用户可以通过接口调用进程控制原语实现进程的建立、撤销、阻塞、唤醒等。
时间片轮转、阻塞或唤醒只能改变进程的状态,不能控制进程的产生与终止。
运行的进程会随着作业运行正常和不正常结束而撤销。
进程中至少包含一个或多个线程,同一进程中的线程可共享该进程的所有资源、代码、文件、全局变量等,但栈指针不能共享。
进程三态
进程五态
多道程序特征
多道:内部同时存在多道互相独立的程序
宏观并行:同时进入系统的程序都处于运行状态并未完成
微观串行运行:各作业交替使用CPU
调度算法
先来先服务(FCFS)
是最简单的调度算法,有利于长进程不利于短进程,利于CPU繁忙型作业(多CPU计算少输入输出),不利于I/O繁忙型作业(少量CPU计算大量输入输出)
抢先式多系统任务
抢先式多系统任务中,任何时刻CPU总是分配给优先级最高的作业。
例如:
作业P1:输入输出30ms,CPU10ms,输入输出30ms,CPU10ms;
作业P2:输入输出20ms,CPU20ms,输入输出40ms;
作业P3:CPU30ms,输入输出20ms;
三个作业的优先级 P1>P2>P3 运行时CPU的流转方式为:
作业P1、作业P2首先进行输入输出,此时作业P3占用CPU,运行20ms后,作业P2输入输出完毕抢用CPU,作业P3暂停;
作业P2抢占CPU运行10ms之后,作业P3输入输出完毕,抢占CPU,作业P2中止;
作业P1抢占CPU运行10ms后进行输入输出释放CPU,此时作业P2占用CPU运行未完成的10ms;
作业P2运行10ms后进行输入输出释放CPU,作业P3占用继续运行未完成的10ms;
短作业优先
作业号 | 提交时间 | 运行时间(分钟) |
1 | 6:00 | 60 |
2 | 6:24 | 30 |
3 | 6:48 | 6 |
4 | 7:00 | 12 |
以上四项作业按照短作业优先调度算法次序如下:
作业号 | 提交时间 | 运行开始 | 完成时间 | 运行时间(分钟) | 周转时间(完成-提交) |
1 | 6:00 | 6:00 | 7:00 | 60 | 60 |
2 | 6:24 | 7:18 | 7:48 | 30 | 84 |
3 | 6:48 | 7:00 | 7:06 | 6 | 18 |
4 | 7:00 | 7:06 | 7:18 | 12 | 18 |
作业调度次序为1、3、4、2。
平均周转时间:(60+84+18+18)/4=45。
进程的同步与互斥
互斥:
在同一时刻,只允许某一个进程使用资源,同一个资源不能同时服务于多个进程。进程互斥主要源于资源共享,是进程之间的间接制约关系。
例如:
单人独木桥,在同一时刻桥只服务于一人,同一时刻只允许一人通过,其他人只能等待他通过之后才能逐个继续通过。
与互斥相反的是共享:
例如:过街天桥,同一时刻可通过多人,同一时刻可以服务于多个进程
同步:
速度有差异,在一定情况下停下等待。进程同步主要源于进程合作,是进程之间的直接制约关系。
例如:
张三和李四同时从A点到B点,相同地点相同路径,张三骑车,李四走路,明显张三速度要快于李四,等差距较大时,张三停下等等李四两人一起到达。
实例:
讨论下图哪里存在互斥哪里存在同步
互斥情况:
单缓冲区,同一时刻只允许一人(生产者或者消费者其中一个人)进行操作,一次只能存放一个物品,满足在同一时刻,只允许某一个进程使用资源,同一个资源不能同时服务于多个进程。此为互斥。
同步情况:
单缓冲区只能放入一个物品,生产者放入一个物品后不能继续放入第二个,需等消费者将物品拿走之后才能继续放入,满足速度有差异,在一定情况下停下等代,此为同步。
同步情况:
多缓冲区能放入多个物品,生产者放满之后不能继续存放,需等消费者将物品拿走之后才能继续放入,满足速度有差异,在一定情况下停下等代,此为同步。
综上:同步与互斥在同一题目中可能同时存在。
PV操作
临界资源:
诸进程之间需要以互斥方式对其进行访问的共享资源,如打印机,或上述问题中的独木桥;
临界区:
临界区是代码段,是每个进程中访问临界资源的那段代码
信号量:
存在于PV进程内部的一种变量,例如下面的变量S。
信号量取值范围:
信号量≥0:表示某资源的可用数量
信号量<0:表示阻塞队列中等待该资源的进程数量
-(进程个数-资源个数)~ 资源个数
P操作和V操作流程
PV操作例题:
题目中如果引入PV操作在运作的过程中极易出错:(单缓冲区只能存放一个产品)比如:
若生产者进程先运行,生产者持续生产产品并送到单缓存区,而消费者还未消费此时生产过多造成单缓冲区溢出;
若消费者进程先运行,消费者从缓冲区 取产品进行消费,此时生产者尚未生产,进程会出错
PV操作的作用:
是解决某些并发进程中间某些约束(例如:先后等)。
例题:
在此类题目考察PV操作的应用,那么切入点一般是PV操作的作用(某些并发操作之间的约束关系)答案:AC
因此从并发操作之间的约束关系入手可看出:
付款操作购书者进程无法独立完成,收费动作也不能由收银员独立完成,所以二者之间存在配合或交互等约束关系;
收银员进程只能是等待购书者唤醒之后才能进行收银操作,在未唤醒时只能处在阻塞状态,所以b1出应该是P操作阻塞后续收费流程;
付款操作购书者不能独立完成,因此到此步骤之后需要购书者唤醒收银员,唤醒需要用到V操作,所以a1处应该是V操作;
唤醒收银员之后,购书者需要等待收银员完成收银进程再进行下步操作;
因此a1处唤醒收银员之后需要立即阻塞购书者进程a1操作之后的操作,所以a2此处应该用P操作完成阻塞动作;
收银员流程完成收费操作之后需要唤醒被阻塞的购书者进程,使购书者进程继续运行付款之后的操作,所以b2处应该用V操作来唤醒购书者进程;
关系(同组PV操作相同信号量)
购书者流程中a1处V操作唤醒的是收银员流程中b1处被P操作阻塞的操作,所以a1,b1为是一组PV操作,运用相同信号量;
收银员流程中b2处V操作唤醒的是购书者流程中a2处P操作被阻塞的操作,所以a2,b2为是一组PV操作,运用相同信号量;
前驱图
将不分前后的进程同步进行,形成前驱图
PV操作与前驱图
用PV 操作对前驱图中的操作进行先后限制
PV操作对前驱图中进程的影响:
P操作的阻滞功能一般作为“锁”来限制某项进程,使其在解锁之后才能运行;
V操作的唤醒功能一般作为“钥匙”来解锁某项进程;
例如右侧图中,先运行D是无法运行的,需要先运行ABC进程之后用其进程末尾的V(A),V(B),V(C)唤醒对D进程中的P(A),P(B),P(C),对其进行解锁之后才能运行D进程,进而解锁E进程
在前驱图与PV操作结合的题目中,一般主要考察PV操作对前驱图中各项进程的锁定与解锁;
例子:
此题考察前驱图中PV操作的锁定与解锁,答案:CAA
首先应对进程P4,P5用P操作进行锁定,使其只能在进程P3执行完毕之后运行V操作解锁之后才能运行;
在进程P3后设立V进程,使P3运行完毕之后可以用V进程解锁P4,P5;
再对进程P3用P操作进行锁定;使其只能在P1,P2进程均执行完毕之后才能运行;
在P1,P2进程之后设立V操作,用来解锁P3进程的锁定;
所以题目中
进程P1后a处应是V(P1);用来解锁进程P3执行前c处的P(P1);
进程P2后b处应是V(P2);用来解锁进程P3执行前c处的P(P2);
进程P3执行后的d处应是V(P4),V(P5)用来解锁进程P4,P5执行之前e,f处的P(P4),P(5);
另:此类题目中如有多个信号量,如此题中的S1,S2,S3,S4;其分布顺序一般为 左-->右;上-->下;
所以:
a-->V(S1); b-->V(S2); c-->P(S1),P(S2); d-->V(S3),V(S4); e-->P(S3); f-->P(S4);
三、死锁
如果系统资源有限而多个进程分配不当则会产生死锁问题。
例题:
例如上述题目中,若只有5个系统资源;
若将5个系统资源先分配给进程A,等A执行完毕空出5个系统资源之后再分配给进程B,B执行完后再分配给C,如此逐个执行则不会发生死锁问题;
若将5个系统资源分配给进程A2个,再分配给进程B2个,剩余1个系统资源分配给C,此时3个进程都缺少系统资源无法运行,且3个进程都因为未运行完毕而无法让出系统资源,此时进程在等待分配系统资源,而5个系统资源都已经分配,没有多余的系统资源可以分配,此时的进程持续等待,这便是死锁。
题目中问,至少需要多少个系统资源才不可能发生死锁。
此时,若有13个系统资源,A4个,B4个,C4个,剩余的一个随便给哪个进程都能使进程运行,或者A5个,B5个,C3个,等AB运行完之后空余出系统资源C一样可以运行,所以最少需要13个系统资源。
公式:
求至少有多少个系统资源才不会发生死锁问题的公式为:
进程个数*(单个进程运行所需的系统资源个数-1)+1;
死锁的形成条件:
互斥:
系统资源是互斥的,同一系统资源在同一时间内只允许一个进程使用。
保持和等待:
各个进程会保持自己现在所持有的资源,并且等待更多的资源给自己。
不剥夺:
系统不会把已经分配给其他进程的资源剥夺回来重新分配。
环路等待:
死锁的预防和避免
死锁的预防:
打破上述死锁形成四大条件
死锁的避免:
1.有序的资源分配:
将资源逐个分配给各个进程,运行完毕之后收回再分配,往往资源利用率很低
2.银行家算法:
以银行放贷的思路来做资源分配,放资源之前首先思考是否可以收回来,收不回来便不放。
银行家算法:
分配资源的原则:
一个进程对资源的需求量不大于系统中总资源数时可接纳该进程;
进程可以分期请求资源,但总数仍不能超过最大需求量;
当系统现有资源不足以满足进程尚需资源数时,可对进程的请求推迟分配,但总能使进程在有限时间内得到资源;
例题:
系统状态安全即没有死锁状态发生
答案:B
首先需求得资源 R1、R2、R3 剩余的资源数
R1=9-(1+2+2+1+1)=2
R2=8-(2+1+1+2+1)=1
R3=5-(1+1+3)=0
其次求得各进程执行完毕尚需的资源数
资源 | 最大需求量 | 已分配资源数 | 还需资源数 | ||||||
进程 | R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 |
P1 | 6 | 5 | 2 | 1 | 2 | 1 | 5 | 3 | 1 |
P2 | 2 | 2 | 1 | 2 | 1 | 1 | 0 | 1 | 0 |
P3 | 8 | 1 | 1 | 2 | 1 | 0 | 6 | 0 | 1 |
P4 | 1 | 2 | 1 | 1 | 2 | 0 | 0 | 0 | 1 |
P5 | 3 | 4 | 4 | 1 | 1 | 3 | 2 | 3 | 1 |
若进程P1首先运行:则资源R1、R2、R3剩余量不满足该进程尚需资源量,会发生死锁;
若进程P2首先运行:则3类资源剩余量均满足该进程尚需资源量,可以运行;
若进程P3首先运行:则资源R1、R3剩余量不满足该进程尚需资源量,会发生死锁;
若进程P4首先运行:则资源R3无剩余不满足该进程尚需资源量,会发生死锁;
若进程P5首先运行:则资源R2、R3剩余量不满足该进程尚需资源量,会发生死锁;
因此只能进程P2首先运行,R2运行完毕后归还资源,此时资源分配表为:
资源 | 最大需求量 | 已分配资源数 | 还需资源数 | 当前剩余资源数 (原剩余-P2所需+P2归还) |
进程 | R1 R2 R3 | R1 R2 R3 | R1 R2 R3 | R1 R2 R3 |
P1 | 6 5 2 | 1 2 1 | 5 3 1 | 4 2 1 |
P2 | 2 2 1 | 0 0 0 | 0 0 0 | |
P3 | 8 1 1 | 2 1 0 | 6 0 1 | |
P4 | 1 2 1 | 1 2 0 | 0 0 1 | |
P5 | 3 4 4 | 1 1 3 | 2 3 1 |
由上表可知,此时运行进程P4、P5均不会发生死锁,但一优先般运行下标小的进程,所以运行P4进程;
资源 | 最大需求量 | 已分配资源数 | 还需资源数 | 当前剩余资源数 (原剩余-P4所需+P4归还) |
进程 | R1 R2 R3 | R1 R2 R3 | R1 R2 R3 | R1 R2 R3 |
P1 | 6 5 2 | 1 2 1 | 5 3 1 | 5 4 1 |
P2 | 2 2 1 | 0 0 0 | 0 0 0 | |
P3 | 8 1 1 | 2 1 0 | 6 0 1 | |
P4 | 1 2 1 | 0 0 0 | 0 0 0 | |
P5 | 3 4 4 | 1 1 3 | 2 3 1 |
由上表可知,此时运行进程P5不会发生死锁,所以运行P5进程;
资源 | 最大需求量 | 已分配资源数 | 还需资源数 | 当前剩余资源数 (原剩余-P5所需+P5归还) |
进程 | R1 R2 R3 | R1 R2 R3 | R1 R2 R3 | 6 5 4 |
P1 | 6 5 2 | 1 2 1 | 5 3 1 | |
P2 | 2 2 1 | 0 0 0 | 0 0 0 | |
P3 | 8 1 1 | 2 1 0 | 6 0 1 | |
P4 | 1 2 1 | 0 0 0 | 0 0 0 | |
P5 | 3 4 4 | 0 0 0 | 0 0 0 |
此时再运行P1然后运行P3。
此类题目运算步较为零散,极易出错,若有空余时间当走走其他选项是否能走通
四、存储组织
分区存储组织
存储区域除了给系统用,还有一部分是给用户程序使用的,给用户程序使用的空间原本是一大块连续的空间,当用户有程序需要空间运行时,系统会把需要的内存大小提交到分配组织里面去,然后给他分配所需要大小的内存。
例如:
某计算机内存大小为128K,采用可变分区分配方式进行分配内存,当前系统内存分块情况如下图所示,现有作业4申请内存9K,按照几种不同的存储分配算法分配。
分配前:
首次适应算法分配:
最佳适应算法分配:
最差适应算法分配:
循环首次适应算法分配 :
页式存储组织
上述分区存储组织,是将整个程序直接调入内存,适用于占用小块内存的运行程序;
页式存储组织是将所需内存大的程序拆分成等分大小的小程序,称作页,将内存也分成对应大小的块,将程序页调入内存块中运行,另需要一个页表来记录用户程序页和内存块一 一对应的映射关系,此存储组织适用于需要较大内存的程序,使用此方法甚至能运行大于内存总量的程序。
注:页号和块号可以相等也可以不相等,没有严格要求,但是绝大多数时候是不相等的。
页式存储组织优缺点:
优点:
利用率高,碎片小,分配及管理简单。
缺点:
使用页表对应用户程序页与内存块之间的映射关系,运行时需要从页表中查找,增加了系统开销,可能产生抖动的现象。
逻辑地址与物理地址:
一般考察逻辑地址和物理地址互化。
高级语言程序使用逻辑地址;运行状态、内存中使用物理地址;
逻辑地址和物理地址都是由页号和页内地址组成的
逻辑地址与物理地址的页内地址是相同的,但是物理地址的块号,是逻辑地址的页号所对应的块号,可能相等也可能不等。
例题:
题目中给予逻辑地址5A29H(地址中的H一般忽略不计,相当于单位不纳入计算),需计算其物理地址;
首先将逻辑地址的页号和页内地址分离,逻辑地址的页内地址=物理地址的页内地址;
分离过程:
题目中页面大小是4K,4K化为二进制是,即需12位二进制数表示,题目中的地址5A29H是十六进制,12位二进制化为十六进制是3位,高出3位的就是页号,所以页面地址是A29,同时可得页号是5,页号5所对应的页帧号(块号)是6,即物理地址是6A29H(选项D)。
进程P想要访问的页面4不存在,
则需要将进程的页面4调入内存当中,而此时应当从现在占有内存的几个页面中挑一个未访问的丢出去。也就是只能从页号0125中挑一个未访问的扔出去,页面0125中未访问的只有页面1,所以应该淘汰页号为1(选项B)的页面。
段式存储组织
页式存储是将程序划分为固定大小的页,所有页的长度都相等;
而段式存储是将程序按逻辑结构划分为未必相等的段
比如:将一个程序划分为段式:将main函数划分为一个段,每个子函数划分为一个段。
段式存储优点:
多道程序内存共享,各段程序修改互不影响;
段式内存缺点:
内存利用率低,内存碎片浪费大;
段表:
段式存储同样需要段表来记录段与内存的映射关系:
段表的内容包含:
段号:
所划分的段的序号;
段长:
划分的这一段的地址是多大
基址:
基地址即此段的开始地址是多少
地址结构:
段页式存储组织:
段式存储和页式存储的结合,先分段,段内分页;
优点:
空间浪费小,存储共享容易,存储保护容易,能动态连接;
缺点:
管理软件的增加,复杂性和开销也随之增加(先查段号,再查页号等等操作),需要的硬件及占用的内容也有所增加,执行速度下降。
快表:
快表是一块小容量的相联存储器(按内容存取),由高速缓存器组成(在Cache里面),速度快效率高,一般用来存放当前访问最频繁的少数活动的页面的页号。
相对应来讲,如果将段表页表等放入内存当中则称之为慢表
五、页面置换算法(页面淘汰算法)
页面置换算法又称页面淘汰算法,主要应用于在存储体系当中,进程所需内存大于所分配的内存
例如:1个进程分成了100页,但是系统分配给他的内存块只有5个。
此时进程在运行中如果内存块被占满,而所需要的进程页又不在内存块体系中,则需要先丢出一个不用的页,再调入所需的页,此称之为页面淘汰(页面置换)。一般有以下4种淘汰方式:
最优算法(OPT):
往往存在于理论层面,在整个进程发生之后,根据序列分析计算来对比多种方法来得到的,不同进程不同算法,不固定无特点,不适于直接使用,适用于后期优化改进(基本不考)。
随机算法(RAND):
即字面意思,随机淘汰一个,性能是不稳定的,(没啥好考的也不怎么考)。
先进先出(FIFO):
先进入内存块体系的先淘汰可能产生抖动。
上方2表比较可知,第2个表中,系统给该进程多配备了一块资源反而造成缺页增多,此现象称之为抖动。
最近最少使用(LRU):
最近使用频率由高到低排列,淘汰最近使用频率最低的,不会发生抖动。
先进先出算法与最近最少使用算法比较:
例题:
系统中没有使用快表的意思是,将页表全部放入了内存中。
程序运行的过程:
首先获得系统给分配的内存资源块,当程序开始运行时,此时内存块中是空的,系统需要将运行所需的程序页不断调入内存块,直到内存块被占满。
此时程序运行如果需要调用程序页存在于内存块时,需要先到页表中查阅所需程序页对应的内存块位置,然后再去内存中调用程序块,如果查阅完毕未找到所需的程序块,则需要用到页面淘汰中的算法,淘汰当前不用的程序页面,然后调入所需的程序页继续运行。
程序每一次因为内存中缺少程序页停止称为缺页中断,缺页中断需要从外部将程序页调入内存,如果一个程序页占用了两块内存,则系统调用完一个内存块之后会停止,产生一次缺页中断,然后再继续调用下一个内存块中的该程序页内容,因此会产生两次缺页中断,依次类推直到程序运行结束。
系统中程序划分为6个页面,由题可知此时程序块已经全部放入内存中,每次访问一个内存块需要先访问页表确定块的位置,然后再访问内存块,每一页都是如此,共分为6页,所以需要访问12次内存。
注:约定俗成,程序的指令不论分成几个块,都是一次性调入,产生一次缺页中断。
如果需要运行swap指令,运行时发现该指令不在内存中,首先需要将指令本身调入内存中,此为一次缺页中断,而程序的指令不管分成几块都是一次性调入内存的,所以只产生这一次缺页中断;
当需要操作数A时,运行发现A不在内存中需要将其调入,此为一次缺页中断,然后读取完当前内存块发现并没有完整地读完A的全部内容,仍然无法运行程序,需要再次将A的另一部分调入,此为第二次缺页中断。
需要操作数B时也是产生两次操作中断。
所以一共会产生5次操作中断。
六、索引文件结构
索引文件结构本身的容量非常有限,但是他引入了一种扩展机制,即一级间接索引、二级间接索引等扩展方式来进行容量拓展。索引文件结构中,使用间接索引扩展内存容量的同时,其查询速度也会相应减慢。
默认索引文件结构
默认标准索引节点一般是0-12号共13个节点,0-9为直接索引,10为一级间接索引,11为二级间接索引,12为三级间接索引。如果不使用默认结构则应该说明节点数量及各级索引构成。
例题:
注:物理块是只内存中实际存在的内存块,物理块号就是实际内存的序号;逻辑块号是人给内存块取的名字。
答案:CD
逻辑块号从0开始编号,5号逻辑块对应的物理块号是58;
已知地址大小是4字节,数据块和索引块的大小是1K,1K=1024B,那么一个数据块可以存放1K/4B=256个地址;
90号物理块和91号物理块采用一级间接索引地址,其中存放的地址对应的物理块是新的索引节点;
90号物理块有256个地址分别对应256个逻辑块;同样91号物理块有256个地址分别对应256个逻辑块;
已知直接地址索引对应了5个逻辑块分别是0-4号;90号是一级间接地址索引,对应256个逻辑块,应该是5-260号;
所以261号逻辑块应该在91号一级间接索引地址对应的256个逻辑块中的第一个即261号物理块;
101号物理块是二级间接索引地址,所以101号物理块中存放的应该是二级地址索引表;
树形目录结构
例如:当前为D1要求F2的路径
全文件名:从盘符开始到所查文件名:/D1/W2/F2
绝对路径:是从最顶端盘符开始,不包括查找文件本身:/D1/W2/
相对路径:从当前路径下一级开始到查找文件本身:W2/
如上面提到的索引文件结构等类似情况,一次访问可能要经过多次间接查询才能找到最终文件。如果树形目录结构很大的情况下不仅耗时对I/O系统也有压力,为此引出“当前目录”即相对路径,从当前目录开始直接去向待查文件。
七、空闲存储空间的管理
在存储空间内,部分空间被占用,仍有部分空间没被占用,这些没被占用的空间需要集中管理起来,以方便系统申请空间时可以合理分配,此为空闲存储空间的管理。
管理方法:
空间存储空间的管理有以下四种方法:
空闲区表法
又称空闲文件目录,是指用一张表把空闲的存储空间记录下来
空闲链表法
将空闲区链起来,形成一个链,等系统申请空间时可以按需分配
成组链接法
将空闲的存储空间即分组又分链
位示图法
(四种方法中考察频率高)
画图表,用1表示该内存区域已被占用,0表达的区域还是空闲的
例题:
答案:DB
由题知,字长是32位,每一位对应一个物理块;
注:约定俗成,字从1开始计数,首个字便是第1个字,物理块(位置)是从0开始计数,首位或者首个物理块是第0号,32位是0-31号物理块
第4195号物理块实际上是第4196个物理块,4196/32=131.125表示已经超出了第131个字,因此此时的位置应该是第132个字。
每个字32位,131个字总共131*32=4192位,位是从0开始计数,所以第131个字的最后一位的序号是4191,第132个字的位数分别是:
第132个字的位置 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ...... | 31 |
第132个字的位置所对应的物理块号 | 4192 | 4193 | 4194 | 4195 | 4196 | 4197 | 4198 | ...... |
因此4195号物理块对应的是第132个字的位置3,而将4195号物理块分配给某文件说明4195号物理块需要被占用,位示图法中,用1表示已被占用,用0表示尚未占用,所以4195号物理块即第132个字的位置3应该是改为1。
八、I/O
I/O管理软件
I/O隐藏了I/O操作实现的细节,方便用户使用I/O设备
I/O数据传输控制方式
数据传输控制方式是指内存和外设的数据传输控制问题。I/O设备与CPU之间的数据传送控制方式有4种:
十三、I/O控制方式
I/O设备与CPU之间的数据传送控制方式有4种:
控制方式 | 特点 | 缺点 |
程序直接控制(程序查询) | 适用于简单、外设很少的计算机系统,是CPU介入最多的方式,外设不对传说过程产生反馈,需要CPU去查询是否传输完毕 | 耗费大量CPU时间,无法检测设硬件设施发生的错误,设备之间只能串行工作 |
中断控制 | 适用于简单、外设很少的计算机系统,外设传输完毕之后自动中断 | CPU仍需要花费较多时间处理中断,处理中断期间其他并行设备也会受到影响,过多中断容易导致数据丢失 |
DMA | 外设与内存直接传输数据,传输期间由DMA控制,传输结束时才会向CPU发出中断请求,CPU接收后继续后续工作 一个DMA传送需要执行一个DMA周期,相当于一个总线的读写周期,但DMA方式下每传送一个数据仅占用一个存储周期 | 要求CPU启动驱动设备、给出存放数据的地址、操作方式、传送字节长度等 |
通道 | 外设与内存直接交换数据,一段数据传输结束时才会向CPU发出中断请求 | CPU发出I/O启动命令之后,通道自行完成启动驱动设备、读取存放数据的地址、操作方式、传送字节长度等工作 |
计算机运行过程中遇见突发事件要求停止正在运行的程序,去应对突发事件。服务完毕再自动返回原程序继续执行,这个过程称之为中断。CPU离开时会保存现场,以便于返回去继续执行原程序。 中断服务程序的入口地址称为中断向量。中断程序的现场信息是保存在栈。
通道分为字节多通路传输和选择通路传输,区别如下:
九、虚设备与SPOOLING技术
例如:
ABC3台电脑公用一台打印机,当A正在打印时如果B提交打印申请会被驳回,或无法提交上,过会再提交时可能A还没打印完,再等会提交时可能C正在打印了,B还是无法打印,所以不能充分高效的进行顺序打印,因此引入SPOOLING技术。
SPOOLING技术是指,在打印机正在打印时如果提交过来打印任务,则会将任务会自动存入输入井,等正在进行任务完成后,输入井中的任务会按序进行打印。
虚拟内存实际上是一个基于局部性原理的地址空间,采用调用、置换将内存和外存统一管理,虚拟容量取决于计算机的地址结构和外存容量。
十、微内核操作系统
微内核操作系统对应的是单体内核操作系统;
单体内核操作系统是将需要处理的东西整个全部放入内核中,如此庞大的内容处在内核中,一旦任何一部分出现问题整个系统都会崩溃,需要重新启动;
而微内核操作系统是只将最重要的一小部分放入内核之中,其他大部分放在内核之外,此时,只有当内核中这一小部分出现问题是系统才会崩溃,只需要重启这一小部分即可,其他部分出现问题系统都不会崩溃;
实质 | 优点 | 缺点 | |
单体内核 | 将图形、设备驱动、文件系统等功能全部放在内核中实现,运行在内核状态和同一地址空间 | 减少进程间通信和状态切换的系统开销,获得较高额运行效率 | 内核庞大、占用资源较多且不易剪裁,系统的稳定性和安全性不高 |
微内核 | 只实现基本功能,将图形系统、文件系统、设备驱动系统及通信功能放在内核之外 | 内核精炼,便于剪裁和转移,系统服务程序运行在用户地址空间,系统的可靠性、稳定性和安全性较高,可用于分布式系统 | 用户状态和内核状态需要频繁切换,从而导致系统效率不如单体内核 |
核心态和用户态
微内核操作分为核心态和用户态,核心态就是微内核系统的内核之内的部分,用户态就是微内核系统的内核之外的部分;用户态中的内容出现问题会比较容易解决,核心态中的内容出现问题会比较难处理,用户态和核心态之间存在频繁的交互。