1.操作系统概论
批处理操作系统的核心缺点是缺少交互性,主要特征是系统资源利用率高
操作系统结构设计中,微内核结构对应C/S结构,层次结构的最大优点是把整体问题局部化,整体结构的最大优点是结构紧密,系统效率高
操作系统的主要组成部分:进程线程管理,内存管理,设备管理,文件管理
操作系统的核心定位是系统软件,位于硬件之上,支撑软件之下(硬上支下)。为用户提供高效使用计算机的接口,同时集中了资源管理和控制程序执行的核心功能
数据库软件是支撑软件
操作系统的共享性特征中,硬盘,内存储器,可重入的操作系统代码等可实现同时共享;磁带机,投影仪,打印机,扫描仪,中央处理器,存储器等设备需互斥共享
从不同视角看操作系统的作用:应用角度提供人机交互接口;软件设计和开发角度提供软件开发基础平台;计算机安全保护角度提供第一道安全防线;系统发展角度提供虚拟机和扩展机
操作系统通过内部设计的各类数据结构,记录软硬件资源信息,用于了解用户需求和当前资源使用情况,实现对资源的有效组织与管理,且这些数据结构可由系统动态更新
操作系统的随机性特征体现在内核进行进程切换等现象;并发性特征体现在单处理器环境下两个程序交替在CPU上运行等场景
操作系统的服务功能包括提供人机交互接口,向开发人员提供高效变成接口,对存储数据提供安全保护等,向上级部门提供统计信息,向操作系统开发者报告错误信息等非必须功能
操作系统内核程序包含进程调度程序,中断服务程序,设备驱动程序,用户应用程序不属于内核服务,中断服务程序不能作为进程管理
用户编程时打印输出需使用write()系统调用;创建进程使用fork()系统调用,属于进程控制类系统调用
操作系统提供给用户的接口包括命令输入(命令行接口)和系统调用,其中系统调用时用户应用程序变成的唯一接口
特权指令仅能由操作系统使用,非特权指令可由操作系统和用户共同使用
分时操作系统的核心追求是及时响应用户输入的交互命令,适用于调试程序(用户直接干预操作每一步的进行,适用于调试程序)
系统调用与一般过程调用的区别:系统调用时调用程序位于用户态,被调用程序位于核心态;过程调用的调用程序和被调用程序均位于用户态
实时操作系统的主要射击目标:在严格时间范围内对外部请求做出反应
微内核接口的特点包括较高的灵活性和扩充性,提高操作系统可靠性,更适合分布式系统,清晰的单项依赖和单向调用性不是其特点
2.操作系统运行机制
内核态专属操作:屏蔽中断,关中断操作
修改内核时钟指令,改变处理器状态也必须在管态执行
访管中断的触发场景:用户程序在用户态下使用特权指令,调用操作系统提供的文件度性功能时,首先执行访管指令,会引发钢管中断
内核态与用户态定义:都是CPU运行时的状态标志,目的是保障系统运行安全
状态转换方式:处理器从系统态到用户态的转换通过修改程序状态字PSW实现,用户进程从用户态转变为内核态需使用访管指令
系统调用与一般过程调用的差异:
1.状态归属:系统调用时调用程序在用户态,被调用程序在核心态,过程调用的调用程序和被调用程序均在用户态
2.转换机制:系统调用需通过陷入机制实现状态切换,过程调用直接执行
3.返回机制:系统调用返回前需运行调度程序,过程调用直接返回
4.嵌套使用:二者均支持嵌套使用【出题陷阱:递归】
5.调用限制:系统调用不允许调用,过程调用允许直接调用
系统调用的相关特性
1.功能边界:不包含查找数据库信息,查找数组最大值,数据类型转换,求解常数等用户业务逻辑功能
2.分类:open()属于文件操作类系统调用
3.本质:是操作系统提供给用户程序的服务,可看做扩充的机器指令
4.使用前提:用户使用时需先执行访管指令,将目态切换为管态
系统调用的参数与返回值传递:
1.有效传递方式:通过寄存器,堆栈,指令自带参数传递
2.无效传递方式:通过变量,管道传递
3.返回值传递:通过专用堆栈区传递
处理器寄存器的可见性:
1.用户可见寄存器:数据寄存器,地址寄存器,条件码寄存器(地址数据条件码)
2.用户不可见寄存器:程序计数器(处理器下一条执行的指令),指令寄存器,程序状态字寄存器
程序状态字PSW的包含内容:
进位标志位CF
陷阱标志位TF
中断使能位IF
CPU工作状态码S
条件码C
中断屏蔽码IF
结果为零标志位ZF
符号标志位SF
虚拟中断标志位VIF
溢出标志位OF
虚拟中断待决标志位VIP
IO特权级别为IOPL
不包含保护位P,修改位M,访问位R,驻留位A,有效位A,运行位X,写禁止位,只读位R
处理器运行状态表述:处理器运行时的状态为管态或目态
用户态执行特权指令的后果:用户程序在用户态下取到特权指令时,处理器会停止执行并产生非法操作事件
中断响应顺序的影响因素:中断优先级
I/O中断的判定:数据传送完毕,设备出错,键盘输入,光盘读取出错等
指令错误不属于I/O中断
用户程序关闭中断响应的前提:发起访管中断
中断相关核心概念定义:
1.中断请求:外部I/O设备向处理器发出的信号(也是中断控制器向处理器发出的信号)
2.中断断点:正在运行程序的暂停点
3.中断响应:处理器暂停当前程序转而进入中断处理程序的过程
4.中断源:引起中断的设备或事件
5.中断向量:中断处理程序入口地址
6.中断字:中断请求的编号
中断向量表的构成:每一个中断向量由程序状态字PSW和指令计数器组成。中断处理程序的入口地址(中断向量)存放在中断向量表中
中断与异常的区别:
1.引发原因:中断由外部事件引发,异常由正在执行的指令引发
2.典型案例:中断包括串口数据到达,时钟中断,控制台命令,网卡数据缓冲区满,用户按鼠标左键,计时器归零等。异常包括被零除,程序访问变量不在内存,缺页故障,算术溢出,内存保护出错,目态程序执行特权指令等
中断系统的实现方式:由硬件和软件相互配合实现
DMA系统的功能实现:DMA数据传输工作由硬件电路完成
时钟中断的典型场景:处理系统心跳,激活看门狗
I/O中断的典型情形:光盘读取出错
多道程序设计技术的作用:提高CPU的利用率
交互系统的时间片设置:若用户数为100,要求响应时间≤100ms,忽略其他开销,时间片应≤1ms
用户动态请求和释放系统资源的方式:通过系统调用实现
与当前运行进程相关的中断类型:程序性中断
进程和程序的核心区别:
1.动态性:进程是动态运行的,程序是静态存在的
2.组成:进程由指令代码,数据和进程控制块PCB组成,程序不包含PCB
3.管理主体:进程和程序均由操作系统管理
4.并发执行:仅进程可并发执行
在操作系统中,既可以在内核态下运行又可以在用户态下运行的是 置移位方向标志
算数运算指令可以在用户态下执行
用户需要动态请求和释放系统资源,在用户程序中所使用的方法是 通过系统调用
系统调用不能实现的功能是 调用程序多次嵌套与递归
程序性中断与当前运行的进程有关
3.进程线程模型
一:进程基本概念与特性
进程组成:由程序代码,数据,进程控制块PCB
PCB是进程存在的唯一标志,程序无PCB
进程核心特性:动态性(动态产生,变化,消亡),并发性(宏观同时推进,微观交替执行),独立性(资源分配基本单位),异步性(按独立不可预知速度推进),失去封闭性,执行结果不可再现
多道程序设计:含义:允许多个程序同时进入内存运行,核心目的是提高整个系统资源(CPU,I/O,内存利用率),缩短作业平均周转时间,意义:宏观上多个进程同时运行,微观上交替执行,单道程序无此特性,仅顺序执行
可再入程序:纯代码程序,运行中无需修改
二:进程基本概念与特性
基本三状态:
运行态:占用处理机资源
就绪态:获除处理机外所有资源,等待调度
阻塞态:因某原因(如数据为准备,等待I/O,接收消息)暂时无法运行
状态转换触发事件:
运行→就绪:高优先级进程进入就绪队列(抢占式高优调度),时间片用完,进程主动让出CPU
运行→阻塞:进程需要的数据/资源未准备,等待I/O消息,执行阻塞原语
阻塞→就绪:等待的事件发生(如数据就绪,I/O完成),执行唤醒原语
就绪→运行:调度程序选中,抢占式高优调度中进程为就绪队列的最高优先级
挂起状态(七状态模型)进程转存到磁盘:
就绪挂起:内存不足,就绪进程被转存到外存
阻塞挂起:进程长期阻塞,被转存到外存
激活:就绪挂起进程优先级更高,或就绪队列为空,将外存进程调回内存就绪态
挂起原语:阻塞→阻塞挂起;就绪→就绪挂起;激活原语对应反向转换
特殊状态:僵尸状态:进程结束但资源未被回收,Linux无安全状态,包含运行,睡眠,僵尸态
多核/单核进程状态数量规律:
单核:运行态最多1个,最少0个;就绪态最多进程数减1,最少0个,阻塞态最多等于进程数
N核:运行态最多N个,最少0个;就绪态最多进程数减1,最少0个;阻塞态无核数限制
三:进程控制块PCB
核心作用:描述进程基本情况和运行变化,是进程唯一标志,与进程一一对应
存储信息:
调度信息:进程名,进程号,进程优先级,当前状态,进程队列指针,已运行时间,家族关系等
现场信息:程序状态字,始终信息,寄存器,堆栈指针,界地址寄存器等
其他:打开文件句柄,消息队列指针,资源清单等
不包含:中断源,全局变量,正文代码段,用户栈信息,系统栈,消息队列,进程缓冲区,页表项等
组织方式:线性表,索引表,链接结构(链表)
管理队列:就绪队列,阻塞(等待)队列,运行队列,无创建队列,退出队列,调度队列
四:进程控制与原语
进程控制原语:原子性操作,管态执行,关闭中断保证连续运行,不是系统调用/函数组合。包含创建,撤销,阻塞,唤醒,挂起,激活,修改优先级。 上下文切换,进程切换不是原语
原语执行顺序:
创建:申请PCB→填写PCB→插入就绪队列
撤销:找到PCB→撤销子孙进程→释放资源→撤销PCB
阻塞:中断CPU→保存现场→修改状态为阻塞→插入阻塞队列
唤醒:在等待队列找到PCB→修改状态为就绪→插入就绪队列
进程创建方式:用户调用进程创建原语,由操作系统完成,非用户自行填写PCB
进程终止原因:被0除,对制度内存写操作,堆栈溢出等。设备忙不会导致终止
进程状态变化与调度:
运行→阻塞态必然触发调度
就绪→运行时调度结果,不触发新调度
非抢占式调度中,新进程进入就绪队列不触发调度
五:
调度层次与目标:
高级调度(作业调度):选择外存作业创建进程,适用于批处理系统
中级调度(内存调度):挂起/激活进程,平衡内存资源
低级调度(进程调度):选择就绪进程分配处理机,核心调度
调度目标:
批处理系统追求高吞吐量,短周转时间,高响应比
交互式系统追求最小响应时间
实时系统追求满足截止时间
嵌入式系统无特定核心指标
调度算法及特性
| 算法 | 核心特点 | 适用场景 | 特性 |
|---|---|---|---|
| 先来先服务FCFS | 按到达顺序调度 | 批处理系统 | 公平,不可抢占 |
| 短作业优先SJF | 按运行时间短优先 | 批处理系统 | 可抢占/不可抢占,可能饥饿 |
| 最高优先级优先HPF | 按优先级调度 | 抢占式/非抢占式系统 | 抢占式易实现,可能饥饿 |
| 时间片轮转RR | 按固定时间片轮流调度 | 交互式系统 | 抢占式,纯基于时间片,时间片非越短越好 |
| 多级反馈队列 | 综合FCFS,RR,HPF | 通用系统 | 抢占式,综合型最优 |
| 最短剩余时间优先 | 按剩余运行时间调度 | 批处理系统 | 抢占式,新进程不断就绪会饥饿 |
| 速率单调电镀 | 按周期优先级调度 | 实时系统 | 适用于周期性进程 |
调度指标计算
平均周转时间:单个作业周转时间(等待+运行)的平均值
响应比:(等待时间+运行时间)/运行时间
吞吐量:单位时间完成的作业数,衡量批处理系统,多道程序设计系统效率的核心指标
六:系统调用
核心作用:扩充机器指令,增强系统功能,用户程序通过系统调用使用内核资源
属于系统调用:进程控制(创建/终止进程,fork()),文件操作(读写打开文件,打开磁盘文件),设备管理(请求使用光驱/硬盘),信息维护(获取进程属性),进程通信(发送消息)
不属于系统调用:业务逻辑操作(查数据库),纯计算操作(计算常数,求解π等)
七:线程(轻量级进程)
核心特性:处理器调度和分派的基本单位,隶属于进程,共享进程资源(内存,打开文件,设备),自身拥有必不可少的私有资源:程序计数器,一组寄存器,用户栈,系统栈
Pthread线程包核心函数
线程创建:pthread_create()
线程退出:pthread_exit()
等待线程退出:pthread_join()
让出CPU:pthread_yield()
互斥量创建:pthread_mutex_init()
条件变量创建:pthread_cond_init()
条件变量唤醒:pthread_cond_signal()
线程与进程关系:一个进程含多个线程,若一个线程运行,其余线程就绪/阻塞,进程整体为运行态。主线程+创建的子线程构成进程的线程集,子线程退出后主线程仍存在则仍有1个线程
八:UNIX/LINUX进程操作(fork()核心)
fork()作用:创建子进程,属于进程控制类系统调用,调用后父进程返回子进程PID(>0),子进程返回0,出错返回-1。父子进程独立运行,私有数据空间(修改各自变量互不影响)
fork()程序输出规律:
单个fork():父+子进程各执行后续代码,输出 2次后续内容
n个独立fork():产生 $$ 2^n-1 $$个子进程,总进程数 $$2^n$$,后续输出 $$2^n$$次
循环fork()(n次):输出次数为 $$2^(n+1)*2$$
fork()前输出1次,fork()后输出2次,总输出为3次是典型场景
wait()函数:父进程获取子进程结束状态并回收资源,避免子进程成为僵尸进程
exec()函数:替换进程代码段,执行新程序,比如ls命令
信号处理:signal()函数注册信号处理函数,Ctrl+C触发signal信号,执行自定义处理逻辑
九:并行与并发
并行:CPU与外部设备可并行工作,多核处理器上多个进程可真正同时运行
并发:单处理器上多个进程交替执行,宏观同时推进,微观串行;内存与外存,CPU与内存无法并行
4.并发与同步
一:管程相关
管程是进程同步机制,将共享变量及对其的操作封装,引入条件变量解决同步问题,且在条件变量上执行PV操作
管程自身不保证互斥,其内部不允许同时存在两个及以上活跃进程;管程可解决进程互斥和同步问题,并非仅能解决互斥问题,引入目的之一是提高代码可读性
管程的互斥是自身的性能实现,并非由信号量及PV操作实现,Hoare提出过管程的一种实现方案
二:进程间关系制约
1) 核心关系类型
同步关系:进程间存在先后执行的依赖关系,无资源争夺,仅需协作。典型场景:汽车装配流水线工序,读/处理/打印数据进程间(缓冲区相关联),足球比赛同队员协作,多人在线斗地主
互斥关系:进程间争夺同一临界资源,需互斥访问。典型场景:航班车票订票进程,多进程调用键盘,篮球足球比赛双方夺球,同台游戏机的资源争夺
同步+互斥关系:进程间既需协作,又要争夺共享资源。典型场景:同一台游戏机上玩足球游戏,多人在线玩魔兽游戏
无同步无互斥关系:进程间无资源争夺,无执行依赖,相互独立。典型场景:不同用户在各自电脑编译程序,多用户独立查看监控数据
2) 进程感知与潜在问题
互不感知:进程完全不了解其他进程存在,相互竞争,可能引发互斥,死锁或饥饿,一个进程结果对另一个无影响
间接感知:通过第三方(如共享资源)交互,共享协作,可能引发互斥,死锁或饥饿
直接感知:双方直接交互(如发消息),通过通信协作,可能引发死锁或饥饿,无互斥问题
3) 相关判断
进程共享同一变量,存在协作行为,如协同办公,填写防疫表时,为相关进程
进程间因等待消息产生依赖时,为同步关系;共享临界资源时,比如那存在同步/互斥关系
三:临界区与临界资源
临界资源:进程需互斥访问的资源,如机票,车票,键盘,打印机,共享数据库
临界区:访问临界资源的代码段(非资源本身),对临界资源的读写操作均在临界区完成
临界区访问流程分为四部分,需按顺序执行:
进入区:通过P操作,TS指令测试并申请进入临界区,是P原语的执行区域
临界区:实际操作临界资源的代码,一次仅允许一个进程进入
退出区:通过V操作,置锁为假释放临界区,是V原语的执行区域
剩余区:与临界资源操作无关的代码,如打印凭条,行程单,离开操作
临界区访问准则:空闲则进,忙则等待,让权等待,禁止无限等待
四:PV操作与信号量机制
1) PV操作核心
P操作:使信号量减1,用于测试能否进入临界区
V操作:使信号量加1,用于释放临界区,清除“正在访问临界区”的标志
成对使用,遗漏P操作会导致无法保证临界区的互斥访问
可实现进程同步,互斥,前趋关系,无法实现进程共享
2) 信号量操作与特性
信号量仅能通过初始化,PV操作修改,不可直接进行加减操作
互斥信号量:初值通常设为1,如有k(k>1)个进程在等待队列中,信号量值为-k
资源信号量:初值为资源总数,数值范围为 [资源数,-(最大申请进程数-资源数)],比如4台打印机,20个申请进程,信号量范围为 [4, -16]
进程通信中,已满的邮件槽无法申请无耻所
生产者-消费者问题中,生产者放产品前需用P操作确保缓冲区有空闲槽
五:进程间通信
1) 通信方式分类
低级通信:信号量,传递数据量最少,仅用于同步/互斥控制
高级通信:共享内存,消息机制(消息缓冲),信箱通信,管道通信,套接字。其中管道通信为同步通信方式,其余可支持异步
2) 各通信方式核心特性
| 通信方式 | 定义/核心实现 | 关键特点 | 适用场景 优缺点 |
|---|---|---|---|
| 共享内存 | 设公共内存区,进程直接读写 | 无多份数据拷贝,速度快 | 进程间大量交换信息;需程序员处理互斥,灵活性高,需公共内存区+同步/互斥信号量(无需内存块号) |
| 消息缓冲 | 内存开辟缓冲区,发送方将信息送入并插入接收方队列 | 利用公共缓冲区交换信息 | 通用数据交换;包含消息缓冲区,队列,同步互斥信号量,收发原语(无需消息ID号) |
| 信箱通信 | 创建独立通信机制,收发方通过信箱传递信件 | 收发方无需直接联系 | 异步通信;支持无时间限制收发,包含信箱体,可存/已有信件数(无需信件ID号) |
| 管道通信 | 通过共享文件实现,连接两个进程的数据流 | 系统自动处理同步/互斥(对用户透明),读写长度可变 | 简单数据流传输;不足是通信速度较慢,需写入端,读出端,管道体(无需管道ID号) |
3) 通信相关原语/组成
直接通信的发送原语:send(receiver,message)
消息机制,信箱,管道,共享内存均无需自定义ID号,核心依赖缓冲区/信箱体/管道体/公共内存区+同步互斥控制
六:线程同步
利用 pthread_mutex_t 定义互斥锁,通过 pthread_mutex_lock/unlock 实现临界区互斥(如缓冲区加锁)
利用 pthread_cond_t 定义条件变量,通过 pthread_cond_wait/signal 实现线程间同步,解决生产者/消费者等写作问题
七:实际场景问题与内存管理
1) 共享资源操作问题
多进程操作共享资源(选课,订票,存款等)时,未加同步互斥锁,会导致资源超量使用(如选课人数超出课程容量)
加锁(P/V操作,TS指令)后,可保证共享资源的正确访问,使操作结果与预设相符
不分同步操作存在执行不确定性,如选课程序先选B再申请A,可能无法达到预期目的
2) 内存地址管理
地址越界:每个进程由独立的地址空间,若运行时产生的地址超出该空间,即发生地址越界错误
八:经典问题
1) 生产者-消费者问题
核心是缓冲区的同步与互斥控制,生产者放产品前需P操作确保缓冲区空闲,消费者取产品前需P操作确保缓冲区有产品
线程实现中,需结合互斥锁(控制缓冲区互斥访问)和条件变量(控制生产/消费的同步)
2) 独木桥/硬件互斥问题
硬件互斥通过TS指令实现,本质是临界区的进入区判断
单标志算法中,标志判断为进入区,过桥/操作资源为临界区,置标志非为退出区,离开为剩余区
Lock/Turn=c 进去
Fetch/cross 临界区
Flase/Turn=1-c 退出
Output/leave 剩余
5.内存管理
最差适配(Worst Fit):从全部空闲区中找出能满足作业要求的,且大小最大的空闲分区,从而使链表中的结点大小趋于均匀;空闲分区表中的空闲分区要按照从大到小进行排序,自表头开始查找并分配。大分区分割。
最佳适配(Best Fit):从全部空闲区中找出能满足作业要求的,且大小最小的空闲分区,这种方法能使碎片尽量小;空闲分区表中的空闲分区要按照从小到大排序,自表头查找并分配
首次适配(First Fit):从空闲分区表的第一个表目起查找,把最先能满足要求的空闲区分配给作业;能减少查找时间,空闲分区要按照地址从低到高排序。大分区分割。
下次适配(Next Fit)(循环首次适配):从上一次分配的位置开始扫描内存,选择下一个大小足够的可用块
总结对比
| 算法 | 核心策略 | 停车场比喻 |
|---|---|---|
| 首次适配 | 按地址顺序找第一个能用的 | 从入口开始,见第一个空位就停 |
| 最佳适配 | 找能满足要求的最小分区 | 在全场找一个最合适的“最小车位” |
| 最差适配 | 找能满足要求的最大分区 | 在全场找一个最大的“豪华车位”给你 |
| 下次适配 | 从上一次分配位置继续往后找 | 从上回停车的地方接着往前找空位 |
| 随机适配 | 蒙眼一指,从指到的位置开始找第一个空位。 | 增强安全性,使地址难以预测 |
6.文件管理
文件的存取方式依赖于 文件的物理结构 和 存放文件的设备的物理特性
文件的逻辑块与存储介质上物理块存放顺序一致的是 顺序结构->把逻辑上连续的文件信息依次存放在连续编号的磁盘中。随着不断新建和删除文件,会导致产生磁盘碎片
将逻辑上连续的文件信息分散存放在若干不连续的磁盘块中,每个磁盘块中设置一个指向下一个磁盘块的指针,是 链接结构。检索速度慢,不适于随机存取文件
将逻辑上连续的文件信息分散存放在若干不连续的磁盘块中,并将所有磁盘块的地址集中存放在一张表中,是 索引结构
文件存储空间的分配单位通常是 数据块 DataBlock
从用户角度看,文件控制块 FCB 最重要的字段是 文件名,建立文件系统的主要目标是 实现文件的按名存取,建立多级树形目录的主要目标是解决文件重名问题
构成文件内容的基本单位称为 信息项,信息项的序列即为 文件内容
Linux的 EXT2 文件系统区分大小写
文件的逻辑结构是指 操作系统提供给用户使用的文件组织形式 用户所看到的文件的组织形式
文件的物理结构是指 磁盘上的文件组织形式 操作系统管理的文件的组织形式
Unix操作系统中,文件系统包括三种类的文件 普通文件、目录文件、特殊文件
流式文件是指 无结构的二进制字符的集合、目标代码的集合,比如 源程序文件,可执行文件
定长记录文件是指 固定长度的记录集合,比如 数据库文件
不定长记录文件是指 不固定长度的数据集合,比如 系统的日志文件
文件的逻辑结构:无结构的字符流式文件、定长记录文件、不定长记录文件
文件的物理结构:顺序结构、链接结构、索引结构、I节点结构
设置当前工作目录的主要目的是 加快文件检索速度(避免了从根目录进行检索的开销)
执行打开文件操作时由操作系统返回的信息是 文件描述符
FCB 通常应该包括:文件名,文件号,用户名,文件地址,文件长度,文件类型,文件属性,共享计数,文件的建立日期,保存期限,最后修改日期,最后访问日期,口令,文件逻辑结构,文件物理结构,文件目录等。其中文件名,文件大小,文件创建时间和磁盘块起始地址是必须保存的信息
外存储设备的存取过程顺序:读状态>置数据>置地址>置控制>读状态
打开文件过程顺序:查找FCB主部>检查打开方式>检查用户身份>填写进程打开文件表
创建文件过程顺序(创建子目录同):检查参数合法性>检查重名>查找FCB空闲位置>填写FCB
修改后关闭文件过程顺序:查找文件>修改FCB相关内容>置FCB为非活跃>写回磁盘
删除文件过程顺序:查找文件>检查删除合法性>收回FCB资源>收回文件存储空间
打开子目录过程顺序:查找子目录FCB>检查访问合法性>检查子目录是否打开>读入目录项
改动子目录过程顺序:查找子目录>修改FCB相关内容>写回磁盘>返回
读取文件过程顺序:检查文件长度(检查文件是否存在)>查找目录>检查权限>读取文件内容
写入文件过程顺序:检查文件长度(检查文件是否存在)>查找目录>检查权限>写入文件内容
FCB的信息可以分为:文件存取控制信息、文件结构信息、文件管理信息等
文件目录实际就是文件符号名到物理地址之间的一种映射机制
在进行文件删除、建立、写 等操作时都会访问和修改 空闲空间登记表,用于管理空闲物理内存的方法有:空闲块链表法,位示图法,空闲页面表
7.I/O设备管理
设备表:建立逻辑设备与物理设备之间的对应关系
设备按照信息交换单位进行分类,可分为 块设备和字符设备
块设备:磁盘,磁带,SSD
字符设备:键盘,终端,打印机,网络适配卡,显示适配卡
系统设备表SDT记录设备的全局信息(名称,标识符,类型等)
设备控制表DCT用于管理单个设备的运行状态(忙/闲状态,设备特征等)
控制器控制表COCT用于控制器状态管理
通道控制表CHCT用于通道口控制
I/O设备的控制方式有程序直接控制方式,中断控制方式,DMA方式和通道控制方式
DMA方式一般用于高速传送组成的数据,优点是操作均由硬件电路实现,传输速度快。比如磁盘的I/O控制
键盘通过中断方式
中断方式指当CPU启动外设后,不需要去查询其工作状态,可继续执行主程序
程序直接控制方式利用输入/输出指令或询问指令测试一台设备的忙/闲标志位,根据设备当前的忙或闲的状态决定是否继续询问设备状态还是由主存储器和外围设备交换一个字符或一个字
通道控制方式可以实现对外设的统一管理和外设与内存之间的数据传送。可以进一步减少数据IO对整个系统运行效率的影响
设备寄存器不是 程序直接控制方式 的组成部件
状态寄存器不是 中断方式 的组成部件
通道控制器不是 DMA方式 的组成部件
源地址寄存器不是 通道控制方式 的组成部件
通道是一个独立于CPU的专门I/O控制的处理机,控制设备与内存直接进行数据交换。通道按照信息交换方式通常设立3种类型的通道:
字节多路通道
数据选择通道
数组多路通道
设置设备管理功能的主要目的是 方便用户使用
设备管理的主要任务:
缓冲区管理 匹配高速和低速设备
设备分配
设备处理
虚拟设备 通过虚拟技术提高并发度
实现设备独立性
通过协调技术避免设备冲突
在操作系统的I/O管理中,缓冲池管理中着重考虑的是 实现进程访问缓冲区的同步
设备独立层用于实现用户程序与设备驱动器的统一接口,设备命令,设备保护以及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间
设备分配算法中,常采用的数据结构主要包含四张表:系统设备表SDT>设备控制表DCT>控制器控制表COCT>通道控制表CHCT
与设备无关的系统软件主要功能:
统一命名
设备保护
提供与设备无关的逻辑块
缓冲(对不同速度的设备使用缓冲区来匹配)
存储设备快的分配
独占设备的分配和释放
出错处理(向用户报告出错处理情况)
可以采用如下各种技术提高I/O性能
- 通过应用缓冲技术,解决传输速度差异的问题
- 通过应用异步I/O技术,使CPU不必等待I/O操作的结果
- 通过应用DMA和通道部件,使CPU与这些部件能够并行执行
- 通过应用虚拟设备技术,减少进程阻塞时间,提高独占设备的利用率
当用户使用外部设备时,其控制设备的命令传递途径依次为:
用户应用层>设备独立层>设备驱动层>设备硬件
设备独立层主要目的是 屏蔽了I/O设备驱动的多样性,便于用户使用
时钟中断属于不可重用资源
银行家算法属于死锁避免算法
按序分配资源属于死锁预防
杀死进程并收回其占有的资源可用于死锁检测与恢复
一次性分配所需要的资源属于死锁预防
SPOOLing技术可以破坏互斥条件
8.死锁
对于系统中的独占设备,为预防出现死锁,应采用 静态分配,分配时加锁。应避免动态分配锁
死锁产生的原因:
资源分配不当
进程推进顺序不当
相关进程进入阻塞状态且无法唤醒 -- 死锁
相关进程没有阻塞,可被调度,但没有进展 -- 活锁
相关进程没有阻塞,但是调度被无限推后 -- 饥饿
产生死锁的四个必要条件:
互斥条件
请求与保持条件
不可剥夺条件
循环等待条件
银行家算法是一种最有代表性的避免死锁的算法,又被成为“资源分配拒绝”法
一次性分配所需要的资源 可以预防死锁
资源有序分配法 可以预防死锁
破坏互斥条件:申请的资源不被一个进程所独占
破坏不可剥夺条件:若一个进程申请某些资源,首先系统应检查这些资源是否可用,如果可用就分配给该进程
破坏请求和保持条件:每个进程在开始执行前就申请它所需要的全部资源,或者当系统能满足进程的资源申请要求且把资源一次性分配给该进程后,该进程才能开始执行
破坏循环等待条件:采用资源有序分配策略,将系统中所有资源顺序编号,按照编号顺序进行,否则系统不予分配资源
SPOOLing技术是一种外围设备联机操作技术。通常称为假脱机技术。利用该技术可以允许若干个进程同时产生输出,因此破坏了互斥条件
不安全状态有死锁风险,但不一定必然发生死锁;安全状态一定不会死锁
系统处于死锁状态的充分条件是当且仅当该系统的资源分配图是不可完全化简的
银行家算法,
需求矩阵Need = Max - Allocation
工作向量Work = Available - Allocation
死锁的必要条件是循环等待,资源分配图中产生环路表示系统死锁,若资源分配图中没有环路,则循环等待不成立,系统无死锁
为解除死锁就要剥夺资源,考虑使用最经济合理的算法必须考虑:
进程优先级
进程已经运行了多长时间,此进程完成任务还需要多长时间
该进程使用的资源种类和数量,这些资源能否被简单剥夺
为完成其任务还需要多少资源
有多少进程要被撤销
该进程被重启运行的次数
评论栏