操作系统原理复习(1.2万字,全面覆盖)

第一章、操作系统概述

  • 操作系统的特性并发性同时处理多个任务的能力),共享性(为多个并发任务提供资源共享),不确定性(具有处理随机事件的能力)。
  • 操作系统功能
  1. 进程管理处理机分配,处理机管理,CPU管理。具体为进程控制(创建,暂停,唤醒,撤销),进程调度(调度策略,优先级),进程通信(进程间通信)。
  2. 存储管理/内存管理为应用程序运行分配和管理所需的内存,支持多道程序设计。具体为内存分配,内存共享,内存保护,内存扩充,虚拟内存。
  3. 设备管理:设备的分配和回收,设备的驱动机制/传输机制,为应用提供统一接口访问设备,高效存取/设备缓冲机制。
  4. 文件管理:为用户提供统一的文件存取接口,高效组织存储空间,提高存取效率,实现信息共享和存取控制。具体为文件用户接口,存储空间管理,文件的操作,目录的操作,存取权限管理。文件是设备的抽象
  • 操作系统性能/评价指标
  1. 吞吐率:在单位时间内处理信息的能力。
  2. 资源利用率:设备(CPU)使用的频度。
  3. 响应能力:从接受数据到输出结果的时间间隔。
  4. 可移植性:改变硬件环境仍能正常工作的能力,即代码修改量。
  5. 可靠性:发现、诊断和恢复系统故障的能力。
  • 操作系统发展的四个典型阶段
  1. 手工操作系统(40年代-50年代初)
  2. 单道批处理系统(50年代)
  3. 多道批处理系统(60年代初)
  4. 分时操作系统(60年代-至今)

  1. 整体式结构(单体式结构,宏内核结构):以模块为基本单位构建,每个模块具有特定的功能
  2. 层次式结构:功能模块按调用次序排若干层,各层单向依赖或单向调用。
  3. 微内核结构(客户/服务器结构):操作系统=微内核+核外服务器

第二章、操作系统依赖的基础硬件

  • 计算机主要部件:CPU,内设,外设
  • 三总线:地址总线,数据总线,控制总线
  • CPU结构:控制单元,运算单元,寄存器组

  • CPU的态(CPU的工作模式,对资源和指令使用权限的描述):
  1. 核态(Kernel mode):能够访问所有资源和执行指令,管理程序/OS内核
  2. 用户态 (User mode,目态):仅能访问部分资源,其他资源受限
  3. 管态 (Supervisor mode):介于核态和用户态之间

  • 操作系统依赖的最基本硬件:CPU,内存,中断,时钟。
  • 存储体系:寄存器,高速缓存(cashe),主存,磁盘。
  • 中断基本概念:
  1. 中断定义指CPU对突发的外部事件的反应过程或机制。CPU收到外部信号(中断信号)后,停止当前工作,转去处理该外部事件,处理完毕后回到原来工作的中断处(断点)继续原来的工作。
  2. 中断源 :引起系统中断的事件
  3. 中断类型
  4. 断点程序中断的地方(将要执行的下一条指令的地址)
  5. 现场程序正确运行所依赖的信息集合。(PSW程序状态字)、相关寄存器、断点
  6. 现场的处理 :现场保护(进入 中断服务程序 之前: CPU→ ),现场恢复(退出 中断服务程序 之后: →CPU)
  7. 中断响应过程:识别中断源--保护断点--保护现场--进入中断服务程序--恢复现场--中断返回

  • 实模式和保护模式

  • 操作系统的启动
  1. 初始引导:把OS内核装入内存并使之开始工作接管计算机系统,引导程序为MBR(Master Boot Record)
  2. 核心初始化OS内核初始化系统的核心数据。比如:各种寄存器的初始化,存储系统和页表初始化,核心进程构建。
  3. 系统初始化 :为用户使用系统作准备,使系统处于 待命状态 。主要工作:初始化文件系统,初始化网络系统,初始化控制台,初始化图形界面。
  • MBR(主启动扇区)
  1. 存放引导代码。
  2. 占用512个字节(510字节+AA55h),最后两个字节是MBR结束标志。
  3. 提供BootLoader或启动管理。
  • PBR:分区/次引导记录
  • Linux操作系统的生成:获取内核源码--配置内核--重新编译新内核--编译和安装模块--配置启动选项

