读书笔记——计算机基础之操作系统

目录

第一章 计算机系统概述

1.1 操作系统的基本概念

1.1.1 操作系统的概念

操作系统:是控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源分配,进而为用户和其他软件提供的方便接口与环境的程序集合,是计算机中最基本的系统软件;

1.1.2 操作系统的特征

1、并发:多个事件在同一时间间隔内发生;
2、共享:系统中的资源可供内存中多个并发执行的进程共同使用;
3、虚拟:把一个物理上的实体变为若干逻辑上的对应物;
4、异步:由于资源有限,进程以不可预知的速度向前推进;

1.1.3 操作系统的目标和功能

1、资源管理:对处理器、存储器、文件、设备的管理;
2、提供接口:提供命令接口、程序接口(系统调用);

命令接口:给用户使用,分为联机用户接口(用户实时与系统交互)与脱机用户接口(用户列出事务清单,让系统执行,期间不干预);
程序接口:即系统调用,给编程人员使用,在程序中使用其请求系统服务;

3、扩充机器:在裸机上套上一层软件,实现扩充;

1.2 操作系统的发展与分类

阶段 优点 缺点
手工操作阶段 资源利用率低
单道批处理阶段 稍微缓解人机速度差异 仍资源利用率低
多道批处理阶段 并发,资源利用率高 交互性差
分时操作系统 人机交互 及时性、可靠性不强
实时操作系统 可靠性、及时性强 资源利用率降低

每一个操作系统的出现都是为了解决上一个操作系统的缺点;

1.3 操作系统的运行环境

1.3.1 操作系统的运行机制

Q:为什么要分用户态和内核态?什么是特权指令和非特权指令
A:特权指令指一些对系统影响较大的指令,出于安全考虑,应用程序不能执行这些指令,而由操作系统代为执行;当CPU处于用户态时,只能执行非特权指令,当CPU处于核心态时,两种指令都能执行;

Q:什么是原语?
A:原语类似与数据库中的事务,是一连串不可分割的事件序列,处于OS最底层,最接近硬件,运行时具有原子性(一气呵成),一般运行时间短,调用频繁;

1.3.2 中断和异常

中断:即外中断,指CPU执行指令以外的事件发生,如I/O中断,时钟中断;
异常:即内中断、陷入,指CPU执行指令内部发生的事件,如非法操作码(欲执行特权指令)、地址越界、算术溢出、缺页、trap等;

Q:为什么要引入中断?
A:提高并发度,使I/O设备与处理器并行运行;没有中断以前,CPU需要轮询通道(通道是一种硬件),已确认其工作是否完成,此时CPU无法去执行别的进程;当引入中断后,在通道完成工作后向CPU发出中断请求,CPU响应中断处理,在此之前的时间,CPU可以运行别的进程,不必轮询通道;

在这里插入图片描述

处理流程 实现功能
1、关中断 使CPU不响应更高级中断源的中断请求,完整地保护现场
2、保存断点 保存原来程序的程序计数器(PC,即下一条指令的地址),保证中断服务程序执行完后能恢复并执行现行程序
3、引出中断服务程序 取出中断向量 (即中断服务程序的入口地址) 送入程序计数器PC
以上操作由中断隐指令完成
4、保存现场和屏蔽字 保存程序状态字寄存器PSWR和某些通用寄存器(由OS保存)的内容;
5、开中断 此时已进入中断程序,允许更高级中断请求得到响应
6、执行中断服务程序 执行具体中断请求操作
7、 关中断 保证恢复现场和屏蔽字时不被中断
8、恢复现场和屏蔽字 将现场和屏蔽字恢复到原来的状态
9、开中断、中断返回 中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,继续执行

1.3.3 系统调用

系统调用:操作系统提供给用户的接口,当用户程序执行任何与资源有关的操作,或者请求操作系统为其服务,都必须通过系统调用向系统提出请求,由OS代为完成;

比如:用户态下,A程序欲执行 read操作(特权指令),必须向OS提出read系统调用,此时 用户态->内核态,操作系统执行完后,返回调用的A程序,此时内核态->用户态;

