第一章、操作系统概述
- 操作系统的特性:并发性(同时处理多个任务的能力),共享性(为多个并发任务提供资源共享),不确定性(具有处理随机事件的能力)。
- 操作系统功能:
- 进程管理:处理机分配,处理机管理,CPU管理。具体为进程控制(创建,暂停,唤醒,撤销),进程调度(调度策略,优先级),进程通信(进程间通信)。
- 存储管理/内存管理:为应用程序运行分配和管理所需的内存,支持多道程序设计。具体为内存分配,内存共享,内存保护,内存扩充,虚拟内存。
- 设备管理:设备的分配和回收,设备的驱动机制/传输机制,为应用提供统一接口访问设备,高效存取/设备缓冲机制。
- 文件管理:为用户提供统一的文件存取接口,高效组织存储空间,提高存取效率,实现信息共享和存取控制。具体为文件用户接口,存储空间管理,文件的操作,目录的操作,存取权限管理。文件是设备的抽象。
- 操作系统性能/评价指标:
- 吞吐率:在单位时间内处理信息的能力。
- 资源利用率:设备(CPU)使用的频度。
- 响应能力:从接受数据到输出结果的时间间隔。
- 可移植性:改变硬件环境仍能正常工作的能力,即代码修改量。
- 可靠性:发现、诊断和恢复系统故障的能力。
- 操作系统发展的四个典型阶段:
- 手工操作系统(40年代-50年代初)
- 单道批处理系统(50年代)
- 多道批处理系统(60年代初)
- 分时操作系统(60年代-至今)
- 操作系统:操作系统引论 详细讲述了单道批处理系统,多道批处理系统和分时操作系统。
- 单道批处理系统,多道批处理系统,分时系统比较
- 多道批处理系统和分时系统的比较
- 茶余饭后:计算机与云计算发展编年史 1725-2023
- 操作系统的逻辑结构(OS的设计和实现思路)
- 整体式结构(单体式结构,宏内核结构):以模块为基本单位构建,每个模块具有特定的功能
- 层次式结构:功能模块按调用次序排若干层,各层单向依赖或单向调用。
- 微内核结构(客户/服务器结构):操作系统=微内核+核外服务器
第二章、操作系统依赖的基础硬件
- 计算机主要部件:CPU,内设,外设
- 三总线:地址总线,数据总线,控制总线
- CPU结构:控制单元,运算单元,寄存器组
- CPU的态(CPU的工作模式,对资源和指令使用权限的描述):
- 核态(Kernel mode):能够访问所有资源和执行指令,管理程序/OS内核
- 用户态 (User mode,目态):仅能访问部分资源,其他资源受限
-
管态 (Supervisor mode):介于核态和用户态之间
-
操作系统依赖的最基本硬件:CPU,内存,中断,时钟。
-
存储体系:寄存器,高速缓存(cashe),主存,磁盘。
-
中断基本概念:
- 中断定义:指CPU对突发的外部事件的反应过程或机制。CPU收到外部信号(中断信号)后,停止当前工作,转去处理该外部事件,处理完毕后回到原来工作的中断处(断点)继续原来的工作。
-
中断源 :引起系统中断的事件
-
中断类型:
- 断点:程序中断的地方(将要执行的下一条指令的地址)
- 现场:程序正确运行所依赖的信息集合。(PSW(程序状态字)、相关寄存器、断点)
-
现场的处理 :现场保护(进入 中断服务程序 之前: CPU→ 栈 ),现场恢复(退出 中断服务程序 之后: 栈 →CPU)
-
中断响应过程:识别中断源--保护断点--保护现场--进入中断服务程序--恢复现场--中断返回
- (操作系统)中断机制
- 基本输入输出系统(BIOS)。
- 实模式和保护模式
- 操作系统的启动:
- 初始引导:把OS内核装入内存并使之开始工作接管计算机系统,引导程序为MBR(Master Boot Record)
- 核心初始化:OS内核初始化系统的核心数据。比如:各种寄存器的初始化,存储系统和页表初始化,核心进程构建。
-
系统初始化 :为用户使用系统作准备,使系统处于 待命状态 。主要工作:初始化文件系统,初始化网络系统,初始化控制台,初始化图形界面。
- MBR(主启动扇区),
- 存放引导代码。
- 占用512个字节(510字节+AA55h),最后两个字节是MBR结束标志。
- 提供BootLoader或启动管理。
- PBR:分区/次引导记录
- Linux操作系统的生成:获取内核源码--配置内核--重新编译新内核--编译和安装模块--配置启动选项
第三章、用户界面
- 操作系统——操作系统用户界面
- 用户界面定义:操作系统提供给用户控制计算机的机制(用户接口)
- 用户界面类型:操作界面和系统调用(System Call,系统功能调用,程序界面)
- 操作界面:分为图形用户接口,操作命令,批处理与脚本程序
- 批处理与脚本程序:在控制台环境下自动处理一批命令。Windows:批处理程序(bat/PowerShell)。Linux:Shell脚本程序。
- Bash主要功能之重定向:主要是标准输入/输出的重定向,在linux虚拟机上实践一下会好很多
- Bash主要功能之管道:
在虚拟机里实践一下
因为这个学期第一次os实验有4个,第二次os实验有7个
- 系统调用(System Call,System Service Call):操作系统内核为应用程序提供的服务/函数。特点:内核实现,存取核心资源或硬件,调用过程产生中断
第四章、进程管理
- 操作系统——进程管理
- 进程定义:进程是程序在某个数据集合上的一次运行活动。
- 进程是系统中共享CPU的最小的并发单位,是资源分配的基本单位。
-
进程的特征:
-
动态性:进程是程序的一次执行过程,动态产生/消亡
-
并发性: 进程可以同其他进程一起向前推进
-
异步性: 进程按各自速度向前推进
-
独立性:进程是系统分配资源和调度CPU的单位
- 进程与程序的区别:
- 动态与静态。进程是动态的:程序的一次执行过程;程序是静态的:一组指令的有序集合
-
暂存与长存。进程是暂存的:在内存驻留。程序是长存的:在介质上长期保存。
-
程序和进程的对应。一个程序可能有多个进程。
- 进程的状态:
-
运行状态(Running)。进程已经占有CPU,在CPU上运行。
-
就绪状态 (Ready)。具备运行条件但由于无CPU,暂时不能运行
-
阻塞状态(Block)。 因为等待某项 服务 完成或 信号 来到而不能运行的状态。例如等待:系统调用,I/O操作,合作进程的服务或信号…
- Linux进程状态:可运行,睡眠,僵死,暂停。
- 进程控制块(Process Control Block,PCB):描述进程的状态、资源、和相关进程的关系。
PCB是进程的标志,创建进程时创建PCB,进程撤销后PCB同时撤销。
- task_struct:Linux 内核中表示进程和线程的关键数据结构,包含了各种信息,如状态、调度信息、文件描述符等。
- 进程控制:在进程生存期间,对其全部行为的控制。有以下四个典型的进程控制。
- 进程创建:创建一个具有指定标识(ID)的进程。
- 进程撤销:撤销一个指定的进程,收回进程所占有的资源,撤销该进程的PCB。进程撤销的时机/事件:正常结束,异常结束,外界干预。
- 进程阻塞:停止进程执行,变为阻塞。阻塞进程的时机/事件:请求系统服务,启动某种操作,新数据尚未到达,无新工作可做。
- 进程唤醒:唤醒处于阻塞队列当中的某个进程。引起唤醒的时机/事件:系统服务由不满足到满足,I/O完成,新数据到达,提出新请求。
- 原语:由若干指令构成的具有特定功能的函数。具有原子性,其操作不可分割。
- Linux进程控制:
- 创建进程--fork() linux--fork()详解
关于fork的返回值:pid = 0(在子进程中),pid>0(在父进程中,为子进程id),pid= -1(出错)
在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。可以通过fork返回的值来判断当前进程是子进程还是父进程。
2. exec函数族:
-
功能:在子进程空间运行指定的“ 可执行程序 ”
-
步骤:根据 文件名 找到相应的 可执行程序, 可执行程序的内容填入子进程的地址空间。
- 返回:exec调用成功:进入新进程且不再返回。exec调用失败:继续从调用点向下执行。
3. 进程的阻塞--wait(int &status)函数 Linux中wait()函数
4. 进程的终结--exit(int &status)函数 Linux -- exit()函数、_exit()函数、return的说明与使用
- 线程的定义:线程是进程内创建的可运行模块/指令序列,能执行指定的任务。
进程内可以定义多个线程,线程和进程可以并发运行。
线程是CPU调度和派发的基本单位。
- 线程的意义:
-
线程提高了系统的并发性能。线程的并发粒度比进程更细,更充分地发挥 CPU 的性能。
-
线程的应用成本更低,更灵活 。进程为 线程 提供 资源 和 地址空间 。线程的创建,撤销和管理 成本更低; 线程间通信 更容易,更灵活。
-
大多数操作系统都采用了线程技术。Windows/Linux/ 鸿蒙 / 麒麟 /…
- 创建线程--CreateThread(TaskFunction)函数
- 线程的应用场景:
-
现代操作系统线程模型:
- Linux线程和分类
-
内核线程/Kernel Thread
-
用户线程/User Thread
- 进程VS线程
- 进程互斥的定义:多哥进程共享具有独占性的资源时,必须确保各进程互斥地存取资源,即确保没有任何两个进程同时存取资源。进程内设定特定区域,所有进程互斥地访问这些区域。
- 临界资源:一次只允许一个进程独占访问(使用)的资源。比如上面的共享变量i
-
临界区:进程中访问临界资源的程序段。
-
进程的同步关系:操作系统进程同步 ‘’‘’
- 临界区和临界资源的共享特点 :临界资源的访问具有排他性,并发进程不能同时进入“临界区”
- 访问临界区的方法:
- 硬件方法:硬件同步机制
- 软件方法:锁机制和信号量机制。
- 临界区访问的四个原则:
- 空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立刻进入自己的临界区,以有效利用临界资源。
- 忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
- 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入”死等“状态。
- 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入”忙等“状态。
- 信号灯机制:
- P操作(荷兰语:Passeren通过)原理:
- V操作(荷兰语:Vrijgeven释放)
- PV机制及应用/例题
- PV机制经典同步问题
- Windows同步机制:
第五章、资源分配与调度(死锁)
- 死锁的定义:两个或多个进程无限期地等待永远不会发生的条件的一种系统状态。每个进程都永远阻塞。
- 死锁的另一个定义:在两个或多个进程中,每个进程都已持有某种资源,但又继续申请其它进程已持有的某种资源。
- 操作系统学习(九)死锁
- 死锁的起因:
- 系统资源有限。资源数目不足以满足所有进程的需要,引起进程对资源的竞争而产生死锁。
- 并发进程的推进顺序不当。进程在运行过程中,请求和释放资源的顺序不当,导致进程产生死锁。
- 关于死锁的一些结论:
- 陷入死锁的进程至少是2个(反证:若仅有一个进程死锁)
- 参与死锁的进程至少有2个已经占有资源。
- 参与死锁的所有进程都在等待资源
-
参与死锁的进程是当前系统中所有进程的子集
-
死锁会浪费大量系统资源,甚至导致系统崩溃。
- 死锁的必要条件:
- 互斥条件:资源具有独占性,进程互斥使用资源。
- 不剥夺条件:资源被访问完之前(即在释放前)不能被其他进程剥夺。
- 部分分配条件:进程所需资源逐步分配,需要时临时申请(等待分配)。
- 环路条件:多个进程构成环路:环中每个进程已占用的资源被前一进程申请,而自己所需新资源又被环中后一进程所占用。对于哲学家就餐问题来说,限定最多四个人同时吃饭,就是破坏环路条件。
- 解决死锁的策略:
- 预防死锁:通过设置某些限制条件,破坏死锁四个必要条件中的一个或多个,来防止死锁。
- 避免死锁:在资源的分配过程中,用某种方法分析该次分配是否可能导致死锁?若会则不分配;若不会就分配。
- 检测和恢复死锁:允许死锁发生,但可通过检测机制及时检测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁状态解脱出来。
- 预先静态分配法:进程运行前将所需全部资源一次性分配给它。因此进程在运行过程中不再提出资源请求,从而避免出现阻塞或者死锁。破坏了部分分配条件。
- 有序资源分配法:
第六章、处理机调度(进程调度)
-
调度定义:在队列中按 某种策略 选择 最合适的 对象(执行相应操作)
-
《操作系统》—— 处理机调度算法 讲的非常详细。
-
调度分类:
-
长程调度(宏观调度 / 作业调度)。作业:磁盘-->内存。
-
中程调度(交换调度)。进程:就绪(内存)-->交换空间。
-
短程调度(进程调度)。进程:就绪(内存)-->CPU。
-
I/O调度(设备调度)。进程:阻塞(设备)-->就绪。
- 进程调度的目标(两个量化的衡量指标):
-
周转时间 / 平均周转时间
-
带权周转时间 / 平均带权周转时间
1.先来先服务调度(First Come First Serve):按照作业进入系统的时间先后次序来挑选作业。先进入系统的作业优先被运行。
特点:只考虑作业等候时间,不考虑作业大小(运行时间)。晚来的作业会等待较长时间,不利于晚来但是很短的作业。
2. 短作业优先调度算法(Short Job First):参考运行时间,选取时间最短的作业投入运行。
特点:忽视了作业等待时间,早来的长作业会长时间等待(资源“饥饿”)。
3. 响应比高者优先调度算法:调度作业时计算作业列表中每个作业的响应比,选择响应比最高的作业优先投入运行。
特点:响应比 = 1 + 等待时间 / 运行时间,有利于短作业,有利于等候已久的作业,兼顾长作业。每次调度时重新计算和比较剩余作业的响应比。
4. 优先数调度算法:根据进程优先数,把CPU分配给最高的进程。
- 调度方式:当一进程正在CPU上运行时,若有更高优先级的进程进入就绪,系统如何对待新进程(分配CPU)?
- 非抢占方式:让正在运行的进程继续运行,直到该进程完成或发生某事件而进入“完成”或“阻塞”状态时,才把CPU分配给新来的更高优先级的进程。
- 抢占方式:让正在运行的进程立即暂停,立即把CPU分配给新来的优先级更高的进程。
二者对比:
- Linux进程优先级
- task_struct->counter:进程在当前一轮调度中还能连续运行的时间片数量。counter越大,优先级越高,可获得越多CPU时间
- task_struct->rt_priority:实时进程特有的优先级: rt_priority+1000
- task_struct->policy:进程的调度策略,用来区分实时进程和普通进程SCHED_OTHER(0)||SCHED_FIFO(1)||SCHED_RR(2)
- schedule( )函数:在可运行队列中查找最高优先数进程并把CPU切换给它。
第七章、主存管理
- 存储器功能需求:容量足够大,速度足够快,信息永久保存
- 三级存储体系:内存--辅存--cache。用辅存支援内存,提高容量。用cache支援内存,提升效率。
- 地址映射(地址重定位,地址重映射):把程序中的地址(虚拟地址,虚地址,逻辑地址,相对地址)变换成真实的内存地址(实地址,物理地址,绝对地址)的过程。
- 内存管理:物理地址、虚拟地址、逻辑地址
- 固定地址映射:编程或编译时确定逻辑地址和物理地址映射关系。
特点:程序加载时必须加载到指定的内存区域。容易产生地址冲突,运行失败。 不能适应多道程序环境
- 静态地址映射:程序装入时由操作系统完成逻辑地址到物理地址的映射。保证程序在运行之前所有地址都绑定到主存。
映射方式:物理地址(MA)= 装入地址(BA)+ 虚拟地址(VA)
特点:程序运行之前确定映射关系。程序占用连续的内存空间。程序装入后不能移动,如果移动必须放回原来位置。
- 动态地址映射:在程序执行过程中把逻辑地址转换为物理地址。
映射方式:物理地址MA = 装入基址BA + 虚拟地址VA
装入基址:基址寄存器BAR
- 存储扩充:借助辅存在逻辑上扩充内存,解决内存不足
- 存储保护:保证内存中的多道程序只能在给定区域活动,并且互不干扰。防止访问越界,防止访问越权。
- 单一存储管理:用户区不分区,完全被一个程序占用。
- 分区存储管理:把用户区分为若干大小不等的分区,供不同程序使用。
有固定分区(系统初始化时分区)和动态分区(程序装入时临时分区)两种。
- 固定分区:
特点:运行时分区的大小和位置不变,分区大小不同,适应不同程序需求。
- 动态分区:
- 分区的选择(放置策略)
空闲区表:描述内存空闲区的位置和大小的数据结构
- 首次适应法:空闲区表按首址递增排序,尽可能先利用低地址空间
- 最佳适应法:空闲区表按大小递增排序,尽量先选中满足要求的最小空闲区
- 最坏适应法:空闲区表按大小递减排序,尽量先使用最大的空闲区,仅作一次查找就可找到所要分区。
- 碎片问题:
- 覆盖技术(overlay)
目的:在较小的内存空间中运行较大的程序
- 对换技术(Swapping)
- 页式内存管理,不罗列了,ppt没讲清,不如看基本分页存储管理方式
- 地址映射:虚拟地址(页式地址)→物理地址
- 页表的建立:
- 缺页中断:当程序要访问的目标页面不在内存时,程序将被迫临时中断。
缺页中断的处理:立即将所缺页面装入内存。页面从硬盘拷贝到内存,其中的I/O操作耗时较长。
因此,缺页中断降低了程序实时性。
修改位即所谓的“脏位”。
访问指令的执行过程:
-
缺页(中断)率f = 缺页次数 / 访问页面总次数
-
命中率 = 1 - f
-
页面抖动: 页面在内存和辅存间频繁交换的现象。“抖动”会导致系统效率下降。
-
淘汰策略:
1. 最佳算法(OPT算法,Optimal):淘汰不再需要或最远将来才会用到的页面。
特点:理论上最佳,实践中该算法无法实现。
2. 先进先出淘汰算法(FIFO算法):淘汰在内存中停留时间最长的页面
优点:实现简单:页面按进入内存的时间排序,淘汰队头页面。同时,进程按顺序访问地址空间时抖动较少,缺页率较低。
异常现象:对于一些特定的访问序列,分配页框越多,缺页率越高!
-
影响缺页次数的因素:
-
淘汰算法
-
分配给进程的页框数:页框越少,越容易缺页
- 页本身的大小:页面越小,越容易缺页
- 程序的编制方法:程序的局部性
- 页面的大小选择:
- 快表机制(cache,联想存储器,TLB)
- 二级页表,ppt讲的不够好,看两级页表
- 段式存储管理:把进程按逻辑意义划分为多个段,每段有段名,长度不定。进程由多段组成
- 段表(SMT,Segment Memory Table):记录每段在内存中映射的位置
- 段式系统的虚拟地址:段式虚拟地址VA包含段号S和段内偏移W
- 段式地址映射过程:
-
逻辑地址 VA 分离出 ( S , W );
-
以 S为索引查询段表,检索段号 S ,查询该段 基地址 B 和 长度 L 。
-
物理地址MA = B + W
- 段式管理与页式管理的对比:
-
段页式存储管理:在段式存储管理中结合页式存储管理技术
- 段页式地址:段号S、页号P和页内位移W
-
段页式地址的映射机构:同时采用 段表 和 页表 实现地址映射
-
实模式阶段:计算机加电前一段时间处于实模式。
-
实模式内存空间:20位物理地址,1MB内存空间。分段机制:段地址(16位) :偏移地址(16位)
第八章、设备管理(输入/输出管理)
- 设备类型和特征
按交互对象分类
-
人机交互:显示设备、键盘、鼠标、打印机
-
与 CPU 交互:磁盘、磁带、传感器、控制器
-
计算机间交互:网卡、调制解调器
-
输入设备:键盘、扫描仪
-
输出设备:显示设备、打印机
-
双向设备:输入 / 输出:硬盘、软盘、网卡
-
使用特征:存储设备、输入设备、输出设备
-
数据传输率:低速 ( 键盘 ) 、中速 ( 打印机 ) 、高速 ( 网卡、磁盘 )
-
字符设备:传输的基本单位是 字符 。例:键盘、串口
-
块设备: 传输的基本单位是 块 。例:硬盘,磁盘
-
网络设备:采用 socket套接字接口访问,在全局空间有唯一名字,如 eth0 、 eth1
- 设备管理功能
- 状态追踪:记录设备的基本属性
- 设备分配:按一定策略安全地分配和管理各种设备。
- 设备映射:逻辑设备到物理设备的转换(逻辑名到物理名的转换)
- I/O缓冲区管理:开辟和管理I/O缓冲区,提高读写效率。
- 设备驱动:对物理设备进行I/O操作,把应用对设备的读/写请求转换为对设备I/O操作。
- 缓冲技术作用
-
连接不同数据传输速度的设备 。如CPU(设备驱动)与设备(控制器)之间传输数据, 改进:内存中增加缓冲区
-
协调数据记录大小的不一致。 进程之间 或 CPU与设备之间 的数据记录大小不一致
-
正确执行应用程序的语义拷贝。
- Linux缓冲机制应用:
-
提前读:进程读时,其所需数据已被 提前读 到了 缓冲区 中,不需要启动外设去执行读操作。
-
延后写:进程写时,数据先存在缓冲区,等到 特定事件发生 或 足够时间 后( 已延迟 ),再启动外设完成写入。
- 缓冲的组成:
- Cache:高速缓冲寄存器【CPU ↔ 内存】
- 设备内部缓冲区:外设或I/O接口的内部缓冲区【端口】
- 内存缓冲区:应用广泛,使用灵活【CPU ↔ 接口/外设】,应用开辟 | 内核开辟
- 辅存缓冲区:开辟在辅存上【 暂存内存数据,SWAP】
- 缓冲的实现
- 单缓冲:缓冲区仅有1个单元
- 双缓冲:缓冲区有2个单元
- 环形缓冲:在双缓冲的基础上增加了更多的单元,并让首尾两个单元在逻辑上相连。
- 缓冲池:多个缓冲区,可供若干个进程共享,可以支持输入,也可以支持输出,提高缓冲区利用率,减少内存浪费
- 浅谈设备驱动的作用与本质,有无操作系统Linux设备驱动的区别
- 设备文件:硬件设备作为文件看待,使用文件操作接口来完成设备的打开、关闭、读写和I/O控制等操作。仅字符设备和块设备通过设备文件访问,创建设备文件:mknod。
- 主设备号:标识该设备种类,标识驱动程序主,设备号的范围:1-255,Linux内核支持动态分配主设备号
- 次设备号:标识同一设备驱动程序的不同硬件设备
- 设备分类:
- 独占设备:不可抢占设备(普通外设或资源),使用时独占,释放后才能被其它进程申请到。先申请,后使用(主动)
- 共享设备:可抢占设备(CPU,内存,硬盘),允许多个作业或进程同时使用。不申请,直接用(被动 + 主动)
- 虚拟设备:借助虚拟技术,在共享设备上模拟独占设备。
- 设备分配方法:
- 独享分配:针对独占设备。
- 共享分配:针对共享设备,典型共享设备:硬盘。
- 虚拟分配:
虚拟技术:在一类物理设备上模拟另一类物理设备的技术,通常借助辅存部分区域模拟独占设备,将独占设备转化为共享设备。
虚拟设备:用来模拟独占设备的辅存区域称为虚拟设备,具有独占设备的逻辑特点
输入井:模拟输入设备的辅存区域
输出井:模拟输出设备的辅存区域
-
SPOOLing 系统:
- 预输入程序:控制信息从独占设备输入到辅存,模拟脱机输入的卫星机。
- 输入表:独占设备↔虚拟设备
- 缓输出程序:控制信息从辅存输出到独占设备,模拟脱机输出的卫星机;
- 输出表:独占设备↔虚拟设备
- 井管理程序:控制用户程序和辅存之间的信息交换
第九章、文件系统
- 文件:文件是计算机系统存放信息的一种形式,由若干信息项有序构成。文件具有唯一的文件名,用户通过读写指针来存取文件的信息项。
- 文件分类:
- 按文件的用途:系统文件,库文件,用户文件。
- 按文件的操作权限:只读文件,只写文件,可执行文件,可读可写文件,不保护文件
- 按文件的存储时间:临时文件,永久文件
- 文件系统:管理文件的机构。
- 文件的逻辑结构:
1. 记录式文件:信息项是记录,记录包含若干成员。例如:学生花名册.txt,记录姓名,学号,性别,成绩。
特点:文件头部保存记录长和记录数信息,浪费存储空间
分类:定长记录文件,不定长文件
2. 流式文件:信息项是字节
特点:文件长度就是字节的数量,文件无需额外说明信息或控制信息
- 文件的存取方法:
- 顺序存取:按从前到后的顺序依次对文件信息项进行读/写,直到定位到目标信息项为止。
-
随机存取 /直接访问:直接 定位 到文件目标信息项进行读 /写。适合 流式文件 或 定长记录文件 。
-
文件的物理结构: 文件在存储设备上的存储结构, 强调合理利用储存空间,缩短I/O时间
FAT文件系统:
特点:读取索引文件时应先读取索引表,索引表本身占据额外的存储区域/缺点,支持顺序和随机存取,支持文件动态增长、插入、删除等。实例:ext系列文件系统(inode索引节点文件)
-
磁盘空闲存储块管理方法:
- 文件目录:
文件目录功能:实现“按名存取” :系统根据文件名能找到指定文件。文件目录记录文件的文件名、存放地址以及属性。
目录文件:目录文件是文件目录的实现,由文件目录项构成
- 目录结构:
1. 单机目录:最简单的目录结构,全部文件都登记在同一目录中。
特点:简单、易于理解和实现
缺点:查找速度慢,不允许重名,不便于文件共享
2. 二级目录:第一级称为主目录(MFD),第二级称为子目录或用户目(UFD)。每个用户有一个子目录(用户目录)
优点:解决文件重名的问题,不同用户可以使用相同的名字
3. 树形目录:多级目录结构,二级目录结构的扩充,目录结构如同倒置的树,树根是主目录(根目录),枝结点是子目录,树叶描述文件。
- 文件全名:从根目录到文件为止整个通路上所有目录、子目录和文件的名字用”/”顺序连接构成的字符串称为文件全名。
- 路径名:文件全名中由目录和子目录组成的部分。每个文件都有唯一的路径名
绝对路径名:从根目录直到文件的路径
相对路径名:从指定目录到文件的路径
- 文件属性:指定文件的类型、操作特性和存取保护等信息,一般存放在文件的(目录 /文件 )中。比如MS-DOS的文件目录项,文件属性(特指读写/隐藏等属性)占1个字节