考研复试操作系统笔记.docx
《考研复试操作系统笔记.docx》由会员分享,可在线阅读,更多相关《考研复试操作系统笔记.docx(8页珍藏版)》请在冰豆网上搜索。
![考研复试操作系统笔记.docx](https://file1.bdocx.com/fileroot1/2023-1/31/d05f5348-3363-4905-affb-5f75962b818e/d05f5348-3363-4905-affb-5f75962b818e1.gif)
考研复试操作系统笔记
1:
操作系统的目标:
提高资源利用率,提高系统吞吐量,使用户使用更方便,兼容新的计算机硬件和软件。
2:
操作系统的作用:
用户和计算机硬件之间的接口,使用户方便的操纵硬件,计算机系统的管理者,对计算机资源进行抽象。
3:
计算机系统的发展:
人工操作方式(穿孔卡片),单道批处理系统(每次只从磁盘中调入一个程序进内存),多道批处理系统(调入多个程序,CPU可以切换),分时操作系统(将一台主机给多个用户使用)实时操作系统(响应快,同时面对大量的远程终端)。
4:
操作系统特点:
并发,共享,虚拟(空分,时分),异步。
5:
操作系统的功能:
CPU管理(进程控制,同步,通信,调度),存储器管理(内存分配,内存保护,地址映射,内存扩充)设备管理(缓冲管理,设备分配,设备处理)文件管理(存储管理,目录管理,读写保护管理)接口(用户接口管理,程序接口管理)
6:
操作系统结构:
模块化操作系统,分层式操作系统,C/S操作系统(分布式),微内核结构(建立在前三者的基础上,微内核只提高“最基本”的服务,进程调度、进程间通信、存储管理、处理I/O设备。
其他服务,如文件管理、网络支持等通过接口连到微内核,微内核具有良好的移植性)。
7:
传统操作系统中,进程是资源分配和独立运行的基本单位。
8:
为了并发才引入进程。
9:
进程控制块PCB:
是一个记录型数据结构,记录了操作系统所需的用户描述进程的当前状况和控制进程运行的全部信息,使一个在多道环境环境下不能独立运行的程序成为一个可以独立运行的基本单位。
系统创建一个进程的时候就要顺带着创建PCB,OS要调用一个进程的时候就要先查看PCB,系统将PCB组织成若干个链队列或索引表,PCB中有进程标识符,处理机状态,进程调度信息,进程控制信息等。
10:
进程的特性:
动态,并发,独立(独立运行,独立分配资源,独立接受调度),异步(不可预知的速度前进)。
11:
进程的三种基本状态:
就绪,阻塞,执行(就绪到执行到阻塞再回到就绪,执行可以直接回到就绪),此外还有挂起,创建,终止。
12:
进程的创建:
申请PCB,为新进程分配资源(子进程可以继承父进程,比如父进程打开的文件,和父进程的缓冲区等),初始化PCB,把新的进程插入队列。
13:
进程的终止:
找出PCB,读出进程状态,若进程在执行,就终止进程,若进程有子孙进程,还要把子进程终止。
收回资源,移出PCB。
14:
进程的阻塞:
停止执行,PCB插入阻塞队列,CPU给另外一个就绪进程。
15:
进程的唤醒:
从阻塞队列中移出,PCB插入就绪列队中。
16:
临界资源是指每次仅允许一个进程访问的资源,每个进程中访问临界资源的那段代码叫做临界区。
17:
整形信号量:
用S表示资源数目,一个wait就资源减一,一个signal就资源加一。
其中执行wait前如果资源数小于0,就要一直等待下去,用while循环。
18:
记录型信号量:
防止进程一直while而等待,记录型信号量先S-1,然后判断S如果小于0了就调用block阻塞。
于是就会有很多进程被阻塞,于是创建一个进程链表指针,链接阻塞进程。
19:
AND型信号量:
一个进程需要多个临界资源,AND信号量控制多个临界资源,只有当所有的临界资源的S都大于1的时候,才允许执行并所有的S都减一。
20:
信号量集:
一个进程需要多个临界资源,而又有多个进程,信号量集就是为多个进程服务,只有这些进程都可以启动的时候才一起启动,每个资源都有不同的数量,所以有资源数目,需求数目,下限数目si,ti,di….
21:
计算机把各种硬件和软件都用数据结构抽象的描述其资源特性,用少量信息和对资源所执行的操作来表征该资源,而忽略内部结构和细节特性。
同样,共享资源也用数据结构来表示,代表共享资源的数据结构,以及由对共享数据结构实施操作的一组过程所组成的资源管理程序,就是管程,管程把数据结构包起来。
只允许自己访问它,所有进程要访问临界资源都要通过管程。
而管程每次只允许一个进程进入管程,从而实现进程互斥。
22:
生产者消费者问题:
用一个数组代表n个缓冲区构成一个缓冲池,用mutex实现互斥,empty表示缓冲池中空缓冲区的数量,full表示满缓冲区的数量。
生产者方面,先wait(empty),一定要等到empty>0了,才执行empty--,才能执行下一句wait(mutex),当缓冲池中没人,mutex=1,于是通过,生产者把货物放进缓冲池,缓冲区数组下标加1,然后释放signal(mutex),然后signal(full)加1。
消费者就是先wait(full),然后wait(mutex),然后数组下标--,然后释放mutex和empty。
23:
哲学家进餐:
第i位哲学家要用到第i个筷子和第i+1个筷子,有多少个筷子就会有多少个信号量,用信号量数组来表示,第i个哲学家,要wait(s[i])wait(s[i+1])。
然后吃,然后释放两个信号量。
24:
读者写者问题:
只要有一个reader,writer就不允许。
设置两个信号量rmutex(表示有rmutex个人可以同时读)和wmutex,和readcount,readcount等于0的时候才允许写。
读者方面:
首先wait(rmutex),通过后要做一个判断readcount=0,如果等于0,说明可能有进程在写,那么再wait(wmutex)(也就是说,如果有进程在写,就会导致wmutext等于0,那么这个wait就会阻塞),一直到没有进程在写了,然后readcount++,并释放rmutex,然后执行读操作,因为允许多个进程读,所以要释放rmutex,前面对于rmutex的执行仅仅是保证只有一个读进程对wmutex进行操作,此时wmutex是临界资源。
执行完了读操作以后,又要对wmutex进行判断,先readcount--,如果readcount=0,说明允许写了,于是就释放写进程,siganl(wmutex),这一步的前后依然要加上wait(rmutex)和signal(rmutex)。
写者很简单。
就是先wait(wmutex)然后执行写操作,然后signal(wmutex)
25:
进程通信:
共享存储器系统(基于共享数据结构,基于共享存储区,通过关键字),消息传递系统(进程间的数据交换以格式化的消息为单位来传递,分为直接通信方式(直接发给目标进程)和间接通信方式(类似邮箱)),管道通信(直接连接读进程和一个写进程,把数据流入管道即可)。
26:
处理机调度层次:
高级调度(作业级调度,把外存作业调入内存,作业进入系统后,就分配一个JCB,系统对JCB进行控制。
),低级调度(进程调度,保存处理机现场信息,选取进程,把处理机分配给进程,有抢占和非抢占两种),中级调度(把不能运行的进程调到外存去),
27:
调度算法要求:
周转时间短,响应时间快,截止时间有保证,优先权,系统吞吐量高,处理利用率高,各资源平衡利用。
28:
调度算法:
先来先服务,短作业调度算法,优先权调度算法(抢占和非抢占),响应比优先调度算法(动态优先权,(等待时间+要求服务时间/等待时间)),时间片轮转法,多级反馈队列调度(按照每个优先级划分队列,程序一来,就是最高优先级队列,然后执行一个时间片,执行完以后放入下一个优先级队列,每个优先级队列的对应的时间片长度不一样优先级越高,就时间片越小)
29:
实时调度算法:
要求系统处理能力强,大部分采用抢占式,具有快速切换机制。
最早截止时间优先EDF,最低松弛度优先级LLF(leastlaxityfirst)(紧急程度越高,就优先级越高,比如人物要在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,就都处于安全状态,ifneed[i,j]》work[i]说明系统不安全。
如果找到了,就work[i]=work[i]+allocation[i][j]finish[i]=true
比如现在有01234五个进程,ABC三种资源,维护maxallocationneedavailable4张表,首先对现在进行安全性算法,一开始work=availablefinish都是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备注:
所谓不安全就是没有进程可以运行,可能导致死锁。
所谓安全序列就是至少按我和这个序列是安全的,但是不一定会按我这个序列执行,每个进程的request是不定的。
33:
死锁的解除:
剥夺资源(从其他进程中剥夺足够多的资源),撤销进程。
存储器管理
34:
存储器由高到低:
寄存器,主存(高速缓存,主存,磁盘缓存),磁盘,可移动存储介质。
35:
程序装入内存:
先把源代码编译成多个目标模块,然后把模块链接起来形成装入模块,然后装入内存。
有绝对装入(装入程序按照模块中的地址讲程序和数据装入内存,程序的逻辑地址和实际内存地址完全相同),可重定位装入(程序中的地址都是以0开始的,装入内存以后也用相对地址来改变程序中的地址成绝对地址),动态运行时装入(在程序执行的时候再把相对地址改变成绝对地址)
36:
程序的链接:
静态链接,装入时动态链接,运行时动态链接。
37:
连续分配方式:
一个用户程序分配一个连续的内存空间,单一连续分配(内存分为系统区和用户区,用于单用户),固定分区分配(用户空间划分成若干个固定的大小区域,每个分区只装入一道作业,这样划分成几个分区就有几个用户并行作业),动态分区分配(根据进程的实际需要,动态为之分配内存空间,每个分区的大小不一样,比如伙伴系统)。
可重定位分区分配(内存中有很多碎片,为了移动碎片,就必须移动文件,就是重定位文件)
38:
进程的换入换出:
首先选择处于阻塞且优先级最低的进程换出,然后启动磁盘,把该进程的程序和数据传送到磁盘的对换区上。
39:
分页存储:
连续分配会有很多碎片,如果整合随便开销巨大,那么我们希望一个程序不要连续分配,于是引入页。
内存被划分成大小相等的页面。
进程分配空间的时候就把进程放在若干个可以不相邻的页面中,只有最后一个页面允许空位。
分页地址的地址结构:
低12位为页内位移,高20位为页号。
地址变换机构只是变化页号,页内位移是不变的,有三种,基本地址变换(从页表寄存器读出页表起始地址,然后页号加上起始地址就是页在页表中对应页表项,然后从页表项中读出物理地址,加上页内位移),快表(页表示在内存中的,CPU存取一个数据要两次访问内存,不爽,加入缓存)。
多级页表
40:
分段存储:
页面使固定分区到动态分区,目的是提高内存利用率。
段的大小不固定,那么引入分段是为了方便程序员并且容易实现共享(如果是页,或许一个程序的代码有20页,那么每个共享的程序都要维护一个20个页表项的页表)。
段内位移16位,段号16位,用户可以按照自己作业的逻辑关系划分成若干个段,也有段表和地址变换机构。
41:
段页存储:
集合二者所长先通过段号在段表中找到段并提取段表项的页表起始地址,然后通过页号找到页表项。
42:
虚拟存储器:
有的作业很大,要求的内存超过了内存总量,每次只能调一部分进去。
但是用户看到的大容量是一种假象,所以叫虚拟存储器。
可以用分页和分段来实现。
43:
虚拟存储器的分页,也是页表,但是有一部分还在硬盘上,于是页表有所不同,还要指出所调的块在外存上的地址。
缺页中断。
地址变换流程:
程序请求访问一页,页号如果正确,检索快表,如果在快表中,就形成物理地址直接访问,如果不在就访问页表,如果页在内存,就修改快表,然后访问物理地址,如果不在,就产生缺页中断,保留CPU现场,在外存中找到缺页,如果内存满了,就要换页,如果被换出的页被修改了还要写回外存,如果内存没满,启动I/O,直接调页,放入内存,修改页表,然后程序重新请求访问该页。
44:
虚拟存储器的内存分配策略:
固定分配局部置换,系统给程序分配一定数目的物理块,就这么多数目,不能改变,如果发现缺页就在该进程的页面中选一个调出。
可变分配全局置换:
OS保持一个空闲物理块队列,如果缺页,就从空闲物理块队列拿出一个装入一个页面,当没空闲的了,在从任意进程中选择一块调出。
可变分配局部置换:
系统给程序分配一定数目的物理块。
如果发现缺页就在该进程的页面中选一个调出,如果频繁的发生缺页中断,就多分配几个物理块。
物理块分配算法:
平均分配,进程大小分配,进程优先级分配。
45:
调页策略:
预调页:
一次调入相邻的若干页。
请求调页,要什么页给什么页
46:
页面置换算法:
最佳置换法(被淘汰的页面是未来长时间不会使用的)最近最久未使用LRU(可以用寄存器,和栈实现)clock置换算法(每个页面设置一个访问位,访问某页的时候,访问位置1,淘汰某页的时候访问为置0,如果再淘汰这页,真的淘汰了。
)
设备管理
47:
I/O设备的分类:
存储设备和输入输出设备。
低中高速设备,块设备和字符设备。
独占共享虚拟设备。
48:
设备和控制器之间的接口:
数据信号线,控制信号线,状态信号线。
49:
设备控制器:
由处理机接口和设备接口,I/O逻辑三部分组成,接受和识别命令,数据交换,标识和报告设备状态,地址识别,数据缓冲,差错控制。
50:
I/O通道是一种特殊的处理机。
51:
总线系统ISA,EISA,VESA,PCI
52:
程序I/O(处理机向控制器发送一个I/O指令,把状态寄存器设busy,然后不断的循环测试busy,如果busy为1,表示输入机还没输完,如果为0,处理机把数据寄存器的数据取出,送到指定内存单元,这样完成了一个字符的I/O)中断驱动的I/O(CPU向设备控制器发一个I/O命令,然后立即返回执行原来的任务,设备控制器自动控制I/O设备,控制输入设备读数据,一旦数据进入数据寄存器,控制器就发送中断信号,CPU取走数据信号,写入内存)直接存储器访问DMA(不再以字节为单位,开始以数据块为单位,直接由设备输入内存,仅完成一个数据块的传送的开始和结束的时候才需要CPU干预)I/O通道(DMA随便可以完成一个数据块的传送,且只能传到一个内存区域,而通道可以传送一组数据块到不同的内存区域,CPU要完成一组相关的读写操作,只需向通道发送一个I/O指令,给出所要执行的通道程序的首地址和I/O设备,通道接受到指令以后,执行通道程序完成I/O任务。
)
53:
缓冲:
缓冲是为了缓和CPU和I/O速度不匹配的问题,减少对CPU的中断频率,放宽CPU中断响应时间要求。
有单缓冲和双缓冲,双缓冲可以同时双向通信。
循环缓冲,缓冲池(循环缓冲只适用于某种特定的进程,当系统较大时候,就会有许多这样的循环缓冲,于是有了可供多个进程共享的缓冲池)
54:
中断处理程序:
进程上下文切换,处理中断信号,读取设备状态修改进程状态等。
55:
设备驱动程序:
接受上层软件发来的抽象I/O命令,转化为具体要求后发送给设备控制器,此外也接受设备控制器发来的信号传给上层软件。
56:
为了实现设备分配,必须在系统中设置相应的数据结构:
设备控制表:
系统为每一个设备分配一个设备控制表,记录本设备情况,包括设备队列队首指针,设备状态,设备控制器表指针,重传次数。
类似的还有控制器控制表,通道控制表,系统设备控制表
57:
设备分配流程:
首先根绝I/O请求的物理设备名,找到系统设备表,找出设备的设备控制表,找到设备状态字段,找出与该设备连接的控制器的控制器控制表,在控制器控制表中找到通道控制表,根据通道控制表知道是不是忙碌等等。
只有在设备,控制器,通道都分配成功的时候才算分配成功,才可以启动I/O设备传输数据。
58:
spooling技术(假脱机技术):
spooling技术可以将一台物理I/O设备虚拟为多台逻辑I/O设备,允许多个用户共享一台物理I/O设备。
输入输出井,输入输出缓冲区,输入输出进程构成。
井在磁盘上,缓冲区在内存上。
比如要共享一个打印机,用户要求打印的时候,SPOOLING同意打印,但是不真正的打印,而是输出井之中申请一个空闲磁盘块,将要打印的数据输入其中,输出进程为用户进程申请一张用户请求打印表,把用户打印要求写入表中,再把表挂到打印队列上。
打印机空闲的时候,就取出表,把井中的传送到缓冲区,再打印。
SPOOLING提高了I/O速度,实现了虚拟设备的功能。
59:
磁盘调度:
先来先服务,最短寻道时间优先(选择要求访问的磁道与当前磁道最近的进程)扫描算法(引入方向的概念,选择是磁头移动方向上最近的进程)循环扫描算法(扫描算法是磁道由左到右再由右到左,而这个是由左到右,由左到右,由左到右、、、)
60:
磁盘高速缓存:
为了提高磁盘的I/O速度,利用内存中的存储空间来暂存磁盘中读出的盘块信息,逻辑上属于磁盘,物理上属于内存,磁盘高速缓存有两种形式,一个是在内存上固定分配一小块空间,另一个是内存上所有的未分配空间都可以用。
当有一个进程请求某个盘块的时候,就先查看磁盘高速缓存。
如果高速缓存装满了,就要使用置换算法,而且高速缓存里的还要周期性的写回磁盘。
61:
提高磁盘I/O的方法:
提前读,延迟写(本来要把某个缓冲区的数据写回磁盘,但是考虑到可能等会还要用,于是就把这个缓冲区放到空闲缓冲区队列的最后,一直等到这个空闲缓冲区需要被占用的时候,才写回去),优化物理块分布,虚拟盘(RAM利用内存仿真磁盘)。
文件管理
62:
现代计算机是通过文件系统来组织和管理计算机所存储的大量程序和数据的。
数据分成数据项,记录,文件三个等级。
63:
文件的逻辑结构:
有结构文件(由一个以上的记录构成,有顺序文件,索引文件,索引顺序文件),无结构文件(大量的源程序,可执行文件,库函数,就是无结构文件。
)
64:
文件的物理结构:
顺序文件(串结构,按关键字排列的顺序结构),索引文件(要查找第i个记录,根据一个i为参数的函数就可以获知记录的物理位置),索引顺序文件(只把诸多记录中抽取几个来做索引,查找的时候就先找到这几个,然后以这几个为基址来顺序)直接文件(记录键值本身就决定了物理地址)哈希文件(通过键值找到目录表中的一项,这一项的内容可以指向相应的物理块)
65:
外存分配方式:
连续分配方式,链接分配(隐式链接就是每个盘块自己拥有指向下一盘块的指针,显式链接就是用一个文件控制块来记录链接的盘块),索引分配(每个文件一个索引表,把文件的所有盘块号,记录在该索引中,文件读第i个盘块,直接从索引中找到第i个盘块的盘块号)
66:
文件系统:
FAT12(文件第一个簇放在FCB中,通过第一个簇找到第一个簇在FAT表中,然后通过FAT表项找到下一个链接簇,簇最多8个盘块)FAT16(FAT表的宽度增加到16位,可以管理65536个簇,簇最多64个扇区),FAT32(FAT表的宽度增加到了32位,可以管理更多的簇,簇最多64个盘块),NTFS(采用64位磁盘地址,具有容错功能和数据一致性,簇大小不固定,以卷为单位把卷中所有文件信息,目录信息以及可用的未分配空间信息记录在主控文件表,一个文件一行)
67:
文件控制块FCB:
文件名,文件物理位置,文件逻辑结构,文件物理结构,存取权限,建立日期,上一次修改日期,当前使用信息。
68:
文件目录结构由:
单级目录,两级目录,多级目录,目录检索方法有线性检索法,哈希法。
69:
空间分配:
空闲表法(连续分配方式,做一个空闲表,每个空闲区对应一个空闲表项,申请分配的时候先检索找到一个足够大的空闲区。
)空闲链表法(不额外建立表,直接在每个空闲区后面拉链)位示图法(一个二维表,每个盘块对应里面一个元素,每个元素,为0则盘块空闲)
70:
文件共享:
基于索引节点的共享(文件的物理地址和文件属性不再放在目录项中,而放在索引中,每个用户文件目录只设置文件名和指向索引节点的指针,那么两个用户通过查找文件目录会查到通一个索引节点,也就是通一个文件)利用符号链共享(B要共享C的文件F,B创建一个LINK文件,文件名也是F,里面包含C的文件F的路径)
71:
第一级容错技术SFT-1:
防止磁盘表面缺陷造成的数据丢失,有双份目录,双份文件分配表,补救措施有写后读校验和热修复重定向。
第二级容错技术SFT-2:
磁盘镜像,磁盘双工,也就是不光光磁盘弄两个,连磁盘控制器都弄两个。
基于集群技术的容错:
双机热备份(一台备份另一台),双击互为备份,公用磁盘(多个计算机共享一个磁盘,如果某个计算机出现故障,另外一个计算机立即接替该计算机管理该计算机原本拥有的卷)