Q:A程序如何向OS请求服务?
A:A程序欲执行read操作,但它是特权指令,所以A程序会发生异常,即A程序主动执行陷入指令(又称访管指令 或者 trap指令),让出CPU的使用权,并请求系统为其服务,此时由用户态转变为内核态,因为特权指令只能由操作系统在内核态中执行;

1.4 操作系统的体系结构

两种体系结构 描述 优点 缺点
大内核 主要功能模块作为一个整体运行在内核态 性能高 复杂度高,不稳定
微内核 只将内核中最基本的功能保留在内核,其他移到用户态执行 可靠、优化空间大 开销大(频繁切换状态)

1.5 Notice

第二章 进程管理

2.1 进程与线程

2.1.1 进程的概念及特征

Q:为什么要引入进程?
A:程序这种静态的概念无法描述它在并发运行过程中的状态,所以引入进程,更好地描述和控制程序地并发执行,实现OS的并发性和共享性;

进程:进程是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配和调度(未引入线程前)的一个独立单位;

特征:
1、动态性:进程是动态产生、变化和消亡的,动态性是进程最基本的特征;
2、并发性:进程之间并发执行,提高资源利用率;
3、独立性:进程作为一个独立的单位参与运行,独立获得资源和调度;
4、异步性:进程执行的间断性,以不可预知的速度向前推进;
5、结构性:进程=PCB+程序段+数据段;

2.2.2 进程的状态及转换

状态:
1、创建态:创建PID->创建PCB,填入信息,申请资源->转换为就绪态
2、就绪态:进程在就绪队列中等待CPU的执行;
3、运行态:进程正在CPU上执行;
4、阻塞态:因等待某一事件发生 or 申请某一资源 而被阻塞;
5、结束态:进程结束运行,释放资源和内存;

重要的状态转换:
就绪态->运行态:进程经调度后,获得处理机资源,即可以在CPU上执行;
运行态->就绪态:被其他进程(高优先级或者短进程)抢占,或者时间片用完;
运行态->阻塞态:等待某一事件的发生 或者 申请某一资源;
阻塞态->就绪态:等待事情发生或者资源已申请到;

2.2.3 进程控制

进程控制包括:进程创建、进程终止、进程阻塞、进程唤醒、进程切换;
大概流程:
1、根据进程的PID找到进程;
2、对进程执行相关操作,并更改PCB中的信息;
3、因进程的状态已改变,所以要将进程挂在所对应的队列;

2.2.4 进程组织

进程=PCB + 程序段 + 数据段

PCB:进程控制块,用于存放进程的相关信息,是进程存在的唯一标识;
程序段:即构成该进程的程序代码段;
数据段:即进程所使用 or 依赖 or 产生的数据;

2.2.5 进程通信

三种方式
1、共享存储:两进程通过中间的共享空间实现通信;
2、消息传递:直接通信方式指消息直接送到对方的消息缓存队列上;间接通信方式指通过中间的信箱进行通信;
3、管道通信:类似于共享存储,但管道为半双工通信,大小固定一般为4KB,满了才能读,空了才能写;

2.2.6 线程与多线程

线程:是进程中的一个实体,相当于一个轻量级进程,是被系统独立调度和分配的单位;

Q:为什么要进入线程?
A:提高系统并发性能,降低开销;

Q:进程与线程的区别?

进程 线程
调度 未引入线程时,进程是系统独立调度的单位 引入线程后,线程是系统独立调度和分配的单位
资源 进程始终是系统资源分配的单位 同一进程内各线程共享进程资源
并发性 仅进程间并发执行 进程间和线程间皆可并发运行,更好的并发性
系统开销 进程切换时开销大 线程是轻量级进程,同一进程内线程切换时开销小
地址空间 各进程拥有独立的地址空间 线程无独立的地址空间
通信 进程间通信要使用系统调用 同一进程内各线程直接通信

Q:为什么多对一模型中,任意一个用户级线程在使用系统服务时阻塞则会造成整个进程阻塞?
A:因为用户级线程对操作系统透明,OS不知道它的存在,当任意一个用户级线程被阻塞,OS会认为那个内核级线程的接口被阻塞,从而使整个进程阻塞;

2.2 处理机调度

2.2.1 调度的概念

处理机调度:对处理机进行分配,从就绪队列中按照一定调度算法选择一个进程,并将处理机分配给它运行,实现进程的并发执行;