第三章、用户界面

  • 操作系统——操作系统用户界面
  • 用户界面定义操作系统提供给用户控制计算机的机制(用户接口)
  • 用户界面类型:操作界面和系统调用(System Call,系统功能调用,程序界面)
  • 操作界面:分为图形用户接口,操作命令,批处理与脚本程序
  • 批处理与脚本程序在控制台环境下自动处理一批命令。Windows:批处理程序(bat/PowerShell)。Linux:Shell脚本程序。
  • Bash主要功能之重定向:主要是标准输入/输出的重定向,在linux虚拟机上实践一下会好很多
  • Bash主要功能之管道:

在虚拟机里实践一下

因为这个学期第一次os实验有4个,第二次os实验有7个

  • 系统调用(System Call,System Service Call):操作系统内核为应用程序提供的服务/函数特点:内核实现,存取核心资源或硬件,调用过程产生中断

第四章、进程管理

  • 操作系统——进程管理
  • 进程定义进程是程序在某个数据集合上的一次运行活动
  • 进程是系统中共享CPU的最小的并发单位,是资源分配的基本单位。
  • 进程的特征
  1. 动态性:进程是程序的一次执行过程,动态产生/消亡
  2. 并发性: 进程可以同其他进程一起向前推进
  3. 异步性: 进程按各自速度向前推进
  4. 独立性:进程是系统分配资源和调度CPU的单位
  • 进程与程序的区别
  1. 动态与静态。进程是动态的:程序的一次执行过程;程序是静态的:一组指令的有序集合
  2. 暂存与长存。进程是暂存的:在内存驻留。程序是长存的:在介质上长期保存。
  3. 程序和进程的对应。一个程序可能有多个进程。
  • 进程的状态
  1. 运行状态(Running)。进程已经占有CPU,在CPU上运行。
  2. 就绪状态 (Ready)。具备运行条件但由于无CPU,暂时不能运行
  3. 阻塞状态(Block)。 因为等待某项 服务 完成或 信号 来到而不能运行的状态。例如等待:系统调用,I/O操作,合作进程的服务或信号…

  • Linux进程状态:可运行,睡眠,僵死,暂停。

  • 进程控制块(Process Control Block,PCB)描述进程的状态、资源、和相关进程的关系。

PCB是进程的标志,创建进程时创建PCB,进程撤销后PCB同时撤销。

  • task_struct:Linux 内核中表示进程和线程的关键数据结构,包含了各种信息,如状态、调度信息、文件描述符等。
  • 进程控制:在进程生存期间,对其全部行为的控制。有以下四个典型的进程控制。
  1. 进程创建:创建一个具有指定标识(ID)的进程。
  2. 进程撤销:撤销一个指定的进程,收回进程所占有的资源,撤销该进程的PCB。进程撤销的时机/事件:正常结束,异常结束,外界干预。
  3. 进程阻塞:停止进程执行,变为阻塞。阻塞进程的时机/事件:请求系统服务,启动某种操作,新数据尚未到达,无新工作可做。
  4. 进程唤醒:唤醒处于阻塞队列当中的某个进程。引起唤醒的时机/事件:系统服务由不满足到满足,I/O完成,新数据到达,提出新请求。
  • 原语由若干指令构成的具有特定功能的函数。具有原子性,其操作不可分割。
  • Linux进程控制
  1. 创建进程--fork() linux--fork()详解

关于fork的返回值:pid = 0(在子进程中),pid>0(在父进程中,为子进程id),pid= -1(出错)

