操作系统:配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充; 为用户和应用程序提供一个简单接口。
定义:一组能有效组织和管理计算机硬件和软件的资源,合理地对各类作业进行调度,方便用户使用的程序的集合。
1.方便性:就是将程序语言转为机器语言,使计算机变得易学易用
2.有效性:提高系统资源的利用率;提高系统的吞吐率
(以上两点是最重要目标)
3.可扩充性:不断发展
4.开放性:遵循世界标准
1.用户与计算机硬件系统接口:通过系统调用,命令,图标窗口
2.计算机系统资源管理者:四大资源(处理机,存储器,I/O设备,文件)
3.对计算机资源的抽象:就是在用户和计算机资源中间再加一层软件层,实现对计算机资源抽象
1.批处理系统
单道批处理系统:当内存中一个作业完成,则调入第二个作业,但是每次只能有一个作业在内存中进行
多道批处理系统:就是在上一个程序I/O操作,此时cpu空闲的情况下,调度下一程序执行,从而让CPU始终处于运行状态。
2.分时系统:使用户能够及时地接收到计算机的应答,且多个用户可以同时通过自己的终端,以交互方式来与计算机交互。通过:1.作业直接进入内存 2.时间片轮转法
3.实时系统:更加注重及时,在截止时间之前做完,将时间作为关键参数,在规定时间内完成对该事情的处理,控制所有实时系统协调运行。
总结:操作系统三大类型:批处理系统,分时系统,实时系统
1.并发:与并行不同,并行是同时进行;而并发是在同一时间间隔内进行,也就是宏观上同时进行,微观上仍然是异步进行的。通过引入进程实现。
2.共享(最基本特性):指系统中的资源可供多个并发执行的进程共同使用。分为互斥共享方式(比如打印机这种)和同时访问方式(也就是并发访问)
所以以上两种并发和共享,是相辅相成的,有了并发才能共享,有共享才能并发
3.虚拟:通过某种技术将一个物理实体变为若干个逻辑上的对应物的功能。包括时分复用技术(就是一个功能的空闲又去为别人服务)和空分复用技术(虚拟存储)
4.异步:由于进程的行动受限于资源,所以肯定是“停停走走”的,所以进程是以人们不可预知的速度向前推进,即异步性。
处理机管理、存储器管理、设备管理、文件管理、操作系统与用户之间的接口
并发执行特征:间断性; 失去封闭性,因为资源会共享,从而失去封闭性; 不可再现性,多次执行程序得到的结果可能不同。
PCB:进程控制块
进程实体:程序段,相关数据段和PCB构成
进程定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
1.动态性:进程是动态的,创建产生,撤销而消亡,而程序是一直存在的
2.并发性: 进程实体同存于内存中,多个进程可以同时运行
3.独立性:进程实体是一个系统进行资源分配和调度的独立单位
4.异步性:进程按不可预知各自独立的速度向前运行
就绪,执行,阻塞
再加上创建和终止状态
最后还加上挂起,多了挂起就绪和挂起阻塞,挂起就是在原本的基础上,暂停一切操作,并且此时不接受任何调度,只有当激活才可以再次进行调度
进程创建:1.申请空白PCB 2.为新进程分配其运行资源 3.初始化进程控制块PCB 4.将新进程插入就绪队列
进程终止:注意当进程终止,其子孙进程都要终止,而且该进程的资源要归还给父进程。
进程的阻塞:由于等待资源,数据,操作,任务而自动将自身停止执行的行为。block原语。
通过wakeup唤醒为就绪状态。
进程挂起:suspend,通过active激活
记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。1.已成为进程存在于系统中唯一标志。2.实现间断性运行方式,就是通过PCB保留运行时基本信息。 3.实现进程间的同步和通信
进程PCB中信息:进程标识符;内部标识符;进程调度信息;进程控制信息
进程控制由OS内核中的原语实现。
OS内核:与硬件紧密相关的模块,各种常用设备的驱动程序以及运行频率高的模块,将他们常驻内存。
目的:保护; 提高效率
功能:支撑功能(中断处理,时钟处理,原语操作),资源管理功能(进程管理,存储器管理,设备管理)
处理机状态:系统态和用户态
进程同步:是对多个相关进程在执行次序上的协调,使并发执行的进程之间能按照一定规则,共享系统资源,使程序具有可再现性。
间接相互制约:就是通过临界资源相互制约
直接相互制约:就是相互合作关系从而相互直接制约
临界资源:就是像打印机这种在一个时间只能有一个进程调用
临界区:每个进程中访问临界资源的那段代码
同步机制遵循的规则:空闲让进,忙则等待,有限等待,让权等待。
整形信号量wait(S) 简称P操作,表示等待S资源,其执行完成就是使S资源-1; signal(S) 简称V操作,表示释放S资源,其执行完成就是s+1。
记录型信号量
AND型信号量,将进程需要的所有资源一次性全部分配给该进程,若有一个资源没有,那么都要等,这样可以避免死锁。
应用:
在一个进程中在临界区使用wait(s)然后完成操作后再signal(s)释放资源,这样就实现了多个进程互斥使用资源s。
首先把s初试化为0,要使A进程在B进程之前调用,就在A进程执行完需要的操作后再signal(s),在B进程执行前有wait(s),这样就实现了前驱。
管程:代表共享资源的数据结构以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块,就是一组操作为一个管程。
一个临界资源我们可以通过s来表示,那么显然当一个进程使用它时要P操作,使用完要V操作。
但是我们容易漏掉一种情况,就是一个数字需要记录有多少个进程同时使用时,当改变这个数字,我们为了防止多个进程同时改变,也要在改变这个数字的前后加上PV操作,防止同时改变这个数字造成不可预估的后果。
指进程之间的信息交换。
共享存储器系统:相互通信通过共享存储区或共享数据结构
管道通信系统:用于连接一个读进程和一个写进程实现他们之间通信的一个共享文件,以字符流形式将大量的数据传入管道。
消息传递系统:以格式化的消息为单位,封装在消息中,通过一组通信命令在进程间进行消息传递,完成数据交换。
客户机-服务器系统:(主流)
套接字:发送者和接收者有一对唯一的套接字号,不仅用在同一台计算机内部进程通信,还可以用于网络中的不同计算机之间的进程通信,确保通信双方之间逻辑链路唯一性,便于实现数据传输的并发服务。
远程过程调用和远程方法调用。
直接消息传递系统:通过直接通信原语来直接把消息发送给目标进程
信箱通信:间接通信方式,通过先将信息存储在随机存储器的共用缓冲区也就是信箱上,只有核准的目标用户可以随时读取。
比进程更小的基本单位,目的是减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。
之前进程是拥有资源的基本单位,也是调度的基本单位,但是为了更高效,引入线程作为调度和分派的基本单位,而进程不再是调度基本单位。这样就实现了两者分开,做到“轻装上阵”。
线程:调度基本单位
并发性:一个进程中多个线程可并发执行,当然不同进程中的线程也可以并发执行。
拥有少量自己的资源:就是TCB等信息,但是一个进程中的所有线程都可以共享该进程所有资源。
独立性:但是独立性比进程间低得多
系统开销:较小
线程三个状态与进程一样:就绪,执行,阻塞
线程也有控制块TCB
当引入了线程之后:进程是一个可拥有资源的基本单位,但进程已经不是可执行的实体了,进程的执行状态,实质上是进程中的某线程正在执行。
调度:资源分配
高级调度:就是对作业进行调度,将他们放入内存
中级调度:将暂不需要用的进程调度到内存外,提高内存利用率和系统吞吐量
低级调度:进程调度,最基本调度方式,决定就绪队列哪个进程获得处理机
处理机调度算法目标:提高资源利用率(就是cpu有效工作时间/总时间),并且更加公平(都能获得cpu时间),平衡(各种类型进程都有),策略强制执行(可以实现强制停止和执行)
批处理的目标:平均周转时间短(也就是作业被提交到完成的时间),系统吞吐量高,处理机利用率高。
分时系统:响应时间快,均衡性(系统相应时间快慢与用户请求复杂度匹配)
实时系统:截止时间保证,可预测性
任务:查看资源是否满足,然后将作业调入内存,运行。
就是放在一个作业队列中,然后分配处理机投入运行。只有在该进程完成或阻塞,调度程序才将处理机分配给其他进程。
作业越短,优先级越高
缺点:必须预知时间; 对长作业不利;人机无法交互;完全未考虑作业紧迫程度
基于作业的紧迫程度来设定优先级
结合了FCFS和SJF的优点,考虑了等待时间和作业长度,通过优先权=(等待时间+服务时间 /服务时间)来实现。
以前进程调度方式–非抢占方式:进程只有自己完成,或者因某件事阻塞了,或者是自己执行io操作而停止,处理机才会分配给其他进程
抢占方式:根据一定规则来抢占正在执行进程的处理机;
规则:优先权;短作业优先;时间片原则;
就是设置一个时间片,把进程放在队列,然后轮流执行时间片的时间;时间片大小最好是略大于一次典型交互所需要的时间。
也就是将处理机分配给队列中优先级最高的进程,也分为抢占式和非抢占式,而且优先级分为静态优先级和动态优先级,静态不变,动态优先级会随着时间改变而改变。
就是将不同要求的进程分配在不同的队列,而每一条队列所用的调度算法不一样,这样就可以更加零落。
首先设置多个就绪队列,每个队列从上到下优先级递减,但是时间片增加,新到的进程从第一个队列进来,然后执行一个时间片,执行完就出去,没执行完就进入下一个优先级队列,以此类推。
而处理机被分配到第i队列的某进程服务,如果有新的进程到较高优先级的队列,那么处理机马上将原本进程放到i队列末尾,然后给新进来的高优先级服务。
就是任务截止时间越早,优先级越高
松弛程度就是最晚开始时间到现在的时间间隔,越不松弛优先级越高(与EDF相比结合了进程运行时间)
优先级倒置:就是低优先级的在高优先级之上;
解决:使用动态优先级继承基础之上
引起死锁:临界资源
定义:一组死锁进程中的每一个进程,都在等待另一个死锁进程所占有的资源。
条件:互斥条件;请求和保持条件;不可抢占条件;循环等待条件
处理:预防;避免;检测;解除
请求资源时,不能持有不可抢占的资源。(就是说你只要在请求别的资源,你手上的资源就要扔掉)
当一个进程保持某些不可被抢占资源,突出新的请求不能被满足,必须释放所有资源。
通过将所有资源排序,规定必须按序列号递增的顺序请求资源
在资源分配过程中,防止系统进入不安全状态,避免发生死锁
系统安全状态:按某种进程推进顺序分配资源直到满足所有进程对资源最大要求的安全序列;反之则不安全,有可能进入死锁状态。
银行家算法:
一个新进程进入系统,必须申明每种资源所欲需要的最大单元数目,然后系统确定是否有足够资源分配给该进程,若有,则计算是否会进入不安全状态,若会不安全,则不给进入,否则才给进入。
多层结构存储系统:寄存器; 主存:高速缓存,主存储器,磁盘缓存; 辅存:固定磁盘,可移动存储介质。
寄存器和主存储器被称为可执行存储器,访问非常快。
但是对于辅存这种要IO设备实现。
寄存器:最高级的存储器,速度最快,能完全匹配处理器工作
主存储器:主存或者内存,保证进程运行时的程序和数据,也称可执行存储器。
高速缓存:在寄存器和主存储器之间,备份主存中较常用的数据,减少对主存的访问次数。
磁盘缓存,暂时存放频繁使用的磁盘数据信息。(注意:他其实不是实际存在的存储器,而是利用主存的部分存储空间暂时存放磁盘读出或写入的信息)
程序要运行:编译,链接,装入
事先知道编译后目标代码的绝对地址,把模块装入内存
不知道目标代码绝对地址,采用重定位方式装入到内存适当位置,因为逻辑地址和物理地址不同,所以要将其转换为物理地址,这种修改称为静态重定位
因为静态重定位并不能在运行时改变地址,所以此方法是在装入后不立即把逻辑地址转换为物理地址,而是在真正执行时才转换。
静态链接方式:一开始就连接好并且地址不再改变
装入时动态链接:边装入边链接
运行时动态链接:推迟到程序执行时才链接
逻辑地址相邻就是物理地址相邻
就是把内存分为系统区和用户区,系统区在内存地址部分,用户区仅有一个用户程序
通过将用户空间分为固定大小的区域,实现多道程序
有一个空闲分区表来存储空闲分区的大小和地址;每个分区头尾都有指针指向前后分区,称为空闲分区链。
分配内存:就是看 空闲分区大小-所需要的大小 是否大于size,若大于,则割掉需要的,若小于,则直接给用户。(一定要注意,会割裂,所以会产生碎片)
回收内存:看回收的分区的前后分区是否空闲,若空闲直接合并,不空闲才要重新建立新表项。
1.首次适应算法FF:从链首开始寻找,遍历直到找到大小能满足的空闲分区为止
缺点:每次都从链首开始,让链首很多碎片
2.循环首次适应算法NF:每次从上一次分配之后的空闲分区开始查找,这样就碎片分布就比较均匀了。
3.最佳适应BF算法:将空闲分区按从小到大排序,然后再分配,这样分配的往往是最合适的,但是碎片也是最小的
4.最坏适应WF算法:挑选最大空闲区分配,所以碎片都很大,但是缺点就是没有很大的空闲分区了。
1.快速适应算法:就是将空闲分区分类,每一类的空闲分区单独设立一个空闲分区链表,并且内存中有管理索引表,这样就可以根据需要的长度,从索引表中找到合适的链表,然后从链表取下第一块空闲分区给他即可
2.伙伴系统
3.哈希算法:通过哈希表的快速查找更高效率
紧凑:连续分配有很大缺点就是会形成很多碎片所以引入了紧凑的概念,就是将所有运行的作业移动,使他们相邻接,那么空余的空闲分区就可以合并成一个大分区。
但是把作业移动位置就必须对程序和数据的位置加以修改,所以就需要重定位。
动态重定位:
就是在系统中增加了一个重定位寄存器,来存放原本程序的起始地址,而程序的内存地址则是相对地址,所以程序真正的地址是 寄存器中的起始地址+内存地址。而当紧凑以后,只需要将程序新的起始地址代替原来的起始地址即可。
区别:重定位分区分配与动态分区分配区别在于加多了一个“紧凑”功能。
定义:把内存中暂时不能运行的进程或暂时不用的程序和数据换出到外存,然后把有运行条件的程序和数据换入内存。
分为整体对换(整个进程)和页面对换(进程中的页面)
占用较多空间,存储大部分文件,主要提高文件存储空间利用率,所以离散分配方式
小部分,存储换出的进程。主要提高进程换入换出的速度,所以连续分配方式
选择换出的进程,并换出。然后选择就绪的进程换入。
紧凑仍然要付出很大的开销,所以打算将一个进程直接分散装入许多不相邻接的分区,就可以充分利用内存空间而不需要紧凑。
页面:就是将紧凑逻辑地址空间分成若干个页,并加上序号
物理块:就是内存中的物理地址空间分成若干块
页面大小:太小会导致页面过长,太大会导致碎片很大
地质结构:页号:就是第几页 ; 位移量:就是页内地址
页表:页号对应块号,就将进程每个页对应上内存的物理地址块
实质就是将逻辑地址中的页号转换为内存中的物理块号
页表寄存器PTR:就是进程未执行时,页表始址和页表长度存放在进程PCB中,当调度时才将这两个装入页表寄存器中。
地址就是:页表始址+页号*页表项长度(可以看出仍然是每个进程分配连续的物理地址)
由于页表存放在内存中,每次读取数据要两次访问内存,第一次找到页号然后找到物理地址,第二次在物理地址中找到对应的数据。
快表(有并行查询能力的高速缓冲寄存器):用于存放当前访问的那些页表项,然后寻找就先找快表
访问内存的有效时间:从进程发出指定逻辑地址访问请求,到地址变换,到在内存中找到实际物理地址单元并取出数据的总时间。
解决页表太大占用太多内存问题
通过:1离散分配方式; 2一部分页表内存中,一部分磁盘上
就是说有多层页表,第一层页表仍然指向各个页表的头,各个页仍然对应物理块号。
为了满足编程,每个段定义了一组逻辑信息。
段表:与页表不同,每个段分配一个连续分区,但是分区和分区之间不连续,所以段表有段长和基址,段长就是段的长度,基址就是段的首地址,通过映射关系。
分页和分段区别:1.页是信息物理单位,段是逻辑单位
2.页大小固定且由系统决定
3.分页的用户程序地址空间是一维线性的,而段是用户行为,是二维的。
段的突出优点:易于实现段的共享
分页利于内存分配,分段利于用户需要,结合就是段页式
先将用户程序分段,每个段再分页。所以地质结构由段号,段内页号和页内地址组成。
获得物理地址要三次访问内存:第一次访问段表,第二次访问段对应的页表找到物理块号,第三次才从物理块中取出指令和数据。
不是物理实际扩充内存容量,而是从逻辑上实现对内存容量的扩充。注意虚拟存储器对应的是运行时的换入换出,而前面的存储器是在运行前的换入换出,前者是扩充内存,后者是增加利用率。
就是在一较短时间内,程序执行仅局限于某个部分,访问的存储空间也局限于某个区域。
包括时间局限性:某条指令被执行,短时间内很可能还会被执行;
空间局部性:访问某个存储单元,不久之后其附近存储单元也将被访问
就是在应用程序运行时,只将那些当前需要运行的少数页面或段线装入内存运行,其余暂留盘上。
这样就实现了大用户程序运行在小的内存
有 请求调入功能 和 置换功能 ,能从逻辑上对内存容量加以扩充的一种存储器系统。
1.多次性:多次调入内存
2.对换性:作业运行过程中换入换出
3.虚拟性:逻辑上扩大容量
4.离散性
是在分页系统基础上 加了请求调页功能和页面置换功能。
需要硬件:请求分页的页表机制,缺页中断机构,地址变换机构; 和软件
最小物理块数目:能保证进程正常运行所需最小物理块数
内存分配策略:1.固定分配局部置换:就是给每个进程一组固定数目物理块,如果缺页中断,则置换出自己的页来换入换出
2.可变分配全局置换:每个进程分配的物理块数目可变,全局置换就是缺页中断则将os中空闲的物理块分配给该进程
3.可变分配局部置换:就是上面两个的结合
物理块分配算法:1.平均 2.按进程大小比例 3.按优先权
何时调入:预调页策略(预计在不久后使用的预先调入内存) ; 请求调页策略
何处调入:对换区和文件区
页面调入过程:缺页中断,若内存有空闲则直接调入,若没有空闲,则调出再调入
缺页率:失败访问页次数/总访问页次数
将永远不使用或者未来最长时间不使用的页面换出。
不可能实现的算法,具有最好性能,但无法实现,用来作为其他算法评价标准。
最早出现的页面也就是内存中驻留时间最长的页面淘汰。
性能最差的算法
每个页面有一个上次使用时间,间隔最久的淘汰
每个页面有个标记记录被访问的频率,最少使用淘汰
再请求分页管理方式中,还要加上缺页中断的处理时间
在分段系统之上,增加了请求调段和分段置换功能。
与请求分页系统一样,也有缺段中断,请求段表,地址变换机构
原因:同时在系统中运行的进程太多,分配给每一个进程的物理块太少,不能满足基本要求,使得每个进程运行时频繁缺页,请求调入,使得系统排队调进调出的进程数目增加。造成每个进程大部分时间都在调入调出,总体来说就是处理机利用率急剧下降甚至为0.
预防方法:1.局部置换策略:只能在自己物理块中进行置换
2.工作集算法融入处理机调度(就是调入新进程要先看内存中每个进程的驻留页面够不够多,要是不够就不调入了)
3.利用L=S准则:让L缺页之间的平均时间=S平均缺页服务时间,L大则很少缺页,说明处理机利用率低,S大说明老是缺页
4.选择暂停进程:将一些进程暂停并调出
一段时间间隔内,进程实际要访问页面的集合。
隐藏物理设备细节;
与设备无关性(就是与具体设备无关,而是有一个逻辑设备,用户叫逻辑设备打印,但具体哪个打印机打印不知道)
提高处理机和I/O设备利用率;
控制I/O设备
确保对设备正确共享
错误处理
从上到下依次为:
用户层软件:负责给用户使用
设备独立性软件:实现上层用户程序和下层的设备驱动器的统一接口
设备驱动程序:给硬件发送操作指令
中断处理程序
分为块设备接口:就是块设备程序与高层之间的接口,传输速率快
流设备接口:流设备程序与高层之间的接口,反应字符设备本质特征
按特性:输入设备,输出设备,和交互式设备
数据信号线,控制信号线,状态信号线
是cpu和I/O设备之间的接口,接收从cpu发来的命令,去控制I/O设备工作
虽然设备控制器大大减少cpu对I/O操作干预,但是cpu负荷仍然很重。所以引入了I/O通道
目的:建立独立的I/O操作,不仅使数据得传送独立于CPU,而且对I/O操作的组织,管理和结束处理也尽量独立。实际上I/O通道就是一个特殊处理机,有执行I/O指令能力控制I/O操作。
字节多路通道
数组选择通道
数组多路通道
瓶颈:就是通道不足导致的,解决通过搞多条通路来实现(就是把通道看作一个处理器,通道与设备间加多几条通路)
中断处理程序是I/O系统中最低的一层,是整个系统的基础。
中断:cpu对I/O设备发来的中断信号的一种响应,暂停自己程序,然后执行中断处理程序。
陷入:是CPU自己内部事件出现差错或者故障导致的。
中断向量表:存储中断处理程序的入口地址
中断优先级:不同中断程序的优先级
屏蔽中断:处理机处理一个中断将屏蔽其他所有中断请求
嵌套中断:就是可以抢占式的(基于中断优先级)
测定是否有中断信号;
保护被中断进程的cpu环境
转入相应的设备处理程序
中断处理
恢复cpu的现场并退出中断
这是在I/O系统高层和设备控制器之间的通信程序
接收参数;检查合法性;发出命令;相应设备中断请求
抽象要求转化为具体要求
对服务请求进行校验
检查设备状态
传送必要参数
启动I/O设备
贯穿这样一条宗旨:把主机从繁忙I/O控制事务中解脱出来,完成更多处理数据任务
就是最蠢的方式,当设备执行操作时,处理机一直走一个循环直到设备执行完,处理机才停止去干别的事情,大大浪费处理机CPU,因为此时还没有中断机构。
就是cpu向相应设备控制器发出I/O指令就立即回去执行原本任务,直到收到中断请求才回去搞中断处理。
就是在内存和I/O设备间,多了一个DMA控制器,CPU每次传输都传一个或多个数据块到DMA,只有此时要CPU干预,然后数据块和I/O设备的传送由DMA控制器负责。(这样cpu就不用每次传送一个字节就要干预一次)
就是在DMA方式的再发展,通过通道完成CPU要执行的控制任务,这样cpu只需要对一组数据块的读以及有关的控制和管理为单位的干预,而通道因为相当于一个处理器,可以根据CPU指令来完成I/O任务。
与设备无关,所以实现了设备独立性
以前一开始以物理设备名使用设备,这样系统直接和确定的设备名连接
引入了逻辑设备名:只是指明了用打印机,但是没有说哪一台
程序执行要将逻辑设备名转换为物理设备名
1.设备驱动程序统一接口
2.缓冲管理
3.差错控制
4.对独立性设备的分配与回收
5.独立于设备的逻辑数据块
1.设备控制表DCT:设备有的
2.控制器控制表COCT:每个控制器用来记录情况
3.通道控制表CHCT
4.系统设备表SDT:记录系统中所有设备
系统调用:用户程序通过它间接调用OS中的I/O进程
模拟多道程序设计的并发实现的虚拟多个CPU,此处也可以让一台物理设备虚拟多个I/O设备
输入井和输出井
输入缓冲区和输出缓冲区
输入进程和输出进程
井管理程序
就是先通过输入进程模拟外围控制机将输入放入缓冲区,然后放入输入井,当cpu需要输入设备直接从输入井取出,输出同理,这样就可以相当于很多设备。
优点:提高速度; 将独占设备变为共享设备; 实现虚拟设备功能(每个进程以为自己独占设备)
对用户来说是实时打印的,但其实是把输入放到缓冲区,而真正打印是等队列中任务排到队首才打印。
原因:
1.缓和CPU和I/O设备间速度不匹配矛盾
2.减少对CPU中断频率,放宽对CPU中断响应时间限制
3.解决数据粒度不匹配的问题
4.提高CPU和I/O设备间的并行性
数据:数据项(最低级数据组织形式);记录(数据项集合);文件(由创建者定义的,具有文件名的一组相关元素的集合,描述一个最大的对象集)
由上至下分为
文件系统接口:便于用户使用提供 命令接口cmd 和 程序接口
对对象操纵和管理的软件集合:文件管理系统核心,实现大多数功能
对象及其属性:文件,目录,存储空间
创建文件,删除文件,读文件,写文件,设置文件的读/写位置
打开:系统将指定文件的属性,从外存拷贝到内存打开文件表的表目,并将编号返回给用户(就是将用户和文件之间建立连接)
关闭:就是断开连接
串结构:按存入时间排序
顺序结构:按关键字排序
优点:存取效率最高
缺点:查找或修改记录,就需要逐个查找,增加和删除记录比较困难
1.隐式寻址方式:就是一个个查询,查到一个就到下一个
定长:Rptr=Rptr+L
变长:每次下一个地址=此地址+此记录的长度
2.显示寻址方式:就是直接查找到对应记录首地址
定长:Rptr=Rptr+i * L
变长:通过每个记录设定一个关键字来查找
就是通过索引表,而索引表中的右指针指向对应位置
优点:极大提高查找速度,而且插入删除记录很方便
就是结合了顺序文件和索引文件的特点,一个索引不再指向单单一个记录的首地址,而是比如五十个记录中第一个记录得首地址,然后索引到该地址后,里面的50个记录就可以顺序访问了。
两级索引就更大了
直接文件:关键字直接对应地址
哈希文件:关键字通过哈希函数指向目录表中表目的指针
文件控制块FCB:包括基本信息,存取控制信息,使用信息类
索引节点:一个文件描述信息单独形成的数据结构
系统应允许多个用户进程共享同一份文件,而系统只需保留一份副本。
有向无环图实现;或者 符号链接实现;
访问权:系统控制进程对对象的访问
保护域:域指进程对一组对象访问权的集合
进程和域的静态联系:就是进程生命周期内,可用资源固定
进程和域的动态联系:就是进程可以联系多个域
要求:存储空间;I/O速度;提高系统可靠性
就是每一个文件分配相邻的盘块,一个文件占用多个相邻盘块。
优点:顺序访问容易,速度快
缺点:产生碎片,必须事先知道文件长度,不能灵活删除插入数据,动态增长文件不好解决
不邻接的盘块,但是可以通过指针用链表来将他们连接
优点:
消除磁盘外部碎片,插入删除容易,适应文件动态增长
隐式链接:就是只能一个个查找,查上一个盘块才能查下一个盘块
显式链接:就是将链表放进内存中
就是将物理磁盘分成四个逻辑磁盘,每个逻辑磁盘就是一个卷,每个卷都能被单独格式化和使用逻辑单元,并供分配系统分配空间使用。
就是将一个文件的索引块表记录下来,放在一个盘中,然后当要找该文件时,就拿出索引块表,索引块表中包含的是该文件中的每个盘块号,支持直接访问。
以为每个文件需要一个索引块,所以适用于大文件,而小文件就浪费了。
刚刚说到分配的盘该怎么组织,而本章要讲如何知道哪写盘是空闲的。就是对盘块进行分配和回收。
就是有一张空闲盘块表来记录空闲的盘块。包括该空闲区的第一个盘块号和该区的空闲盘块数等信息。这种连续分配方式由于速度快,在外村中仍然有一席之地。
流程就是按照顺序检索空闲表,指导找到大小能满足要求空闲区,就分配给用户进程,然后修改表。
空闲盘块链:就是将一个个盘块拉成一条链,然后系统从头开始分配给用户进程,若回收则把空闲盘块放入链末尾
空闲盘区链:就是将一组若干个盘块组成的盘区拉成一条链,每个盘区都有指示下一个盘区的指针和本盘区的大小信息。
就是一个二维数组来存储每个盘块的空闲状态,用二进制位表示,0代表空闲,1代表已经分配,每个元素代表一个盘块号。
有一个空闲盘块号栈,然后通过类似树状图的方法指向一个个链表,然后链表中又指向另一个链表。。
就是通过多个小磁盘组成一个大容量的廉价磁盘冗余阵列
就是将一个盘块的数据,分到几个子盘块数据,再把每个子盘块数据存储到不同磁盘中的相同位置。
那么再读取就可以并行传输了。
RAID优点:可靠性高,磁盘I/O速度高,性价比高