调度的层次:

调度层次 任务 调用频率
作业调度(高级调度) 将外存的作业调入内存并分配资源,使它们能够竞争处理器资源
内存调度(中级调度) 将内存中暂时不能运行的进程调入外存,称挂起;将外存中已具备条件的进程调入内存
进程调度(低级调度) 内存中进程的调度,即在就绪队列中选择某一进程为其分配处理机运行

Q:为什么要进行处理机调度?
A:进程在运行时若阻塞(等待I/O等),则可将处理机调度给其它进程运行,提高处理机资源利用率;

2.2.2 调度的时机、切换与过程

Q:什么情况下不能进行进程调度与切换?
A:1、处理中断的过程;2、进程在OS内核程序临界区中;3、其他完全屏蔽中断的原子操作中;

2.2.3 调度方式

非抢占式:等正在运行的进程运行完了再切换进程;
抢占式:立即暂停正在运行的进程,转而执行优先级更高的进程;

2.2.4 调度的基本准则

几个衡量指标:
1、CPU利用率:CPU运行时间/总运行时间;
2、系统吞吐量:单位时间内CPU完成作业的数量;
3、周转时间:作业提交到完成之间的时间;
4、等待时间:作业提交到开始运行之间的时间;
5、响应时间:用户提交到系统首次产生响应的时间;

2.2.5 调度算法

调度算法 简单描述 优点 缺点
先来先服务算法 FCFS,先提交的作业先运行 算法简单 效率低,对长作业以及CPU繁忙型作业有利
短作业优先算法 SJF,运行时间短的作业优先运行 平均周转时间最短 对短作业有利,可能导致长作业“饥饿”
优先级调度算法 优先级高的作业优先运行 紧急作业能够优先运行,适用于分时、实时操作系统 可能导致优先级低的作业“饥饿”
高响应比优先算法 响应比=(运行时间+等待时间)/运行时间 不会导致饥饿,公平 (不太清楚,可能兼顾各方面,但都不突出)
时间片轮转算法 每个进程只执行时间片大小的时间,往复循环 公平,不会导致饥饿 若时间片大小选择不当,效率降低
多级反馈队列调度算法 同级队列使用时间片轮转算法,上层队列优先级高于下层队列,采用剥夺式 融合前面算法的优点

2.3 进程同步

2.3.1 同步的基本概念

Q:为什么引入进程同步?
A:为了协调并发进程之间的相互制约关系;

同步:亦指直接制约关系,指为完成某种任务而建立的两个or多个进程,这些进程因需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系;
互斥:亦指间接制约关系,指当一个进程进入临界区使用临界资源时,另一个进程必须等待,直到占用临界资源的进程退出临界区后,才允许去访问此临界资源;
临界资源:一次仅允许一个进程使用的资源称为临界资源,如打印机;
临界区:进程中访问临界资源的那段外码;

互斥的四个准则:
空闲让进;
忙则等待;
优先等待;
让权等待;

2.3.2 信号量

Q:为什么引入信号量机制?
A:因为软硬件方法均无法实现让权等待,从而导致有些进程“饥饿”;

Q:如何使用信号量解决同步问题?

semaphore full=0;
process A:      ProcessB:
 	action1;       P(full);
	V(full) ;      action2;
此时进程B必须在进程A执行完action1后才能执行action2;

Q:如何使用信号量解决互斥问题?

依次使用P、V操作夹紧要使用互斥资源的那个行为;

2.3.3 管程

管程:管程是由一组数据及定义在这组数据上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程;

管程就类似于C++中的类,数据对应成员变量,操作对应成员函数;

管程组成:
1、管程内的数据说明;
2、对数据结构操作的一组过程;
3、对数据初始化的语句;

管程的基本特性:
1、管程内的数据只能被管程内的过程所访问;
2、一个进程只有调用管程内的过程才能访问管程内的数据;
3、每次仅允许一个进程在管程内执行某个过程

2.3.4 经典同步问题

1、生产者-消费者问题;
2、读者-写着问题;
3、哲学家进餐问题;
4、银行服务问题;
5、吸烟者问题;

2.4 死锁

2.4.1 死锁的概念

死锁:指多个进程因竞争相互所持有的资源所导致的一种相互等待的现象,若无外力作用,这些进程都无法向前推进;