fork之后,父子进程的先后执行顺序如何反映?

linux中fork函数及子进程父进程执行顺序

在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。可以通过fork返回的值来判断当前进程是子进程还是父进程。

2. exec函数族:

  1. 功能:在子进程空间运行指定的“ 可执行程序
  2. 步骤:根据 文件名 找到相应的 可执行程序, 可执行程序的内容填入子进程的地址空间。
  3. 返回:exec调用成功:进入新进程且不再返回。exec调用失败:继续从调用点向下执行。

3. 进程的阻塞--wait(int &status)函数  Linux中wait()函数

4. 进程的终结--exit(int &status)函数  Linux -- exit()函数、_exit()函数、return的说明与使用

5. 进程的休眠--sleep(int nSecond)
  • 线程的定义:线程是进程内创建的可运行模块/指令序列,能执行指定的任务

进程内可以定义多个线程,线程和进程可以并发运行。

线程是CPU调度和派发的基本单位。

  • 线程的意义
  1. 线程提高了系统的并发性能。线程的并发粒度比进程更细,更充分地发挥 CPU 的性能。
  2. 线程的应用成本更低,更灵活 。进程为 线程 提供 资源 地址空间 。线程的创建,撤销和管理 成本更低; 线程间通信 更容易,更灵活。
  3. 大多数操作系统都采用了线程技术。Windows/Linux/ 鸿蒙 / 麒麟 /…
  • 创建线程--CreateThread(TaskFunction)函数
  • 线程的应用场景
        多个功能需要并发的地方
        需要改善窗口交互性的地方
        需要改善程序结构的地方
        多核 CPU 上的应用,充分发挥多核性能
  • 现代操作系统线程模型:
