by:星辰
课程视频链接:https://www.bilibili.com/video/BV1YE411D7nH
系统资源的管理者、提供接口、作为扩充机器、虚拟机
软件
,属于系统软件
用一个直观的例子来理解上述图中操作系统的功能:
我们假设:用户是雇主,操作系统是工人(用来操作机器),计算机是机器(由处理机(CPU)、存储器、设备、文件几个部件构成)
工人有熟练的技能去控制和协调各个部件的工作,这就是操作系统对资源的管理
同时,工人必须接受雇主的命令,这就是“接口”
有了工人,机器就能发挥更大的作用,因此工人就成了“扩充机器”
工人操作机器、机器有了更大的作用比如GUI界面,于是工人便成了扩充机器,去扩充GUI界面等功能
1️⃣处理器(CPU)管理
进程控制、进程同步、进程通信、死锁处理、处理机调度
等。附上一张图理解对进程的管理。2️⃣存储器管理
内存分配与回收、地址映射、内存保护与共享和内存扩充
等功能。3️⃣文件管理
文件存储空间的管理、目录管理及文件读写管理和保护
等。4️⃣设备管理
包括缓存管理、设备分配、设备处理和虚拟设备
等功能。以上4种管理功能都由“工人”负责,“雇主”无序关注。
命令接口和程序接口
命令接口
:用户可以直接
使用的,利用这些操作命令来组织和控制作业的执行程序接口
:用户通过程序间接
使用的,编程人员可以使用它们来请求操作系统服务1️⃣命令接口
直接
调用联机命令接口
:又称交互式命令接口,适用于分时或实时系统的接口,由一组键盘操作命令组成。用户输入一条指令,操作系统就执行一条指令;脱机命令接口
:又称批处理接口,使用于批处理系统,由一组作业控制命令组成。用户输入一堆指令,操作系统运行一堆指令。在操作系统运行这些命令时用户不可干预。批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。
2️⃣程序接口
系统调用(也称广义指令)
组成间接
调用动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。
裸机
扩充机器或虚拟机
并发
:两个或多个事件在同一时间
间隔内发生,这些事件在宏观上是同时发生的,在微观上是交替发生的, 操作系统的并发性指系统中同时存在着多个运行的程序并行
:两个或多个事件在同一时刻
发生同一时刻
可以并行执行多个程序,比如我的计算机是8核的,我的计算机可以在同一时刻并行执行8个程序,但是事实上我们计算机执行的程序并不止8个,因此并发技术是必须存在的,并发性必不可少资源共享
即共享,是指系统中的资源可以供内存中多个并发执行的进程
共同使用一个进程
访问,别的进程没有使用权同时
允许多个
进程访问同时
指在宏观上是同时的,在微观上是交替进行访问的,只是cpu处理速度很快,我们感觉不到,在宏观上感觉是在同时进行注意
:有时候多个进程可能真的是在同时进行资源访问,比如玩游戏时可以放音乐,游戏声音和音乐声音都能听见多道程序设计:是指在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行。 两个或两个以上程序在计算机系统中同处于开始到结束之间的状态。这就称为多道程序设计。多道程序技术运行的特征:多道、宏观上并行、微观上串行。
异步:多道程序环境允许多个程序并发执行,但由于资源有限,如cpu只有一个,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进。
比如A进程正在占用CPU计算,B进程这时也想占用CPU计算,B进程只有等,等A进程算完了,A进程去访问磁盘资源了,这时B进程再占用CPU进行计算,B进程还没计算完,A进程从磁盘取出资源了,A进程发现B这时在占用CPU,这时A进程就需要等待,等B算完后再继续到CPU中进行计算。由于每个进程占用资源的时间不固定,所以进程的执行以不可预知的速度前进
手工、单道/多道批处理、分时、实时、网络、分布式、嵌入式、个人计算机
管态:特权态、系统态、内核态或者核心态
目态:用户态、普通态
程序:一组计算机能识别和执行的指令。
是静态的,就是个存放在磁盘里的可执行文件,如:QQ.exe。
早期的计算机只支持单道程序:
是动态的,是程序的一次执行过程,如:可同时启动多次QQ程序
区别:
1、进程是动态的,程序是静态的
2、进程有独立性,能并发执行;程序不能并发执行
3、二者无一一对应关系
4、进程异步运行,会相互制约;程序不具备此特征
但是,进程与程序又有密切的联系: 进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作
5、组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码
6、程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源
7、进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源
8、一个程序可以启动多个进程来共同完成
联系:
1、进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作
2、同一个程序多次执行会对应多个进程
异步性会导致并发程序执行结果的不确定性
其中最主要的就是进程控制块PCB
(Process Control Block)
操作系统是这些进程的管理者,它要怎么区分各个进程?
当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”—— PID(Process ID,进程ID)
基本的进程描述信息,可以让操作系统区分各个进程
可用于实现操作系统对资源的管理
可用于实现操作系统对进程的控制、调度
这些信息都被保存在一个数据结构PCB(Process Control Block)中,即进程控制块
操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中
PCB简介 :
☀PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。
PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。
例如,当OS要调度某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;
进程在执行过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB;
当进程由于某种原因而暂停执行时,又须将器断点的处理机环境保存在PCB中。
可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,即系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。
所以说,PCB是进程存在的唯一标志。
PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。
操作系统对进程进行管理工作所需的信息都存在PCB中
多核CPU可有多个进程同时处于运行态
很多操作系统还会根据阻塞原因不同,再分为多个阻塞队列
状态:运行、就绪、阻塞、创建、终止
转换:就绪——>运行、运行——>就绪、运行——>阻塞、阻塞——>就绪
进程PCB中,会有一个变量 state 来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态…
为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NkesEsAn-1675825332054)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/371edabe4c2248f7b4623b4d59f71c51~tplv-k3u1fbpfcp-zoom-1.image)]
(1)运行态一一等待态:等待使用资源或某事件发生,如等待外设传输、等待人工干预。
(2)等待态一一就绪态:资源得到满足或某事件己经发生,如外设传输结束、人工干预完成。
(3)运行态一一就绪态:运行时间片到,或出现有更高优先级进程。
(4)就绪态一一运行态:CPU空闲时被调度选中一个就绪进程执行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vStiyoqF-1675825332056)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/028da239650d4e4e9c0174114320acc1~tplv-k3u1fbpfcp-zoom-1.image)]
这里说明一下调度和切换的区别:
调度
是指决定资源分配给哪个进程的行为,是一种决策行为
切换
是指实际分配的行为,是执行行为
一般来说先有资源调度,后有进程切换
进程的创建、终止、唤醒、阻塞、切换;
成对存在
的,必须成对使用
阻塞原语
是由被阻塞进程自我调用实现的唤醒原语
是由一个被唤醒进程合作或被其他相关的进程调用实现的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XP2D8hsv-1675825332059)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7fb8824388a549cc9b03dede82990ab7~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1qmASwF4-1675825332059)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f31f4d2550344eb3b1202bca1a79133a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5jeATCpX-1675825332061)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e3c81566ea7b4cc0ab2808836c3e58e9~tplv-k3u1fbpfcp-zoom-1.image)]
用户级线程
(User-Level Thread,UTL)和内核级线程
(Kernel-Level Thread,KTL)。内核级线程又称内核支持的线程
。进程映像 = PCB+程序段+数据段
辅助处理器(Coprocessor),也译作协处理器,这是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等:而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。
C
D可以改成:相同进程的线程之间不一定使用系统调用,不同进程的线程之间必须使用系统调用
A
其他进程没有权限访问自己的进程,更不能进行数据交换
C
A
由上图可知,优先级可以被改动,B❌
由上图可知,就绪态获得处理机转为运行态就是被调度的过程,且只有就绪态可以获得处理机,阻塞态不能直接获得处理机资源,需要先获得其他资源后转为就绪态才可以被调度,从而获得处理机,所以A⭕,D❌
最后的C是最难判断的,不够严谨,单核处理机系统中有可能出现死锁,所以有可能所有的进程都处于阻塞态,没有处于运行态的进程
A
在[2.1.1.5 进程的组织](#2.1.1.5 进程的组织)中可以知晓
B
一个运行态结束(转化为阻塞态)会导致另一个就绪态转化为运行态
一个阻塞态获得资源(转化为就绪态)不会导致另一个运行态的变化
C
就绪队列非空——》一定有一个进程处于运行态
没有进程处于运行态——》就绪对列必为空
C
显然C
D
D
C
进程可以自动结束,不一定要被操作人员手动撤销
进程不会在过程中随着时间片轮转和阻塞或者唤醒而撤销与建立,它只会发生状态的转化,不会消失和增加
B
AB都对,但D更全面
同时是并行,不是并发
D
用户级线程不需要内核
两个反掉了
进程是拥有资源的独立单位,其中的多个线程只是共享资源
C
B
进程和程序不同,前者静态,后者动态
A
D
进程的三大组成(PCB、数据段、程序段)中有任何一个不一样,就是不同的进程
同步:两个进程需相互配合以完成工作
互斥:两个进程互斥地访问临界资源(不可同时访问)
A
D
A
系统创建进程时,会给进程分配资源(如分配内存、建立页表),然后就转化为了就绪态,进入就绪对列的队尾
C
C
单处理系统,只能由一个进程,只能进行并发操作
C
A
要实现不可中断性
B
D
进程切换:必须切换虚拟地址空间,TLB、Cache中的数据作废
B
D
适合用多线程解决的业务场景:可以将处理逻辑拆分成多个互不相干的部分; 计算量较大,需要高并发
C
D
等待某一事件发生:申请I/O操作(运行——》阻塞)
等待的事件发生:I/O操作完成(阻塞——》就绪)
B
“管道”,就是一种特殊的共享文件,受文件系统的管理,基本只存在于内存当中,普通文件存在于磁盘中
全局变量存在于进程的数据段中,不同的进程不能访问本进程的数据段,所以也就无法交换全局变量
C
D
B
阻塞态:在等待除了CPU之外的某种资源的分配,或等待某事件发生
key:只有其他资源/事件都就位了(就绪态),进程才有资格等待CPU资源的分配
C
唤醒:转化为就绪态
A
D
A
一个进程一定有它的父进程,电脑开机会有一个祖先进程(最高级)
线程是进程的孩子,线程不能创建进程
C
作业后备队列(内存空间有限,有时无法将用户提交的作业全部放入内存)
作业:一个具体的任务
用户向系统提交一个作业 ≈ 用户让操作系统启动一个程序(来处理一个具体的任务)
高级调度(作业调度)。按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程(创建PCB)。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
简化理解:好几个程序需要启动,到底先启动哪个
本文提到的挂起状态在[(4)进程的挂起状态与七状态模型](# (4)进程的挂起状态与七状态模型)中讲解
内存不够时,可将某些进程的数据调出外存,等内存空闲或者进程需要运行时再重新调入内存
暂时调到外存等待的进程状态为挂起状态,被挂起的进程PCB会被放到挂起队列
中级调度(内存调度)——按照某种策略决定将哪个处于挂起状态的进程重新调入内存
一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高
低级调度(进程调度/处理机调度)—— 按照某种策略从就绪队列中选取一个进程,将处理机分配给它。
进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
进程调度的频率很高,一般几十毫秒一次。
暂时调到外存等待的进程状态为挂起状态(挂起态,suspend)
挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
五状态模型→七状态模型(还是有必要掌握的)
注意“挂起”和“阻塞”的区别,两种状态都是暂时不能获得CPU的服务,但挂起态是将进程映像调到外存去了,而阻塞态下进程映像还在内存中。
有的操作系统会把就绪挂起、阻塞挂起分为两个挂起队列,甚至会根据阻塞原因不同再把阻塞挂起进程进一步细分为多个队列。
进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机
狭义的进程调度指的是从就绪队列中选中一个要运行的进程。
进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程。
广义的进程调度包含了选择一个进程和进程切换两个步骤。
进程切换的过程主要完成了:
注意:进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。
这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换
如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,这些信息一般保存在进程控制块
不会导致饥饿
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9lH9IzJ-1675825332074)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c932a6cc23c04053818e5e0a473aa62a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CeineJp2-1675825332075)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b3d9c36c7966401b9e830a00ba8e618e~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nmEk6UEy-1675825332076)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ac1318cab97642cd9078c4753c4a6f8e~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LB5EmgRY-1675825332076)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/12b1edcd9c0a4c11ae934a9600b011b9~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BfnUjg1y-1675825332076)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/70bdef1703b04ed6a2256278d3ef36c6~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JONEPYNO-1675825332077)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9d5b98df7f9d4983a6e1c874d033ba95~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aa2AAC8v-1675825332077)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/acac42cedd914aa4ad1f0961eb4fe3b1~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Llp1yvIf-1675825332077)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4b053bcb9ff644c4b719f3193c9e9eee~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KeFX224b-1675825332078)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4d9ff1c382414d148c6d84122af1fa48~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VALIrWB0-1675825332078)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b99f79f2c4c64ae08679267054a4570a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-215qgNtu-1675825332079)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2f9da67e98904ef78ff09c4308268ff6~tplv-k3u1fbpfcp-zoom-1.image)]
雨露均沾
由图可知,有可能更低效
C、D分别是优先级调度、短作业优先调度算法
A
C
显然D
B
BECD
D
B
短作业优先,直接按时间顺序排序(从小到大)
D
时间片到,或者被抢走处理机,就由运行态转化为就绪态
C
C
D
B
B
时间片太大,导致每个进程被运行时都可以直接完成,变成了先来先服务算法
B
同步也称为直接制约关系
。异步性:进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOx6mSSe-1675825332081)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ae5fc0cba30e47fb9dd86f8d481e5108~tplv-k3u1fbpfcp-zoom-1.image)]
临界区
,需遵循以下准则[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAIMnh8N-1675825332081)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/65c961cdba744ce88973b8ecb19878fa~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8xElDRed-1675825332082)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e53d8039c45e4bd6988916b39346f105~tplv-k3u1fbpfcp-zoom-1.image)]
入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YeTmNaaY-1675825332082)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0a7cd125b7bc4bf3b072f96a4dd4ff1f~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbhPMb26-1675825332083)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3d0d020fa2c04ce99dbb7265c2927b1f~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usbyZeqc-1675825332083)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/46e323907ebf4c09a91276b42d7e3ba4~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUMd9oRD-1675825332083)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6d92d898fa37449298eef614ab398ab1~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YA7bAjkM-1675825332084)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7d2a4510f7d94a7f8e69b7cafcd51fd3~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UaAN4hPm-1675825332084)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ff738c292f0b4daf9be22ff4aee08d8d~tplv-k3u1fbpfcp-zoom-1.image)]
为了更好的解决进程互斥与同步的问题
在看此小结内容之前,需熟悉前一节[信号量机制](#2.3.4 信号量机制)里面的知识,关于P、V操作内部实现原理等
想象一下四则运算的顺序,加减乘除
同步时,先V后P
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M4szMDjD-1675825332090)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e795c7c953434aa7b5bc57c150406c38~tplv-k3u1fbpfcp-zoom-1.image)]
一组生产者进程
和一组消费者进程
,生产者进程每次生产一个
产品放入缓冲区,消费者进程每次从缓冲区中取出一个
产品并使用。(注: 这里的“产品”理解为某种数据)共享
一个初始为空、大小为n的缓冲区
。没满
时,生产者
才能把产品放入
缓冲区,否则必须等待。不空
时,消费者
才能从中取出
产品,否则必须等待。互斥
地访问。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjE6WYmU-1675825332090)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2267b54c38704542adefe18282430d5e~tplv-k3u1fbpfcp-zoom-1.image)]
互斥关系
,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,它们也是同步关系
。原因在于:本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…
总结
:在生产者_消费者问题中,如果缓冲区大小为1,那么有可能不需要设置互斥信号量就可以实现互斥访问缓冲区的功能。当然,这不是绝对的
,要具体问题具体分析。建议
:在考试中如果来不及仔细分析,可以加上互斥信号量,保证各进程一定会互斥地访问缓冲区。但需要注意的是,·实现互斥的P操作一定要在实现同步的P操作之后
·,否则可能引起·“死锁”
·。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RX1MaX1v-1675825332094)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e394f30b4f6147568c616c97ec39535e~tplv-k3u1fbpfcp-zoom-1.image)]
“饿死”
的情况。即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行
。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-faqMg8MQ-1675825332096)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/816f461cc0a04cf6987fc855f517c45c~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTlJfBse-1675825332097)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b7fb5a439d6a45e1a96e4e4e64253d21~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A76XUQXj-1675825332098)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/abcff44c3bbc43d98b666373322f2702~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9twclTdw-1675825332098)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/379962c0bd3d4e638756d2c10ffd9dd8~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMpeblA2-1675825332098)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1901aad742e34c6bac50884d24cc1d36~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a5s0qVlN-1675825332099)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/32da05602e6a4996aff18dbe9f47e50e~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wMZ2KMeu-1675825332106)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/65b5d6102944434493b1e757c70c7232~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tc7oxiZp-1675825332106)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6dc9661929f947aa95ae9932471421ba~tplv-k3u1fbpfcp-zoom-1.image)]
D
D
A
C
显然C
D
D
D
B
C
C
D
V操作可能导致进程就绪
C
原语属于操作系统内核的一部分
D
15、()定义了共享数据结构和各种进程在该数据结构上的全部操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aeqv7jYG-1675825332107)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/43309c5c78c34918a279c44e2b58a76d~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EBWdoJFv-1675825332108)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bc274e0b924a4c10bf3bcb55f10e11be~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SLAqdTGy-1675825332108)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ea8de4925b1d44c6a68268146b56d97a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BHMBWzZE-1675825332108)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5650f8c5a45c4c8893813c8114cbe1b2~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZ3TWVAl-1675825332109)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/250a845bd7e7455e8f7678dd2e77c314~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQT8m5pl-1675825332109)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/88d37a75c3d245fa878b740ee9f37c21~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juft2t1H-1675825332111)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/02a38eea326d48f28c7bcf8166857dc5~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RFpbFp5c-1675825332111)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6b9d42c7643448fd836fd3bd8cb0124f~tplv-k3u1fbpfcp-zoom-1.image)]
可以用回溯来理解,也是Dijkstra这个老表想出来的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LnPT6puC-1675825332114)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/39614f3201a849af8c064668480eb5e7~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDWNlWHf-1675825332116)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/17808fe401744ffca2b9b9d666321ed5~tplv-k3u1fbpfcp-zoom-1.image)]
举个例子,可以消除所有边,即无死锁发生
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJBGBbap-1675825332117)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8b05100d7a53400ca2b2cb4c969fd155~tplv-k3u1fbpfcp-zoom-1.image)]
举个例子,不可消除所有边,即产生死锁
进程的基本原理,深入指令理解其过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1zlUuiv6-1675825332120)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4236a052414e4daea49a96b5f7b527d6~tplv-k3u1fbpfcp-zoom-1.image)]
关于存储单元有关内容在我写的组成原理笔记中有提到:存储单元
内存可存放数据。程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾
编译:由编译程序
将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
链接:由链接程序
将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
装入(装载):由装入程序
将装入模块装入内存运行
不修改装入模块中的指令地址就直接装入内存的话:
绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。
装入程序按照装入模块中的地址,将程序和数据装入内存。
静态重定位:又称可重定位装入
。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
动态重定位:又称动态运行时装入
。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
将各目标模块装入内存时,边装入边链接的链接方式。
在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
后来人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题
覆盖技术的思想:将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。
内存中分为一个“固定区”和若干个“覆盖区”
需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)
不常用的段放在“覆盖区”,需要用到时调入内存,用不到时调出内存
必须由程序员声明覆盖结构,操作系统完成自动覆盖。缺点:对用户不透明,增加了用户编程负担。
覆盖技术只用于早期的操作系统中,现在已成为历史。
交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
1.具有对换功能的操作系统中,通常把磁盘空间分为文件区
和对换区
两部分。文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(学过文件管理章节后即可理解)。总之,对换区的I/O速度比文件区的更快。
2.交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。
3.可优先换出阻塞进程;可换出优先级低的进程;为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间…
(注意:PCB会常驻内存,不会被换出外存)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNlle6BO-1675825332130)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cd27348593ce4ed29dbcfd5a1dac9482~tplv-k3u1fbpfcp-zoom-1.image)]
在单一连续分配方式中,内存被分为系统区
和用户区
。系统区
通常位于内存的低地址部分,用于存放操作系统相关数据;用户区
用于存放用户进程相关数据。
内存中只能有一道用户程序,用户程序独占整个用户区空间。
优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的PC操作系统MS-DOS)。
缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。
分配给某进程的内存区域中,如果有些部分没有用上,就是“内部碎片”
操作系统需要建立一个数据结构——分区说明表,来实现各个分区的分配与回收。每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的大小、起始地址、状态(是否已分配)。
优点:简单,无外部碎片。
缺点:a.当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能;b.会产生内部碎片,内存利用率低。
动态分区分配又称为可变分区分配
。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。(eg:假设某计算机内存大小为64MB,系统区8MB,用户区共56 MB.…)
空闲分区表:每个空闲分区对应一个表项。表项中包含分区号分区大小、分区起始地址等信息
空闲分区链:每个分区的起始部分和末尾部分分别设置前向指针和后向指针。起始部分处还可记录分区大小等信息
如何分配?
如何回收?
外部碎片,是指内存中的某些空闲分区由于太小而难以利用
本篇文章是对上一篇文章[内存的分配与回收](#3.1.4 内存的分配与回收)提到的动态分区分配算法
的补充
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IKyVU87L-1675825332136)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/540b6fc629d745008143bbe0b23d392a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NGkGetMD-1675825332140)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/739751881ad24778afb19f89a020e3f6~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qmk3sA3r-1675825332140)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7fcffe17935e4fd9990512d53105db08~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7yb0QLA-1675825332141)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cf1b117c9445453a88666905b1402409~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xeju3eDi-1675825332141)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/14c1f30f34cc48bcafe0875663f81387~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FKbGBRJT-1675825332142)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d8d47e1c50744b08a5782674330a5520~tplv-k3u1fbpfcp-zoom-1.image)]
基本分页存储管理的思想——把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分,显然,如果把分区大小设置的越小一些,内部碎片会更小,内存利用率会更高。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYIXDZwg-1675825332142)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/aac8b01f4a1a452ea9fe38e55e1bfa62~tplv-k3u1fbpfcp-zoom-1.image)]
将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”,或称“页帧”、“内存块”、“物理块”。每个页框有一个编号,即“页框号”(或者“内存块号”、“页帧号”、“物理块号”)页框号从0开始。
将用户进程的地址空间也分为与页框大小相等的一个个区域,称为“页”或“页面”。每个页面也有一个编号,即“页号”,页号也是从0开始。
(注:进程的最后一个页面可能没有一个页框那么大。因此,页框不能太大,否则可能产生过大的内部碎片)
操作系统以页框为单位为各个进程分配内存空间,进程的每个页面分别放入一个页框中,也就是说,进程的页面
与内存的页框
有一一对应的关系。
各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。
为了方便计算页号、页内偏移量,页面大小一般设为2的整数幂
页号 = 逻辑地址 / 页面长度(取除法的整数部分)
页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)
页面在内存中的起始位置:操作系统需要用某种数据结构记录进程各个页面的起始位置。
为什么页面大小一般设为2的整数次幂?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiRGI2Nv-1675825332144)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4edcd66092f043f7810509d9c3b7c680~tplv-k3u1fbpfcp-zoom-1.image)]
结论:如果每个页面大小为2^k
B,用二进制数表示逻辑地址,则末尾K位即为页内偏移量,其余部分就是页号
因此,如果让每个页面的大小为2的整数幂,计算机就可以很方便地得出一个逻辑地址对应的页号和页内偏移量
地址结构包含两个部分:前一部分为页号,后一部分为页内偏移量W
如果有K位表示“页内偏移量”,则说明该系统中一个页面的大小是2^K
个内存单元
如果有M位表示“页号”,则说明在该系统中,一个进程最多允许有2^M
个页面
页表
为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。
基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。
通常会在系统中设置一个页表寄存器
(PTR),存放页表在内存中的起始地址F和页表长度M。
进程未执行时,页表的始址
和页表长度
放在进程控制块(PCB) 中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。
程序计数器PC:指向下一条指令的逻辑地址A
设页面大小为L,逻辑地址A到物理地址E的变换过程如下:
①计算页号Р和页内偏移量W(如果用十进制数手算,则P = A / L,W = A % L;但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得到二进制表示的页号、页内偏移量)
②比较页号P和页表长度M,若P >= M,则产生越界中断,否则继续执行。(注意页号是从0开始的,而页表长度至少是1,因此P = M时也会越界)
③页表中页号P对应的页表项地址 = 页表起始地址F + 页号P * 页表项长度,取出该页表项内容b,即为内存块号。(注意区分页表项长度、页表长度、页面大小的区别。页表长度指的是这个页表中总共有几个页表项,即总共有几个页;页表项长度指的是每个页表项占多大的存储空间;页面大小指的是一个页面占多大的存储空间)
④计算E = b * L + W,用得到的物理地址E去访存。(如果内存块号、页面偏移量是用二进制表示的,那么把二者拼接起来就是最终的物理地址了)
一道例题加深印象:
上一篇文章学习了[分页存储管理的基本地址变换结构](#3.1.7 分页存储管理的基本地址变换结构),这一篇文章是对基本地址变换结构的改进版。
上小节介绍的基本地址变换机构中,每次要访问一个逻辑地址,都需要查询内存中的页表。由于局部性原理,可能连续很多次查到的都是同一个页表项。既然如此,能否利用这个特性减少访问页表的次数呢?——快表机制
时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的)
引入快表后,地址变换的过程的文字描述:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zercZ7u5-1675825332149)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e7fce923a12c4901acc6719f73ac9295~tplv-k3u1fbpfcp-zoom-1.image)]
因为单级页表存在一些问题,所以引入二级页表和多级页表,有两个问题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7m20vZet-1675825332150)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/49ee3edb81ac482781db0e8bc9cba47f~tplv-k3u1fbpfcp-zoom-1.image)]
上面提到了这两个问题,那么总结一下,并提出解决思想,引入二级页表的概念。
发现问题——》提出方法——》解决问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaTLFNWj-1675825332150)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/576408913e0944ed9be4ebf870a271d9~tplv-k3u1fbpfcp-zoom-1.image)]
上面的部分我们解决了问题一,接下来是问题二,这里简单叙述一下,后面的文章会继续深入剖析。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-73tO1tk2-1675825332152)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3311d138245a4897a343c4f4bb23be4a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-egvgjjkM-1675825332153)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b91851823cf84c1b8d07439cedfc3e0f~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8omOzG4-1675825332159)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/95c9b4d4d3c143b88a6b59b7bdadbdad~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3iir5nd-1675825332160)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/19235bc54f724d7ba9a5bf3873eaf85f~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXwk7QaF-1675825332162)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bb5bb6f542264c9c8cba84747c169a51~tplv-k3u1fbpfcp-zoom-1.image)]
不可能实现,纯纯的上帝视角
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QjBvSDmN-1675825332165)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b121c4d7691442668486b2c429fb63f8~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCkMYkVx-1675825332167)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/82ec139cd040400f82819eaa8b2639bd~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yUyymXqL-1675825332168)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d7d9705c828541a9aa3057673b889727~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpso2zbl-1675825332168)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a613a774b81746e1bd98b80b84eefd97~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wuBOiib0-1675825332168)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5bba888e1bdb4a3099fe77c8a7925e85~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2mQkSpH-1675825332174)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/21a8468081ac4a9cad5f4e0f04dfc033~tplv-k3u1fbpfcp-zoom-1.image)]
文件――就是一组有意义的信息 / 数据集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLVzHQH7-1675825332176)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/82644df3c144430d9d3fe58f35354e88~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m4XYvkLS-1675825332176)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b7f37f4de8ba418ebed4841ab09a2b66~tplv-k3u1fbpfcp-zoom-1.image)]
同一目录下不允许有重名文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLzDlwt7-1675825332176)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/85a9930debc44db0b4ae3ad98ae96616~tplv-k3u1fbpfcp-zoom-1.image)]
无结构文件(如文本文件)――由一些二进制或字符流组成,又称“流式文件”
有结构文件(如数据库表)——由一组相似的记录组成,又称“记录式文件”
数据项是文件系统中最基本的数据单位
记录是一组相关数据项的集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hfGrvTNs-1675825332176)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3e5d80b173a146faa3f9eb2d110330b4~tplv-k3u1fbpfcp-zoom-1.image)]
用户可以自己创建一层一层的目录,各层目录中存放相应的文件。系统中的各个文件就通过一层一层的目录合理有序的组织起
来了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DuYEvyDP-1675825332177)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/af8fdf7d8d2649868276d331805d698a~tplv-k3u1fbpfcp-zoom-1.image)]
读 / 写文件之前,需要“打开文件”
读 / 写文件结束之后,需要“关闭文件”
可用几个基本操作完成更复杂的操作,比如:“复制文件”;先创建一个新的空文件,再把源文件读入内存,再将内存中的数据写到新文件中
操作系统以“块”为单位为文件分配存储空间,因此即使一个文件大小只有10B,但它依然需要占用1KB的磁盘块。外存中的数据读入内存时同样以块为单位
类似于内存分为一个个“内存块”,外存会分为一个个“块/磁盘块/物理块”。每个磁盘块的大小是相等的,每块一般包含2的整数幂个地址(如本例中,一块包含2^10
个地址,即1KB)。同样类似的是,文件的逻辑地址也可以分为(逻辑块号,块内地址),操作系统同样需要将逻辑地址转换为外存的物理地址(物理块号,块内地址)的形式。块内地址的位数取决于磁盘块的大小
与内存一样,外存也是由一个个存储单元组成的,每个存储单元可以存储一定量的数据(如1B)。每个存储单元对应一个物理地址
文件共享:使多个用户可以共享使用一个文件
文件保护:如何保证不同的用户对文件有不同的操作权限
顺序文件、索引文件、索引顺序文件、多级索引顺序文件
关于数据库的索引如聚簇索引可以看一下索引文件例题的解析,感觉还是可以收获到东西的
按文件是否有结构分类,可以分为无结构文件、有结构文件两种。
无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows操作系统中的.txt文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kw7T55HC-1675825332179)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0f8eebc97a9441a9b43d5f1abbf768ef~tplv-k3u1fbpfcp-zoom-1.image)]
有结构文件:由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)
定长记录:
根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种。
不定长记录:
根据有结构文件中的各条记录在逻辑上如何组织,可以分为三类
顺序文件:文件中的记录一个接一个地按顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
顺序存储――逻辑上相邻的记录物理上也相邻(类似于顺序表)
链式存储――逻辑上相邻的记录物理上不一定相邻(类似于链)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJ0DjR5x-1675825332181)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e24370a3c92b4f10a133c121d9297ca2~tplv-k3u1fbpfcp-zoom-1.image)]
串结构:记录之间的顺序与关键字无关,通常按照记录存入的时间决定记录的顺序
顺序结构:记录之间的顺序按关键字顺序排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMFWD3N2-1675825332181)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/44156853de8442ed990b66a581879b04~tplv-k3u1fbpfcp-zoom-1.image)]
链式存储
顺序存储
无论是定长/可变长记录,都无法实现随机存取,每次只能从第一个记录开始依次往后查找
无法实现随机存取。每次只能从第一个记录开始依次往后查找
可实现随机存取。记录长度为L,则第i个记录存放的相对位置是i * L
若采用串结构,无法快速找到某关键字对应的记录
若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)
结论:定长记录的顺序文件,若物理上采用顺序存储,则可实现随机存取;若能再保证记录的顺序结构,则可实现快速检索(即根据关键字快速找到对应记录)
注:一般来说,考试题目中所说的“顺序文件”指的是物理上顺序存储的顺序文件。之后的讲解中提到的顺序文件也默认如此。可见,顺序文件的缺点是增加 / 删除一个记录比较困难(如果是串结构则相对简单)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Y4sukCB-1675825332182)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4c5e0bc43c454ccf806b644baeb18081~tplv-k3u1fbpfcp-zoom-1.image)]
索引表本身是定长记录的顺序文件。因此可以快速找到第i个记录对应的索引项。
可将关键字作为索引号内容,若按关键字顺序排列,则还可以支持按照关键字折半查找。
每当要增加/删除一个记录时,需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
索引顺序文件的索引项也不需要按关键字顺序排列,这样可以极大地方便新表项的插入
索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
索引顺序文件的效率分析:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RFQu6JyQ-1675825332183)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6fca0b8ac93a484288b6b7b753dbd337~tplv-k3u1fbpfcp-zoom-1.image)]
单级-两级-多级-无环图、索引节点FCB瘦身
目录本身就是一种有结构文件,由一条条记录组成。每条记录对应一个在该放在该目录下的文件
当我们双击“照片”后,操作系统会在这个目录表中找到关键字“照片”对应的目录项(也就是记录),然后从外存中将“照片”目录的信息读入内存,于是,“照片”目录中的内容就可以显示出来了
FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项。FCB中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。
最重要,最基本的还是文件名、文件存放的物理地址。
搜索:当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
创建文件:创建一个新文件时,需要在其所属的目录中增加一个目录项
删除文件:当删除一个文件时,需要在目录中删除相应的目录项
显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)
显然,单级目录结构不适用于多用户操作系统(不同用户可能命名相同的文件名)
早期的多用户操作系统,采用两级目录结构。分为主文件目录(MFD,Master File Directory)和用户文件目录(UFD,User Flie Directory )。
主文件目录记录用户名及相应用户文件目录的存放位置
用户文件目录由该用户的文件FCB组成
允许不同用户的文件重名。文件名虽然相同,但是对应的其实是不同的文件
两级目录结构允许不同用户的文件重名,也可以在目录上实现实现访问限制(检查此时登录的用户名是否匹配)。但是两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uFF8xR13-1675825332186)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/76a206dd65e348e6ba17143c4612d3d0~tplv-k3u1fbpfcp-zoom-1.image)]
无环图目录结构解决文件共享
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。
在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图。可以更方便地实现多个用户间的文件共享
可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)
需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的FCB、并使共享计数器减1,并不会直接删除共享结点
可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。
需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的FCB、并使共享计数器减1,并不会直接删除共享结点。
只有共享计数器减为0时,才删除结点。
注意:共享文件不同于复制文件。在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。
索引结点——除了文件名之外的文件描述信息都放到这里来
其实在查找各级目录的过程中只需要用到“文件名”这个信息,只有文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表“瘦身”来提升效率。
当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。
相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。
连续分配、链接分配[隐式—显式]、索引分配[链接方案—多层索引—混合索引]
在内存管理中,进程的逻辑地址空间被分为一个一个页面
同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块” 。
于是文件的逻辑地址也可以表示为 (逻辑块号,块内地址) 的形式。
连续分配优点:
连续分配缺点:
连续分配方式要求每个文件在磁盘上占有一组连续的块。
结论:物理上采用连续分配的文件不方便拓展。
结论:物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片
可以用紧凑来处理碎片,但是需要耗费很大的时间代价。
链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWwvasQX-1675825332190)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/89cfb05b3bf141d9a47b763552b71948~tplv-k3u1fbpfcp-zoom-1.image)]
结论:采用链式分配(隐式链接) 方式的文件,只支持顺序访问,不支持随机访问,查找效率低。另外,指向下一个盘块的指针也需要耗费少量的存储空间。
结论:采用隐式链接的链接分配方式,很方便文件拓展。另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高。
把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表(FAT,File Allocation Table)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYEVTwZA-1675825332191)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/926767b80fdb4602b08652ae8e926343~tplv-k3u1fbpfcp-zoom-1.image)]
注意:一个磁盘仅设置一张FAT。开机时,将FAT读入内存,并常驻内存。 FAT的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的。
从目录项中找到起始块号,若i > 0,则查询内存中的文件分配表FAT,往后找到i号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作。
结论:采用链式分配(显式链接) 方式的文件,支持顺序访问,也支持随机访问(想访问 i 号逻辑块时,并不需要依次访问之前的0 ~ i-1号逻辑块) ,由于块号转换的过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多。
显然,显式链接也不会产生外部碎片,也可以很方便地对文件进行拓展。
链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表――建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
如何实现逻辑块号到物理块号的转换?
可见,索引分配方式可以支持随机访问。文件拓展也很容易实现(只需要给文件分配一个空闲块,并增加一个索引表项即可)但是索引表需要占用一定的存储空间
数据太大,一个索引表装不下那么多的映射怎么办?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHQxirQQ-1675825332192)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9eb570e68dd8471ea5dd11ce2488cf11~tplv-k3u1fbpfcp-zoom-1.image)]
如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQgtcEAl-1675825332193)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2c729ac0c4954e40800e8a3d1d92f466~tplv-k3u1fbpfcp-zoom-1.image)]
建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块,还可根据文件大小的要求再建立第三层、第四层索引块。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YXQjWioC-1675825332193)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a5bd2ea9646d4ad8b12098aed21b41f2~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wEZUxbsc-1675825332193)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fc74b3042c3f4d5591a79285c96fb3cd~tplv-k3u1fbpfcp-zoom-1.image)]
多种索引分配方式的结合。例如:一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ys72m2am-1675825332194)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c9a1b471b9284079b323f40a500a88ab~tplv-k3u1fbpfcp-zoom-1.image)]
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表――建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块。
若文件太大,索引表项太多,可以采取以下三种方法解决:
①链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。缺点:若文件很大,索引表很长,就需要将很多个索引块链接起来。想要找到i号索引块,必须先依次读入0 ~ i-1号索引块,这就导致磁盘I/O次数过多,查找效率低下。
②多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作。缺点:即使是小文件,访问一个数据块依然需要K+1次读磁盘。
③混合索引:多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。优点:对于小文件来说,访问一个数据块所需的读磁盘次数更少。
超级超级超级重要考点:①要会根据多层索引、混合索引的结构计算出文件的最大长度(Key:各级索引表最大不能超过一个块);②要能自己分析访问某个数据块所需要的读磁盘次数(Key:FCB中会存有指向顶级索引块的指针,因此可以根据FCB读入顶级索引块。每次读入下一级的索引块都需要一次读磁盘操作。另外,要注意题目条件――顶级索引块是否已调入内存)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fh9Es8L4-1675825332194)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7ca5f02fa7de4c4fb6a3c3e343e79723~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y45GL6y1-1675825332195)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cb70c0f1bec14e9581fa57a271570cc3~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CBLdL0lM-1675825332195)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c415b89b09cb42f6a24fbf4863c37042~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8svkeCtT-1675825332195)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4151a9032a2b4a7bb2aef66b0de325d3~tplv-k3u1fbpfcp-zoom-1.image)]
安装Windows操作系统的时候,一个必经步骤是――为磁盘分区(C:盘、D:盘、E:盘等)
存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)
有的系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0NHv0PT-1675825332195)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b20b45a6d8174b82a7d1233b58cb6b29~tplv-k3u1fbpfcp-zoom-1.image)]
目录区主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息
存储空间的初始化:将各个文件卷划分为目录区、文件区
文件区用于存放文件数据
适用于“连续分配方式”
如何分配?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ll5M82FW-1675825332196)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0f5319e7b389468cab5c239640b9c629~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3hqirjEB-1675825332196)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/754fd1d147ec40b0b0ebec3ee0f11f24~tplv-k3u1fbpfcp-zoom-1.image)]
如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
如何回收?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJcbuRFX-1675825332196)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1c79ff97eb7843aa9c4b0d5e94af157a~tplv-k3u1fbpfcp-zoom-1.image)]
如何回收磁盘块:与内存管理中的动态分区分配很类似,当回收某个存储区时需要有四种情况——①回收区的前后都没有相邻空闲区;②回收区的前后都是空闲区;③回收区前面是空闲区;④回收区后面是空闲区。总之,回收时需要注意表项的合开问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ehOeiOGr-1675825332197)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/55a961b8c191411da469658b413d4600~tplv-k3u1fbpfcp-zoom-1.image)]
空闲盘块链——以盘块为单位组成一条空闲链——空闲盘块中存储着下一个空闲盘块的指针
空闲盘区链——以盘区为单位组成一条空闲链——空闲盘区中的第一个盘块内记录了盘区的长度、下一个盘区的指针
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NlVp31Tx-1675825332197)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1d34792c94db4e14ae1c9c55694d295d~tplv-k3u1fbpfcp-zoom-1.image)]
操作系统保存着链头、链尾指针
如何分配:若某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针
如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针
适用于离散分配的物理结构,为文件分配多个盘块时可能要重复多次操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3nnbITHV-1675825332197)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b996992a6eb346f3b530fe395d8aebd2~tplv-k3u1fbpfcp-zoom-1.image)]
如何分配:若某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。
如何回收:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。
离散分配、连续分配都适用。为一个文件分配多个块时效率更高
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zk0m5Jd2-1675825332198)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5f26411b3b3040258c7cf763bd2182a9~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QjuvJh6X-1675825332198)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dc3d70aa6678429bbfb1a08e64ef5172~tplv-k3u1fbpfcp-zoom-1.image)]
如何分配与回收?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BnrB893y-1675825332198)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7d39c6fde9de456ca93401e5c95b521a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oMXxr557-1675825332198)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/479ef77e2943492c8511d96fb797d5ac~tplv-k3u1fbpfcp-zoom-1.image)]
超级块的作用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xao2RSQi-1675825332199)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fe69ec76dcf245bdb4b084703f595dd7~tplv-k3u1fbpfcp-zoom-1.image)]
如何分配?
需要1个空闲磁盘块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WaVrmkAd-1675825332199)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4d0e1d4dbcec43a7ba29c1d5782d9fb9~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bfRCAwUs-1675825332200)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1e6db9e4956b4e218cbfa54bfbbe748e~tplv-k3u1fbpfcp-zoom-1.image)]
需要100个空心啊磁盘块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBgOt9mT-1675825332201)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/abf82d3f01d34cf8bfe1283e55f771a5~tplv-k3u1fbpfcp-zoom-1.image)]
如何回收?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vp6y7RRD-1675825332201)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1930b305c52442b997a0cbbc1f1f0eb7~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R2csz6oz-1675825332201)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d824203c47414f88b6d3d33738fbe5c2~tplv-k3u1fbpfcp-zoom-1.image)]
第二种情况,第一组已满
1.在外存中找到文件所需的空间(结合上小节学习的空闲链表法、位示图、成组链接法等管理策略,找到空闲空间)
2.根据文件存放路径的信息找到该目录对应的目录文件(此处就是D:/Demo目录),在目录中创建该文件对应的目录项。目录项中包含了文件名、文件在外存中的存放位置等信息
1.根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项
2.根据该目录项记录的文件在外存的存放位置、文件大小等信息,回收文件占用的磁盘块(回收磁盘块时,根据空闲表法、空闲链表法、位图法等管理策略的不同,需要做不同的处理)
3.从目录表中删除文件对应的影录项
1.根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的的目录项,并检查该用户是否有指定的操作权限。
2.将目录项复制到内存中的“打开文件表”中。并将对应表目的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件。
打开文件表有两种:
1.将进程的打开文件表相应表项删除
2.回收分配给该文件的内存空间等资源
3.系统打开文件表的打开计数器count减1,若count = 0,则删除对应表项。
操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件
注意:多个用户共享同一个文件,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
如果是多个用户都“复制”了同一个文件,那么系统中会有“好几份”文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。
知识回顾:索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针
例子
共享的文件不存在时
访问控制:如果对某个目录进行了访问权限的控制,那也要对目录下的所有文件进行相同的访问权限控制(爸爸被管了,儿子也要被管)
口令一般存放在文件对应的FCB或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与FCB中存储的口令进行对比,如果正确,则允许该用户访问文件
优点:保存口令的空间开销不多,验证口令的时间开销也很小
缺点:正确的“口令”存放在系统内部,不够安全
使用某个“密码”对文件进行加,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密
在每个文件的FCB(或索引结点)中增加一个访问控制列表(Access-Control List,ACL),该表中记录了各个用户可以对该文件执行哪些操作
有的计算机可能会有很多个用户,因此访问控制列表可能会很大,可以用精简的访问列表解决这个问题
用户接口:文件系统需要向上层的用户提供一些简单易用的功能接口。这层就是用于处理用户发出的系统调用请求(Read、Write、Open、Close等系统调用)
文件目录系统:用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的FCB或索引结点。所有和目录、目录项相关的管理工作都在本层完成,如:管理活跃的文件目录表、管理打开文件表等
存取控制模块:为了保证文件数据的安全,还需要验证用户是否有访问权限。这一层主要完成了文件保护相关功能
逻辑文件系统与文件信息缓冲区:用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址
物理文件系统:这一层需要把上一层提供的文件逻辑地址转换为实际的物理地址
辅助分配模块:负责文件存储空间的管理,即负责分配和回收存储空间
设备管理模块:直接与硬件交互,负责和硬件直接相关的一些管理工作。如:分配设备、分配设备缓冲区、磁盘调度、启动设备、释放设备等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ys18Q14G-1675825332212)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/efed66cf06774e098902b4a472053e6f~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gLwzMIBP-1675825332212)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fd04a987be72494294cf963493ee20ec~tplv-k3u1fbpfcp-zoom-1.image)]
磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3El2Az5X-1675825332213)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a5a2cdd662fd498a84b102756ae1cd74~tplv-k3u1fbpfcp-zoom-1.image)]
磁盘的盘面被划分成一个个磁道,这样的一个“圈就是一个磁道
一个磁道又被划分成一个个扇区,每个扇区就是一个磁盘块”,各个扇区存放的数据量相同(如1KB)
最内侧磁道上的扇区面积最小,因此数据密度最大
需要把“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读 / 写操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROZDxVqN-1675825332213)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6d5d3a1162d843148536551a449028f4~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uikD17F2-1675825332213)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cdb443b2ca464b9ea31b395d8bfb34f0~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4yJfjkG-1675825332214)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7a6c74c662474474abe1b71b587e096e~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6zF9omV9-1675825332214)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d8ad416a4dab4787b7d6795c36a4553c~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aXosTisc-1675825332214)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/93859289b2844789b614d2ec67e63e2e~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0g6IcJ2p-1675825332215)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b04b9d3dfdfa46f5b67828a552645240~tplv-k3u1fbpfcp-zoom-1.image)]
寻找时间(寻道时间):启动磁臂移动磁头所花的时间(磁盘调度算法影响的指标)
延迟时间:将目标扇区转到磁头下面所花的时间
传输时间:读 / 写数据花费的时间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqvCQ9pW-1675825332215)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d73762d06cdb46ec8d325014789f4e4a~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LpTZwgd-1675825332215)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/69929e4f04df4c5d90199ba3105563df~tplv-k3u1fbpfcp-zoom-1.image)]
延迟时间和传输时间都与磁盘转速相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间
根据进程请求访问磁盘的先后顺序进行调度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yEB00Vfn-1675825332216)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c01230e23e9b48489e1014eeb353158e~tplv-k3u1fbpfcp-zoom-1.image)]
优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长
SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)
优点:性能较好,平均寻道时间短
缺点:可能产生“饥饿”现象
产生饥饿的原因在于:磁头在一个小区域内来回来去地移动
只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想,由于磁头移动的方式很像电梯,因此也叫电梯算法。
优点:性能较好,平均寻道时间较短,不会产生饥饿现象
缺点:①只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。②SCAN算法对于各个位置磁道的响应频率不平均(如:假设此时磁头正在往右移动,且刚处理过90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道的请求之后,很快又可以再次响应184号磁道的请求了)
LOOK调度算法就是为了解决扫描算法的问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫LOOK)
优点:比起SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
SCAN算法对于各个位置磁道的响应频率不平均,而C-SCAN算法就是为了解决这个问题,规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求
优点:比起SCAN来,对干各个位置磁道的响应频率很平均
缺点:只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了;并且,磁头返回时其实只需要返回到18号磁道即可,不需要返回到最边缘的磁道。另外,比起SCAN算法来,平均寻道时间更长
C-SCAN算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK算法就是为了解决这个问题。如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kil4wKze-1675825332220)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/76718671773443619b995129c39609d4~tplv-k3u1fbpfcp-zoom-1.image)]
优点:比起C-SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
结论:磁头读入一个扇区数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的“延迟时间”
若采用交替编号的策略,即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小
例如在磁头转到0扇区之前已经做好准备,则可以直接读取0号扇区数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3vv9nysI-1675825332222)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/158863e0de4c4b31821172c7338add79~tplv-k3u1fbpfcp-zoom-1.image)]
step 1:进行低级格式化(物理格式化) ,将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)
Step 2:将磁盘分区,每个分区由若干柱面组成(即分为我们熟悉的c盘、D盘、E盘)
Step 3:进行逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表)
I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件
UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作
Write操作:向外部设备写出数据
Read操作:从外部设备读入数据
人机交互类外部设备:数据传输速度慢,鼠标、键盘、打印机等——用于人机交互
存储设备:数据传输速度快,存储设备:移动硬盘、光盘等――用于数据存储
网络通信设备:数据传输速度介于上述二者之间,调制解调器等――用于网络通信
低速设备:鼠标、键盘等――传输速率为每秒几个到几百字节
中速设备:如激光打印机等——传输速率为每秒数千至上万个字节
高速设备:如磁盘等——传输速率为每秒数千字节至千兆字节
块设备:传输速率较高,可寻址,即对它可随机地读/写任一块,如磁盘等——数据传输的基本单位是“块”
字符设备:传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式,鼠标、键盘等——数据传输的基本单位是字符
I/O设备由机械部件和电子部件(I/O控制器、设备控制器)组成
I/O设备的机械部件主要用来执行具体I/O操作。
如我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏;移动硬盘的磁臂、磁盘盘面
I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。
这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。
CPU与控制器的接口:用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据
I/O逻辑:负责接收和识别CPU的各种命令(如地址译码)并负责对设备发出命令
控制器与设备的接口:用于实现控制器与设备之间的通信
注意:
值得注意的小细节:①一个I/O控制器可能会对应多个设备;②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
内存映像I/O
寄存器独立编制
I/O控制方式——即用什么样的方式来控制I/O设备的数据read/write
key word:轮询
①CPU向控制器发出读指令。于是设备启动,并且状态寄存器设为1(未就绪)
②轮询检查控制器的状态(其实就是在不断地执行程序的循环,若状态位一直是1,说明设备还没准备好要输入的数据,于是CPU会不断地轮询)一直等到接受到设备发送的响应(如响应导致的状态位发生变化)
③输入设备准备好数据后将数据传给控制器,并报告自身状态
④控制器将输入的数据放到数据寄存器中,并将状态改为0(已就绪)
⑤CPU发现设备已就绪,即可将数据寄存器中的内容读入CPU的寄存器中,再把CPU寄存器中的内容放入内存
⑥若还要继续读入数据,则CPU继续发出读指令
下面以C语言代码和流程图来剖析,程序直接控制方式
分析一下在思维导图中提到的几个问题:
设备每个字的读/写都需要CPU的帮助
程序直接控制方式
CPU利用率低、忙等,所以提出了中断驱动方式引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行
注意:①CPU会在每个指令周期的末尾检查中断;
②中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。
分析一下在思维导图中提到的几个问题:
中断驱动方式解决了程序直接控制方式
的问题,但是每一次只能读/写一个字,导致CPU频繁切换,耗费了很多时间。于是人们又发明了DMA方式与“中断驱动方式”相比,DMA方式(Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:
①数据的传送单位是“块” 。不再是一个字、一个字的传送;
②数据的流向是从设备直接放入内存,或者从内存直接到设备。 不再需要CPU作为“快递小哥”
③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预
CPU指明此次要进行的操作(如:读操作),并说明要读入多少数据、数据要存放在内存的什么位置、数据在外部设备上的地址(如:在磁盘上的地址)
控制器会根据CPU提出的要求完成数据的读/写工作,整块数据的传输完成后,才向CPU发出中断信号
DMA控制器:
控制器读取块设备数据其实是一个字一个字读取的先存到DR,DR存满后,然后再转存到内存
DR (Data Register,数据寄存器):暂存从设备到内存,或从内存到设备的数据
MAR ( Memory Address Register,内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放在内存中的什么位置
DC (Data Counter,数据计数器):表示剩余要读/写的字节数
CR (Command Register,命令/状态寄存器):用于存放CPU发来的I/O命令,或设备的状态信息
分析一下在思维导图中提到的几个问题:
1.完成一次读/写操作的流程(见右图)
2.CPU干预的频率
3.数据传送的单位
4.数据的流向(不再需要经过CPU)
5.主要缺点和主要优点
分析一下在思维导图中提到的几个问题:
(用户层软件-设备独立性软件-设备驱动程序-中断处理程序-总结回顾)
设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现
①向上层提供统一的调用接口(如read/write系统调用)
②设备的保护
③差错处理
④设备的分配与回收
⑤数据缓冲区管理
⑥建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序
操作系统系统可以采用两种方式管理逻辑设备表(LUT) :
第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统
第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。
为什么不同的设备需要不同的驱动程序呢?
各式各样的设备,外形不同,其内部的电子部件(I/O控制器)也有可能不同
举几个假设的例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QIyfgpc-1675825332234)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e70643827f03427e918e3fff5ea042ea~tplv-k3u1fbpfcp-zoom-1.image)]
不同设备的内部硬件特性也不同,这些特性只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作
主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r8J94jIr-1675825332235)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/30b0cc3ca865436191604c35cd80fc72~tplv-k3u1fbpfcp-zoom-1.image)]
硬件:不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0YZFIcxz-1675825332235)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0eff864ea9f446ac986088a6a519959f~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PgBAiSmP-1675825332236)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2e619d1e2544428984d8ed9276a1ac15~tplv-k3u1fbpfcp-zoom-1.image)]
理解并记住I/O软件各个层次之间的顺序,要能够推理判断某个处理应该是在哪个层次完成的(最常考的是设备独立性软件、设备驱动程序这两层。只需理解一个特点即可:直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的)
设备独立性软件、设备驱动程序、中断处理程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QJO9Uokb-1675825332236)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bcee7d37a94b4052b597266cead0cf4a~tplv-k3u1fbpfcp-zoom-1.image)]
用户层软件:假脱机技术(SPOOLing技术)
设备独立性软件:I/O调度、设备保护、设备分配与回收、缓冲区管理(即缓冲与高速缓存)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5OgiTzzm-1675825332236)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9409bec843464c22aaf3af6fcc237d37~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GS1BFOj3-1675825332236)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fa3691778581494f9c8ad4065a60855f~tplv-k3u1fbpfcp-zoom-1.image)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4mjkyjC-1675825332237)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a88c585ef92447f58a17fe8c22c4cb8a~tplv-k3u1fbpfcp-zoom-1.image)]
操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。
在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6sBZfMj-1675825332237)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/245241b0d4004ce5a1ed54622c86539b~tplv-k3u1fbpfcp-zoom-1.image)]
这里温习一下手工操作阶段:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-auHXuwuU-1675825332237)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e827dfb2853c4f3082a3c3966fd1a7ab~tplv-k3u1fbpfcp-zoom-1.image)]
手工操作阶段:主机直接从I/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备
批处理阶段引入了脱机输入/输出技术(用磁带完成):引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5gCFKEN-1675825332238)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fc7cfca076ef45e0b077bf5d5a1e3951~tplv-k3u1fbpfcp-zoom-1.image)]
在外围控制机的控制下,慢速输入设备的数据先被输入到更快速的磁带上。之后主机可以从快速的磁带上读入数据,从而缓解
了速度矛盾
Tips:为什么称为“脱机”——脱离主机的控制进行的输入/输出操作
“假脱机技术”,又称“SPOOLing 技术”是用软件的方式模拟脱机技术。SPOOLing系统的组成如下:
在磁盘上开辟出两个存储区域——“输入井”和“输出井”
要实现SPOOLing 技术,必须要有多道程序技术的支持。系统会建立“输入进程”和“输出进程”。
”输入进程“模拟脱机输入时的外围控制机
“输出进程”模拟脱机输出时的外围控制机
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iu8ZxVGn-1675825332239)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/195354fcfdd545c98980712e4ed69e37~tplv-k3u1fbpfcp-zoom-1.image)]
在输入进程的控制下,“输入缓冲区”用于暂存从输入设备输入的数据,之后再转存到输入井中
在输出进程的控制下,“输出缓冲区”用于暂存从输出井送来的数据,之后再传送到输出设备上
注意,输入缓冲区和输出缓冲区是在内存中的缓冲区
先了解一下独占和共享设备,以此引出假脱机技术如何实现对独占设备的共享:
独占式设备――只允许各个进程串行使用的设备。一段时间内只能满足一个进程的请求。
共享设备――允许多个进程“同时”使用的设备(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用请求。
打印机是种“独占式设备”,但是可以用SPOOLing技术改造成“共享设备”
独占式设备的例子:若进程1正在使用打印机,则进程2请求使用打印机时必然阻塞等待
当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事:
(1)在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中;
(2)为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。
当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务
虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。
SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。
设备的固有属性可分为三种:独占设备、共享设备、虚拟设备
独占设备——一个时段只能分配给一个进程(如打印机)
共享设备――可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用
虚拟设备――采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用SPOOLing技术实现的共享打印机)
安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒(eg:考虑进程请求打印机打印输出的例子)
不安全分配方式:进程发出I/O请求后,系统为其分配/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个l/O请求得不到满足时才将进程阻塞。
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
动态分配:进程运行过程中动态申请设备资源
设备、控制器、通道之间的关系:
一个通道可控制多个设备控制器,每个设备控制器可控制多个设备
系统为每个设备配置一张DCT,用于记录设备情况
设备类型——如:打印机/扫描仪/键盘
设备标识符——即物理设备名,系统中的每个设备的物理设备名唯一
设备状态——忙碌/空闲/故障…
指向控制器表的指针——每个设备由一个控制器控制,该指针可找到相应控制番的信恳
重复执行次数或时间——当重复执行多次l/O操作后仍不成功,才认为此次l/O失败
设备队列的队首指针——指向正在等待该设备的进程队列(由进程PCB组成队列)
注:“进程管理”章节中曾经提到过“系统会根据阻塞原因不同,将进程PCB挂到不同的阻塞队列中”
每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理
控制器标识符——各个控制器的唯一ID
控制器状态——忙碌/空闲/故障…
指向通道表的指针——每个控制器由一个通道控制,该指针可找到相应通道的信息
控制器队列的队首指针——
控制器队列的队尾指针——指向正在等待该控制器的进程队列(由进程PCB组成队列)
每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理
通道标识符——各个通道的唯一ID
通道状态——忙碌/空闲/故障…
与通道连接的控制器表首址——可通过该指针找到该通道管理的所有控制器相关信息(COCT)
通道队列的队首指针——指向正在等待该通道的进程队列(由进程PCB组成队列)
通道队列的队尾指针——
记录了系统中全部设备的情况,每个设备对应一个表目
设备类型——如:打印机/扫描仪/键盘
设备标识符——即物理设备名
DCT(设备控制表)
驱动程序入口
①根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)
②根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程
③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程
注:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送
缺点:
①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程
②若换了一个物理设备,则程序无法运行
③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名
①根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”)
②查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项
③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程
逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系
某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项
如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址
逻辑设备表的设置问题:
整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统
每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统
CPU可以把要输出的数据快速地放入缓冲区,之后就可以做别的事,慢速的I/O设备可以慢慢从缓冲区取走数据,数据输入时类似
如果是字符型设备则每输出完个字符就要向CPU发送一次中断信号
假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)
注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
用户进程的内存空间中,会分出一片工作区来接受输入/输出数据(一般也默认工作区大小与缓冲区相同)
T>C时的例子:
T
T>C+M时:
T