Q:为什么会产生死锁?
A:多道程序系统中,多个程序并发执行改善了系统资源的利用率,提高了系统的处理能力,但同时也会带来的不同进程间的资源分配问题,若资源分配不当或者进程推进顺序不当,就会引发一系列问题;

死锁产生的原因:
1、系统资源竞争;
2、进程推进顺序非法;

死锁产生的必要条件:
1、互斥条件;
2、不可剥夺条件;
3、请求并保持条件;
4、循环等待条件;(每个资源只有一个的循环等待链会导致死锁)

2.4.2 死锁预防与避免

死锁的预防:理论上破坏四个必要条件中的一个即可,但只有破坏请求并保持条件 或者 循环等待条件才合理,破坏请求与保持条件意味着只有一次性分配完进程所需的全部资源,该进程才得以执行,这样会造成资源浪费,利用率低;破坏循环等待条件可采用资源顺序分配法,但特殊情况下会使程序员编程困难以及资源浪费;

死锁的避免:银行家算法,假设分配其所需资源,然后对系统安全状态评估,若安全,则完成分配,若不安全,则不分配;

2.4.3 死锁检测和解除

死锁检测:
资源分配图:化简得到孤立的结点;

死锁定理:S为死锁仅当S状态的资源分配图不可完全简化;

死锁解除:
1、资源剥夺法;
2、撤销进程法;
3、进程回退法;

2.5 Notice

第三章 内存管理

3.1 内存管理概念

3.1.1 内存管理基本原理和要求

Q:为什么引入内存管理?
A:多道批处理系统中,由于并发性,程序间需要共享主存,因此操作系统就必须对内存空间进行合理划分和有效的分配;

内存管理的功能:
1、内存空间的分配和回收;
2、地址转换;
3、内存空间的扩充;
4、存储保护;

编辑代码 -> 编译 得到目标模块 ->链接 将目标模块组装成装入模块(可执行程序) ->装入 将装入模块装入内存运行;

程序链接的三种方式:
1、静态链接:程序运行前,将目标模块链接成可执行程序,不再拆开;
2、装入时动态链接:一边装入一边对目标模块链接;
3、运行时动态链接:在程序运行时需要该目标模块才对该目标模块链接,便于修改和更新,实现目标模块的共享;
程序装入的三种方式:
1、绝对装入:编译时产生绝对地址(直接对应内存的物理地址),不需要地址转换,只是用单道程序环境;
2、静态重定位:编译时采用逻辑地址,对目标程序的指令和数据修改 (重定位)后,进行装入(装入后即为物理地址);因为不是动态的,
             所以一个作业只有分配给它全部内存,才能装入,一旦装入在整个运行期间无法移动和动态申请空间;
3、动态重定位:装入内存后的所有地址均为相对地址,即可以将程序分配到不连续的存储区,但需要硬件-重定位寄存器的支持;
              程序运行之前只需装入部分代码即可运行,运行期间可动态申请内存空间,实现共享、虚拟;

地址重定位:将逻辑地址转换为物理地址的过程;

内存保护:
1、CPU中设置一对上、下限寄存器,把每次访问的地址与两个寄存器的值相比,判断是否越界;
2、重定位寄存器+界地址寄存器;界地址寄存器的值用于比较,判断是否越界;重定位寄存器的值用于相加(物理地址=逻辑地址+重定位寄存器的值),最终得到物理地址;

3.1.2 覆盖和交换

覆盖:内存连一个进程都放不下,则采用覆盖技术;将内存分为固定区和覆盖区,需要一个不在内存中的段时,从外存调入至覆盖区;内存中能够更新的只有覆盖区的段,固定区的段常驻内存;

交换:把处于等待状态的程序从内存移到外存–换出,再把一个准备好的程序从外存调入内存–换入;在不同进程间进行;

3.1.3 连续分配管理方式

连续分配方式 描述 优点 缺点
单一连续分配 内存分系统区和用户区,用户区为可使用的内存空间,内存一次只放入一道程序 简单、无外部碎片,可采用覆盖技术 只能用于单用户、单任务的操作系统中,有内部碎片,存储器利用率低
固定分区分配 将内存空间划分为若干固定大小(大小可相等 可不等)的分区,每个分区只装入一道作业 无外部碎片 ,简单 有内部碎片,存储器利用率低
动态分区分配 进程装入内存时,根据进程大小动态建立分区,使其大小刚好适合进程需要 无内部碎片 有外部碎片,可采用紧凑技术,开销大