进程 = 资源集 + 线程组:
线程的状态变迁:
  • Linux线程和分类
  1. 内核线程/Kernel Thread
  2. 用户线程/User Thread
  • 进程VS线程
  • 进程互斥的定义:多哥进程共享具有独占性的资源时,必须确保各进程互斥地存取资源,即确保没有任何两个进程同时存取资源。进程内设定特定区域,所有进程互斥地访问这些区域。

  • 临界资源:一次只允许一个进程独占访问(使用)的资源。比如上面的共享变量i
  • 临界区:进程中访问临界资源的程序段。
  • 进程的同步关系:操作系统进程同步 ‘’‘’
  • 临界区和临界资源的共享特点 :临界资源的访问具有排他性,并发进程不能同时进入“临界区”
  • 访问临界区的方法:
  1. 硬件方法:硬件同步机制
  2. 软件方法:锁机制和信号量机制。
  • 临界区访问的四个原则
  1. 空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立刻进入自己的临界区,以有效利用临界资源。
  2. 忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
  3. 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入”死等“状态。
  4. 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入”忙等“状态。
  • 信号灯机制

  1. P操作(荷兰语:Passeren通过)原理:
  2. V操作(荷兰语:Vrijgeven释放

第五章、资源分配与调度(死锁

  • 死锁的定义两个或多个进程无限期地等待永远不会发生的条件的一种系统状态。每个进程都永远阻塞。
  • 死锁的另一个定义在两个或多个进程中,每个进程都已持有某种资源,但又继续申请其它进程已持有的某种资源
  • 操作系统学习(九)死锁
  • 死锁的起因
  1. 系统资源有限。资源数目不足以满足所有进程的需要,引起进程对资源的竞争而产生死锁。
  2. 并发进程的推进顺序不当。进程在运行过程中,请求和释放资源的顺序不当,导致进程产生死锁。
  • 关于死锁的一些结论
  1. 陷入死锁的进程至少是2个(反证:若仅有一个进程死锁)
  2. 参与死锁的进程至少有2个已经占有资源。
  3. 参与死锁的所有进程都在等待资源
  4. 参与死锁的进程是当前系统中所有进程的子集
  5. 死锁会浪费大量系统资源,甚至导致系统崩溃。
  • 死锁的必要条件
  1. 互斥条件:资源具有独占性,进程互斥使用资源。
  2. 不剥夺条件:资源被访问完之前(即在释放)不能被其他进程剥夺
  3. 部分分配条件:进程所需资源逐步分配,需要时临时申请(等待分配)。
  4. 环路条件:多个进程构成环路:环中每个进程已占用的资源前一进程申请,而自己所需新资源又被环中后一进程所占用。对于哲学家就餐问题来说,限定最多四个人同时吃饭,就是破坏环路条件。
  • 解决死锁的策略
  1. 预防死锁:通过设置某些限制条件,破坏死锁四个必要条件中的一个或多个,来防止死锁。
  2. 避免死锁:在资源的分配过程中,用某种方法分析该次分配是否可能导致死锁?若会则不分配;若不会就分配。
  3. 检测和恢复死锁:允许死锁发生,但可通过检测机制及时检测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁状态解脱出来。
  4. 预先静态分配法:进程运行前将所需全部资源一次性分配给它。因此进程在运行过程中不再提出资源请求,从而避免出现阻塞或者死锁。破坏了部分分配条件
  5. 有序资源分配法:

第六章、处理机调度(进程调度)

  1. 长程调度(宏观调度 / 作业调度)。作业:磁盘-->内存。
  2. 中程调度(交换调度)。进程:就绪(内存)-->交换空间。
  3. 短程调度(进程调度)。进程:就绪(内存)-->CPU。
  4. I/O调度(设备调度)。进程:阻塞(设备)-->就绪。
  • 进程调度的目标(两个量化的衡量指标):
  1. 周转时间 / 平均周转时间
  2. 带权周转时间 / 平均带权周转时间

        1.先来先服务调度(First Come First Serve):按照作业进入系统的时间先后次序来挑选作业。先进入系统的作业优先被运行。

特点:只考虑作业等候时间,不考虑作业大小(运行时间)。晚来的作业会等待较长时间,不利于晚来但是很短的作业。

       2. 短作业优先调度算法Short Job First):参考运行时间,选取时间最短的作业投入运行。

特点:忽视了作业等待时间,早来的长作业会长时间等待(资源“饥饿”)。

        3. 响应比高者优先调度算法:调度作业时计算作业列表中每个作业的响应比,选择响应比最高的作业优先投入运行。

特点:响应比 = 1 + 等待时间 / 运行时间,有利于短作业,有利于等候已久的作业,兼顾长作业。每次调度时重新计算和比较剩余作业的响应比。

        4. 优先数调度算法根据进程优先数,把CPU分配给最高的进程。

进程优先数 = 静态优先数 + 动态优先数。
静态优先数: 进程创建时确定,在整个进程运行期间不再改变。
动态优先数:动态优先数在进程运行期间可以改变。        
        5. 循环轮转调度法 (ROUND-ROBIN):把所有就绪进程按 先进先出的原则排成队列。 新来 进程加到队列 末尾。进程以 时间片q为单位轮流使用CPU。刚刚运行了一个 时间片的进程排到队列 末尾,等候下一轮调度。 队列逻辑上是环形的。
  • 调度方式:当一进程正在CPU上运行时,若有更高优先级的进程进入就绪,系统如何对待新进程(分配CPU)?
  1. 非抢占方式:让正在运行的进程继续运行,直到该进程完成或发生某事件而进入“完成”或“阻塞”状态时,才把CPU分配给新来的更高优先级的进程。
  2. 抢占方式:让正在运行的进程立即暂停,立即把CPU分配给新来的优先级更高的进程。

二者对比:

  • Linux进程优先级

  • task_struct->counter进程在当前一轮调度中还能连续运行的时间片数量。counter越大,优先级越高,可获得越多CPU时间
新一轮调度开始时:counter = priority
时钟中断服务程序:counter - -
特定情形:counter = counter + △
所有进程的counter都减到0后:重新开始新一轮调度
  • 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

实现动态地址映射的思路:
特点: 程序占用的内存空间可动态变化(若程序移动及时更新 基址 BA
           程序不要求占用连续的内存空间(需要记录每段放置的 基址 BA
           便于多个进程共享代码(共享代码作为 独立的一段 存放)
缺点: 硬件支持( MMU :内存管理单元)。软件复杂。
  • 存储扩充:借助辅存在逻辑上扩充内存,解决内存不足
  • 存储保护保证内存中的多道程序只能在给定区域活动,并且互不干扰。防止访问越界,防止访问越权。
  • 单一存储管理:用户区不分区,完全被一个程序占用。
  • 分区存储管理用户区分为若干大小不等的分区,供不同程序使用。

固定分区(系统初始化时分区)和动态分区(程序装入时临时分区)两种。

  • 固定分区

特点:运行时分区的大小位置不变,分区大小不同,适应不同程序需求。

缺点: 浪费内存,大程序可能无法运行,程序过多无法运行。
因此 程序的 装入数量和顺序要与 分区的数量、大小顺序尽量保持一致。
  • 动态分区:
  • 分区的选择(放置策略)

空闲区表:描述内存空闲区的位置和大小的数据结构

  1. 首次适应法空闲区表首址递增排序,尽可能先利用低地址空间

  2. 最佳适应法空闲区表大小递增排序,尽量先选中满足要求的最小空闲区

  3. 最坏适应法空闲区表大小递减排序,尽量先使用最大的空闲区,仅作一次查找就可找到所要分区。

  • 碎片问题

  • 覆盖技术(overlay)

目的:较小的内存空间中运行较大的程序

覆盖的缺点:编程复杂(程序员划分程序模块并确定关系),程序执行时间长(从外存装入内存耗时)
  • 对换技术(Swapping)
原理: 内存不够时把进程写到磁盘( 换出 / Swap Out )。
           当进程要运行时重新写回内存( 换入 / Swap In )。
优点: 增加进程并发数;不考虑程序结构。
缺点: 换入和换出增加 CPU开销;对换单位太大(整个进程)
需要考虑的问题:程序换入时的地址重定位,减少对换传送的信息量,外存对换空间的管理方法
采用交换技术的OS:UNIX,Linux,Windows
关键摘要:
  • 地址映射虚拟地址(页式地址)物理地址
  • 页表的建立:
  • 缺页中断当程序要访问的目标页面不在内存时,程序将被迫临时中断。

缺页中断的处理:立即将所缺页面装入内存。页面从硬盘拷贝到内存,其中的I/O操作耗时较长。

因此,缺页中断降低了程序实时性。

修改位即所谓的“脏位”。

访问指令的执行过程:

一个好的淘汰策略, 页面抖动较少,具有较低的缺页率(高命中率)

        1. 最佳算法(OPT算法,Optimal):淘汰不再需要最远将来才会用到的页面。

特点:理论上最佳,实践中该算法无法实现。        

        2. 先进先出淘汰算法(FIFO算法):淘汰在内存中停留时间最长的页面

优点:实现简单:页面按进入内存的时间排序,淘汰队头页面。同时,进程按顺序访问地址空间时抖动较少,缺页率较低

异常现象:对于一些特定的访问序列,分配页框越多,缺页率越高!

        3. 最久未使用淘汰算法(LRU,Least Recently Used): 淘汰 最长时间未被使用 的页面。
        4. 最不经常使用算法(LFU,Least Frequently Used): 选择到当前时间为止 被访问次数最少 的页面,每页设置 访问计数器,每当页面被访问时,该页面的访问计数器加1; 发生缺页中断时,淘汰计数值最小的页面 ,并将所有计数清零。
实现方式 对每个⻚⾯设置⼀个访问计数器,每当⼀个⻚⾯被访问时,该⻚⾯的访问计数器就 累加 1。在发⽣缺⻚中断时,淘汰计数器值最⼩的那个⻚⾯
  • 影响缺页次数的因素:
  1. 淘汰算法
  2. 分配给进程的页框数:页框越少,越容易缺页
  3. 页本身的大小:页面越小,越容易缺页
  4. 程序的编制方法:程序的局部性
  • 页面的大小选择:

  • 快表机制(cache,联想存储器,TLB)
特点: 快表是普通页表(慢表)的 部分内容 复制
地址映射时 优先 访问快表,若在快表中找到所需数据,则称为“ 命中 ” 没有命中时,需要访问慢表,同时 更新 快表
合理的页面调度策略能使快表具有 较高 命中率
关键摘要:

  • 段式存储管理:把进程按逻辑意义划分为多个,每段有段名,长度不定。进程由多段组成
  • 段表(SMT,Segment Memory Table):记录每段在内存中映射的位置
  • 段式系统的虚拟地址段式虚拟地址VA包含段号S段内偏移W
  • 段式地址映射过程:
  1. 逻辑地址 VA 分离出 ( S , W );
  2. S为索引查询段表,检索段号 S ,查询该段 基地址 B 长度 L
  3. 物理地址MA = B + W
  • 段式管理与页式管理的对比
  • 段页式存储管理:在段式存储管理中结合页式存储管理技术
  • 段页式地址段号S、页号P和页内位移W
  • 段页式地址的映射机构:同时采用 段表 页表 实现地址映射
系统为每个进程建立一个 段表 ,  每个段建立一个 页表
段表给出每段的 页表基地址 页表长度 页表给出段内每页对应的 页框
  • 实模式阶段:计算机加电前一段时间处于实模式。
  • 实模式内存空间:20位物理地址,1MB内存空间。分段机制:段地址(16位) :偏移地址(16位)

第八章、设备管理(输入/输出管理)

  • 设备类型和特征

按交互对象分类

  1. 人机交互:显示设备、键盘、鼠标、打印机
  2. CPU 交互:磁盘、磁带、传感器、控制器
  3. 计算机间交互:网卡、调制解调器
按交互方向分类
  1. 输入设备:键盘、扫描仪
  2. 输出设备:显示设备、打印机
  3. 双向设备:输入 / 输出:硬盘、软盘、网卡
按外设特性分类
  1. 使用特征:存储设备、输入设备、输出设备
  2. 数据传输率:低速 ( 键盘 ) 、中速 ( 打印机 ) 、高速 ( 网卡、磁盘 )
按信息组织特征分类
  1. 字符设备:传输的基本单位是 字符 。例:键盘、串口
  2. 块设备: 传输的基本单位是 。例:硬盘,磁盘
  3. 网络设备:采用 socket套接字接口访问,在全局空间有唯一名字,如 eth0 eth1
  • 设备管理功能
  1. 状态追踪:记录设备的基本属性
  2. 设备分配:按一定策略安全地分配和管理各种设备。
  3. 设备映射:逻辑设备到物理设备的转换(逻辑名到物理名的转换)
  4. I/O缓冲区管理:开辟和管理I/O缓冲区,提高读写效率。
  5. 设备驱动:对物理设备进行I/O操作,把应用对设备的读/写请求转换为对设备I/O操作。

  • 缓冲技术作用
  1. 连接不同数据传输速度的设备 。如CPU(设备驱动)与设备(控制器)之间传输数据, 改进:内存中增加缓冲区
  2. 协调数据记录大小的不一致。 进程之间 CPU与设备之间 的数据记录大小不一致
  3. 正确执行应用程序的语义拷贝。
  • Linux缓冲机制应用:

  1. 提前读:进程读时,其所需数据已被 提前读 到了 缓冲区 中,不需要启动外设去执行读操作。
  2. 延后写:进程写时,数据先存在缓冲区,等到 特定事件发生 足够时间 后( 已延迟 ),再启动外设完成写入。
  • 缓冲的组成
  1. Cache:高速缓冲寄存器CPU ↔ 内存】
  2. 设备内部缓冲区:外设或I/O接口的内部缓冲区【端口】
  3. 内存缓冲区:应用广泛,使用灵活CPU ↔ 接口/外设】,应用开辟 | 内核开辟
  4. 辅存缓冲区:开辟在辅存上【 暂存内存数据,SWAP
  • 缓冲的实现
  1. 单缓冲:缓冲区仅有1个单元
  2. 双缓冲:缓冲区有2个单元
  3. 环形缓冲:在双缓冲的基础上增加了更多的单元,并让首尾两个单元在逻辑上相连。
  4. 缓冲池:多个缓冲区,可供若干个进程共享,可以支持输入,也可以支持输出,提高缓冲区利用率,减少内存浪费
  • 浅谈设备驱动的作用与本质,有无操作系统Linux设备驱动的区别
  • 设备文件:硬件设备作为文件看待,使用文件操作接口来完成设备的打开、关闭、读写和I/O控制等操作。仅字符设备和块设备通过设备文件访问,创建设备文件:mknod。
  • 主设备号:标识该设备种类,标识驱动程序主,设备号的范围:1-255,Linux内核支持动态分配主设备号
  • 次设备号标识同一设备驱动程序的不同硬件设备
  • 设备分类:
  1. 独占设备:不可抢占设备(普通外设或资源),使用时独占释放后才能被其它进程申请到。先申请,后使用(主动)
  2. 共享设备:可抢占设备CPU,内存,硬盘),允许多个作业或进程同时使用。不申请,直接用(被动 + 主动)
  3. 虚拟设备:借助虚拟技术,在共享设备上模拟独占设备。
  • 设备分配方法
  1. 独享分配:针对独占设备。

  2. 共享分配:针对共享设备,典型共享设备:硬盘。

  3. 虚拟分配:

虚拟技术:在一类物理设备上模拟另一类物理设备的技术,通常借助辅存部分区域模拟独占设备,将独占设备转化为共享设备。

虚拟设备:用来模拟独占设备的辅存区域称为虚拟设备,具有独占设备的逻辑特点

输入井:模拟输入设备的辅存区域

输出井:模拟输出设备的辅存区域        

  • SPOOLing 系统:
  1. 预输入程序:控制信息从独占设备输入到辅存,模拟脱机输入的卫星机。
  2. 输入表:独占设备虚拟设备
  3. 缓输出程序:控制信息从辅存输出到独占设备,模拟脱机输出的卫星机;
  4. 输出表:独占设备虚拟设备
  5. 井管理程序:控制用户程序和辅存之间的信息交换

第九章、文件系统

  • 文件:文件是计算机系统存放信息的一种形式,由若干信息项有序构成。文件具有唯一的文件名,用户通过读写指针来存取文件的信息项。
  • 文件分类:
  1. 按文件的用途:系统文件,库文件,用户文件。
  2. 按文件的操作权限:只读文件,只写文件,可执行文件,可读可写文件,不保护文件
  3. 按文件的存储时间:临时文件,永久文件
  • 文件系统:管理文件的机构。
实现文件的创建、撤消、读写、修改、复制和存取控制等,方便用户以 文件名 存取文件
管理文件 存储设备 的空间和存取。高效利用存储空间和高效存取文件
  • 文件的逻辑结构

        1. 记录式文件:信息项是记录,记录包含若干成员。例如:学生花名册.txt,记录姓名,学号,性别,成绩。

特点:文件头部保存记录长记录数信息,浪费存储空间

分类:定长记录文件,不定长文件

        2. 流式文件:信息项是字节

特点:文件长度就是字节的数量,文件无需额外说明信息或控制信息

  • 文件的存取方法
  1. 顺序存取:按从前到后的顺序依次对文件信息项进行读/写,直到定位到目标信息项为止。
  2. 随机存取 /直接访问:直接 定位 到文件目标信息项进行读 /写。适合 流式文件 定长记录文件
  • 文件的物理结构: 文件在存储设备上的存储结构, 强调合理利用储存空间,缩短I/O时间
        1. 连续文件: 指文件存放在 连续的存储块 中。文件的存储块顺序与逻辑块顺序一致且连续。
文件目录记录 文件长度 ( 块数 ) 首个存储块号
特点: 文件建立时给出文件 最大长度 文件起始位置 。支持顺序存取和随机存取。其中顺序存取速度快 ( 寻道次数和寻道时间最少 )
缺点:文件不易动态增长,预留空间容易造成浪费,造成外部碎片问题
        2. 串联文件:存放在 离散的存储块 中,每个存储块包含一个 链接指针 记录下一个存储块位置。文件目录记录文件 首个存储块号
特点:串联文件可以显著消除存储碎片,创建文件时无需知道文件长度,文件动态增长时可动态分配存储块, 支持文件增、删、改等操作。
缺点: 随机访问效率极低 (仅适合顺序访问方式),并且如果某个 链接指针损坏 ,文件后面将无法访问。

FAT文件系统:

        3. 索引文件:文件存放在不连续的存储块中,系统建立 索引表 记录文件 逻辑块存储块的对应关系。 索引文件 = 索引表 + 数据区

特点:读取索引文件时应先读取索引表,索引表本身占据额外的存储区域/缺点,支持顺序和随机存取,支持文件动态增长、插入、删除等。实例:ext系列文件系统(inode索引节点文件)

  • 磁盘空闲存储块管理方法:
        1. 空闲文件目录:
空闲文件: 连续的空闲存储块 组成的特殊文件。存储设备上所有的空闲文件就代表了存储设备上的全部空闲空间。
空闲文件目录:为所有空闲文件建立的目录,记录空闲文件的首块号和存储块数 ( 或其他方式 )
        2. 空闲块链: 把所有空闲存储块用 链表 链接在一起。
申请 空闲块时,从链表 头部 摘取空闲块。
回收 存储块时,把空闲块加在链表 尾部。
        3. 位示图: 一块特殊内存区域, 每一位 (bit) 对应一个 存储块 ,值1 表示存储块 空闲 0 表示 已占用。
  • 文件目录:

文件目录功能:实现“按名存取” :系统根据文件名能找到指定文件。文件目录记录文件的文件名存放地址以及属性。

目录文件:目录文件是文件目录的实现,由文件目录项构成

文件目录项 directory entry):描述文件基本信息、使用信息和存取控制信息等。
基本信息:文件名、存储位置 ( 存储块号 )
使用信息:属性、大小、建立时间、修改时间等
存取控制信息:文件存取权限

  • 目录结构

        1. 单机目录:最简单的目录结构,全部文件都登记在同一目录中。

特点:简单、易于理解和实现

缺点:查找速度慢,不允许重名,不便于文件共享

        2. 二级目录:第一级称为主目录(MFD),第二级称为子目录或用户目(UFD)。每个用户有一个子目录(用户目录)

优点:解决文件重名的问题,不同用户可以使用相同的名字

        3. 树形目录:多级目录结构,二级目录结构的扩充,目录结构如同倒置的树,树根是主目录(根目录),枝结点是子目录,树叶描述文件。

  • 文件全名从根目录到文件为止整个通路上所有目录、子目录和文件的名字用”/”顺序连接构成的字符串称为文件全名。
  • 路径名:文件全名中由目录和子目录组成的部分。每个文件都有唯一的路径名

绝对路径名:根目录直到文件的路径

相对路径名:从指定目录到文件的路径

  • 文件属性:指定文件的类型、操作特性和存取保护等信息,一般存放在文件的(目录 /文件 )中。比如MS-DOS的文件目录项,文件属性(特指读写/隐藏等属性)占1个字节

其他资料:

  • 50
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值