动态分区分配算法:
1、FF 首次适应算法 :分区按地址递增排序,先使用满足要求的地址小的分区;
2、BF 最佳适应算法:分区按容量递增排序,先使用满足要求的容量小的分区;
3、WF 最坏适应算法:分区按容量递减排序,先使用满足要求的容量大的分区;
4、NF 邻近适应算法:即循环首次适应算法,从上次查找结束的位置开始查找;

3.1.4 非连续分配管理方式

一、基本分页存储管理方式:
进程中的 大小等于 内存中的页框 大小等于 外存中的 L;
地址结构 A = 页号P + 页内偏移量W;
地址结构决定虚拟内存的寻址空间大小;

地址变换:
1、计算页号P = A/L ,页内偏移量W=A%L;
2、比较页号P与页表长度M,若P>=M,则越界;
3、页表中页号P所对应的页表项地址 = 页表始址F+页号*页表项长度;得到对应的物理块号B;
4、物理地址E=B * L + W,根据物理地址访存;

Q:为什么引入快表和多级页表?
A:未引入快表和多级页表的分页存储管理方式存在两个问题:每次访存都要进行地址映射,耗时;页表不能太大,否则利用率降低;

快表TLB:是单独的寄存器,根据局部性原理,地址映射之前先访问快表,快表命中,一次访存;快表未命中再访问页表(页表在内存),将此次映射写入TLB,需两次访存;

多级页表:页表套页表,套娃操作,解决页表占用内存过大问题,但n级页表通常需要n+1次访存;

二、基本分段式存储管理:

段内要求连续,段间不要求连续;
地址结构 = 段号 S + 段内偏移量 W;
段表项结构 = 段号(隐藏) + 段长 + 段内基址;

纯代码/可重入代码:不能修改的代码称为纯代码,它不属于临界资源;用于段的共享和保护,当一个作业正从共享段中读取数据时,必须防止另一个作业修改次共享段中的数据;

Q:分页式和分段式的区别?
A:分页管理是从计算机角度考虑,对用户透明;分段管理从程序员和用户角度考虑,满足方便编程和动态增长;段式管理不能通过一个整数来确定对应的物理地址,因为每个段的长度不一,只能显示给出,它管理的地址空间是二维的,而分页式是一维的;

三、段页式管理方式:

逻辑地址结构=短号S + 页号P + 页内偏移量W;
一个进程中,段表只有一个,页表可能有多个;
进行一次访问需三次访存,地址空间也是二维的;

3.2 虚拟内存管理

3.2.1 虚拟内存基本概念

Q:为什么要引入虚拟内存?
A:传统内存管理方式中,作业必须一次装入内存才可运行,且装入后一直驻留在内存中,降低资源的利用率;

虚拟内存:程序装入时,只装入一部分,运行时需要某一不在内存存储单元,再将其调入or置换入,系统好像给用户提供了一个比实际内存大得多的存储器;

原理:
时间局部性:访问页A后,短时间内可能再次访问页A;
空间局部性:访问页A后,短时间内可能会访问与A相邻的页面;

虚拟内存的实现必须基于离散分配的内存管理方式

3.2.2 请求分页管理方式

页表增加字段:
状态位 :又称合法位,存在位,标志该页是否已调入内存;
访问字段A:本页在一段时间内的访问次数;
修改位:标志是否修改;
外存地址:该页在外存对应的物理块号;

缺页中断:属于内中断(异常);

地址变换机构:

在这里插入图片描述

3.2.3 页面置换算法

最佳置换算法:向后看;
FIFO置换算法;
LRU置换算法:向前看;
CLOCK置换算法以及改进版的CLOCK:先找0,0,再找1,0,扫描时置访问位为0(改进版的在第二轮置0);

3.2.4 页面分配策略

驻留集:给一个进程分配的物理页框的集合

三种页面分配策略:

分配策略 描述 特点
固定分配局部置换 每个进程分配的物理块个数一样,缺页时置换 难以确定分配的物理块的数目,太大,并发度不高;太小,则频繁缺页;
可变分配全局置换 每个进程分配一定的物理块,同时OS维持空闲物理块队列,需要时分配 盲目给进程增加物理块,降低并发度
可变分配局部置换 每个进程分配一定的物理块,OS也维持空闲物理块队列,频繁缺页时分配物理块,缺页频率较低时收回物理块 开销大,但资源利用率高,维持并发度

调入页面时机:
1、预调页;
2、请求调页策略;

从何处调页:
1、足够的对换区
2、UNIX,先全部从文件中调入,再把换出的页放入对换区;

3.2.5 抖动

抖动/颠簸:刚刚换出(换入)的页面马上又换入(换出)主存,频繁的页面调度行为;

3.2.6 工作集

工作集:某段时间间隔内,进程要访问的页面集合;

一般驻留集大小要大于工作集大小;

3.2.7 地址翻译

TLB(未命中) -> 页表 -> Cache -> 主存 ->外存

3.3 Notice

第四章 文件管理

4.1 文件系统基础

4.1.1 文件的概念

文件:以计算机硬盘为载体的存储在计算机上的信息集合;

文件的打开:
大部分系统要求首次使用文件时,使用 系统调用open 将指明文件的属性(FCB)包括该文件在外存上的物理位置,从外存复制到内存打开文件表的一个表目中,并将表目的编号(即索引、文件描述符)返回给用户;在open调用完成后,操作系统对该文件的任何操作都不再需要文件名,只需要open操作返回的指针;

4.1.2 文件的逻辑结构

文件的逻辑结构是从用户的观点出发看到的文件的组织形式;而文件的物理结构是从实现观点出发看到的文件在外存上的存储组织形式

文件的逻辑结构分两种:
1、无结构文件(流式文件):以字节为单位,如源程序文件、目标代码文件等;
2、有结构文件:

有结构文件分类 简单描述 优点 缺点
顺序文件 记录定长,顺序存储或者链式存储 对记录进行批量操作,顺序文件效率较高,只有顺序文件才能存储在磁带上 增删改单条记录的操作开销比较大
索引文件 可建立索引表加快查找速度,索引表本身是定长的 查找速度快 需要一定的存储空间来存放索引表,记录数量变化时,索引表也要同步改变
索引顺序文件 将顺序文件中的所有记录分成若干组,为这些组建立一索引表,表项指向每组的第一条记录 进一步提高存取速度 同样也增加了空间消耗,维护索引顺序表也要开销
散列文件(hash) 通过散列函数转换的键值决定记录的物理地址,没有顺序的特性 极高的存取速度 会存在冲突,即不同关键字的散列函数值相同;

4.1.3 目录结构

目录:从用户的观点看,目录为用户(应用程序)所需要的文件名和文件之间提供一种映射;从系统的观点看,目录包含有关文件的信息,如文件属性、位置、权限等;

文件控制块 FCB:存放控制文件需要的各种信息的数据结构;

文件目录:文件控制块的有序集合;一个FCB就是一个文件目录项,创建一个新文件,系统自动分配一个FCB放于文件目录;
索引节点:
UNIX采用文件名和文件描述符分开的方法,文件描述信息单独形成一个称为索引节点(i节点)的数据结构;文件目录中每个目录项仅由文件名和指向该文件所对应的i节点的指针构成;

附上以前手绘笔记:
在这里插入图片描述

目录结构:

目录结构 描述 优点 缺点
单级目录结构 整个系统只建立一张目录表,每个文件占一个目录项;建立一个新文件前,必须先确保不重名; 实现按名存取 查找速度慢、不允许重名、不便于文件共享
多级目录结构 通过路径名标识文件,可以是绝对路径,也可以是相对路径 层次清晰、解决不同用户的重名问题、有效地对文件进行管理和保护 按路径名查找降低查找速度,不便于文件共享
无环图目录结构 在多级目录这种树形结构上增加了指向同一节点的有向边 便于实现文件共享(设置共享计数器) 对文件的管理更加复杂

4.1.4 文件共享

共享方式 描述 特点
基于索引节点的共享方式(硬链接) 文件目录中设置文件名及指向同一索引节点的指针,索引节点中还包括一个链接计数count,表示当前共享此文件的用户数目,count==0时才能删除文件 开销相对软链接较小
利用符号链实现文件共享(软链接) 类似于Windows的快捷方式,通过一个Link型文件记录所共享文件的存放路径 每次访问都要按文件路径一次查找目录,开销大

4.1.5 文件保护

文件保护由以下几种方式:
1、口令保护;
2、加密保护;
3、访问控制;

4.2 文件系统实现

4.2.1 文件系统层次结构

在这里插入图片描述

举例:用户要查看文件F的内容
1、对操作系统发出命令(通过调用接口)2、OS得到命令后,查找目录以查找文件F的索引信息,可能是FCB,也可能是索引节点;
3、通过目录找到文件FCB后,查看文件FCB上的信息,确认该用户是否由查看权限;
4、通过验证后,开始寻址,经逻辑文件系统和文件信息缓冲区得到逻辑地址;
5、将逻辑地址映射为物理地址;
6、找到物理地址对应的存储空间对其进行操作;

4.2.2 目录实现

目录实现本质是为了查找;

两种方式:
1、线性列表;
2、哈希表;

4.2.3 文件实现

文件分配方式

文件分配方式 简单描述 优点 缺点
连续分配 每个文件在磁盘上占有一组连续的块 支持顺序访问和随机访问、实现简单、存取速度快 文件长度不宜增加,增删改效率低,且会产生外部碎片
隐式链接分配(默认的链接分配方式) 离散分配,除最后一个盘块,其他每个盘块都有指向下一个盘块的指针,对用户透明 磁盘空间利用率高 只能通过指针顺序访问、且盘块会消耗一定空间来存放指针
显式链接分配 将链接文件各物理块的指针从物理块的末尾提取出来,显式地存放在一个文件分配表FAT中 支持顺序访问和随机访问 文件分配表占用一定地内存空间
索引分配 把每个文件的所有的盘块号都集中放在一起构成索引块(表),目录条目包括索引块的地址 支持随机访问,且没有外部碎片 索引块的分配,增加了系统存储空间的开销

注意随机访问指可以直接访问某一物理块;

索引分配包括直接索引、多层索引、混合索引(i节点);
i节点共设置13个地址:0-9为直接索引,10是一级间址,11是二级间址,12是三级间址;

m级索引需要访问m+1次磁盘;

文件存储空间管理
一个文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分离的;

空闲块的分配和管理主要有以下几种方式:
1、空闲表法:每个表项:序号 + 第一个空闲盘块号 + 空闲盘块数;
2、空闲链表法:空闲盘块链将磁盘上所有空闲空间以盘块为单位拉成一条链;
3、位示图法:利用二进制的一位来表示磁盘中一个盘块的使用情况;
4、成组链接法:顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区保存另一个顺序空闲扇区的地址(比较难理解,查相关资料)

4.3 磁盘组织与管理

4.3.1 磁盘的结构

每个磁道存储固定量的信息,所以磁道中的扇区密度从最外道向里增加,磁盘存储能力受限于最内道的最大记录密度;
扇区是磁盘可寻址的最小存储单位;
总时间 = 寻找时间(找到磁道) + 延迟时间(定位某一扇区) + 传输时间(向磁盘读写所需要的时间) ;

4.3.2 磁盘调度算法

1、FCFS算法;
2、SSTF算法;
3、SCAN算法;
4、C-SCAN算法;

注意使用对盘面扇区交替编号,错位命名来减少延迟时间;

4.3.3 磁盘的管理

磁盘初始化:
1、物理分区(低级初始化):磁盘存储数据之前,分成多个扇区;
2、逻辑格式化(创建文件系统):物理分区后,操作系统将初始的文件系统数据结构存储到磁盘上,包括空闲和已分配的空间以及一个初始为空的目录;

4.4 Notice

第五章 I/O管理

5.1 I/O管理概述

5.1.1 I/O设备

按信息交换的单位分类:
1、块设备:信息存取以块为单位,传输效率高,可寻址(可随机读写任意块),如磁盘;
2、字符设备:信息存取以字符为单位,传输效率低,不可寻址,如打印机;

5.1.2 I/O控制方式

设备管理的主要任务之一是控制设备和内存or处理机之间的数据传送;

I/O控制方式 描述 优点 缺点
程序直接控制方式 读取以字位单位,每读入一个字,CPU都要对外设进行循环检查,直到确定该字已在I/O控制器的数据寄存器中 简单且易于实现 CPU只能和设备串行工作,CPU利用率低
中断驱动方式 允许I/O设备主动打断COU的运行并请求服务,从而解放CPU 提高CPU利用率,CPU可与设备并行工作 但由于传输单位仍是字,即每传输一个字都要经过CPU,利用率仍低
DMA方式 在I/O设备和内存之间开辟直接的数据交换通路,彻底解放CPU,基本传输单位是数据块,仅在传送一个数据块的开始和结束时才需要CPU的干预 提高CPU的利用率 需要为每次数据块传送做大量工作
通道控制方式 是DMA的发展,CPU仅对一组数据块的操作进行干预,实现CPU、通道和I/O设备的并行运行 进一步提高CPU利用率

5.1.3 I/O子系统的层次结构

四个层次:
1、用户层I/O软件:实现与用户的接口,用户软件通过一组系统调用来获取操作系统服务;
2、设备独立性软件:执行所有设备的公有操作:分配与回收,逻辑设备名到物理设备名的映射;
3、设备驱动程序:具体实现系统对设备发出的操作指令,驱动I/O设备工作;
4、中断处理程序;
5、硬件设备:硬件设备=机械部件(设备本身) + 电子部件(控制器)

设备控制器:
在这里插入图片描述

5.2 I/O核心子系统

5.2.1 I/O子系统概述

Q:为什么要引入I/O子系统?
A:由于I/O种类繁多,功能和传输速率差异大,为方便统一管理,实现设备与CPU的并行运行,引入I/O子系统,其提供的服务有I/O调度、设备分配与回收、假脱机、设备保护等;

5.2.2 I/O调度概念

i/o调度:确定一个好的顺序来执行I/O请求;

5.2.3 高速缓存和缓冲区

一、高速缓存(Disk Cache)

本质:利用内存中的部分存储空间来暂存从磁盘中读出的信息;逻辑上属于磁盘,物理上则是驻留在内存中的盘块;

高速缓存有两种形式:
1、内存中开辟一个单独的存储空间作为磁盘高速缓存,大小固定;
2、另一种把未利用的内存空间作为缓冲池,供请求分页系统和磁盘I/O时共享;

二、缓冲区(Buffer)

特点:缓冲区非空时不能写入,未满时不能读取;比如写一个C程序,然后在终端输入时,把用户输入的数据存在缓冲区,待缓冲区满 或者用户输入完毕时把数据传入;

设磁盘把一块数据输入缓冲区的时间为T,该缓冲区中的数据传到用户区的时间为M,CPU对这一块数据的处理时间为C,
1、单缓冲:处理每块数据的用时为 max(C,T) + M;
2、双缓冲:处理每块数据的用时为 max(C+M,T);
3、循环缓冲;
4、缓冲池:

高速缓存和缓冲区的区别:

存放数据 目的
高速缓存 存放的都是低速设备上的一些复制品(经常要访问的数据) 若未命中,则高速设备需要再访问低速设备
缓冲区 存放的是低速设备传递给高速设备的数据(或相反),这些数据在某一方里不一定有; 高速设备和低速设备的通信都要经过缓冲区

5.2.4 设备分配与回收

在这里插入图片描述
设备分配方式:

描述 优点 缺点
静态分配 作业开始前,系统一次性分配给作业所要求的所有设备、控制器 不会出现死锁 设备使用率低
动态分配 进程执行过程中,根据其所需动态分配 提高设备利用率 分配算法不当则会导致死锁

Q:为什么要实现设备独立性(建立逻辑设备表)?
A:为了提高设备分配的灵活性和设备的利用率,方便实现I/O重定向,引入设备独立性,即应用程序独立于具体使用的物理设备

逻辑设备表LUT表项:逻辑设备名、物理设备名、设备驱动程序入口地址;

5.2.5 SPOOLing技术(假脱机)

在这里插入图片描述

5.3 Notice

猜你喜欢

转载自blog.csdn.net/wyll19980812/article/details/105916152
今日推荐