├── README.md ├── 计算机操作系统(四)——处理器.md ├── 计算机操作系统(二)——中断.md ├── 计算机操作系统(九)——其他.md ├── 计算机操作系统(一)——概览.md ├── 计算机操作系统(三)——进程.md ├── 计算机操作系统(七)——IO存储管理.md ├── 计算机操作系统(五)——存储管理.md ├── 计算机操作系统(六)——文件系统.md ├── LICENSE ├── 计算机操作系统(八)——并发程序设计.md └── 计算机操作系统(第3版)课后习题答案.md /README.md: -------------------------------------------------------------------------------- 1 | # 计算机操作系统笔记 2 | 3 | 4 | 5 | ![img](https://edu-image.nosdn.127.net/2FBF2643E1153A9C7CEA9F5D0B0CD3D6.jpg?imageView&thumbnail=426y240&quality=100) 6 | 7 | > 来源:[中国大学MOOC计算机操作系统](https://www.icourse163.org/learn/NJU-1001571004)笔记 8 | > 9 | > 贡献者:[wnma3mz](https://github.com/wnma3mz) 10 | > 11 | > 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 12 | 13 | - [ApacheCN 机器学习交流群 629470233](http://shang.qq.com/wpa/qunwpa?idkey=30e5f1123a79867570f665aa3a483ca404b1c3f77737bc01ec520ed5f078ddef) 14 | - [ApacheCN 学习资源](http://www.apachecn.org/) 15 | 16 | 17 | 18 | - [在线阅读](https://legacy.gitbook.com/book/wnma3mz/computer-operating-system-notes/details) 19 | - [PDF格式](https://legacy.gitbook.com/download/pdf/book/wnma3mz/computer-operating-system-notes) 20 | - [EPUB格式](https://legacy.gitbook.com/download/epub/book/wnma3mz/computer-operating-system-notes) 21 | - [MOBI格式](https://legacy.gitbook.com/download/mobi/book/wnma3mz/computer-operating-system-notes) 22 | - [代码仓库](https://github.com/apachecn/Computer-operating-system-notes) 23 | 24 | -------------------------------------------------------------------------------- /计算机操作系统(四)——处理器.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 处理器 4 | 5 | ## 处理器调度的层次 6 | ### 高级调度(长程调度,作业调度):决定能否加入到执行的进程池中 7 | 8 | 1. 分时OS中,高级调度决定: 9 | 1. 是否接受一个终端用户的连接 10 | 2. 命令能否被系统接纳并构成进程 11 | 3. 新建态进程是否加入就绪进程队列 12 | 2. 批处理OS中,功能是按照某种原则从后备作业队列中选取作业进入主存,并为作业做好运行前的准备工作和完成后的善后工作 13 | 14 | ### 中级调度(平衡负载调度):决定主存中的可用进程集合 15 | 16 | 1. 引起中级调度是为了提高内存利用率和作业吞吐量 17 | 2. 中级调度决定哪些进程被运行驻留在主存中参与竞争处理器及其他资源,起到短期调整系统负荷的作业 18 | 3. 中级调度把一些进程换出内存,从而实质进入“挂起”状态,不参与进程调度,以平顺系统的负载 19 | 20 | ### 低级调度(短程调度,进程调度,处理器调度):决定哪个可用进程占用处理器执行 21 | 22 | 1. 按照某种原则把处理器分配给就绪态进程或KLT 23 | 2. 进程调度程序(分派程序),操作系统中实现处理器调度的程序,是操作系统的最核心部分 24 | 3. 处理器调度策略的优劣直接影响到整个系统的性能 25 | 4. 功能: 26 | 1. 记住进程或内核级线程的状态 27 | 2. 决定某个进程或KLT什么时候获得处理器,以及占用多长时间 28 | 3. 把处理器分配给进程或KLT 29 | 4. 收回处理器 30 | 31 | ## 选择处理器调度算法的原则 32 | 33 | 1. 资源利用率:使得CPU或其他资源的使用率尽可能高且能够并行工作 34 | 2. 响应时间:使交互式用户的响应时间尽可能小,或尽快处理实时任务 35 | 3. 周转时间:提交给系统开始到执行完成获得结果为止的这段时间间隔称为周转时间,应该使周转时间或平均周转时间尽可能短 36 | 4. 吞吐量:单位时间处理的进程数尽可能多 37 | 5. 公平性:确保每个用户每个进程获得合理的CPU份额或其他资源份额 38 | 39 | ## 优先数调度算法 40 | ### 根据分配给进程的优先数决定运行进程 41 | 42 | 1. 抢占式优先数调度算法 43 | 2. 非抢占式优先数调度算法 44 | 45 | ### 优先数的确定准则 46 | 1. 进程负担任务的紧迫程度 47 | 2. 进程的交互性 48 | 3. 进程使用外设的频度 49 | 4. 进程进入系统的时间长短 50 | 51 | ### 与进入系统时间相关的优先数 52 | 53 | 1. 计算时间短(作业/进程)优先 54 | 2. 剩余计算时间短进程优先 55 | 3. 响应比高者(作业/进程)优先 56 | 1. 响应比=等待时间/进入时间 57 | 4. 先来先服务:先进入先被选择 58 | 1. 多用于高级调度;低级调度中,以计算为主的进程过于优越 59 | 60 | ### 算法 61 | 62 | ### 时间片轮转调度算法 63 | 64 | 1. 根据各个进程进入就绪队列的时间先后轮流占用CPU一个时间片 65 | 2. 时间片中断 66 | 3. 时间片的确定:选择长短合适的时间片,过长则退化为先来先服务算法,过短则调度开销大 67 | 4. 单时间片,多时间片和动态时间片 68 | 69 | ### 分级调度算法(多队列策略,反馈循环队列) 70 | 71 | 1. 建立多个不同优先级的就绪进程队列 72 | 2. 多个就绪进程队列间按照优先数调度 73 | 3. 高优先级就绪进程,分配的时间片短 74 | 4. 单个就绪进程队列中进程的优先数和时间片相同 75 | 5. 分级原则 76 | 1. 一般分级原则 77 | 1. 外设访问,交互性,时间紧迫程度,系统效率,用户立场,…… 78 | 2. 现代操作系统的实现模型 79 | 1. 多个高优先级的实时进程队列,如:硬实时、网络、软实时 80 | 2. 多个分时任务的进程队列,根据基准优先数和执行行为调整 81 | 3. 队列数可能多达32-128个 82 | 83 | ### 彩票调度算法 84 | 85 | 1. 为进程发放针对系统各种资源(如CPU时间)的彩票;当调度程序需要做出决策时,随机选择一张彩票,持有该彩票的进程将获得系统资源 86 | 2. 合作进程之间的彩票交换 87 | -------------------------------------------------------------------------------- /计算机操作系统(二)——中断.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 中断 4 | 5 | ## 定义 6 | 7 | ### 广义和狭义 8 | 9 | 1. 广义:程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程。 10 | 2. 操作系统是“中断驱动”的,中断是激活操作系统的唯一方式。 11 | 3. 狭义:处理器之外的中断事件,与当前运行指令无关的中断事件。I/O中断、时钟中断、外部信号中断。 12 | 13 | ### 异常 14 | 15 | 1. 当前运行指令引起的中断事件。地址异常、算术异常、处理器硬件故障。 16 | 2. 系统异常:执行陷入指令而触发系统调用引起的中断事件。请求设备、请求I/O、创建进程。 17 | 18 | ## 由处理器、内存储器、总线等硬件故障引起 19 | 20 | ### 处理原则: 21 | 22 | 1. 保护现场 23 | 2. 停止设备 24 | 3. 停止CPU 25 | 4. 向操作员报告 26 | 5. 等待人工干预 27 | 28 | ### 由处理器执行机器指令引起。 29 | 30 | 1. 除数为0,操作数溢出等算术异常:简单处理,报告用户;由用户编写中断续元程序处理 31 | 2. 非法程序、用户态使用特权指令、地址越界、非法存取等指令异常:终止程序 32 | 3. 终止进程指令:终止进程 33 | 4. 虚拟地址异常:调整内存后重新执行指令 34 | 35 | ### 处理器执行陷入指令请求OS服务引起的;在操作系统中,它一般又被称作系统调用 36 | 37 | 1. 请求分配外设、请求I/O等等 38 | 2. 处理流程:陷入OS,保护现场,根据功能号查入口地址,跳转具体处理程序 39 | 40 | ### 来源于外围设备报告I/O状态的中断 41 | 42 | 1. I/O完成:调整进程状态,释放等待进程 43 | 2. I/O出错:等待人工干预 44 | 3. I/O异常:等待人工干预 45 | 46 | ### 由外围设备发出的信号引起的中断事件 47 | 48 | 1. 时钟中断、间断时钟中断:记时与时间片处理 49 | 2. 设备报到与结束中断:调整设备表 50 | 3. 键盘/鼠标信号中断:根据信号作出相应反应 51 | 4. 关机/重启动中断:写回文件,停止设备与CPU 52 | 53 | ## 过程 54 | 55 | ### 发现中断源,提出中断请求 56 | 57 | 1. 发现中断寄存器中记录的中断 58 | 2. 决定这些中断是否应该屏蔽 59 | 3. 当有多个要响应的中断源时,根据规定的优先级选择一个 60 | 61 | ### 中断当前程序的执行 62 | 63 | 1. 保存当前程序的PSW/PC到核心栈 64 | 65 | ### 转向操作系统的中断处理程序 66 | 67 | ## 中断的处理 68 | 69 | ### 中断处理程序 70 | 71 | 1. 操作系统处理中断事件的控制程序,主要任务是处理中断事件和恢复正常操作 72 | 73 | ### 中断处理过程 74 | 75 | 1. 保护未被硬件保护的处理器状态 76 | 2. 通过分被中断进程的PSW中断码字段,识别中断源 77 | 3. 分别处理发生的中断事件 78 | 4. 恢复正常操作 79 | 1. 对于某些中断,在处理完毕后,直接返回刚刚被中断的进程 80 | 2. 对于其他一些中断,需要中断当前进程的运行,调整进程队列,启动进程调度,选择下一个执行的进程并恢复其执行 81 | 82 | ### 系统处理流程 83 | 84 | 1. 运行进程 85 | 2. 在硬件中,发现中断源,置中断码以备分析,交换新旧PSW 86 | 3. 在操作系统中,保护未被硬件保护的现场信息,分析中断源,分别处理各类中断事件 87 | 1. 调整进程队列,进程调度,恢复处理器现场信息 88 | 2. 恢复处理器现场信息 89 | 4. 在硬件中,恢复PSW 90 | 5. 恢复进程 91 | 92 | ## 中断屏蔽 93 | 94 | 1. 当计算机检测到中断时,中断装置通过中断屏蔽位决定是否响应已发送的中断 95 | 2. 有选择的响应中断 96 | 97 | ## 中断优先级 98 | 99 | 1. 当计算机同时检测到多个中断时,中断装置响应中断的顺序 100 | 2. 有优先度的响应中断 101 | 3. 一种可能的处理次序 102 | 1. 处理机硬件故障中断事件、自愿性中断事件、程序性中断事件、时钟中断等外部中断事件、输入输出中断事件、重启动和关机中断事件 103 | 4. 不同类型的操作系统有不同的中断优先级 104 | 105 | ## 中断的嵌套处理 106 | 107 | 1. 当计算机响应中断后,在中断处理过程中,可以再响应其他中断 108 | 2. 操作系统是性能攸关程序系统,且中断响应处理有硬件要求,考虑系统效率和实现代价问题,中断的嵌套处理应限制在一定层数内,如三层 109 | 3. 中断的嵌套处理改变中断处理次序,先响应的有可能后处理 110 | 111 | ## 多中断的响应与处理 112 | 113 | ### 决定中断处理次序的因素 114 | 115 | 1. 中断屏蔽可以使中断装置不响应某些中断 116 | 2. 中断优先级决定了中断装置响应中断的次序 117 | 3. 中断可以嵌套处理,但嵌套的层数应有限制 118 | 4. 中断的嵌套处理改变了中断处理的次序 119 | 120 | ### 案例一 121 | 122 | 1. X、Y两个中断同时发生 123 | 2. 先响应X 124 | 3. 因Y被屏蔽,继续处理X 125 | 4. 再响应并处理Y 126 | 127 | ### 案例二 128 | 1. X、Y两个中断同时发生 129 | 2. 根据中断优先级,先响应X 130 | 3. 因未屏蔽Y,再响应并处理Y 131 | 4. Y处理完成后,再处理X 132 | -------------------------------------------------------------------------------- /计算机操作系统(九)——其他.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 其他 4 | 5 | ## 计算机系统层级(由上到下): 6 | 7 | 1. 应用——用户 8 | 2. 语言处理——应用程序员的视图 9 | 3. 操作系统——语言处理程序设计者的视图 10 | 4. 计算机硬件——操作系统设计者的视图 11 | 12 | ## 存储程序计算机特点 13 | 14 | 1. 以运算单元为中心,控制流由指令流产生 15 | 2. 采用存储程序原理,面向主存组织数据流 16 | 3. 主存是按地址访问、线性编址的空间 17 | 4. 指令由操作码和地址码组成 18 | 5. 数据以二进制编码 19 | 20 | ## 程序员的计算机系统视图(由下到上) 21 | 22 | 1. 计算机硬件系统——机器指令(语言) 23 | 1. 机器指令是计算机系统执行的基本命令,是中央处理器执行的基本单位 24 | 2. 指令由一个或多个字节组成,包括操作码字段、一个或多个操作数地址字段、以及一些表征机器状态的状态字以及特征码 25 | 3. 指令完成各种算术逻辑运算、数据传输、控制流跳转 26 | 4. 分类 27 | 1. 特权指令:只能被操作系统内核使用的指令 28 | 2. 非特权指令:能够被所有程序使用的指令 29 | 3. 用户程序并非能够使用全部的机器指令,那些与计算机核心资源相关的特殊指令会被保护 30 | 2. 操作系统与实用程序——扩展机器指令 31 | 1. 资源管理:机器语言+广义指令(扩充了硬件资源管理) 32 | 2. 文件系统:机器语言+系统调用(扩充了信息资源管理) 33 | 3. 数据库管理系统——数据库语言 34 | 4. 语言处理程序——高级语言(面向问题的语言) 35 | 5. 支撑软件——程序员(涵盖以上) 36 | 37 | ## 计算机程序执行过程: 38 | 39 | 1. 高级语言源程序通过转换程序,再通过编译程序和解释程序,变成目标代码程序 40 | 2. 汇编语言源程序通过汇编程序,变成目标代码程序 41 | 3. 目标代码程序通过连接程序,变成可执行程序,通过装入程序,变成内存执行程序 42 | 4. 同时进入数据库管理系统和操作系统,数据库管理系统同时进入文件系统和设备管理(属于操作系统) 43 | 44 | P.S. 45 | 操作系统 46 | 1. 文件系统 47 | 2. 设备管理 48 | 3. 内存管理 49 | 4. 进程管理 50 | 51 | ## 指令执行过程 52 | 53 | 1. CPU根据PC取出指令,放入IR,并对指令译码,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行 54 | 2. 步骤 55 | 1. 取指:根据PC从存储器或高速缓冲存储器中取指令到IR 56 | 2. 解码:解译IR中的指令来绝对其执行行为 57 | 3. 执行:连接到CPU部件,执行运算,产生结果并写回,同时在CC里设置运算结论标志;跳转指令操作PC,其他指令递增PC值。 58 | 59 | P.S. 60 | 在一条指令进行解码操作时,另一条指令可以开始取指;在进行执行操作时,另一条可以在执行解码,而第三条可以开始取指 61 | 62 | 多道程序同时计算:CPU速度与I/O速度不匹配的矛盾非常突出。只有让多道程序同时进入内存争抢CPU运行,才可以使得CPU和外围设备充分并行,从而提高计算机系统的使用效率 63 | 64 | ## 多道程序设计:指让多个程序同时进入计算机的主存储器进行计算 65 | 66 | ### 特点: 67 | 68 | 1. CPU与外部设备充分并行 69 | 2. 外部设备之间充分并行 70 | 3. 发挥CPU的使用效率 71 | 4. 提高单位时间的算题量 72 | 73 | ### 实现: 74 | 75 | 1. 进程:进入内存执行的程序建立管理实体 76 | 2. OS应能管理与控制进程程序的执行 77 | 3. OS协调管理各类资源在进程间的使用 78 | 1. 处理器的管理和调度 79 | 2. 主存储器的管理和调度 80 | 3. 其他资源的管理和调度 81 | 82 | ### 实现要点: 83 | 84 | 1. 如何使用资源:调用操作系统提供的服务例程(如何陷入操作系统) 85 | 2. 如何复用CPU:调度程序(在CPU空闲时让其他程序运行) 86 | 3. 如何使CPU与I/O设备充分并行:设备控制器与通道(专用的I/O处理器) 87 | 4. 如何让正在运行的程序让出CPU:中断(中断正在执行的程序,引入OS处理) 88 | 89 | ## 操作系统的人机交互 90 | 91 | 1. 交互设备 92 | 1. 传统的终端设备 93 | 2. 新型的模式识别设备 94 | 2. 发展 95 | 1. 交互式控制方式 96 | 1. 行命令控制方式:1960年代开始使用 97 | 2. 全屏幕控制方式:1970年代开始使用 98 | 2. 强调人而不是技术是人机交互的中心 99 | 3. WIMP界面 100 | 1. 窗口(Windows)、图标(Icons)、菜单(Menu)、指示装置(Pointing Devices),图形用户界面 101 | 4. 多媒体计算机 102 | 5. 虚拟现实系统 103 | 104 | ## 处理器模式 105 | 106 | 1. 计算机通过设置处理器模式实现特权指令管理 107 | 2. 计算机一般设置0、1、2、3四种运行模式,建议分别对应: 108 | 1. 0:操作系统内核 109 | 2. 1:系统调用 110 | 3. 2:共享库程序 111 | 4. 3:用户程序等保护级别 112 | 3. 0模式可以执行全部指令;3模式只能执行非特权指令;其他每种运行模式可以规定执行的指令子集 113 | 4. 一般来说,现代操作系统只使用0和3两种模式,对应于内核模式和用户模式 114 | 115 | ### 处理器模式切换 116 | 117 | 1. 简称模式切换,包括“用户模式→内核模式”和“内核模式→用户模式”的转换 118 | 2. 中断、异常或系统异常等事件导致用户程序向OS内核切换,触发:用户模式→内核模式 119 | 1. 程序请求操作系统服务 120 | 2. 程序运行时发生异常 121 | 3. 程序运行时发生并响应中断 122 | 3. OS内核处理完成后,调用中断返回指令(如Inter的iret)触发:内核模式→用户模式 123 | -------------------------------------------------------------------------------- /计算机操作系统(一)——概览.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 计算机组成 4 | 5 | ## 计算机系统 6 | 7 | ### 概念 8 | 9 | 1. 操作系统(Operating System,OS) 10 | 2. OS是计算机系统最基础的系统软件,管理软硬件资源、控制程序执行,改善人机界面,合理组织计算机工作流程,为用户使用计算机提供良好运行环境 11 | 1. 用户角度:OS管理计算机系统的各种资源,扩充硬件的功能,控制程序的执行 12 | 2. 人机交互:OS是用户与机器的接口,提供良好的人机界面,方便用户使用计算机,在整个计算机系统中具有承上启下的地位 13 | 3. 系统结构:OS是一个大型软件系统,其功能复杂,体系庞大,采用层次式、模块化的程序结构 14 | 15 | ### 组成 16 | 17 | 1. 进程调度子系统 18 | 2. 进程通信子系统 19 | 3. 内存管理子系统 20 | 4. 设备管理子系统 21 | 5. 文件管理子系统 22 | 6. 网络通信子系统 23 | 7. 作业控制子系统 24 | 25 | ### 类型 26 | 27 | 1. 操作控制方式 28 | 1. 多道批处理操作系统,脱机控制方式 29 | 2. 分时操作系统,交互式控制方式 30 | 3. 实时操作系统 31 | 2. 应用领域 32 | 1. 服务器操作系统、并行操作系统 33 | 2. 网络操作系统、分布式操作系统 34 | 3. 个人机操作系统、手机操作系统 35 | 4. 嵌入式操作系统、传感器操作系统 36 | 37 | ### 资源 38 | 39 | 1. 硬件资源 40 | 1. 处理器资源:哪个程序占有处理器运行 41 | 2. 内存资源:程序/数据在内存中如何分布 42 | 3. 设备管理:如何分配、去配和使用设备 43 | 2. 信息资源 44 | 1. 数据、程序 45 | 2. 信息资源管理:如何访问文件信息 46 | 3. 信号量资源:如何管理进程之间的通信 47 | 3. 屏蔽资源使用的底层细节 48 | 1. 驱动程序:最底层的、直接控制和监视各类硬件(或文件)资源的部分 49 | 2. 职责是隐藏底层硬件的具体细节,并向其他部分提供一个抽象的、通用的接口 50 | 4. 共享与分配方式 51 | 1. 资源共享方式 52 | 1. 独占使用方式 53 | 2. 并发使用方式 54 | 2. 资源分配策略 55 | 1. 静态分配方式 56 | 2. 动态分配方式 57 | 3. 资源抢占方式 58 | 59 | ### 操作方式 60 | 61 | 1. OS规定了合理操作计算机的工作流程 62 | 2. OS的操作接口——系统程序 63 | OS提供给用户的功能级接口,为用户提供的解决操作计算机和计算共性问题的所有服务的几何 64 | 3. OS的两类作业级接口 65 | 1. 脱机作业控制方式:作业控制语言 66 | 1. OS:提供作业说明语言 67 | 2. 用户:编写作业说明书,确定作业加工控制步骤,并与程序数据一并提交 68 | 3. 操作员:通过控制台输入作业 69 | 4. OS:通过作业控制程序自动控制作业的执行 70 | 2. 联机作业控制方式:操作控制命令 71 | 1. 计算机:提供终端(键盘/显示器) 72 | 2. 用户:登陆系统 73 | 3. OS:提供命令解释程序 74 | 1. 命令解释程序:接受和执行一条用户提出的对作业的加工处理命令 75 | 2. 处理过程 76 | 1. OS启动命令解释程序,输出命令提示符,等待键盘中断/鼠标点击/多通道识别 77 | 2. 每当用户输入一条命令(暂存在命令缓冲区)并按回车换行时,申请中断 78 | 3. CPU响应后,将控制权交给命令解释程序,接着读入命令缓冲区内容,分析命令、接受参数,执行处理代码 79 | 4. 前台命令执行结束后,再次输出命令提示符,等待下一条命令 80 | 5. 后台命令处理启动后,即可接收下条命令 81 | 4. 用户:联机输入命令,直接控制作业步的执行 82 | 83 | ### 程序接口 84 | 85 | 1. 系统调用 86 | 1. 操作系统实现的完成某种特定功能的过程 87 | 2. 为所有运行程序提供访问操作系统的接口 88 | 2. 系统调用实现机制 89 | 1. 陷入处理机制:计算机系统中控制和实现系统调用的机制 90 | 2. 陷入指令(访管指令,异常中断指令):计算机系统为实现系统调用而引起处理器中断的指令 91 | 3. 每个系统调用都事先规定了编号,并在约定寄存器中规定了传递给内部处理程序的参数 92 | 3. 结构设计 93 | 1. OS构件 94 | 1. 内核、进程、线程、管程等 95 | 2. 设计概念 96 | 1. 模块化、层次化、虚拟化 97 | 3. 内核设计是OS设计中最为复杂的部分 98 | 4. 系统调用实现要点 99 | 1. 编写系统调用处理程序 100 | 2. 设计一张系统调用入口地址表,每个入口地址指向一个系统调用的处理程序,并包含系统调用自带参数的个数 101 | 3. 陷入处理机制需开辟现场保护区,以保存发生系统调用时的处理器现场 102 | 103 | ### 内核 104 | 105 | 1. 单内核:内核中各部件杂然混居的形态 106 | 2. 微内核:结构性部件与功能性部件的分离 107 | 3. 混合内核:微内核和单内核的折中,较多组件在核心态中运行,以获得更快的执行速度 108 | 4. 外内核:尽可能减少内核的软件抽象化和传统微内核的消息传递机制 109 | 110 | ### 层次式结构 111 | 112 | 1. 第一种 113 | 1. 用户模式 114 | 1. 用户 115 | 2. 文件系统 116 | 2. 内核模式 117 | 1. 进程交互 118 | 2. I/O设备管理 119 | 3. 虚存 120 | 4. 基本进程管理 121 | 5. 硬件 122 | 2. 第二种 123 | 1. 用户 124 | 1. 命令、进程、库、环境 125 | 2. 文件系统调用 126 | 1. 用户进程管理 127 | 2. 目录管理 128 | 3. 设备文件 129 | 4. 文件系统 130 | 5. 管道等高阶通信 131 | 6. 内存与虚拟内存管理 132 | 3. 软硬件协同内核 133 | 1. 块设备管理、I/O控制 134 | 2. 核心进程管理、控制与通信原语 135 | 3. 中断管理 136 | 4. 过程机制 137 | 4. 硬件电路 138 | 1. 指令解译 139 | 2. 电路执行 140 | 141 | ## 硬件系统 142 | 143 | ### 中央处理器 144 | 145 | 1. 中央处理器(CPU)是计算机的运算核心(Core)和控制单元(Control Unit),主要包括: 146 | 1. 运算逻辑部件:一个或多个运算器 147 | 2. 寄存器部件:包括通用寄存器、控制与状态寄存器,以及高速缓冲存储器(Cache) 148 | 3. 控制部件:实现各部件间联系的数据、控制及状态的内部总线;负责对指令译码、发出为完成每条指令所要执行操作的控制信号、实现数据传输等功能的部件 149 | 2. 处理器与寄存器 150 | 1. 运算单元 151 | 2. 控制单元 152 | 3. 内部总线 153 | 4. PC/IR/Flag(程序计数器/指令暂存器/标志寄存器) 154 | 5. MAR/MDR(内存地址寄存器MAR/内存数据寄存器MDR) 155 | 6. 寄存器 156 | 1. 用户程序可见寄存器 157 | 1. 可以使程序员减少访问主存储器的次数,提高指令执行的效率 158 | 2. 所有程序可使用,包括应用程序和系统程序 159 | ​ 1. 数据寄存器:又称通用寄存器 160 | ​ 2. 地址寄存器:索引、栈指针、段指针等寄存器 161 | 2. 控制与状态寄存器 162 | 1. 用于控制处理器的操作;主要被具有特权的操作系统程序使用,以控制程序的执行 163 | 2. 程序计数器PC:存储将取指令的地址 164 | 3. 指令寄存器IR:存储最近使用的指令 165 | 4. 条件码CC:CPU为指令操作结果设置的位,标志正/负/零/溢出等结果 166 | 5. 标志位:中断位、中断允许位、中断屏蔽位、处理器模式位、内存保护位等 167 | 3. 程序状态字PSW 168 | 1. PSW既是操作系统的概念,指记录当前程序运行的动态信息,通常包含: 169 | 1. 程序计数器,指令寄存器,条件码 170 | 2. 中断字,中断运行/禁止,中断屏蔽,处理器模式,内存保护、调试控制 171 | 2. PSW也是计算机系统的寄存器 172 | 1. 通常设置一组控制与状态寄存器 173 | 2. 也可以专设一个PSW寄存器 174 | 7. Cache 175 | 8. IOAR/IODR 176 | 177 | ### 主存储器 178 | 179 | 1. 存储器的组织层次(由上到下,容量更大、速度更慢、价格更低,单位都是字节) 180 | 1. L0:寄存器 181 | 2. L1:L1 Cache(SRAM,静态随机存储器) 182 | 3. L2:L2 Cache(SRAM) 183 | 4. L3:L3 Cache(SRAM) 184 | 5. L4:主存(DRAM,动态随机存储器) 185 | 6. L5:SSD(本地固态硬盘) 186 | 7. L6:本地外存储器(本地硬盘) 187 | 8. L7:远程外存储器(分布式文件系统、Web服务器) 188 | 189 | ### 外围设备 190 | 191 | 1. 类型 192 | 1. 输入设备 193 | 2. 输出设备 194 | 3. 存储设备 195 | 4. 网络通信设备 196 | 2. 控制方式 197 | 1. 轮询方式:CPU忙式控制+数据交换 198 | 2. 中断方式:CPU启动/中断+数据交换 199 | 3. DMA方式:CPU启动/中断,DMA数据交换 200 | 201 | ### 总线 202 | 1. 定义及其组成 203 | 1. 总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是CPU、内存、输入输出设备传递信息的公用通道 204 | 2. 计算机的各个部件通过总线相连接,外围设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统 205 | 3. 按照所传输的信息种类,总线包括一组控制线,一组数据线和一组地址线 206 | 2. 类型 207 | 1. 内部总线:用于CPU芯片内部连接各元件 208 | 2. 系统总线:用于连接CPU、存储器和各种I/O模块等主要部件 209 | 3. 通信总线:用于计算机系统之间的通信 210 | 211 | ## 软件系统 212 | 213 | 1. 系统软件:操作系统、实用程序、语言处理程序、数据库管理系统 214 | 1. 操作系统实施对各种软硬件资源的管理控制 215 | 2. 实用程序为方便用户所设,如文本编辑等 216 | 3. 语言处理程序把汇编语言/高级语言编写的程序,翻译成可执行的机器语言程序 217 | 2. 支撑软件的有接口软件、工具软件、环境数据库 218 | 3. 支持用户使用计算机的环境,提供开发工具也可以认为是系统软件的一部分 219 | 4. 应用软件是用户按其需要自行编写的专用程序 220 | -------------------------------------------------------------------------------- /计算机操作系统(三)——进程.md: -------------------------------------------------------------------------------- 1 | # 进程 2 | [TOC] 3 | ## 定义 4 | 5 | 1. 操作系统必须全方位地管理计算机系统中运行的程序。因此,操作系统为正在运行程序建立一个管理实体——进程 6 | 2. 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动 7 | 3. 进程是操作系统进行资源分配和调度的一个独立单位 8 | 9 | ### 一个进程包括五个部分 10 | 11 | 1. (OS管理运行程序的)数据结构P 12 | 2. (运行程序的)内存代码C 13 | 3. (运行程序的)内存数据D 14 | 4. (运行程序的)通用寄存器信息R 15 | 5. (OS控制程序执行的)程序状态字信息PSW 16 | 17 | ### 概念级的进程状态 18 | 19 | 1. 运行态:进程占有处理器运行 20 | 2. 就绪态:进程具备运行条件等待处理器运行 21 | 3. 等待态:进程由于等待资源、输入输出、信号等而不具备运行条件 22 | 23 | ### 三态模型 24 | 25 | 1. 运行态→等待态:等待资源、I/O、信号 26 | 2. 等待态→就绪态:资源满足、I/O结束、信号完成 27 | 3. 就绪态→运行态;处理器空闲时选择更高优先权进程抢占 28 | 4. 运行态→就绪态:运行时间片刻、有更高优先权进程 29 | 30 | ### 进程挂起 31 | 32 | 1. OS无法预期进程的数目与资源需求,计算机系统在运行过程中可能出现资源不足的情况 33 | 2. 运行资源不足表现为性能低和死锁两种情况 34 | 3. 解决办法(进程挂起):剥夺某些进程的内存及其他资源,调入OS管理的对换区,不参加进程调度,待适当时候再调入内存、恢复资源、参与运行 35 | 4. 挂起态与等待态有着本质区别,后者占有已申请到的资源处于等待,前者没有任何资源 36 | 37 | ### 进程挂起的选择与恢复 38 | 39 | 1. 选择等待态、就绪态进程进入挂起等待态 40 | 2. 运行态进程可以挂起自己 41 | 3. 等待事件结束后,挂起就绪态 42 | 4. 一般选择挂起就绪态进程予以恢复 43 | 44 | ## 进程控制块(Process Control Block) 45 | 46 | ### PCB是OS用于记录和刻画进程状态及环境信息的数据结构 47 | ### 借助PCB,OS可以全面管理进程物理实体,刻画进程的执行现状,控制进程的执行 48 | ### 划分 49 | #### 标识信息 50 | 51 | 1. 进程标识 52 | 2. 用于存放唯一标识该进程的信息 53 | 1. 系统分配的标识号 54 | 2. 系统分配的进程组标识号 55 | 3. 用户定义的进程名 56 | 4. 用户定义的进程组名 57 | 58 | #### 现场信息 59 | 60 | 1. 用户可见寄存器内容 61 | 2. 控制/状态寄存器内容 62 | 3. 用户/核心栈指针 63 | 4. 用于存放该进程运行时的处理器现场信息 64 | 1. 用户可见寄存器内容:数据寄存器、地址寄存器 65 | 2. 控制与状态寄存器内容:PC、IR、PSW 66 | 3. 栈指针内容:核心栈与用户栈指针 67 | 68 | #### 控制信息:用于存放与管理、调度进程相关的信息 69 | 70 | 1. 调度相关信息:状态、等待事件/原因、优先级 71 | 2. 进程组成信息:代码/数据地址、外存映像地址 72 | 3. 队列指引元:进程队列指针、父子兄弟进程指针 73 | 4. 通信相关信息:消息队列、信号量、锁 74 | 5. 进程特权信息:内存访问权限、处理器特权 75 | 6. 处理器使用信息:占用的处理器、时间片、处理器使用事件/已执行总时间、记账信息 76 | 7. 资源清单信息:正占用的资源、已使用的资源 77 | 78 | ## 进程切换与模式切换 79 | 80 | 1. 一些中断/异常不会引起进程状态转换,不会引起进程切换,只是在处理完成后把控制权交回给被中断进程 81 | 82 | ### 处理流程: 83 | 1. (中断/异常触发)正向模式切换压入PSW/PC 84 | 2. 保存被中断进程的现场信息 85 | 3. 处理中断/异常 86 | 4. 恢复被中断进程的现场信息 87 | 5. (中断返回指令触发)逆向模式转换弹出PSW/PC 88 | 89 | ## 模式切换(处理器状态切换) 90 | 91 | 1. 进程切换必须在操作系统内核模式下完成,这就需要模式切换 92 | 93 | ### 切换: 94 | 95 | 1. 用户模式到内核模式:由中断/异常/系统调用中断用户进程执行而触发 96 | 2. 内核模式到用户模式:OS执行中断返回指令将控制权交还用户进程而触发 97 | 98 | ### 基本工作任务 99 | 100 | 1. 中断装置完成正向模式切换,包括: 101 | 1. 处理器模式转为内核模式 102 | 2. 保存当前进程的PC/PSW值到核心栈 103 | 3. 转向中断/异常/系统调用处理程序 104 | 2. 中断返回指令完成逆向模式转换,包括: 105 | 1. 从待运行进程核心栈中弹出PSW/PC值 106 | 2. 处理器模式转为用户模式 107 | 108 | ## 进程切换 109 | ### 进程切换指从正在运行的进程中收回处理器,让待运行进程来占有处理器运行 110 | ### 进程切换实质上就是被中断运行进程与待运行进程的上下文切换,处理过程: 111 | 112 | 1. 保存被中断进程的上下文 113 | 2. 转向进程调度 114 | 3. 恢复待运行进程的上下文 115 | 116 | ### 工作过程 117 | 118 | 1. (中断/异常等触发)正向模式切换并压入PSW 119 | 2. 保存被中断进程的现场信息 120 | 3. 处理具体中断/异常 121 | 4. 把被中断进程的系统堆栈指针SP值保存到PCB 122 | 5. 调整被中断进程的PCB信息,如进程状态 123 | 6. 把被中断进程的PCB加入相关队列 124 | 7. 选择下一个占用CPU运行的进程 125 | 8. 修改被选中进程的PCB信息,如进程状态 126 | 9. 设置被选中进程的地址空间,恢复存储管理信息 127 | 10. 恢复被选中进程的SP值到处理器寄存器SP 128 | 11. 恢复被选中进程的现场信息进入处理器 129 | 12. (中断返回指令触发)逆向模式转换并弹出PSW/PC 130 | 131 | ### 发生时机:进程切换一定发生在中断/异常/系统调用处理过程中 132 | 133 | 1. 阻塞式系统调用、虚拟地址异常导致被中断进程进入等待态 134 | 2. 时间片中断、I/O中断后发现更高优先级进程导致被中断进程转入就绪态 135 | 3. 终止用系统调用、不能继续执行的异常导致被中断进程进入终止态 136 | 137 | ## 原语与进程控制原语 138 | 139 | 1. 进程控制过程中涉及对OS核心数据结构(进程表/PCB池/队列/资源表)的修改 140 | 2. 为防止与时间有关的错误,应使用原语 141 | 3. 原语是由于若干条指令构成的完成某种特定功能的程序,执行上具有不可分割性 142 | 4. 原语的执行可以通过关中断实现 143 | 5. 进程控制使用的原语称为进程控制原语 144 | 6. 另一类常用原语是进程通信原语 145 | 146 | ## 进程的控制与管理 147 | 148 | 1. 进程创建:进程表加一项,申请PCB并初始化,生成标识,建立映像,分配资源,移入就绪队列 149 | 2. 进程撤销:从队列中移除,归还资源,撤销标识,回收PCB,移除进程表项 150 | 3. 进程阻塞:保存现场信息,修改PCB,移入等待队列,调度其他进程执行 151 | 4. 进程唤醒:等待队列中移除,修改PCB,移入就绪队列(该进程优先级高于运行进程触发抢占) 152 | 5. 进程挂起:修改状态并出入相关队列,收回内存等资源送至对换区 153 | 6. 进程激活:分配内存,修改状态并出入相关队列 154 | 7. 其他:如修改进程特权 155 | 156 | ## 队列管理模块 157 | 158 | 1. 队列管理模块是操作系统实现进程管理的核心模块 159 | 2. 操作系统建立多个进程队列,包括就绪队列和等待队列 160 | 3. 按需组织为先进先出队列与优先队列 161 | 4. 队列中的进程可以通过PCB中的队列指引元采用单/双指引元或索引连接 162 | 5. 出队与入队操作 163 | 6. 进程与资源调度围绕进程队列展开 164 | 165 | ## 关键的进程管理软件 166 | 167 | ### 系统调用/中断/异常处理程序 168 | ### 队列管理模块 169 | ### 进程控制程序 170 | ### 进程调度程序(独立进程居多) 171 | ### 进程通信程序(多个程序包) 172 | ### 终端登陆与作业控制程序、性能监控程序、审计程序等外围程序 173 | 174 | ## 进程上下文(Process context) 175 | 176 | 1. 进程的执行需要环境支持,包括CPU现场和Cache中的执行信息 177 | 2. OS中的进程物理实体和支持进程运行的环境合成进程上下文,包括以下: 178 | 1. 用户级上下文:用户程序块/用户数据区/用户栈/用户共享内存 179 | 2. 寄存器上下文:PSW/栈指针/通用寄存器 180 | 3. 系统级上下文:PCB/内存区表/核心栈 181 | 3. 进程上下文刻画了进程的执行情况 182 | 183 | ## 进程映像(Process Image) 184 | 1. 某一时刻进程的内容及其执行状态集合 185 | 1. 进程控制块:保存进程的标识信息、状态信息和控制信息 186 | 2. 进程程序块:进程处理的数据空间,包括数据、处理函数的用户栈可修改的程序 187 | 3. 核心栈:进程在内核模式下运行时使用的堆栈,中断或系统过程使用 188 | 2. 进程映像是内存级的物理实体,又称为进程的内存映像 189 | 190 | ## 线程 191 | ### 传统进程是单线程结构进程 192 | #### 问题: 193 | 194 | 1. 进程切换开销大 195 | 2. 进程通信开销大 196 | 3. 限制了进程并发的粒度 197 | 4. 降低了并行计算的效率 198 | 199 | #### 解决思路: 200 | 201 | 1. 分离两个功能,”独立分配资源“与”被调度分派执行“ 202 | 2. 进程作为系统资源分配和保护的独立单位,不需要频繁地切换 203 | 3. 线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换 204 | 4. 线程的出现会减少进程并发执行所付出的时空开销,使得并发粒度更细、并发性更好 205 | 206 | ### 多线程环境下进程的概念 207 | 1. 在多线程环境中,进程是操作系统中进行保护和资源分配的独立单位,具有: 208 | 1. 用来容纳进程映像的虚拟地址空间 209 | 2. 对进程、文件和设备的存取保护机制 210 | 211 | ### 多线程环境下线程的概念 212 | 213 | 1. 线程是进程的一条执行路径,是调度的基本单位,同一个进程中的所有线程共享进程获得的主存空间和资源。它具有: 214 | 1. 线程执行状态 215 | 2. 受保护的线程上下文,当线程不运行时,用于存储线程信息 216 | 3. 独立的程序指令计数器 217 | 4. 执行堆栈 218 | 5. 容纳局部变量的静态存储器 219 | 220 | ### 多线程环境下线程的状态与调度 221 | 222 | 1. 线程状态有运行、就绪和睡眠,无挂起 223 | 2. 与线程状态变化有关的线程操作有: 224 | 1. 孵化、封锁、活化、剥夺、指派、结束 225 | 3. OS感知线程环境下: 226 | 1. 处理器调度对象是线程 227 | 2. 进程没有三状态(或者说只有挂起状态) 228 | 4. OS不感知线程环境下: 229 | 1. 处理器调度对象仍是进程 230 | 2. 用户空间中的用户调度程序调度线程 231 | 232 | ### 并发多线程程序设计的优点 233 | 234 | 1. 快速线程切换 235 | 2. 减少(系统)管理开销 236 | 3. (线程)通信易于实现 237 | 4. 并行程序提高 238 | 5. 节省内存空间 239 | 240 | ### 多线程技术的应用 241 | 242 | 1. 前台和后台工作 243 | 2. C/S应用模式 244 | 3. 加快执行速度 245 | 4. 设计用户接口 246 | 247 | ### 内核级线程(KLT,Kernel-Level Threads) 248 | 249 | 1. 线程管理的所有工作由OS内核来做 250 | 2. OS提供了一个应用程序设计接口API,供开发者使用KLT 251 | 3. OS直接调度KLT 252 | 4. KLT适用于解决物理并行性问题 253 | 5. 特点 254 | 1. 进程中的一个线程被阻塞了,内核能调度同一进程的其他线程占用处理器运行 255 | 2. 多处理器环境中,内核能同时调度同一进程中多个线程并行执行 256 | 3. 内核自身也可用多线程技术实现,能提高操作系统的执行速度和效率 257 | 4. 应用程序线程在用户态运行,线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要模式切换,系统开销较大 258 | 259 | ### 用户级线程(ULT,User-Level Threads) 260 | 1. 用户空间运行的线程库,提供多线程应用程序的开发和运行支撑环境 261 | 2. 任何应用程序均需通过线程库进行程序设计,再与线程库连接后运行 262 | 3. 线程管理的所有工作都由应用程序完成,内核没有意识到线程的存在 263 | 4. ULT适用于解决逻辑并行性问题 264 | 5. 特点 265 | 1. 所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源 266 | 2. 允许进程按应用特定需要选择调度算法,甚至根据应用需要裁剪调度算法 267 | 3. 能运行在任何OS上,内核在支持ULT方面不需要做任何工作 268 | 4. 不能利用多处理器的优点,OS调度进程,仅有一个ULT能执行 269 | 5. 一个ULT的阻塞,将引起整个进程的阻塞 270 | 271 | ### Jacketing技术 272 | 273 | 1. 把阻塞式系统调用改造成非阻塞式的 274 | 2. 把线程陷入系统调用时,执行jacketing程序 275 | 3. 由jacketing程序来检查资源使用情况,以决定是否执行进程切换或传递控制权给另一个线程 276 | 277 | ### 多线程实现的混合式策略 278 | 279 | 1. 线程创建是完全在用户空间做的 280 | 2. 单应用的多个ULT可以映射成一些KLT,通过调整KLT数目,可以达到较好的并行效果 281 | 3. 特点 282 | 1. 组合ULT/KLTs设施 283 | 2. 线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行 284 | 3. 一个应用中的多个ULT被映射到一些(小于等于ULT数目)内核级线程上 285 | 4. 程序员可以针对特定应用和机器调节KLT数目,以达到整体最佳结果 286 | 5. 该方法将会结合纯粹ULT方法和KLT方法的优点,同时减少它们的缺点 287 | 288 | ### 线程混合式策略下的线程状态 289 | 290 | 1. KLT负责三态,系统调用负责 291 | 2. ULT负责三态,用户调度负责 292 | 3. 活跃态ULT代表绑定KLT的三态 293 | 4. 活跃态ULT运行时可激活用户调度 294 | 5. 非阻塞系统调用可使用Jacketing启动用户调度,调整活跃态ULT 295 | -------------------------------------------------------------------------------- /计算机操作系统(七)——IO存储管理.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # I/O存储管理 4 | 5 | ## I/O设备(外围设备,外部设备,外设) 6 | ### 定义 7 | 1. 现代计算机系统通常配备大量的I/O设备,用于计算机系统与外部世界(如用户、其他计算机或电子设备等)进行信息交换或存储 8 | 2. I/O操作:内存和I/O设备之间的信息传送操作 9 | 1. 不仅影响计算机的通用性和可扩充性,也是计算机系统综合处理能力及性价比的重要因素 10 | 11 | ### 分类 12 | 1. 按信息传输方向划分 13 | 1. 输入设备:将外界信息输入计算机(键盘、鼠标、扫描仪等) 14 | 2. 输出设备:将计算结果输出(显示器、打印机等) 15 | 3. 输入输出设备:既可以输入信息,也可以输出信息(磁盘驱动器、网卡等) 16 | 2. 按交互功能划分 17 | 1. 人机交互设别:用于用户与计算机之间的交互通信(鼠标、键盘、显示器等) 18 | 2. 存储设备:持久性存储大量信息并快速检索(磁盘驱动器、光盘驱动器等) 19 | 3. 机机通信设备:用于计算机和计算机之间的通信(网卡、调制解调器等) 20 | 3. 按设备管理划分 21 | 1. 字符设备:以字符为单位进行信息交换,发送或接收一个字符流(鼠标、显示器等) 22 | 2. 块设备:以固定大小的数据块(块是存储介质上联系信息组成的一个区域)进行信息交换(磁盘驱动器等) 23 | 3. 网络设备:用于与远程设备通信的设备(网卡等,可以抽象为传送字符流的特殊字符设备,也可以抽象为传送连续小块数据的块设备) 24 | 25 | ### 设备管理目标 26 | 1. 克服设备和CPU速度的不匹配所引起的问题,使主机和设备并行工作,提高设备使用效率 27 | 2. 对设备进行抽象,屏蔽设备的物理细节和操作过程,配置驱动程序,提供统一界面,供用户或高层软件使用 28 | 1. 抽象为文件系统中的节点,统一管理 29 | 2. 裸设备:不被操作系统直接管理,由应用程序读写,I/O效率更高 30 | 31 | ### 设备管理功能 32 | 1. 设备中断处理 33 | 2. 缓冲区处理 34 | 3. 设备的分配和去配 35 | 4. 设备驱动调度 36 | 5. 实现虚拟设备 37 | 38 | ### 设备管理层次 39 | 1. I/O硬件 40 | 1. I/O设备及其接口线路 41 | 2. 控制部件 42 | 3. 通道 43 | 2. I/O软件 44 | 1. 系统I/O软件 45 | 2. 用户空间I/O软件 46 | 47 | ## 设备控制器(设备适配器、I/O控制器、I/O控制接口、I/O模块或I/O接口) 48 | ### 定义 49 | 1. 为达到模块化和通用性的设计目标,通常将I/O设备中的机械部件和电子部件分开处理 50 | 2. 其中,电子部件称为设备控制器 51 | 3. 操作系统与控制器交互,而非与设备交互 52 | 53 | ### 功能:CPU与设备之间的接口 54 | 1. 接收和识别CPU或通道发来的命令 55 | 2. 实现数据交换 56 | 3. 发现和记录设备及自身的状态信息,供CPU处理使用 57 | 4. 当连接多台设备时,设备地址识别 58 | 59 | ### 组成部分 60 | 1. 状态/控制寄存器 61 | 2. 数据缓冲寄存器 62 | 3. 地址译码器和I/O控制逻辑 63 | 4. 外设接口控制逻辑 64 | 5. P.S 65 | 1. 主机侧(I/O总线)接1、2、3 66 | 2. 设备侧(接口电缆)接4(多个) 67 | 3. 数据线连接1和2,地址线和控制线接3,数据状态控制接4 68 | 4. 1,2与3连接,4与3连接 69 | 70 | ### 轮询方式 71 | 1. 流程: 72 | 1. 处理器向控制器发送一个I/O命令 73 | 2. 如果设备未就绪,则重复测试过程,直至设备就绪 74 | 3. 执行数据交换 75 | 4. 等待I/O操作完成后,才可以继续其他操作 76 | 2. 处理I/O请求会终止原程序的执行 77 | 3. CPU需要等待I/O设备就绪 78 | 4. CPU需要参与数据传送 79 | 5. CPU和设备只能串行工作,效率低下 80 | 81 | ### 中断方式 82 | 1. 流程: 83 | 1. 处理器向控制器发出一个I/O命令,然后继续执行后续指令 84 | 1. 如果该进程不需要等待I/O完成,后续指令可以仍是该进程中的指令 85 | 2. 否则,该进程在这个中断上挂起,处理器执行其他工作 86 | 2. 控制器检查设备状态,就绪后发起中断 87 | 3. CPU响应中断,转向中断处理程序 88 | 4. 中断处理程序执行数据读写操作 89 | 5. 恢复执行原先的程序 90 | 2. 响应中断后会终止原程序的执行 91 | 3. CPU不需要等待I/O设备就绪 92 | 4. CPU需要参与数据传送 93 | 5. CPU和设备部分并行操作,效率有所提高 94 | 95 | ### 直接存储器访问(DMA) 96 | 1. DMA模块:模仿处理器来控制主存和设备控制器之间的数据交换 97 | 2. 流程: 98 | 1. 处理器向DMA模块发出I/O命令 99 | 2. 处理器继续执行其他工作,DMA模块负责传送全部数据 100 | 3. 数据传送结束后,DMA中断处理器 101 | 3. 方式 102 | 1. CPU不会终止原程序的执行 103 | 2. CPU只在数据传送的开始和结束时参与 104 | 1. 开始时,CPU需要对DMA模块进行初始化 105 | 2. 结束时,CPU响应中断,但不必保存现场 106 | 3. 周期窃取 107 | 1. 当DMA和CPU同时经总线访问内存时,CPU总是将总线的占有权让给DMA一个或几个主存周期 108 | 2. 周期窃取对延迟CPU与主存的数据交换影响不大 109 | 1. 数据传送过程是不连续的和不规则的 110 | 2. CPU大部分情况下与Cache进行数据交换,直接访问内存较少 111 | 112 | ### I/O通道(通道控制器、I/O处理器) 113 | 1. 设备控制器包含自身专用的处理器和通道程序 114 | 1. I/O指令不再由处理器执行,而是存在主存中,由I/O通道所包含的处理器执行 115 | 2. 采用四级连接:处理器,通道,控制器,设备 116 | 1. 可控制多台同类或不同类的设备 117 | 3. 流程: 118 | 1. CPU在遇到I/O请求,启动指定通道 119 | 2. 一旦启动成功,通道开始控制I/O设备进行操作,CPU执行其他任务 120 | 3. I/O操作完成后,I/O通道发出中断,CPU停止当前工作,转向处理I/O操作结束事件 121 | 4. CPU与通道并行工作 122 | 5. 带有局部存储器的I/O通道 123 | 1. 相当于一台自治的计算机:I/O指令存储在控制器自带的局部存储器中,并由I/O通道所包含的处理器执行 124 | 6. 可以控制大量的I/O设备,同时最小化CPU的干涉 125 | 7. 常用于交互式终端通信,负责包括控制终端在内的大部分任务 126 | 127 | ### I/O控制方式的演化 128 | 1. 采用轮询方式的设备控制器:CPU需要等待设备就绪,且参与数据传送 129 | 2. 采用中断方式的设备控制器:CPU无需等待设备就绪,但响应中断后参与数据传送 130 | 3. 通过DMA直接控制存储器:CPU在数据传送开始和结束时参与,与主存进行数据交换时不参与 131 | 132 | ### I/O发展对总线的影响 133 | #### 单总线 134 | 1. 将CPU、主存和I/O模块连接到同一组总线上 135 | 2. 优点:结构简单,易于扩充 136 | 3. 缺点:主存需要和I/O模块共用总线;设备增多会造成总线变长,进而增加传输时延;无法适用于大量高速设备 137 | 138 | #### 传统的三级总线 139 | 1. 主存和Cache通过主存总线传送数据,主存总线和扩展总线上的I/O设备之间传送数据通过扩展总线接口缓冲 140 | 2. 优点:主存与I/O之间的数据传送与处理器的活动分离;可以支持更多的I/O设备 141 | 3. 缺点:不适用于I/O设备数据速率相差太大的情形 142 | 143 | #### 采用南北桥的多级总线 144 | 1. 通过存储总线、PCI总线、E(ISA)总线分别连接主存、高速I/O设备和低速I/O设备 145 | 2. 优点:可以支持不同数据速率的I/O设备 146 | 147 | #### 采用I/O通道的多级总线 148 | 1. 支持CPU、主存和多个I/O通道之间的数据传送 149 | 2. 支持I/O通道和I/O控制器,以及I/O控制器,以及I/O控制器和设备之间的数据传送 150 | 151 | ## I/O软件 152 | ### 设计目标 153 | 1. 高效率:改善设备效率,尤其是磁盘I/O操作的效率 154 | 2. 通用性:用统一的标准来管理所有设备 155 | 156 | ### 设计思路 157 | 1. 把软件组织称层次结构,低层软件用来屏蔽硬件细节,高层软件向用户提供简洁、友善的界面 158 | 159 | ### 主要考虑的问题 160 | 1. 设备无关性:编写访问文件的程序与具体设备无关 161 | 2. 出错处理:低层软件能处理的错误不让高层软件感知 162 | 3. 同步/异步传输:支持阻塞和中断驱动两种工作方式 163 | 4. 缓冲技术:建立数据缓冲区,提高吞吐率 164 | 165 | ## I/O中断处理程序 166 | 1. 位于操作系统底层,与硬件设备密切相关,与系统其余部分尽可能少地发生联系 167 | 2. 进程请求I/O操作时,通常被挂起,直到数据传输结束后并产生I/O中断时,操作系统接管CPU后转向中断处理程序 168 | 3. 当设备向CPU提出中断请求时,CPU响应请求并转入中断处理程序 169 | 4. 功能: 170 | 1. 检查设备状态寄存器内容,判断产生中断的原因,根据I/O操作的完成情况进行相应的处理 171 | 1. 如果数据传输有错,向上层软件报告设备的出错信息,实施重新执行 172 | 2. 如果正常结束,唤醒等待传输的过程,使其转换为就绪态 173 | 3. 如果有等待传输的I/O命令,通知相关软件启动下一个I/O请求 174 | 175 | ## 设备驱动程序 176 | 1. 包括与设备密切相关的所有代码 177 | 2. 从独立于设备的软件中接收并执行I/O请求 178 | 1. 把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行 179 | 2. 监督设备是否正确执行,管理数据缓冲区,进行必要的纠错处理 180 | 3. 功能: 181 | 1. 设备初始化 182 | 1. 在系统初次启动或设备传输数据时,预置设备和控制器以及通道状态 183 | 2. 执行设备驱动例程 184 | 1. 负责启动设备,进行数据传输 185 | 2. 对于具有通道方式,还负责生成通道指令和通道程序,启动通道工作 186 | 3. 调用和执行中断处理程序 187 | 1. 负责处理设备和控制器及通道所发出的各种中断 188 | 4. 层次: 189 | 1. 每个设备驱动程序只处理一种设备,或者一类紧密相关的设备 190 | 2. 设备驱动程序分为整体驱动程序和分层驱动程序 191 | 1. 整体驱动程序直接向操作系统提供接口和控制硬件 192 | 1. 适用于功能简单的驱动程序,效率较高,但较难迁移 193 | 2. 分层驱动程序将驱动程序分成多层,放在栈中,系统接到I/O请求时先调用栈顶的驱动程序,栈顶的驱动程序可以直接处理请求或向下调用更底层的驱动程序,直至请求被处理 194 | 1. 适用于功能复杂,重用性要求较高的驱动程序,结构清晰且便于移植,但会增加一部分系统开销 195 | 196 | ## 独立于设备的I/O软件 197 | 1. 执行适用于所有设备的常用I/O功能,并向用户层软件提供一致性接口 198 | 2. 功能: 199 | 1. 设备命名:通过路径名寻址设备 200 | 2. 设备保护:检查用户是否有权访问所申请设备 201 | 3. 提供与设备无关的数据单位:字符数量,块尺寸 202 | 4. 缓冲技术:传输速率,时间约束,不能直接送达目的地 203 | 5. 设备分配和状态跟踪:分配到不同类型的设备 204 | 6. 错误处理和报告:驱动程序无法处理的错误 205 | 206 | ## 用户空间的I/O软件 207 | ### 库函数 208 | 1. 一小部分I/O软件不在操作系统中,是与应用程序链接在一起的库函数,甚至完全由运行于用户态的程序组成 209 | 2. 系统调用通常由库函数封装后供用户使用,封装函数只是将系统调用所用的参数放在合适位置,然后执行访管指令来陷入内核,再由内核函数实现真正的IO操作 210 | ### SPOOLing软件 211 | 1. 在内核外运行的系统I/O软件,采用预输入、缓输出和井管理技术,通过创建守护进程和特殊目录解决独占型设备的空占问题 212 | ## I/O缓冲 213 | ### 目的:解决CPU与设备之间速度不匹配的矛盾,协调逻辑记录大小和物理记录大小不一致的问题,提高CPU和设备的并行性,减少I/O操作对CPU的中断次数,放宽对CPU中断响应时间的要求 214 | ### 缓冲区:在内存中开辟的存储区,专门用于临时存放I/O操作的数据 215 | ### 操作: 216 | 1. 写操作:将数据送至缓冲区,直到装满,进程继续计算,同时系统将缓冲区的内容写到设备上 217 | 2. 读操作:系统将设备上的物理记录读至缓冲区,根据要求将当前所需要的数据从缓冲区中读出并传送给进程 218 | 219 | ### 单缓冲:操作系统在主存的系统区中开设一个缓冲区 220 | 1. 输入:将数据读至缓冲区,系统将缓冲区数据送至用户区,应用程序对数据进行处理,同时系统读入接下来的数据 221 | 2. 输出:把数据从用户区复制到缓冲区,系统将数据输出后,应用程序继续请求输出 222 | 223 | ### 双缓冲:使用两个缓冲区 224 | 1. 输入:设备先将数据输入缓冲区1,系统从缓冲区1把数据传到用户区,供应用程序处理,同时设备将数据传送到缓冲区2 225 | 2. 输出:应用程序将数据从用户传送到缓冲区1,系统将数据传送到设备,同时应用程序将数据传送到缓冲区2 226 | 227 | ### 循环缓冲:操作系统分配一组缓冲区,每个缓冲区都有指向下一个缓冲区的链接指针,构成循环缓冲 228 | 1. 解决设备和进程速度不匹配的问题 229 | 2. 为系统公共资源,供进程共享并由系统统一分配和管理 230 | 231 | ## 设备独立性 232 | 1. 作业执行前会对设备提出申请时,指定某台具体的物理设备会让设备分配变得简单,但如果所指定设备出现故障,即便计算机系统中有同类设备也不能运行 233 | 2. 设备独立性 234 | 1. 用户通常不指定物理设备,而是指定逻辑设备,使得用户作业和物理设备分离开来,再通过其他途径建立逻辑设备和物理设备之间的映射 235 | 3. 设备管理中需要将逻辑设备名转换为物理设备名,为此系统需要提供逻辑设备名和物理设备名的对应表以供转换使用 236 | 4. 微型计算机的操作系统中不一定支持设备独立性 237 | 5. 优点: 238 | 1. 应用程序与具体物理设备无关,系统增减或变更设备时不需要修改源程序 239 | 2. 易于应对I/O设备故障,提高系统可靠性 240 | 3. 增加设备分配的灵活性,更有效地利用设备资源,实现多道程序设计 241 | 242 | ## 设备分配方式 243 | ### 独占设备 244 | 1. 只能由一个进程独占式使用 245 | 2. 可以让多个进程同时使用的设备称为"共享设备“,其管理工作主要是驱动调度和实施驱动,一般不必分配 246 | 247 | ### 分配方式 248 | 1. 静态分配:实现简单,能够防止系统发生死锁,但会降低设备利用率 249 | 2. 动态分配:提高设备利用率 250 | 251 | ## 设备分配的数据结构 252 | ### 设备类表 253 | 1. 每类设备对应于设备类表的中一栏 254 | 2. 包括:设备类,总台数,空闲台数,设备表起始地址等 255 | 3. 支持设备独立性时才会使用 256 | 257 | ### 设备表 258 | 1. 每类设备都有各自的设备表,用来登记这类设备中的每台物理设备 259 | 2. 包括:物理设备名(号),逻辑设备名(号),占有设备的进程号,是否分配,好/坏标志等 260 | 261 | ## 磁盘结构 262 | ### 基本概念 263 | 1. 磁盘由多个盘片组成 264 | 2. 每个盘片被划分为多个同心圆结构的磁道 265 | 1. 不同盘片上位于相同位置的磁道构成的圆柱体称为柱面 266 | 3. 每个磁道分为固定多个或不等个数的扇区 267 | 1. 为了对大量扇区寻址,操作系统将相邻的扇区组合成簇存储文件 268 | 4. 物理块(扇区)地址:(柱面号,磁头号,扇区号) 269 | 1. 区别:“0面0道”中的“面”是指磁头,不是柱面 270 | 271 | ### 磁盘读写数据 272 | 1. 读写数据时,磁头必须定位到指定的磁道上的指定扇区的开始处 273 | 2. 过程: 274 | 1. 寻道:控制移动臂到达指定柱面,选择磁头号 275 | 2. 旋转:等待要读写的扇区旋转到磁头下 276 | 3. 数据传送 277 | 278 | ### 磁盘存取时间:磁盘完成数据读写所需要的时间 279 | 1. 寻道时间、旋转延迟、传送时间的总和 $T_a=T_s+\frac{1}{2r}+\frac{b}{rN}$ 280 | 2. Ta:存取时间 281 | 3. Ts:寻道时间 282 | 4. r:磁盘旋转速度(单位:转/秒) 283 | 5. B:要传送的字节数 284 | 6. N:一个磁道中的字节数 285 | 286 | ### 磁盘调度策略 287 | 1. 磁盘可能同时接收到若干I/O请求 288 | 1. 如果随机选择并响应I/O请求,可能得到最坏的性能 289 | 2. 驱动调度 290 | 1. 系统采用一种调度策略,能够按最佳次序执行要求访问磁盘的多个I/O请求 291 | 2. 能减少为若干I/O请求服务所需要消耗的总时间 292 | 3. 策略 293 | 1. 移臂调度 294 | 1. 目的:使移动臂的移动时间最短,从而减少寻道总时间 295 | 2. 调度策略 296 | 1. 先进先出 297 | 1. 移动臂是随机移动,寻道性能较差 298 | 2. 按顺序处理请求,对所有进程公平 299 | 2. 最短查找时间优先 300 | 1. 先执行查找时间最短的请求,具有较好的寻道性能 301 | 2. 存在"饥饿”现象 302 | 3. 扫描算法 303 | 1. 单向扫描 304 | 1. 移动臂总向一个方向扫面,归途中不提供服务 305 | 2. 适用于不断有大量柱面均匀分布的请求的情形 306 | 2. 双向扫描 307 | 1. 移动臂每次向一个方向移动,遇到最近的I/O请求便进行处理,到达最后一个柱面后再向相反方向移动 308 | 2. 对最近扫描所跨越区域的请求响应较慢 309 | 3. 电梯调度 310 | 1. 无请求时移动臂停止不动,有请求时按电梯规律移动 311 | 2. 每次选择沿移动臂的移动方向最近的柱面 312 | 3. 如果当前移动方向上没有但相反方向有请求时,改变移动方向 313 | 2. 旋转调度 314 | 1. 目的:使得选择延迟的总时间最少 315 | 2. 循环排序 316 | 1. 通过优化I/O请求排序,在最少旋转圈数内完成位于同一柱面的访问请求 317 | 2. 旋转位置测定硬件和多磁头同时读写技术有利于提高旋转调度的效率 318 | 3. 优化分布 319 | 1. 通过信息在存储空间的排列方式来减少旋转延迟 320 | 2. 交叉因子 321 | 1. 如果沿着磁道按序对扇区编号,可能由于磁盘转速太快,造成处理当前扇区的数据时,下一个扇区已经跳过,需要再转一圈才能继续读数据。因此,对扇区编号时会间隔编号,例如交叉因子为2:1表示相邻编号之间会间隔1个扇区,3:1表示会间隔2两个扇区 322 | 3. 按柱面而非盘面进行数据读写 323 | 1. 连续记录数据时,先记录在同一柱面的不同磁道上,然后再更换柱面,可以减少数据读写时的移臂操作 324 | 325 | ## 虚拟设备 326 | ### 使用一类物理设备模拟另一类物理设备的技术。比如:内存卡模拟磁盘、块设备模拟字符设备、输入输出重定向…… 327 | ### 经典的SPOOLing系统 328 | 1. 为存放输入数据和输出数据,系统在磁盘上开辟输入井和输出井 329 | 1. 井是用作缓冲的存储区域 330 | 2. 组成 331 | 1. 预输入程序:将数据从输入设备传送到磁盘输入井 332 | 2. 缓输出程序:将数据从磁盘输出井传送到输出设备 333 | 3. 井管理程序:控制作业和井之间的数据交换 334 | 3. 作用 335 | 1. 预输入:操作系统将作业需要的输入数据成批从输入设备上预先输入至磁盘的输入缓冲区中暂存 336 | 1. 调度作业执行时,作业使用数据不必再启动输入设备,从磁盘的输入缓冲区读入即可 337 | 2. 缓输出:作业不启动输出设备,只是将输出数据暂存到磁盘的输出缓冲区 338 | 1. 作业执行完毕后,由操作系统成批输出 339 | 4. 不仅设备利用率提高,作业的运行时间也会缩短,每个作业都感觉各自拥有所需的独占设备 340 | 341 | ### 打印机SPOOLing 342 | 1. 打印机空占问题 343 | 1. 如果用户进程通过打开打印机的设备文件来申请和使用打印机,往往会造成该进程打开设备文件后长达数小时不用,但其他进程又无法使用打印机 344 | 2. 打印机守护进程和SPOOLing打印目录 345 | 1. 守护进程是唯一有特权使用打印机设备的进程 346 | 2. 打印文件前,用户进程先产生完整的带输出文件,并存放在打印目录下 347 | 3. 打印机空闲时,启动守护进程,打印带输出文件 348 | -------------------------------------------------------------------------------- /计算机操作系统(五)——存储管理.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 存储管理 4 | 5 | ## 逻辑地址(相对地址):用户编程所使用的地址空间 6 | ### 逻辑地址从0开始编号,两种形式: 7 | 1. 一维逻辑地址(地址) 8 | 2. 二维逻辑地址(段号:段内地址) 9 | 10 | ### 段式程序设计 11 | 1. 把一个程序设计成多个段 12 | 1. 代码段、数据段、堆栈段等等 13 | 2. 用户可以自己应用段覆盖技术扩充内存空间使用量 14 | 1. 这一技术是程序设计技术,不是OS存储管理的功能 15 | 16 | ## 物理地址(绝对地址):程序执行所使用的地址空间 17 | 1. 处理器执行指令时按照物理地址进行 18 | 19 | ## 主存储器的复用 20 | 1. 多道程序设计需要复用主存 21 | 2. 按照分区复用: 22 | 1. 主存划分为多个固定/可变尺寸的分区 23 | 2. 一个程序/程序段占用一个分区 24 | 3. 按照页架复用: 25 | 1. 主存划分成多个固定大小的页架 26 | 2. 一个程序/程序段占用多个页架 27 | 28 | ## 存储管理的基本模式 29 | 1. 单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区或可变分区 30 | 2. 段式存储管理:段式二维逻辑地址空间的程序占用多个主存可变分区 31 | 3. 页式存储管理:一维逻辑地址空间的程序占用多个主页页架区 32 | 4. 段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页架区 33 | 34 | ## 地址转换(重定位):把逻辑地址转换成绝对地址 35 | 1. 静态重定位:在程序装入内存时进行地址转换 36 | 1. 由装入程序执行,早期小型OS使用 37 | 2. 动态重定位:在CPU执行程序时进行地址转换 38 | 1. 从效率出发,依赖硬件地址转换机构 39 | 40 | ## 主存储器空间的分配与去配 41 | 1. 分配:进程装入主存时,存储管理软件进行具体的主存分配操作,并设置一个表格记录主存空间的分配情况 42 | 2. 去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占用的全部或者部分存储空间,调整主存分配表信息 43 | 44 | ## 主存储器空间的共享 45 | 1. 多个进程共享主存储器资源:多道程序设计技术使若干个程序同时进入主存储器,各自占用一定数量的存储空间,共同使用一个主存储器 46 | 2. 多个进程共享主存储器的某些区域:若干个协作进程有共同的主存程序块或者主存数据块 47 | 48 | ## 存储保护 49 | 1. 为避免主存中的多个进程相互干扰,必须对主存中的程序和数据进行保护 50 | 1. 私有主存区中的信息:可读可写 51 | 2. 公共区中的共享信息:根据授权 52 | 3. 非本进程信息:不可读写 53 | 2. 这一功能需要软硬件协同完成 54 | 1. CPU检查是否允许访问,不允许则产生地址保护异常,由OS进行相应处理 55 | 56 | ## 主存储器空间的扩充 57 | 1. 存储扩充:把磁盘作为主存扩充,只把部分进程或进程的部分内容装入内存 58 | 1. 对换技术:把部分不运行的进程调出 59 | 2. 虚拟技术:只调入进程的部分内容 60 | 2. 这一工作需要软硬件协作完成 61 | 1. 对换进程决定对换,硬件机构调入 62 | 2. CPU处理到不在主存的地址,发出虚拟地址异常,OS将其调入,重执指令 63 | 64 | ## 虚拟存储器思想的提出 65 | ### 主存容量限制带来诸多不便 66 | 1. 用户编写程序必须考虑主存容量限制 67 | 2. 多道程序设计的道数受到限制 68 | 69 | ### 用户编程行为分析 70 | 1. 全面考虑各种情况,执行时有互斥性 71 | 2. 顺序性和循环性等空间局部性行为 72 | 3. 某一阶段执行的时间局部性行为 73 | 74 | ### 考虑部分调入进程内容 75 | ### 基本思想 76 | 1. 存储管理把进程全部信息放在辅存中,执行时先将其中一部分装入主存,以后根据执行行为随用随调入 77 | 2. 如主存中没有足够的空闲空间,存储管理需要根据执行行为把主存中暂时不用的信息调出到辅存上去 78 | 79 | ### 实现思路 80 | 1. 需要建立与自动管理两个地址空间 81 | 1. (辅存)虚拟地址空间:容纳进程装入 82 | 2. (主存)实际地址空间:承载进程执行 83 | 2. 对于用户,计算机系统具有一个容量大得多的主存空间,即虚拟存储器 84 | 3. 虚拟存储器是一种地址空间扩展技术,通常意义上对用户编程是透明的,除非用户需要进行高性能的程序设计 85 | 86 | ## 存储管理涉及的存储对象 87 | 1. 存储管理是OS管理主存储器的软件部分 88 | 2. 为获得更好的处理性能,部分主存程序与数据(特别是关键性能数据)被调入Cache,存储管理需要对其进行管理,甚至包括对联想存储器的管理 89 | 3. 为获得更大的虚拟地址空间,存储管理需要对存放在硬盘、固态硬盘、甚至网络硬盘上的虚拟存储器文件进行管理 90 | 91 | ## 高速缓存存储器(Cache) 92 | 1. Cache是介于CPU和主存储器间的高速小容量存储器,由静态存储芯片SRAM组成,容量较小但比主存DRAM技术更加昂贵而快速,接近于CPU的速度 93 | 2. CPU往往需要重复读取同样的数据库,Cache的引入与缓存容量的增大,可以大幅提升CPU内部读取数据的命中率,从而提高系统性能 94 | 3. 构成 95 | 1. 高速存储器 96 | 2. 联想存储器:根据内容进行寻址的存储器 97 | 3. 地址转换部件:通过联想存储器建立目录表以实现快速地址转换。命中时直接访问Cache;未命中时从内存读取放入Cache 98 | 4. 替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件 99 | 4. 分级:由于CPU芯片面积和成本,Cache很小。根据成本控制,划分L1,L2,L3三级 100 | 1. L1 Cache:分为数据缓存和指令缓存;内置;成本最高,对CPU的性能影响最大;通常在32KB-256KB之间 101 | 2. L2 Cache:分内置和外置两种,后者性能低一些;通常在512KB-8MB之间 102 | 3. L3 Cache:多为外置,在游戏和服务器领域有效;但对很多应用来说,总线改善比设置L3更加有利于提升系统性能 103 | 104 | ## 单连续分区存储管理:每个进程占用一个物理上完全连续的存储空间(区域) 105 | 1. 主存区域划分为系统区和用户区 106 | 2. 设置一个栅栏寄存器界分两个区域,硬件用它在执行时进行存储保护 107 | 3. 一般采用静态重定位进行地址转换 108 | 1. 静态重定位:在装入一个作业时,把该作业中程序的指令地址和数据地址全部转换成绝对地址 109 | 4. 硬件实现代价低 110 | 5. 适用于单用户单任务操作系统,如DOS 111 | 112 | ## 可变分区存储管理:按照进程的内存需求来动态划分 113 | ### 基本思想 114 | 1. 固定分区存储管理不够灵活,既不适应大尺寸程序,又存在内存内零头,有浪费 115 | 2. 能否按照进程实际内存需求动态划分分区,并允许分区个数可变 116 | 117 | ### 创建一个进程时,根据进程所需主存量查看主存中是否有足够的空闲时间 118 | 1. 若有,则按需要量分割一个分区 119 | 2. 若无,则令该进程等待主存资源 120 | 121 | ### 由于分区大小按照进程实际需要量来确定,因此分区个数是随机变化的 122 | ### 内存分配 123 | 1. 最先适应分配算法 124 | 2. 邻近适应分配算法 125 | 3. 最优适应分配算法 126 | 4. 最坏适应分配算法 127 | 128 | ### 内存零头 129 | 1. 固定分区方式会产生内存内零头,可变分区方式也会随着进程的内存分配产生一些小的不可用的内存分区,称为内存外零头 130 | 2. 最优适配算法最容易产生外零头 131 | 3. 任何适配算法都不能避免产生外零头 132 | 133 | ### 移动技术 134 | 1. 移动分区以解决内存外零头 135 | 2. 需要动态重定位支撑 136 | 137 | ### 主存分区表 138 | 139 | #### 已分配区情况表 140 | 141 | | 起址 | 长度 | 标志 | 142 | | ---- | ---- | ---- | 143 | | 4K | 6K | J1 | 144 | | 46K | 6K | J2 | 145 | | | | 空 | 146 | | | | 空 | 147 | | ... | ... | ... | 148 | 149 | #### 未分配区情况表 150 | 151 | | 起址 | 长度 | 标志 | 152 | | ---- | ---- | ------ | 153 | | 10K | 36K | 未分配 | 154 | | 52K | 76K | 未分配 | 155 | | | | 空 | 156 | | | | 空 | 157 | | ... | ... | ... | 158 | 159 | 160 | ## 固定分区存储管理 161 | 1. 支持多个分区 162 | 163 | 2. 分区数量固定 164 | 165 | 3. 分区大小固定 166 | 167 | 4. 可用静态重定位 168 | 169 | 5. 硬件实现代价低 170 | 171 | 6. 早期OS采用 172 | 173 | 7. 主存分配表 174 | 175 | | 分区号 | 起始地址 | 长度 | 占用标志 | 176 | | ------ | -------- | ---- | -------- | 177 | | 1 | 4K | 8K | 0 | 178 | | 2 | 12K | 16K | Job1 | 179 | | 3 | 28K | 16K | 0 | 180 | | 4 | 44K | 24K | 0 | 181 | | 5 | 68K | 24K | Job2 | 182 | | 6 | 92K | 36K | 0 | 183 | 184 | 185 | ## 页式存储管理 186 | ### 基本原理 187 | 1. 分页存储器将主存划分成多个大小相等的页架 188 | 2. 受页架尺寸限制,程序的逻辑地址也自然分成页 189 | 3. 不同的页可以放在不同页架中,不需要连续 190 | 4. 页表用于维系进程的主存完整性 191 | 192 | ### 地址 193 | 1. 页式存储管理的逻辑地址由两部分组成:页号和单元号 194 | 2. 物理地址:页架号和单元号 195 | 3. 地址转换可以通过查页表完成 196 | 197 | ### 内存分配/去配 198 | 1. 用一张位示图来记录主存分配情况 199 | 2. 建立进程页表维护主存逻辑完整性 200 | 201 | ### 页的共享 202 | 1. 页式存储管理能够实现多个进程共享程序和数据 203 | 2. 数据共享:不同进程可以使用不同页号共享数据页 204 | 3. 程序共享:不同进程必须使用相同页号共享代码页 205 | 1. 共享代码页中的(JMP<页内地址>)指令,使用不同页号是做不到 206 | 207 | ### 地址转换代价 208 | 1. 页表放在主存:每次地址转换必须访问两次主存 209 | 1. 按页号读出页表中的相应页架号 210 | 2. 按计算出来的绝对地址进行读写 211 | 2. 存在问题:降低了存取速度 212 | 3. 解决办法:利用Cache存放部分页表 213 | 214 | ### 快表:存放在高速存储器中的页表部分 215 | 1. 为提供地址转换速度,设置一个专用的高速存储器,用来存放页表的一部分 216 | 2. 快表表项:页号,页架号 217 | 3. 这种高速存储器是联想存储器,即按照内容寻址,而非按照地址访问· 218 | 219 | ### 引入快表后的地址转换代价 220 | 1. 假设主存访问时间为200毫微秒,快表访问时间为40毫微秒,查快表的命中率是90%,平均地址转换代价为(200+40)\*90%+(200+200)\*10%=256毫微秒 221 | 2. 比两次访问主存时间(400毫微秒)下降了36%((400-256)/400) 222 | 223 | ### 基于快表的地址转换流程 224 | 1. 按逻辑地址中的页号查快表 225 | 2. 若该页已在快表中,则由页架号和单元号形成绝对地址 226 | 3. 若该页不在快表中,则再查主存页表形成绝对地址,同时将该页登记到快表中 227 | 4. 当快表填满后,又要登记新页时,则需在快表中按一定策略淘汰一个旧登记项 228 | 229 | ### 多道程序环境下的进程表 230 | 1. 进程表中登记了每个进程的页表 231 | 232 | 2. 进程占有处理器运行时,其页表起始地址和长度送入页表控制寄存器 233 | 234 | 3. 页表控制寄存器 235 | 236 | | 用户作业名 | 页表地址 | 页表长度 | 237 | | ---------- | -------- | -------- | 238 | | AB | 0010 | 4 | 239 | | CD | 0014 | 3 | 240 | | EF | 0017 | 7 | 241 | 242 | ### 页式虚拟存储管理 243 | #### 定义 244 | 1. 把进程全部装入虚拟存储器,执行时先把部分页面装入实际内存,然后,根据执行行为,动态调入不在主存的页,同时进行必要的页面调出 245 | 2. 现代OS的主流存储管理技术 246 | 3. 首次只把进程第一页信息装入内存,称为请求页式存储管理 247 | 248 | 页式虚拟存储管理的页表 249 | 250 | | 标志位 | 主存块号 | 辅助存储器地址 | 251 | | ------ | -------- | -------------- | 252 | | | | | 253 | 254 | 扩充页表项,指出: 255 | 256 | 1. 每页的虚拟地址、实际地址 257 | 2. 主存驻留地址、写回标志、保护标志、引用标志、可移动标志 258 | 259 | #### 实现 260 | 1. CPU处理地址 261 | 1. 若页驻留,则获得块号形成绝对地址 262 | 2. 若页不在内存,则CPU发出缺页中断 263 | 2. OS处理缺页中断 264 | 1. 若有空闲页架,则根据辅存地址调入页,更新页表与快表等 265 | 2. 若无空闲页架,则决定淘汰页,调出已修改页,调入页,更新页表与快表 266 | 267 | ### 页面调度 268 | 1. 当主存空间已满而又需要装入新页时,页式虚拟存储管理必须按照一定的算法把已在主存的一些页调出去 269 | 2. 选择淘汰页的工作称为页面调度 270 | 3. 选择淘汰页的算法称为页面调度算法 271 | 4. 页面调度算法设计不当,会出现(刚被淘汰的页面立即又要调入,并如此反复) 272 | 5. 这种现象称为抖动或颠簸 273 | 6. 先进先出FIFO页面调度算法 274 | 1. 总是淘汰最先调入主存的那一页,或者说主存驻留时间最长的那一页(常驻的除外) 275 | 2. 模拟的是程序执行的顺序性,有一定合理性 276 | 7. 最近最少用LRU页面调度算法 277 | 1. 淘汰最近一段时间较久未被访问的那一页,即那些刚被使用过的页面,可能马上还要被使用到 278 | 1. OPT页面调度算法: 279 | 1. 当要调入新页面时,首先淘汰以后不再访问的页,然后选择距现在最长时间后再访问的页 280 | 2. 该算法由Belady提出,称为Belady算法,又称最佳算法(OPT,Optimal page replacement) 281 | 3. OPT只可模拟,不可实现 282 | 2. 模拟了程序执行的局部属性,既考虑了循环性又兼顾了顺序性 283 | 3. 严格实现的代价大(需要维持特殊队列) 284 | 4. 模拟实现: 285 | 1. 每页建一个引用标志,供硬件使用 286 | 2. 设置一个时间间隔中断:中断时页引用标志置0 287 | 3. 地址转换时,页引用标志置1 288 | 4. 淘汰页面时,从页引用标志为0z的页中间随机选择 289 | 5. 时间间隔多长是个难点 290 | 8. 最不常用LFU页面调度算法 291 | 1. 淘汰最近一段时间内访问次数较少的页面,对OPT的模拟性比LRU更好 292 | 2. 基于时间间隔中断,并给每一页设置一个计数器 293 | 3. 时间间隔中断发生后,所有计数器清0 294 | 4. 每访问页1次就给计数器加1 295 | 5. 选择计数值最小的页面淘汰 296 | 9. 时钟CLOCK页面调度算法 297 | 1. 采用循环队列机制构造页面队列,形成了一个类似于钟表面的环形表 298 | 2. 队列指针则相当于钟表面上的表针,指向可能要淘汰的页面 299 | 3. 使用页引用标志位 300 | 4. 工作流程: 301 | 1. 页面调入主存时,其引用标志位置1 302 | 2. 访问主存页面时,其引用标志位置1 303 | 3. 淘汰页面时,从指针当前指向的页面开始扫描循环队列 304 | 1. 把所遇到的引用标志位是1的页面的引用标志位清0,并跳过 305 | 2. 把所遇到的引用标志位是0的页面淘汰,指针推进一步 306 | 307 | ### 缺页中断率 308 | 1. 假定进程P共n页,系统分配页架数m个 309 | 2. P运行中成功访问次数为S,不成功访问次数为F,总访问次数A=S+F 310 | 3. 缺页中断率定义为:f=F/A 311 | 4. 缺页中断率是衡量存储管理性能和用户编程水平的重要依据 312 | 5. 影响因素 313 | 1. 分配给进程的页架数:可用页架数越多,则缺页中断率就越低 314 | 2. 页面的大小:页面尺寸越大,则缺页中断率就越低 315 | 3. 用户的程序编制方法:在大数据量情况下,对缺页中断率也有很大影响 316 | ```c 317 | // 程序将数组置为“0”,假定仅分得一个主存页架,页面尺寸为128个字,数组元素按行存放,开始时第一页在主存 318 | int A[128][128]; 319 | for (int j=0;j<128;j++) 320 | for (int i=0;i<128;i++) 321 | A[i][j]=0; 322 | // 每执行一次赋值就要产生一次缺页中断,共产生(128x128-1)次缺页中断 323 | 324 | int A[128][128]; 325 | for (int i=0;i<128;i++) 326 | for (int j=0;j<128;j++) 327 | A[i][j]=0; 328 | // 共产生(128-1)次缺页中断 329 | ``` 330 | 331 | ### 反置页表 332 | #### 提出: 333 | 1. 页面及相关硬件机制在地址转换、存储保护、虚拟地址访问中发挥了关键作用 334 | 2. 为页式存储管理设置专门硬件机构 335 | 3. 内存管理单元MMU:CPU管理虚拟/物理存储器的控制线路,把虚拟地址映射为物理地址,并提供存储保护,必要时确定淘汰页面 336 | 4. 反置页表IPT:MMU用的数据结构 337 | 338 | #### 基本设计思想 339 | 1. 针对内存中的每个页架建立一个页表,按照块号排序 340 | 2. 表项包含:正在访问改页框的进程标识、页号及特征位和哈希链指针等 341 | 3. 用来完成内存页架到访问进程页号的对应,即物理地址到逻辑地址的转换 342 | 343 | #### 页表项 344 | 1. 页号:虚拟地址页号 345 | 2. 进程标志符:使用该页的进程号(页号和进程标志符结合起来标志一个特定进程的虚拟地址空间的一页) 346 | 3. 标志位:有效、引用、修改、保护的锁定等标志信息 347 | 4. 链指针:哈希链 348 | 349 | #### 基于反置页表的地址转换过程 350 | 1. MMU通过哈希表把进程标识和虚页号转换成一个哈希值,指向IPT的一个表目 351 | 2. MMU遍历哈希链找到所需进程的虚页号,该项的索引就是页架号,通过拼接位移便可生成物理地址 352 | 3. 若遍历整个反置页表中未能找到匹配页表项,说明该页不在内存,产生缺页中断,请求操作系统调入 353 | 354 | ## 段式存储管理 355 | ### 段式程序设计 356 | 1. 每个程序可由若干段组成,每一段都可以从“0”开始编址,段内的地址是连续的 357 | 2. 分段存储器的逻辑地址由两部分组成,段号、单元号 358 | 359 | ### 基本思想 360 | 1. 段式存储管理基于可变分区存储管理实现,一个进程要占用多个分区 361 | 2. 硬件需要增加一组用户可见的段地址寄存器(代码段、数据段、堆栈段、附加段),供地址转换使用 362 | 3. 存储管理需要增加设置一个段表,每个段占用一个段表项,包括:段始址、段限长,以及存储保护、可移动、可扩充等标志位 363 | 364 | ### 段的共享 365 | 1. 通过不同进程段表中的项指向同一个段基址来实现 366 | 2. 对共享段的信息必须进行保护,如规定只能独处不能写入,不满足保护条件则产生保护中断 367 | 368 | ### 段式虚拟存储管理的基本思想 369 | 1. 把进程的所有分段都存放在辅存中,进程运行时先把当前需要的一段或几段装入主存,在执行过程中访问到不在主存的段时再把它们动态装入 370 | 2. 段式虚拟存储管理中段的调进调出是由OS自动实现的,对用户透明 371 | 3. 与段覆盖技术不同,它是用户控制的主存扩充技术,OS不感知 372 | 373 | ### 段表扩充 374 | 1. 特征位:00(不在内存)01(在内存)11(共享段) 375 | 376 | 2. 存取权限:00(可执行)01(可读)11(可写) 377 | 378 | 3. 扩充位:0(固定长)1(可扩充) 379 | 380 | 4. 标志位:00(未修改)01(已修改)11(不可移动) 381 | 382 | | 段号 | 特征 | 存取权限 | 扩充位 | 标志位 | 主存始址 | 383 | | ---- | ---- | -------- | ------ | ------ | -------- | 384 | | | | | | | | 385 | 386 | ### 段页式存储管理 387 | 1. 基本思想 388 | 1. 段式存储管理可以基于页式存储管理实现 389 | 2. 每一段不必占据连续的存储空间,可存放在不连续的主存页架中 390 | 3. 能够扩充为段页式虚拟存储管理 391 | 4. 装入部分段,或者装入段中部分页面 392 | -------------------------------------------------------------------------------- /计算机操作系统(六)——文件系统.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | # 文件系统 3 | 4 | ## 文件 5 | ### 具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列 6 | ### 文件(document)与计算机文件(file) 7 | ### 文件名是由字母、数字和其他符合组成的一个字符串,其格式和长度因系统而异 8 | ### 命名: 9 | 1. 文件名和拓展名:前者用于识别文件,后者用于标识文件特性,二者用'.'隔开 10 | 2. 不同OS有约定的拓展名,Unix不做介绍,Windows如下 11 | 1. COM:可执行的浮动二进制代码文件 12 | 2. EXE:可执行的浮动二进制代码文件 13 | 3. LIB:库程序文件 14 | 4. BAT:批命令文件 15 | 5. OBJ:编译或汇编生成的目标文件 16 | 17 | ### 分类: 18 | 1. 按用途:系统文件、库文件、用户文件 19 | 2. 按保护级别:只读文件、读写文件、不保护文件 20 | 3. 按信息时限:临时文件、永久文件、档案文件 21 | 4. 按设备类型:磁盘文件、磁带文件、光盘文件、软盘文件 22 | 5. 按逻辑结构或物理结构 23 | 24 | ### 优点: 25 | 1. 用户使用方便,按名存取 26 | 2. 文件安全可靠,提供保护措施 27 | 3. 文件可备份,可组织重执 28 | 4. 文件可共享:提供利用率 29 | 5. 把数据组织成文件形式加以管理和控制是计算机数据管理的重大进展 30 | 31 | ## 文件系统 32 | 1. 操作系统中负责存取和管理信息的模块,它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护,并为用户提供一整套方便有效的文件使用和操作方法 33 | 2. 反映了用户概念中的逻辑结构,而且和存放它的辅助存储器(文件存储器)的存储结构紧密相关。同一个文件必须从逻辑文件和物理文件两个侧面来观察它 34 | 35 | ### 功能(面向用户): 36 | 1. 文件的按名存取 37 | 2. 文件的共享和保护 38 | 3. 文件的操作和使用 39 | 40 | ### 实现功能: 41 | 1. 文件目录的建立和维护 42 | 2. 存储空间的分配和回收 43 | 3. 数据的保密和保护 44 | 4. 监督用户存取和修改文件的权限 45 | 5. 实现在不同存储介质上信息的标识方式、编址方法、存储次序,以及信息检索等问题 46 | 47 | ### 组成: 48 | #### 文件组织 49 | 1. 组织方法 50 | 1. 逻辑结构 51 | 1. 流式文件 52 | 2. 记录式文件 53 | 2. 物理结构 54 | 1. 顺序文件 55 | 2. 连接文件 56 | 3. 直接文件 57 | 4. 索引文件 58 | 59 | #### 文件存取 60 | 1. 存取方法 61 | 1. 概念 62 | 1. 操作系统为用户程序提供的使用文件的技术和手段 63 | 2. 在某种程度上依赖于文件的物理结构 64 | 2. 方法 65 | 1. 顺序存取 66 | 1. 按记录顺序进行读/写操作的存取方法 67 | 2. 读操作根据读指针读出当前 记录,同时推进读指针,指向下一次要读出的记录 68 | 3. 写操作则设置写指针,把一个记录写道文件末端,同时推进写指针 69 | 4. 允许对读指针进行前跳或后退n(整数)个记录的操作 70 | 2. 直接存取 71 | 1. 很多应用场合要求快速地以任意次序直接读写某个记录。航空订票系统,把特定航班的所有信息存放在物理块中,用户预定某航班时,直接计算出该航班的存位置 72 | 3. 索引存取 73 | 1. 基于索引文件的索引存取方法 74 | 2. 对于这种文件,信息块的地址都可以通过查找记录键而换算出 75 | 3. 除可采用按键存取外,也可以采用顺序存取或直接存取的方法 76 | 4. 实际的系统中,大都采用多级索引,以加速记录查找过程 77 | 78 | #### 文件控制 79 | 1. 控制系统 80 | 1. 逻辑的控制系统 81 | 2. 物理的控制系统 82 | 83 | #### 文件使用 84 | 1. 文件操作 85 | 1. 打开文件 86 | 2. 关闭文件 87 | 3. 读 88 | 4. 写 89 | 5. 控制 90 | 91 | ## 卷和块 92 | 1. 文件存储介质有磁盘、光盘和磁盘 93 | 2. 卷:存储介质的物理单位,对应于一盘磁带、一块软盘、一个光盘片、一个硬盘分区 94 | 3. 块:存储介质上连续信息所组成的一个区域,也叫做物理记录 95 | 4. 块在主存储器和辅助存储器进行信息交换的物理单位,每次总是交换一块或整数块信息 96 | 5. 决定块的大小要考虑用户使用方式、数据传输效率和存储设备类型等多种因素 97 | 6. 不同类型的存储介质,块的长短常常各不相同;对同一类型的存储介质,块的大小一般相同,但也可以不同 98 | 7. 外围设备由于启停机械动作或识别不同块的要求,两个相邻块之间必须留有间隙 99 | 1. 间隙是块之间不记录用户代码信息的区域 100 | 8. 顺序存取存储设备的信息安排 101 | 1. 顺序存取设备是严格依赖信息的物理位置次序进行定位和读写的存储设备 102 | 2. 磁带机是最常用的一种顺序存取存储设备,它具有存储容量大、稳定可靠、卷可装卸和便于保存等优点,广泛用作存档 103 | 3. 磁带的一个突出特点是块长的变化范围较大,块可以很小,也可以很大,原则上没有限制 104 | 4. 光盘也是一种顺序存取存储设备 105 | 9. 直接存取存储设备的信息安排 106 | 1. 磁盘是一种直接存取存储设备(随机存取存储设备) 107 | 2. 移臂与旋转两维组织,存取速度高 108 | 3. 它的每个物理记录有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置 109 | 110 | ## 逻辑文件(文件的逻辑结构) 111 | ### 独立于物理环境的,用户概念种的抽象信息组织方式 112 | ### 用户能观察到的,并加以处理的数据集合 113 | ### 文件的逻辑结构分为两种形式 114 | #### 流式文件 115 | 1. 文件内的数据不再组成记录,只是由一串依此的字节组成的信息流序列 116 | 2. 这种文件常常按长度来读取所需信息,也可以用插入的特殊字符作为分界 117 | 118 | #### 记录式文件 119 | 1. 一种有结构的文件,它是若干逻辑记录信息所组成的记录流文件 120 | 2. 逻辑记录是文件种按信息在逻辑上的独立含义所划分的信息单位 121 | 122 | #### 记录式文件与数据库 123 | 1. 数据库管理系统也支持逻辑记录 124 | 2. 区别:数据库种的记录之间可以通过数据冗余构成某种联系 125 | 3. 数据库管理系统支持基于联系的数据查询,文件系统则不行 126 | 127 | ## 物理文件(文件的物理结构) 128 | 1. 文件的物理结构和组织是指文件在物理存储空间种的存放方法和组织关系 129 | 2. 文件的存储结构涉及块的划分、记录的排列、索引的组织、信息的搜索等许多问题 130 | 3. 其优劣直接影响文件系统的性能 131 | 4. 顺序文件(连续文件) 132 | 1. 将一个文件中逻辑上连续的信息存放到存储介质的依此相邻的块中便形成顺序结构 133 | 2. 磁带文件、光盘文件是典型例子 134 | 3. 优点(顺序存取记录时速度较快): 135 | 1. 批处理文件,系统文件用得最多 136 | 2. 采用磁盘存放顺序文件时,总可以保持快速存取的优点 137 | 4. 缺点: 138 | 1. 建立文件前需要能预先确定文件长度,以便分配存储孔空间 139 | 2. 修改、插入和增加文件记录有困难 140 | 5. 连接文件(串联文件) 141 | 1. 特点:使用连接字来表示文件中各个物理块之间的先后次序 142 | 2. 每一块文件信息的物理地址由文件目录给出,而每一块的连接字指出了文件的下一个物理块位置;连接字内容为0时,表示文件至本块结束 143 | 3. 像输入井、输出井等都用此类文件 144 | 4. 优点: 145 | 1. 易于对文件记录做增删改,易于动态增长记录 146 | 2. 不必预先确知文件长度 147 | 3. 存储空间利用率高 148 | 5. 缺点: 149 | 1. 存放指针需额外的存储空间 150 | 2. 由于存取须通过缓冲区,待获得连接字后,才能找到下一物理块的地址,因而,仅适用于顺序存取 151 | 6. 直接文件(散列文件) 152 | 1. 通过计算记录的关键字建立与其物理存储地址之间的对应关系 153 | 2. 这种变换通常采用散列法(hash法) 154 | 3. 计算寻址结构可能出现”冲突“,即不同的关键字可能变换出相同的地址来,解决办法有拉链法、循环探查法、二次散列法、溢出区法等 155 | 7. 索引文件 156 | 1. 索引文件为每个文件建立了一张索引表,其中,每个表目包含一个记录的键(或逻辑记录号)及其存储地址 157 | 2. 索引表的地址可由文件目录指出,查阅索引表找到相应记录键(逻辑记录号),然后获得数据存储地址 158 | 3. 访问方式: 159 | 1. 在文件存储器上分两个区:索引区和数据区 160 | 2. 访问索引文件需两个步骤:查找索引表;获得记录物理地址 161 | 3. 需要两次访问辅助存储器,若文件索引已预先调入主存储器,那么,就可以减少一次内外村信息交换 162 | 4. 特点: 163 | 1. 索引结构可以被认为是连接结构的一种扩展,除了具备连接文件的优点外,还客服了它只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件增删改 164 | 2. 索引文件的缺点:增加了索引表的空间开销和查找时间 165 | 5. 索引表组织 166 | 1. 一级索引 167 | 2. 两级索引 168 | 3. 多级索引 169 | 170 | ## 文件目录 171 | 1. 实现文件的”按名存取“的关键数据结构 172 | 2. 文件系统的基本功能之一就是负责文件目录的建立、维护和检索,要求编排的目录便于查找、防止冲突 173 | 3. 文件目录需要永久保存,因此也组织成文件存放在磁盘上,称目录文件 174 | 4. 一级目录结构 175 | 1. 在操作系统中构造一张线性表,与每个文件的相关属性占用一个目录项,构成了一级目录结构 176 | 2. 由于用户与文件众多,容易重名,不利记忆 177 | 5. 二级目录结构 178 | 1. 第一级为主文件目录,它用于管理所有用户文件目录,它的目录项登记了系统接受的用户的名字及该用户文件目录的地址 179 | 2. 第二级为用户的文件目录,它为该用户的每个文件保存一个登记栏,其内容与一级目录的目录项相同 180 | 3. 每一用户只允许查看自己的文件目录 181 | 4. 特点 182 | 1. 采用二级目录管理文件时,因为任何文件的存取都通过主文件目录,于是可以检查访问文件者的存取权限,避免一个用户未经授权就存取另一个用户的文件,使用户文件的私密性得到保证,实现了对文件的保密和保护 183 | 2. 特别是不同用户具有同名文件时,由于各自有不同的用户文件目录而不会导致混乱 184 | 3. 对于同一个用户而言,同样存在文件多、容易重名问题 185 | 6. 树形目录结构 186 | 1. 每一级目录可以登记下一级目录,也可以登记文件,从而,形成了层次文件目录结构 187 | 2. 层次目录结构通常采用树形目录结构,它是一棵倒向的有根树,树根是根目录;从根向下,每一个树分叉是一个子目录;而树叶是文件 188 | 3. 特点 189 | 1. 较好地反映现实世界中具有层次关系的数据集合和较确切地反映系统内部文件的组织结构 190 | 2. 不同文件可以重名,只要它们不位于同一末端的子目录中 191 | 3. 易于规定不同层次或子树中文件的不同存取权限,便于文件的保护、保密和共享 192 | 4. 文件定位 193 | 1. 在树形目录结构中,一个文件的全名包括从根目录开始到文件为止,通路上遇到的所有子目录路径,又称为路径名 194 | 2. 各子目录名之间用正斜线/(反斜线\)隔开 195 | 3. 一个硬盘分区可以组织成一颗子树 196 | 1. 每颗子树可以对应于一个逻辑盘符(Win) 197 | 2. 把众多子树嫁接成一颗大树(UNIX) 198 | 199 | ## 文件查找 200 | ### 文件查找是文件目录管理的额重要工作,“按名存取”文件就是系统根据用户提供的文件路径名来搜索各级文件目录,找到该文件 201 | 1. 从根目录查起(绝对路径名) 202 | 2. 从"当前目录"查起(相对路径名),用'.'表示当前目录,'..'表示父目录 203 | 3. 现代操作系统都设置有改变工作目录命令,即变更当前工作目录 204 | 205 | ### 目录项查找 206 | 1. 搜索具体目录项时,可以采用顺序查找法,依此扫描文件目录中的目录项,将目录项中的名字与欲查找的文件名相比较 207 | 2. 优化方法 208 | 1. 目录表项是按键的顺序编排,可以采用“二分查找法” 209 | 2. "杂凑法“,把每个文件名经过变换函数变换成唯一的目录表表项 210 | 211 | ### 文件目录处理 212 | 1. 树形目录结构:当一个文件经过许多目录节点时,使用很不方便;系统在沿路径查找目录时,往往要多次访问文件存储器,使访问速度大大减慢 213 | 2. 若把所有文件的目录都复制到主存,访问速度是加快了,但又增加了主存的开销 214 | 3. 一种有效办法是把常用和正在使用的哪些文件目录复制进主存,这样,既不增加太多的主存开销,又可以明显减少目录查找时间 215 | 216 | ### 活动文件表 217 | 1. 系统可以为每个用户进程建立一张活动文件表,当用户使用一个文件之前,先通过”打开“操作,把该文件有关目录信息复制到指定主存区域,有关信息填入活动文件表,以建立用户进程和该文件索引的联系 218 | 2. 当不再使用该文件时,使用”关闭“,切断用户进程和这个文件的联系,同时,若该目录已被修改过,则应更新辅存中对应的文件目录 219 | 220 | ## 文件的安全与保护 221 | ### 文件是计算机系统的重要资源,因此,要求文件系统具有保障文件安全的手段,提供文件保密的措施,有效地实现文件的共享 222 | ### 文件共享:不同用户共同使用某些文件 223 | #### 计算机用户完成共同任务所必需的 224 | #### 好处: 225 | 1. 减少大量重复性劳动 226 | 2. 免除系统复制文件的工作 227 | 3. 节省文件占用的存储空间 228 | 4. 减少程序设计输入输出文件的次数 229 | 230 | #### 并发控制 231 | 1. 在允许文件共享的系统中,操作系统应提供手段实现对共享文件的同步控制 232 | 2. 多个进程可能同时存取一个文件,如果它们同时进行读操作,操作系统应对文件进行公用控制 233 | 3. 如果有进程进行写操作,例如,有两个进程,进程A要求修改文件,同时进程B要求读出同一文件中的数据,则操作系统给必须提供同步控制机制,以保证文件数据的完整性 234 | 235 | ### 文件保护:防止文件被破坏 236 | 1. 操作系统必须提供文件保护机制,有效实现文件的完整性 237 | 2. 方法 238 | 1. 文件副本 239 | 1. 文件系统必须要有防止硬软件故障,保存信息完整性的能力。主要的实现机制就是文件副本 240 | 2. 动态多副本技术 241 | 1. 在多个介质上维持同一内容的文件,并且在更新内容时同时进行 242 | 2. 需要增加设备费用和系统负载。一般适用于容量较小且较为重要的文件,例如不需更新的系统文件及专用文件,当文件发生故障时只要切换到备用设备就可以 243 | 3. 转储、备份与恢复 244 | 1. 文件转储:定时把文件复制转储到其他介质上,当某介质上出现故障时,复原转储文件 245 | 2. 转储方式 246 | 1. 一定时间间隔或一个单位处理结束时,系统自动复写更新过的文件和数据 247 | 2. 每天或每周把文件信息全部复写一遍,需要时再通过装入转储文件来恢复系统,诸如BACKUP、RESTORE等命令 248 | 2. 文件存取矩阵与文件读取表 249 | 1. 系统为每个用户设置访问每个文件对象的存取属性 250 | 2. 系统的全部用户对全部文件的存取属性就组成的一个二维矩阵,称为存取控制矩阵 251 | 3. 由于操作系统拥有很多用户和众多文件,存取控制矩阵是一个稀疏矩阵,可以将其简化为一张存取控制表 252 | 4. 每行包括:用户、文件、存取属性 253 | 5. 存取控制表仅登记那些对文件拥有存取属性的部分 254 | 6. 基于存取控制矩阵/表的文件保护 255 | 1. 存取属性:可以有访问、读、写、执行、创建、删除、授权等等 256 | 2. 系统通过查阅(矩阵/表)核对用户对文件的存取权限 257 | 3. 文件属主使用GRANT、REVOKE等命令进行授权,甚至把授权权转授给他信任的用户 258 | 4. 系统管理用户(超级用户)等同于文件属主权限,并获得对系统文件的授权访问权权限 259 | 3. 文件属性 260 | 1. 存取控制表的一种简化方法是用户分类,再针对每类用户规定文件属性 261 | 262 | 2. 用户分类:属主、合作者、其他 263 | 264 | 3. 文件属性:读、写、执行、... 265 | 266 | 4. 文件属性可以放在文件目录项中,管理大为简化 267 | 268 | 5. 用户使用文件时,通过核对文件属性,实现保护 269 | 270 | 6. 文件属性的例 271 | 1. chmod命令可以改变文件属性 272 | 2. chown命令用于变更文件属主 273 | 3. chgrp命令用户变更用户伙伴 274 | 275 | | Name | 读 | 写 | 执行 | 276 | | -------- | ---- | ---- | ---- | 277 | | 文件主 | 1 | 1 | 0 | 278 | | 伙伴 | 1 | 0 | 0 | 279 | | 其他用户 | 1 | 0 | 0 | 280 | 281 | ### 文件保密:防止文件及其内容被其他用户窃取 282 | 1. 措施 283 | 1. 隐蔽文件目录 284 | 2. 设置口令 285 | 3. 使用密码 286 | 287 | ## 文件的使用 288 | ### 用户通过两类接口与文件系统联系 289 | 1. 与文件有关的操作命令。UNIX中,cat、cd、cp、find、mv、rm、mkdir、rmdir等等 290 | 2. 提供给用户程序使用的文件类系统调用,基本文件类系统调用:建立、打开、读/写、定位、关闭、撤销 291 | 1. 建立文件 292 | 1. 用于创建一个文件 293 | 2. 所需参数:文件名、设备类(号)、文件属性及存取控制信息 294 | 3. 处理流程:在相应设备上建立一个文件目录项,为文件分配第一个物理块,在活动文件表中申请一个项,登记有关目录信息,并返回一个文件句柄 295 | 2. 撤销文件 296 | 1. 用于删除一个文件 297 | 2. 所需参数:文件名、设备类(号) 298 | 3. 处理流程:若文件没有关闭,先关闭文件;若为共享文件,进行联访处理;在目录文件中删除相应目录项;释放文件占用的文件存储空间 299 | 3. 打开文件 300 | 1. 用于建立起文件和用户进程之间的使用联系 301 | 2. 所需参数:文件名、设备类(号)、打开方式 302 | 3. 处理流程:在主存活动文件表中申请一个项,返回一个文件句柄;根据文件名查找目录文件,把目录信息复制到活动文件表相应栏;若打开的是共享文件,则应有相应处理 303 | 4. 关闭文件 304 | 1. 用于结束一个文件的读写 305 | 2. 所需参数:文件句柄 306 | 3. 处理流程:将活动文件表中该文件的”当前使用用户数“减1;完成”推迟写";若活动文件表目内容已被改过,则应先将表目内容写回文件存储器上相应表目中,以使文件目录保持最新状态 307 | 5. 读/写文件 308 | 1. 用于读写文件 309 | 2. 所需参数:文件句柄、用户数据区地址、读写的记录或字节个数 310 | 3. 处理流程:按文件句柄从活动文件表中找到该文件的目录项信息;根据目录项指出的该文件的逻辑和物理组织方式,把相关逻辑记录转换成物理块 311 | 6. 定位文件 312 | 1. 用于调整所打开文件的读写指针位置 313 | 2. 所需参数:文件句柄、定位指针 314 | 315 | ## 辅存空间管理 316 | 1. 磁盘等大容量辅存空间被OS及许多用户共享,用户进程运行期间常常要建立和删除文件,OS应能自动管理和控制辅存空间 317 | 2. 随着用户文件不断建立和撤销,文件存储空间会出现许多“碎片” 318 | 3. OS解决“碎片”的办法是整理“碎片”;在整理过程中,往往对文件重新组织,让其存放在连续存储区中 319 | 4. 分配方式 320 | 1. 连续分配:存放在辅存空间连续存储区中(连续的物理块号) 321 | 1. 优点:顺序访问时速度快,管理较为简单,但为了获得足够大的连续存储区,需定时进行“碎片”整理 322 | 2. 非连续分配:动态分配给若干扇区或簇(几个连续扇区),不要求连续 323 | 1. 优点:辅存空间管理效率高,便于文件动态增长和收缩 324 | 5. 空闲块的管理:位示图 325 | 1. 使用若干字节构成一张表,表中每一字位对应一个物理块,字位的次序与块的相对次序一致。字位为“1”表示相应块已占用,字位为“0”状态表示该块空闲 326 | 2. 主要优点:可以把位示图全部或大部分保存在主存中,再配合现代计算机都具有的位操作指令,可实现高速物理块分配和去配 327 | 3. 空闲块成组连接法 328 | 1. 分配算法 329 | 1. IF 空闲块数=1 THEN 330 | 1. IF 第1个单元=0 THEN 等待 331 | 2. ELSE 复制第1个单元对应块到专用块并分配之 332 | 2. ELSE 分配第(空闲块数)个单元对应块,空闲块数-1 333 | 2. 归还算法 334 | 1. IF 空闲块数<100 THEN 335 | 1. 专用块的空闲块数+1,第(空闲块数)个单元置归还块号 336 | 2. ELSE 复制专用块到归还块,专用块的空闲块数置1,第1单元置归还块号 337 | 338 | ## 文件系统的实现层次 339 | 1. 用户接口:接受用户发来的系统调用,进行语法检查,进入逻辑文件控制子系统 340 | 2. 逻辑文件控制子系统:根据文件路径名,搜索文件目录,建立活动文件表,根据文件结构和存取方法,把逻辑记录转换成相对物理块号和块内相对地址 341 | 3. 文件保护子系统:识别调用者的身份,验证存取权限,判定本次文件操作的合法性 342 | 4. 物理文件控制子系统:实现缓冲区管理,根据物理结构,将相对物理块号转换为实际物理块号,负责文件存储空间的分配,生成I/O控制系统的调用形式 343 | 5. I/O控制子系统:执行具体的物理块I/O操作 344 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License (CC BY-NC-SA 4.0) 2 | 3 | Copyright © 2020 ApacheCN(apachecn@163.com) 4 | 5 | By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. 6 | 7 | Section 1 – Definitions. 8 | 9 | a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. 10 | b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. 11 | c. BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. 12 | d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. 13 | e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. 14 | f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. 15 | g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike. 16 | h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. 17 | i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. 18 | j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. 19 | k. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. 20 | l. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. 21 | m. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. 22 | n. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. 23 | 24 | Section 2 – Scope. 25 | 26 | a. License grant. 27 | 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: 28 | A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and 29 | B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only. 30 | 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 31 | 3. Term. The term of this Public License is specified in Section 6(a). 32 | 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 33 | 5. Downstream recipients. 34 | A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. 35 | B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. 36 | C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 37 | 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). 38 | b. Other rights. 39 | 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 40 | 2. Patent and trademark rights are not licensed under this Public License. 41 | 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. 42 | 43 | Section 3 – License Conditions. 44 | 45 | Your exercise of the Licensed Rights is expressly made subject to the following conditions. 46 | 47 | a. Attribution. 48 | 1. If You Share the Licensed Material (including in modified form), You must: 49 | A. retain the following if it is supplied by the Licensor with the Licensed Material: 50 | i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); 51 | ii. a copyright notice; 52 | iii. a notice that refers to this Public License; 53 | iv. a notice that refers to the disclaimer of warranties; 54 | v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; 55 | B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and 56 | C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 57 | 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 58 | 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 59 | b. ShareAlike. 60 | In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 61 | 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License. 62 | 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 63 | 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. 64 | 65 | Section 4 – Sui Generis Database Rights. 66 | 67 | Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: 68 | 69 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; 70 | b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and 71 | c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. 72 | 73 | For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. 74 | 75 | Section 5 – Disclaimer of Warranties and Limitation of Liability. 76 | 77 | a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. 78 | b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. 79 | c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. 80 | 81 | Section 6 – Term and Termination. 82 | 83 | a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. 84 | b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 85 | 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 86 | 2. upon express reinstatement by the Licensor. 87 | For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. 88 | c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. 89 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. 90 | 91 | Section 7 – Other Terms and Conditions. 92 | 93 | a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. 94 | b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. 95 | 96 | Section 8 – Interpretation. 97 | 98 | a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. 99 | b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. 100 | c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. 101 | d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. -------------------------------------------------------------------------------- /计算机操作系统(八)——并发程序设计.md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 并发程序设计 4 | 5 | ## 顺序程序设计 6 | 1. 程序是实现算法的操作(指令)序列 7 | 2. 每个程序在处理器上执行是严格有序的,称为程序执行的内部顺序性 8 | 3. 程序设计的一般习惯是顺序程序设计 9 | 1. 把一个具体问题的求解过程设计成一个程序或者若干严格顺序执行的程序序列,称为程序执行的外部顺序性 10 | 4. 特性: 11 | 1. 程序执行的顺序性:程序指令执行是严格按序的 12 | 2. 计算环境的封闭性:程序运行时如同独占受操作系统保护的资源 13 | 3. 计算结果的确定性:程序执行结果与执行速度和执行时段无关 14 | 4. 计算过程的可再见性:程序对相同数据集的执行轨迹是确定的 15 | 16 | ## 进程的并发执行 17 | 1. 多道程序设计让多个程序同时进入内存去竞争处理器以获得运行机会 18 | 2. OS允许计算机系统在一个时间段内存在多个正在运行的进程,即允许多个进程并发执行 19 | 3. OS保证按照“顺序程序设计”方法编程的程序在并发执行时不受影响,如同独占计算机 20 | 4. 这些按照顺序程序设计思想编程的进程在OS中并发执行属于无关的并发进程 21 | 22 | ## 处理器利用率计算 23 | 1. 顺序程序设计:input(78s)、process(52s)、output(20s),52/(78+52+20)=35% 24 | 2. 并发程序设计:时间同上,while(1){input,send}; while(1){receive,process,send}; while(1){receive,output},(52*n)/(78*n+52+20)=67%,n趋近于无穷大 25 | 26 | ## 并发程序设计 27 | ### 把一个具体问题求解设计成若干个可同时执行的程序模块的方法 28 | ### 特性: 29 | 1. 并发性:多个进程在多道程序系统中并发执行或者在多处理器系统中并行执行:提高了计算效率 30 | 2. 共享性:多个进程共享软件资源 31 | 3. 交往性:多个进程并发执行时存在制约:增加了程序设计的难度 32 | 33 | ### 无关与交往的并发进程 34 | 1. 无关:一组并发进程分别在不同变量集合上运行,一个进程的执行与其他并发进程的进展无关 35 | 2. 交往:一组并发进程共享某些变量,一个进程的执行可能影响其他并发进程的结果 36 | 37 | ### 与时间有关的错误 38 | 1. 对于一组交往的并发进程,执行的相对速度无法相互控制 39 | 2. 如果程序设计不当,可能出现各种“与时间有关的”错误 40 | 3. 表现一:结果错误;表现二:永远等待 41 | 42 | ### 进程互斥与进程同步 43 | 1. 交互的并发进程在执行时必须进行制约,才能保证得到合理的结果 44 | 2. 进程互斥:并发进程之间因相互争夺独占性资源而产生的竞争制约关系 45 | 3. 进程同步:并发进程之间为完成共同任务基于某个条件来协调执行先后关系而产生的协作制约关系 46 | 47 | ### 互斥与临界区 48 | 1. 临界资源:互斥共享变量所代表的资源,即一次只能被一个进程使用的资源 49 | 2. 临界区:并发进程中与互斥共享变量相关的程序段 50 | 1. 确定临界资源 share 51 | 2. 确定临界区 region do 52 | 3. 两个进程的临界区有相同的临界资源,就是相关的临界区,必须互斥进入 53 | 4. 两个临界区不相关,进入就没有限制 54 | 5. 临界区管理的三个要求 55 | 1. 一次至多允许一个进程停留在相关的临界区内 56 | 2. 一个进程不能无限止地停留在临界区内 57 | 3. 一个进程不能无限止地等待进入临界区 58 | 6. 临界区管理 59 | 1. 同时进入临界区 60 | ```c 61 | process P1 62 | begin 63 | while inside2 do [ ]; 64 | inside1 := true; 65 | 临界区; 66 | inside1 := false; 67 | end; 68 | 69 | process P2 70 | begin 71 | while inside1 do [ ]; 72 | inside2 := true; 73 | 临界区; 74 | inside2 := false; 75 | end; 76 | ``` 77 | 2. 同时等待进入临界区 78 | ```c 79 | process P1 80 | begin 81 | inside1 := true; 82 | while inside2 do [ ]; 83 | 临界区; 84 | inside1 := false; 85 | end; 86 | 87 | process P2 88 | begin 89 | inside2 := true; 90 | while inside1 do [ ]; 91 | 临界区; 92 | inside2 := false; 93 | end; 94 | ``` 95 | 7. 解决思路 96 | ```c 97 | // 测试锁 98 | TS(x) { 99 | if (x==false) {x=true;return true; 100 | } else return false; 101 | } 102 | Boolean lock; 103 | lock=false; // 临界区可用 104 | process Pi { 105 | Boolean pi; 106 | repeat pi=TS(lock) until pi; // 循环请求锁 107 | 临界区 108 | lock=false; // 解锁 109 | } 110 | // 交换锁 111 | swap(a, b){temp=a;a=b;b=temp;} 112 | Boolean lock; 113 | lock=false; // 临界区可用 114 | process Pi { 115 | Boolean pi; 116 | pi=true; 117 | repeat swap(lock, pi) until !pi; // 循环建立锁 118 | 临界区; 119 | lock=false; // 解锁 120 | } 121 | ``` 122 | 8. 实现临界区管理的硬件设施 123 | 1. TS和swap指令均是忙式等待,效率低 124 | 2. 简单的解决办法是在进出临界区时开关中断,这样临界区执行就不会中断了,执行就有原子性。关中断;临界区;开中断 125 | 3. 操作系统原语就采用这种实现思路 126 | 4. 但是,临界区的指令长度应该是短小精悍,这样才能保证系统效率 127 | 5. 不建议用户程序使用,滥用是可怕的! 128 | 3. 多个并发进程访问临界资源时,存在竞争制约关系。如果两个进程同时停留在相关的临界区内就会出现与时间相关的错误 129 | 130 | ## PV操作与进程互斥 131 | ### 问题 132 | 1. TS或swap指令管理临界区,采用忙式轮询,效率低 133 | 2. 关开中断管理临界区,不便交给用户程序使用 134 | 135 | ### 信号量的构思 136 | 1. 一种可动态定义的软件资源:信号量 137 | 1. 核心数据结构:等待进程队列 138 | 2. 信号量声明:资源报到,建立队列 139 | 3. 申请资源的原语:若申请不到,调用进程入队等待 140 | 4. 归还资源的原语:若队列中有等待进程,需释放 141 | 5. 信号量撤销:资源注销,撤销队列 142 | 2. 记录型信号量:一种带数值的软资源 143 | ```c 144 | typedef struct semaphore { 145 | int value; // 信号量值 146 | struct pcb *list; // 信号量等待进程队列指针 147 | } 148 | ``` 149 | 1. 每个信号量建立一个等待进程队列 150 | 2. 每个信号量相关一个整数值 151 | 1. 正值表示资源可复用次数 152 | 2. 0值表示无资源且无进程等待 153 | 3. 负值表示等待队列中进程个数 154 | 3. P、V操作原语 155 | ```c 156 | procedure P(semaphore:s) { 157 | s -= 1; // 信号量-1 158 | if (s<0) W(s); // 若信号量小于0,则调用进程被置成等待信号量s的状态 159 | } 160 | procedure V(semaphore:s) { 161 | s += 1; // 信号量+1 162 | if (s<=0) R(s); // 若信号量小于等于0,则释放一个等待信号量s的进程 163 | } 164 | ``` 165 | 4. PV操作解决进程互斥问题框架 166 | ```c 167 | semaphore s; 168 | s=1; 169 | begin 170 | process Pi { 171 | ...... 172 | P(s); 173 | 临界区; 174 | V(s); 175 | ...... 176 | } 177 | end; 178 | ``` 179 | 5. PV操作解决进程同步问题 180 | 1. 进程同步:并发进程为完成共同任务基于某个条件来协调执行先后关系而产生的协作制约关系 181 | 2. 一个进程的执行等待来自于其他进程的消息 182 | 3. 解决的基本思路: 183 | 1. 定义一个信号量:其数值代表可用消息数 184 | 2. 等待消息进程:执行P,无消息则等待 185 | 3. 发出消息进程:执行V,有等待进程则释放 186 | 4. 1生产者1消费者1缓冲区问题 187 | 1. 生产者和消费者共享缓冲区 188 | 2. 缓冲区有空位时,生产者可放入产品,否则等待 189 | 3. 缓冲区有产品时,消费者可取出产品,否则等待 190 | ```c 191 | Int B; 192 | process producer 193 | begin 194 | L1: 195 | produce a product; 196 | B = product; 197 | goto L1; 198 | end; 199 | 200 | process consumer 201 | begin 202 | L2: 203 | product = B; 204 | consume a product; 205 | goto L2; 206 | end; 207 | // 正确执行顺序:P→(同步关系1:等待产品)C→(同步关系2:等待缓冲)P→C→P→C... 208 | 209 | // 信号量仅仅解决信号传递数据传送需要共享缓冲区 210 | ``` 211 | 4. 解决思路: 212 | 1. 同步关系1:消费者一开始在等待产品到来,考虑设置一个信号量(等待产品);一开始无产品,初值为0 213 | 2. 同步关系2:消费者则在等待缓冲区中有空位,也可设置一个信号量(等待缓冲区);一开始缓冲区有空位,初值为1 214 | ```c 215 | // PV解决1生产者1消费者1缓冲区问题 216 | Int B; // 共享缓冲区 217 | Semaphore sput; // 可以使用的空缓冲区 218 | Semaphore sget; // 缓冲区内可以使用的产品数 219 | sput = 1; // 缓冲区内允许放入一件产品 220 | sget = 0; // 缓冲区内没有产品 221 | process producer { 222 | L1: 223 | produce a product; 224 | P(sput); 225 | B = product; 226 | V(sget); 227 | goto L1; 228 | } 229 | 230 | process consumer { 231 | L2: 232 | P(sget); 233 | product = B; 234 | V(sput); 235 | consume a product; 236 | goto L2; 237 | } 238 | 239 | // PV解决1生产者1消费者N缓冲区问题 240 | Int B[k]; // 共享缓冲区队列 241 | Semaphore sput; // 可以使用的空缓冲区 242 | Semaphore sget; // 缓冲区内可以使用的产品数 243 | sput = k; // 缓冲区内允许放入k件产品 244 | sget = 0; // 缓冲区内没有产品 245 | Int putptr, getptr; // 循环队列指针 246 | putptr = 0; getptr = 0; 247 | process producer_i { 248 | L1: 249 | produce a product; 250 | P(sput); 251 | B[putptr] = product; 252 | putptr = (putptr+1) mod k; 253 | V(sget); 254 | goto L1; 255 | } 256 | 257 | process consumer_j { 258 | L2: 259 | P(sget); 260 | product = B[getptr]; 261 | getptr = (getptr+1) mod k; 262 | V(sput); 263 | consume a product; 264 | goto L2; 265 | } 266 | 267 | // PV解决N生产者N消费者N缓冲区问题 268 | Int B[k]; // 共享缓冲区队列 269 | Semaphore sput; // 可以使用的空缓冲区 270 | Semaphore sget; // 缓冲区内可以使用的产品数 271 | sput = k; // 缓冲区内允许放入k件产品 272 | sget = 0; // 缓冲区内没有产品 273 | Int putptr, getptr; // 循环队列指针 274 | putptr = 0; getptr = 0; 275 | s1, s2:semaphore; // 互斥使用putptr,getptr 276 | s1 = 1;s2 = 1; 277 | process producer_i { 278 | L1: 279 | produce a product; 280 | P(sput); 281 | P(s1); 282 | B[putptr] = product; 283 | putptr = (putptr+1) mod k; 284 | V(s1); 285 | V(sget); 286 | goto L1; 287 | } 288 | 289 | process consumer_j { 290 | L2: 291 | P(sget); 292 | P(s2); 293 | product = B[getptr]; 294 | getptr = (getptr+1) mod k; 295 | V(s2); 296 | V(sput); 297 | consume a product; 298 | goto L2; 299 | } 300 | ``` 301 | ```c 302 | // 苹果橘子问题 303 | Int plate; 304 | Semaphore sp; // 盘子里可以放几个水果 305 | Semaphore sg1; // 盘子里有桔子 306 | Semaphore sg2; // 盘子里有苹果 307 | sp = 1; // 盘子里允许放入一个水果 308 | sg1 = 0; // 盘子里没有桔子 309 | sg2 = 0; // 盘子里没有苹果 310 | process father { 311 | L1: 削一个苹果; 312 | P(sp); 313 | 把苹果放入plate; 314 | V(sg2); 315 | goto L1; 316 | } 317 | 318 | process mother { 319 | L2: 剥一个桔子; 320 | P(sp); 321 | 把桔子放入plate; 322 | V(sg1); 323 | goto L2; 324 | } 325 | 326 | process son { 327 | L3: P(sg1); 328 | 从plate中取桔子; 329 | V(sp); 330 | 吃桔子; 331 | goto L3; 332 | } 333 | 334 | process daughter { 335 | L4: P(sg2); 336 | 从plate中取苹果; 337 | V(sp); 338 | 吃苹果; 339 | goto L4; 340 | } 341 | ``` 342 | 343 | ## 管程概念的提出 344 | 1. 管程试图抽象相关并发进程对共享变量访问,以提供一个友善的并发程序设计开发环境 345 | 2. 管程是由若干公共变量及其说明和所有访问这些变量的过程所组成 346 | 3. 管程把分散在各个进程中互斥地访问公共变量的那些临界区集中起来管理,管程的局部变量只能由该管程的过程存取 347 | 4. 进程只能互斥地调用管程中的过程 348 | 5. 管程的条件变量 349 | 1. 条件变量(condition variables):当调用管程过程的进程无法运行时,用于阻塞进程的信号量 350 | 2. 同步原语wait:当一个管程过程发现无法继续时(如发现没有可用资源时),它在某些条件变量上执行wait,这个动作引起调用进程阻塞 351 | 3. 同步原语signal:用于释放在条件变量上阻塞的进程 352 | 6. 管程过程执行中signal的处理问题 353 | 1. 当使用signal释放一个等待进程时,可能出现两个进程同时停留在管程内。解决办法: 354 | 1. 执行signal的进程等待,直到被释放进程退出管程或等待另一个条件 355 | 2. 被释放进程等待,直到执行signal的进程退出管程或等待另一个条件 356 | 2. 霍尔采用了第一种办法 357 | 3. 汉森选了二者的折中,规定管程过程所执行的signal操作是过程体的最后一个操作 358 | 359 | ## 霍尔管程的实现方法 360 | 361 | 1. 使用signal释放一个等待进程时,霍尔管程让执行signal的进程等待,直到被释放进程退出管程或等待另一个条件 362 | 2. 霍尔管程基于PV操作原语实现 363 | 1. Wait和signal可以是程序过程 364 | 2. 可以用语言机制实现霍尔管程 365 | ```c 366 | // 互斥调用霍尔管程的信号量 367 | TYPE interf=RECORD 368 | mutex: semaphore; // 调用管程过程前使用的互斥信号量 369 | next: semaphore; // 发出signal的进程挂起自己的信号量 370 | next_count: integer; // 在next上等待的进程数 371 | END; 372 | // 互斥调用霍尔管程的框架 373 | P(IM.mutex); 374 | <过程体> 375 | if IM.next_cout > 0 then V(IM.next); 376 | else V(Im.mutex); 377 | // 霍尔管程的条件变量 378 | x_sem: semaphore; // 与资源相关的信号量 379 | x_count: integer; // 在x_sem上等待的进程数 380 | // 霍尔管程的wait进程 381 | procedure wait(var x_sem: semaphore, var x_count: integer, var IM: interf); 382 | begin 383 | x_count += 1; 384 | if IM.next_count > 0 then V(IM.next); 385 | else V(IM.mutex); 386 | P(x_sem); 387 | x_count -= 1; 388 | end; 389 | // 霍尔管程的signal过程 390 | procedure signal(var x_sem: semaphore, var x_count: integer, var IM: interf); 391 | begin 392 | if x_count > 0 then begin 393 | IM.next_count += 1; 394 | V(x_sem); 395 | P(IM.next); // 进入等待调用管程的队列 396 | IM.next_count -= 1; 397 | end; 398 | end; 399 | 400 | // 哲学家问题 401 | TYPE dining_philosophers = MONITOR 402 | var state: array[0..4] of (thinking, hungry, eating); 403 | s: array[0..4] of semaphore; 404 | s_count: array[0..4] of integer; 405 | define pickup, putdown; 406 | use wait, signal; 407 | procedure test(k: 0..4) P 408 | if state[(k-1) mod 5] <> eating and state[k]=hungry 409 | and state[(k+1) mod 5] <> eating then 410 | {state[k] := eating; signal(s[k],s_count[k],IM);} 411 | } 412 | 413 | procedure pickup(i:0..4) { 414 | state[i] := hungry; 415 | test(i); 416 | if state[i] <> eating 417 | then wait(s[i], s_count[i], IM); 418 | } 419 | 420 | procedure putdown(i:0..4 { 421 | state{i]:=thinking; 422 | test((i-1) mod 5); 423 | test((i+1) mod 5); 424 | } 425 | 426 | begin 427 | for i:=0 to 4 do 428 | state[i] := thinking; 429 | end; 430 | 431 | begin 432 | process philosopher_i() { 433 | L:thinking(); 434 | P(IM.mutex); 435 | dining_philosophers.pickup(i); 436 | if IM.next_count > 0 then V(IM.next); else V(IM.mutex); 437 | eating(); 438 | P(IM.mutex); 439 | dining_phi;osophers.putdown(i); 440 | if IM.next_count > 0 then V(IM.next); else V(IM.mutex); 441 | goto L; 442 | } 443 | end; 444 | 445 | // 读者写者问题 446 | TYPE read-writer = MONITOR 447 | var Rc, Wc: integer; R, W:semaphore; rc, wc: integer; 448 | define start_read, end_read, start_writer, end_writer; 449 | use wait, signal, check, release; 450 | begin rc:=0;wc:=0;Rc:=0;Wc:=0;R:=0;W:=0; end; 451 | 452 | procedure start_read; 453 | begin 454 | if wc > 0 then wait(R,Rc,IM); 455 | rc += 1; 456 | signal(R, Rc, IM); // 连续释放读者 457 | end; 458 | 459 | procedure end_read; 460 | begin 461 | rc += 1; 462 | if rc = 0 then signal(W, Wc,IM); 463 | end; 464 | 465 | procedure start_write; 466 | begin 467 | wc += 1; 468 | if rc > 0 or wc > 1 then wait(W, Wc, IM); 469 | end; 470 | 471 | procedure end_write; 472 | begin 473 | wc += 1; 474 | if wc > 0 then signal(W,Wc,IM); 475 | else signal(R,Rc,IM); 476 | end; 477 | ``` 478 | 479 | ## 进程通信的概念 480 | 481 | 1. 交往进程通过信号量操作实现进程互斥和同步,这是一种低级通信方式 482 | 2. 进程有时还需交换更多的信息(如把数据传送给另一个进程),可以引进高级通信方式——进程通信机制,实现进程间用信件来交换信息 483 | 3. 进程通信扩充了并发进程的数据共享 484 | 4. 进程直接通信 485 | 1. 发送或接收信件的进程指出信件发给谁或从谁那里接收信件 486 | 1. send(P,信件):把信件发送给给进程P 487 | 2. receive(Q,信件);从进程Q接收信件 488 | 5. 进程间接通信 489 | 1. 发送或接收信件通过一个信箱来进行,该信箱有唯一标识符 490 | 2. 多个进程共享一个信箱 491 | 1. send(A,信件):把信件传送到信箱A 492 | 2. receive(A,信件):从信箱A接收信件 493 | 3. 间接通信的信箱 494 | 1. 存放信件的存储区域,每个信箱可以分成信箱特征和信箱体两部分 495 | 1. 信箱特征指出信箱容量、信件格式、指针等 496 | 2. 信箱体用来存放信件,信箱体分成若干个区,每个区可容纳一封信 497 | 6. 发送信件原语的处理流程 498 | 1. 若指定的信箱未满,则把信件送入信箱中指针所指示的位置,释放等待该信箱中信件的等待者;否则,发送信件者被置成等待信箱的状态 499 | 7. 接收信件原语的处理流程 500 | 1. 若指定信箱中有信件,则取出一封信件,释放等待信箱的等待者;否则,接收信件者被置成等待信箱中信件的状态 501 | 502 | ## 基于流的进程通信 503 | 504 | 1. 多个进程使用一个共享的消息缓冲区(管道、多路转接器、套接字) 505 | 2. 一些进程往消息缓冲区中写入字符流(send/write) 506 | 3. 一些进程从消息缓冲区中读出字符流(receive/read) 507 | 4. 信息交换单位基于字符流,长度任意 508 | 509 | ## 远程过程调用RPC 510 | 511 | 1. 采用客户/服务器计算模式 512 | 2. 服务器进程提供一系列过程/服务,供客户进程调用 513 | 3. 客户进程通过调用服务器进程提供的过程/服务获得服务 514 | 4. 考虑到客户计算机和服务器计算机的硬件异构型,外部数据表示XDR被引入来转换每台计算机的特殊数据格式为标准数据格式 515 | 516 | ## 死锁的产生 517 | 518 | ### 定义 519 | 1. 允许多个进程并发执行共享系统资源时,系统必须要提供同步机制和进程通信机制。然而,对这种机制使用不当的话,可能会出现进程永久被阻塞的现象。例如,两个进程分别等待对方占有的一个资源,于是两者都不能执行而处于永远等待,这种现象称为“死锁” 520 | 521 | ### 死锁:每一个进程都在等待被另一个进程所占有的、不能抢占的资源 522 | 1. 存在n个进程P1,P2,...,Pn 523 | 2. 进程Pi因为申请不到资源Ri而处于等待状态 524 | 3. 而Ri又被Pi+1占有,Rn被P1占有 525 | 4. 显然,这n个进程的等待状态永远不能结束,这n个进程就处于死锁状态 526 | 527 | ### 产生 528 | 1. 竞争资源产生死锁 529 | 2. PV操作使用不当产生死锁 530 | 3. 同类资源分配不当引起死锁 531 | 1. 若系统中有m个资源被n个进程共享,当每个进程都要求K个资源,而$m< n\times(K-1)+1$时,如果分配不当就可能引起死锁 532 | 4. 对临时性资源使用不加限制引起死锁 533 | 1. 在进程通信时使用的信件可以看作是一种临时性资源,如果对信件的发送和接收不加限制的话,则可能引起死锁 534 | 5. 产生的必要条件 535 | 1. 互斥条件:进程应互斥使用资源,任一时刻一个资源仅为一个进程独占 536 | 2. 占有和等待条件:一个进程请求资源得不到满足而等待时,不释放已占有的资源 537 | 3. 不剥夺条件:任一进程不能从另一进程那里抢夺资源 538 | 4. 循环等待条件:存在一个循环等待链,每一个进程分别等待它前一个进程所持有的资源 539 | 540 | ### 解决办法 541 | #### 产生死锁因素: 542 | 1. 系统拥有的资源数量 543 | 2. 资源分配的策略 544 | 3. 进程对资源的使用要求以及并发进程的推进顺序 545 | 546 | #### 三个方面解决死锁问题 547 | 1. 死锁防止 548 | 1. 破坏四个必要条件之一 549 | 2. 破坏第一个条件,把独占型资源改造成共享性资源,使资源可同时访问而不是互斥使用。但对许多资源无法做到 550 | 3. 破坏第三个条件,采用剥夺式调度方法,但剥夺式调度方法目前只适用于对主存资源和处理器资源的分配,而不适用于所有资源 551 | 4. 破坏第二个条件,采用静态分配 552 | 1. 静态分配:一个进程必须在执行前就申请它所要的全部资源,并且直到它索要的资源都得到满足之后才开始执行 553 | 2. 所有并发执行的进程要求的资源总和不超过系统拥有的资源数 554 | 3. 进程在执行过程中不再申请资源,所以就破坏了第二个条件 555 | 5. 破坏第四个条件,层次分配 556 | 1. 层次分配将资源分成多个层次 557 | 2. 一个进程得到某一层的一个资源后,它只能再申请在较高层的资源 558 | 3. 当一个进程要释放某层的一个资源时,必须先释放所占用的较高层的资源 559 | 4. 当一个进程获得了某一层的一个资源后,它想再申请该层中的另一个资源,那么必须先释放该层中的已占资源 560 | 2. 死锁避免 561 | 1. 当不能防止死锁的产生时,如果能掌握并发进程中与每个进程有关的资源申请情况,仍然可以避免死锁的发生 562 | 2. 只需要在位申请者分配资源前先测试系统状态,若把资源分配给申请者会产生死锁的话,则拒绝分配,否则接收申请,为它分配资源 563 | 3. 银行家算法:借钱给有偿还能力的客户 564 | 1. 系统首先检查申请者对资源的最大需求量,如果现存的资源可以满足它的最大需求量时,就满足当前的申请 565 | 2. 换言之,仅仅在申请者可能无条件地归还它所申请的全部资源时,才分配资源给它 566 | 3. 例: 567 | 1. 假设系统有三个进程P、Q、R,系统只有一类资源共10个。分配情况: 568 | 1. P:占有4个,还需申请4个 569 | 2. Q:占有2个,还需申请2个 570 | 3. R:占有2个,还需申请7个 571 | 2. 现在总共占用了8个资源,只能再分配个两个资源。所以先分配给Q,等Q完成之后,就有4个资源,继续分配给P,等P完成之后,就有8个资源,最后给R 572 | 3. 死锁检测和恢复 573 | 1. 对资源的分配不加限制,但系统定时运行一个“死锁检测”程序,判定系统内是否已出现死锁,若检测到死锁则设法加以解除 574 | 2. 检测: 575 | 1. 可设置两张表格来记录进程使用资源的情况 576 | 1. 等待资源表记录每个被阻塞进程等待的资源 577 | 2. 占用资源表记录每个进程占有的资源 578 | 579 | 2. 进程申请资源时,先查该资源是否为其他进程所占用;若资源空闲,则把该资源分配给申请者且登入占用表;否则,则登入进程等待资源表 580 | 581 | 3. 死锁检测程序定时检测这两张表,若有进程Pi等待资源rk,且rk被进程Pj占用,则说明Pi和Pj具有“等待占用关系”,记为W(Pi,Pj) 582 | 583 | 4. 死锁检测程序反复检测这两张表,可以列出所有的“等待占用关系” 584 | 585 | 5. 如果出现W(Pi,Pj),W(Pj,Pk),...,W(Pm,Pn),W(Pn,Pi)时,显然,系统中存在一组循环等待资源的进程:Pi,Pj,Pk,...,Pm,Pn,也就是说出现了死锁 586 | 587 | 6. 两张表可以用一个矩阵A表示 588 | 589 | | 进程/$A[b_{ij}]$/进程 | P1 | P2 | ... | Pn | 590 | | --------------------- | ---- | ---- | ---- | ---- | 591 | | P1 | b11 | b12 | ... | b1n | 592 | | P2 | b21 | b22 | ... | b2n | 593 | | ... | ... | ... | ... | ... | 594 | | Pn | bn1 | bn2 | ... | bnn | 595 | 596 | 其中b_ij=1表示当Pi等待被Pj占用的资源时,=0表示Pi与Pj不存在等待占用关系时 597 | 598 | 7. 算法 599 | ```c 600 | // Warshall的传递闭包算法检测是否有死锁发生 601 | // 即对矩阵A构造传递闭包A*[bij] 602 | for k:= 1 to n do 603 | for i: 1 to n do 604 | for j:= 1 to n do 605 | bij:= bij∪(bij∩bkj) 606 | ``` 607 | 608 | #### 死锁检测后的解决办法 609 | 1. 采用重新启动进程执行的办法,恢复工作应包含重启动一个或全部进程,以及从哪一点开始重启动 610 | 2. 全部卷入死锁从头开始启动,但这样的代价相当大 611 | 3. 进程执行过程中定时设置校验点,从校验点开始重执行 612 | 4. 中止一个卷入死锁的进程,以后重执行 613 | -------------------------------------------------------------------------------- /计算机操作系统(第3版)课后习题答案.md: -------------------------------------------------------------------------------- 1 | # 计算机操作系统(第3版)课后习题答案 2 | 3 | 参考链接: [https://blog.csdn.net/skymyxvincent/article/details/52851675](https://blog.csdn.net/skymyxvincent/article/details/52851675) 4 | 5 | ## 第一章 6 | 7 | **1.设计现代OS的主要目标是什么?** 8 | 9 | 答:(1)有效性 (2)方便性 (3)可扩充性 (4)开放性 10 | 11 | **2.OS的作用可表现在哪几个方面?** 12 | 13 | 1. OS作为用户与计算机硬件系统之间的接口 14 | 15 | 2. OS作为计算机系统资源的管理者 16 | 17 | 3. OS实现了对计算机资源的抽象 18 | 19 | **3.为什么说OS实现了对计算机资源的抽象?** 20 | 21 | 答:OS首先在裸机上覆盖一层I/O设备管理软件,实现了对计算机硬件操作的第一层次抽象;在第一层软件上再覆盖文件管理软件,实现了对硬件资源操作的第二层次抽象。OS 通过在计算机硬件上安装多层系统软件,增强了系统功能,隐藏了对硬件操作的细节,由它们共同实现了对计算机资源的抽象。 22 | 23 | **4.试说明推动多道批处理系统形成和发展的主要动力是什么?** 24 | 25 | 答:主要动力来源于四个方面的社会需求与技术发展: 26 | 27 | 1. 不断提高计算机资源的利用率; 28 | 29 | 2. 方便用户; 30 | 31 | 3. 器件的不断更新换代; 32 | 33 | 4. 计算机体系结构的不断发展。 34 | 35 | **5.何谓脱机I/O和联机I/O?** 36 | 37 | 答:脱机I/O 是指事先将装有用户程序和数据的纸带或卡片装入纸带输入机或卡片机,在外围机的控制下,把纸带或卡片上的数据或程序输入到磁带上。该方式下的输入输出由外围机控制完成,是在脱离主机的情况下进行的。而联机I/O方式是指程序和数据的输入输出都是在主机的直接控制下进行的。 38 | 39 | **6.试说明推动分时系统形成和发展的主要动力是什么?** 40 | 41 | 答:推动分时系统形成和发展的主要动力是更好地满足用户的需要。主要表现在:CPU 的分时使用缩短了作业的平均周转时间;人机交互能力使用户能直接控制自己的作业;主机的共享使多用户能同时使用同一台计算机,独立地处理自己的作业。 42 | 43 | **7.实现分时系统的关键问题是什么?应如何解决?** 44 | 45 | 答:关键问题是当用户在自己的终端上键入命令时,系统应能及时接收并及时处理该命令,在用户能接受的时延内将结果返回给用户。 46 | 47 | 解决方法:针对及时接收问题,可以在系统中设置多路卡,使主机能同时接收用户从各个终端上输入的数据;为每个终端配置缓冲区,暂存用户键入的命令或数据。针对及时处理问题,应使所有的用户作业都直接进入内存,并且为每个作业分配一个时间片,允许作业只在自己的时间片内运行,这样在不长的时间内,能使每个作业都运行一次。 48 | 49 | **8.为什么要引入实时OS?** 50 | 51 | 答:实时操作系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。引入实时OS 是为了满足应用的需求,更好地满足实时控制领域和实时信息处理领域的需要。 52 | 53 | **9.什么是硬实时任务和软实时任务?试举例说明。** 54 | 55 | 答:硬实时任务是指系统必须满足任务对截止时间的要求,否则可能出现难以预测的结果。举例来说,运载火箭的控制等。软实时任务是指它的截止时间并不严格,偶尔错过了任务的截止时间,对系统产生的影响不大。举例:网页内容的更新、火车售票系统。 56 | 57 | **10.在8位微机和16位微机中,占据了统治地位的是什么操作系统?** 58 | 59 | 答:单用户单任务操作系统,其中最具代表性的是CP/M和MS-DOS. 60 | 61 | **11.试列出Windows OS中五个主要版本,并说明它们分别较之前一个版本有何改进。** 62 | 63 | 1. Microsoft Windows 1.0是微软公司在个人电脑上开发图形界面的首次尝试。 64 | 65 | 2. Windows 95是混合的16位/32位系统,第一个支持32位。带来了更强大、更稳定、更实用的桌面图形用户界面,结束了桌面操作系统间的竞争。 66 | 67 | 3. Windows 98是微软公司的混合16位/32位Windows操作系统,改良了硬件标准的支持,革新了内存管理,是多进程操作系统。 68 | 69 | 4. Windows XP 是基于Windows 2000的产品,拥有新用户图形界面月神Luna。简化了用户安全特性,整合了防火墙。 70 | 71 | 5. Windows Vista 包含了上百种新功能;特别是新版图形用户界面和Windows Aero 全新界面风格、加强的搜寻功能(Windows Indexing Service)、新媒体创作工具以及重新设计的网络、音频、输出(打印)和显示子系统。。 72 | 73 | **12.试从交互性、及时性以及可靠性方面,将分时系统与实时系统进行比较。** 74 | 75 | 1. 及时性:实时信息处理系统对实时性的要求与分时系统类似,都是以人所能接受的等待时间来确定;而实时控制系统的及时性,是以控制对象所要求的开始截止时间或完成截止时间来确定的,一般为秒级到毫秒级,甚至有的要低于100微秒。 76 | 77 | 2. 交互性:实时信息处理系统具有交互性,但人与系统的交互仅限于访问系统中某些特定的专用服务程序。不像分时系统那样能向终端用户提供数据和资源共享等服务。 78 | 79 | 3. 可靠性:分时系统也要求系统可靠,但相比之下,实时系统则要求系统具有高度的可靠性。因为任何差错都可能带来巨大的经济损失,甚至是灾难性后果,所以在实时系统中,往往都采取了多级容错措施保障系统的安全性及数据的安全性。 80 | 81 | **13.OS有哪几大特征?其最基本的特征是什么?** 82 | 83 | 答:并发性、共享性、虚拟性和异步性四个基本特征;最基本的特征是并发性。 84 | 85 | **14.处理机管理有哪些主要功能?它们的主要任务是什么?** 86 | 87 | 答:处理机管理的主要功能是:进程管理、进程同步、进程通信和处理机调度; 88 | 89 | 进程管理:为作业创建进程,撤销已结束进程,控制进程在运行过程中的状态转换。 90 | 91 | 进程同步:为多个进程(含线程)的运行进行协调。 92 | 93 | 通信:用来实现在相互合作的进程之间的信息交换。 94 | 95 | 处理机调度: 96 | 97 | 1. 作业调度:从后备队里按照一定的算法,选出若干个作业,为他们分配运行所需的资源(首选是分配内存)。 98 | 99 | 2. 进程调度:从进程的就绪队列中,按照一定算法选出一个进程,把处理机分配给它,并设置运行现场,使进程投入执行。 100 | 101 | **15.内存管理有哪些主要功能?他们的主要任务是什么?** 102 | 103 | 答:内存管理的主要功能有:内存分配、内存保护、地址映射和内存扩充。 104 | 105 | 内存分配:为每道程序分配内存。 106 | 107 | 内存保护:确保每道用户程序都只在自己的内存空间运行,彼此互不干扰。 108 | 109 | 地址映射:将地址空间的逻辑地址转换为内存空间与对应的物理地址。 110 | 111 | 内存扩充:用于实现请求调用功能,置换功能等。 112 | 113 | **16.设备管理有哪些主要功能?其主要任务是什么?** 114 | 115 | 答:主要功能有: 缓冲管理、设备分配和设备处理以及虚拟设备等。 116 | 117 | 主要任务: 完成用户提出的I/O请求,为用户分配I/O设备;提高CPU 和I/O设备的利用率;提高I/O速度;以及方便用户使用I/O设备. 118 | 119 | **17.文件管理有哪些主要功能?其主要任务是什么?** 120 | 121 | 答:文件管理主要功能:文件存储空间的管理、目录管理、文件的读/写管理和保护。 122 | 123 | 文件管理的主要任务:管理用户文件和系统文件,方便用户使用,保证文件安全性。 124 | 125 | **18.是什么原因使操作系统具有异步性特征?** 126 | 127 | 答:操作系统的异步性体现在三个方面:一是进程的异步性,进程以人们不可预知的速度向 128 | 129 | 前推进,二是程序的不可再现性,即程序执行的结果有时是不确定的,三是程序执行时间的 130 | 131 | 不可预知性,即每个程序何时执行,执行顺序以及完成时间是不确定的。 132 | 133 | **19.模块接口法存在哪些问题?可通过什么样的途径来解决?** 134 | 135 | 答:(1)模块接口法存在的问题:①在OS设计时,各模块间的接口规定很难满足在模块完成后对接口的实际需求。②在OS 设计阶段,设计者必须做出一系列的决定,每一个决定必须建立在上一个决定的基础上。但模块化结构设计的各模块设计齐头并进,无法寻找可靠的顺序,造成各种决定的无序性,使程序设计人员很难做到设计中的每一步决定都建立在可靠的基础上,因此模块接口法被称为“无序模块法”。 136 | 137 | (2)解决途径:将模块接口法的决定顺序无序变有序,引入有序分层法。 138 | 139 | **20.在微内核OS中,为什么要采用客户/服务器模式?** 140 | 141 | C/S 模式具有独特的优点: 142 | 143 | 1. 数据的分布处理和存储 144 | 2. 便于集中管理 145 | 3. 灵活性和可扩充性 146 | 4. 易于改编应用软件 147 | 148 | **21.试描述什么是微内核OS。** 149 | 150 | 1. 足够小的内核 151 | 2. 基于客户/服务器模式 152 | 3. 应用机制与策略分离原理 153 | 4. 采用面向对象技术。 154 | 155 | **22.在基于微内核结构的OS中,应用了哪些新技术?** 156 | 157 | 答:在基于微内核结构的OS中,采用面向对象的程序设计技术。 158 | 159 | **23.何谓微内核技术?在微内核中通常提供了哪些功能?** 160 | 161 | 答:把操作系统中更多的成分和功能放到更高的层次(即用户模式)中去运行,而留下一个尽量小的内核,用它来完成操作系统最基本的核心功能,称这种技术为微内核技术。在微内核中通常提供了进程(线程)管理、低级存储器管理、中断和陷入处理等功能。 162 | 163 | **24.微内核操作系统具有哪些优点?它为何能有这些优点?** 164 | 165 | 1. 提高了系统的可扩展性 166 | 2. 增强了系统的可靠性 167 | 3. 可移植性 168 | 4. 提供了对分布式系统的支持 169 | 5. 融入了面向对象技术 170 | 171 | ## 第二章 172 | 173 | **1. 什么是前趋图?为什么要引入前趋图?** 174 | 175 | 答:前趋图(Precedence Graph)是一个有向无循环图,记为DAG(Directed Acyclic Graph),用于描述进程之间执行的前后关系。 176 | 177 | **2. 画出下面四条语句的前趋图:** 178 | 179 | **S1=a:=x+y; S2=b:=z+1; S3=c:=a – b;S4=w:=c+1;** 180 | 181 | 答:其前趋图为: 182 | 183 | **3. 什么程序并发执行会产生间断性特征?** 184 | 185 | 答:程序在并发执行时,由于它们共享系统资源,为完成同一项任务需要相互合作,致使这些并发执行的进程之间,形成了相互制约关系,从而使得进程在执行期间出现间断性。 186 | 187 | **4.程序并发执行时为什么会失去封闭性和可再现性?** 188 | 189 | 答:程序并发执行时,多个程序共享系统中的各种资源,因而这些资源的状态由多个程序改变,致使程序运行失去了封闭性,也会导致其失去可再现性。 190 | 191 | **5.在操作系统中为什么要引入进程概念?它会产生什么样的影响?** 192 | 193 | 答:为了使程序在多道程序环境下能并发执行,并对并发执行的程序加以控制和描述,在操作系统中引入了进程概念。影响:使程序的并发执行得以实行。 194 | 195 | **6.试从动态性,并发性和独立性上比较进程和程序?** 196 | 197 | 1. 动态性是进程最基本的特性,表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,由撤销而消亡。进程有一定的生命期,而程序只是一组有序的指令集合,是静态实体。 198 | 2. 并发性是进程的重要特征,同时也是OS的重要特征。引入进程的目的正是为了使其程序能和其它进程的程序并发执行,而程序是不能并发执行的。 199 | 3. 独立性是指进程实体是一个能独立运行的基本单位,也是系统中独立获得资源和独立调度的基本单位。对于未建立任何进程的程序,不能作为独立单位参加运行。 200 | 201 | **7.试说明PCB 的作用,为什么说PCB 是进程存在的惟一标志?** 202 | 203 | 答:PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。作用是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,成为能与其它进程并发执行的进程。OS是根据PCB对并发执行的进程进行控制和管理的。 204 | 205 | **8.试说明进程在三个基本状态之间转换的典型原因。** 206 | 207 | 1. 就绪状态→执行状态:进程分配到CPU资源 208 | 2. 执行状态→就绪状态:时间片用完 209 | 3. 执行状态→阻塞状态:I/O请求 210 | 4. 阻塞状态→就绪状态:I/O完成 211 | 212 | **9.为什么要引入挂起状态?该状态有哪些性质?** 213 | 214 | 答:引入挂起状态处于五种不同的需要:终端用户需要,父进程需要,操作系统需要,对换需要和负荷调节需要。处于挂起状态的进程不能接收处理机调度。 215 | 216 | **10.在进行进程切换时,所要保存的处理机状态信息有哪些?** 217 | 218 | 答:进行进程切换时,所要保存的处理机状态信息有: 219 | 220 | 1. 进程当前暂存信息 221 | 2. 下一指令地址信息 222 | 3. 进程状态信息 223 | 4. 过程和系统调用参数及调用地址信息。 224 | 225 | **11.试说明引起进程创建的主要事件。** 226 | 227 | 答:引起进程创建的主要事件有:用户登录、作业调度、提供服务、应用请求。 228 | 229 | **12.试说明引起进程被撤销的主要事件。** 230 | 231 | 答:引起进程被撤销的主要事件有:正常结束、异常结束(越界错误、保护错、非法指令、特权指令错、运行超时、等待超时、算术运算错、I/O故障)、外界干预(操作员或操作系统干预、父进程请求、父进程终止)。 232 | 233 | **13.在创建一个进程时所要完成的主要工作是什么?** 234 | 235 | 1. OS发现请求创建新进程事件后,调用进程创建原语 Creat(); 236 | 2. 申请空白PCB; 237 | 3. 为新进程分配资源; 238 | 4. 初始化进程控制块; 239 | 5. 将新进程插入就绪队列. 240 | 241 | **14.在撤销一个进程时所要完成的主要工作是什么?** 242 | 243 | 1. 根据被终止进程标识符,从PCB集中检索出进程PCB,读出该进程状态。 244 | 2. 若被终止进程处于执行状态,立即终止该进程的执行,置调度标志真,指示该进程被终止后重新调度。 245 | 3. 若该进程还有子进程,应将所有子孙进程终止,以防它们成为不可控进程。 246 | 4. 将被终止进程拥有的全部资源,归还给父进程,或归还给系统。 247 | 5. 将被终止进程PCB从所在队列或列表中移出,等待其它程序搜集信息。 248 | 249 | **15.试说明引起进程阻塞或被唤醒的主要事件是什么?** 250 | 251 | 答:a. 请求系统服务;b. 启动某种操作;c. 新数据尚未到达;d. 无新工作可做. 252 | 253 | **16.进程在运行时存在哪两种形式的制约?并举例说明之。** 254 | 255 | 1. 间接相互制约关系。举例:有两进程A 和B,如果A 提出打印请求,系统已把唯一的一台打印机分配给了进程B,则进程A 只能阻塞;一旦B 释放打印机,A 才由阻塞改为就绪。 256 | 2. 直接相互制约关系。举例:有输入进程A 通过单缓冲向进程B 提供数据。当缓冲空时,计算进程因不能获得所需数据而阻塞,当进程A 把数据输入缓冲区后,便唤醒进程B;反之,当缓冲区已满时,进程A 因没有缓冲区放数据而阻塞,进程B 将缓冲区数据取走后便唤醒A。 257 | 258 | **17.为什么进程在进入临界区之前应先执行“进入区”代码?而在退出前又要执行“退出区”代码?** 259 | 260 | 答:为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码为"进入区"代码;在退出临界区后,必须执行"退出区"代码,用于恢复未被访问标志,使其它进程能再访问此临界资源。 261 | 262 | **18. 同步机构应遵循哪些基本准则?为什么?** 263 | 264 | 答:同步机构应遵循的基本准则是:空闲让进、忙则等待、有限等待、让权等待 265 | 266 | 原因:为实现进程互斥进入自己的临界区。 267 | 268 | **19. 试从物理概念上说明记录型信号量wait 和signal。** 269 | 270 | 1. wait(S):当S.value>0时,表示目前系统中这类资源还有可用的。执行一次wait 操作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类资源减少一个,因此描述为S.value:=S.value-1;当S.value<0时,表示该类资源已分配完毕,进程应调用block原语自我阻塞,放弃处理机,并插入到信号量链表S.L中。 271 | 272 | 2. signal(S):执行一次signal操作,意味着释放一个单位的可用资源,使系统中可供分配的该类资源数增加一个,故执行S.value:=S.value+1 操作。若加1后S.value≤0,则表示在该信号量链表中,仍有等待该资源的进程被阻塞,因此应调用wakeup 原语,将S.L链表中的第一个等待进程唤醒。 273 | 274 | **20.你认为整型信号量机制是否完全遵循了同步机构的四条准则?** 275 | 276 | 答:整型信号量机制不完全遵循同步机制的四条准则,它不满足“让权等待”准则。 277 | 278 | **21.如何利用信号量机制来实现多个进程对临界资源的互斥访问?并举例说明之。** 279 | 280 | 答:为使多个进程互斥访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初值为1,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。这样,每个欲访问该临界资源的进程在进入临界区之前,都要先对mutex 执行wait 操作,若该资源此刻未被访问,本次wait 操作必然成功,进程便可进入自己的临界区,这时若再有其他进程也欲进入自己的临界区,此时由于对mutex 执行wait操作定会失败,因而该进程阻塞,从而保证了该临界资源能被互斥访问。当访问临界资源的进程退出临界区后,应对mutex执行signal 操作,释放该临界资源。利用信号量实现进程互斥的进程描述 281 | 282 | 如下: 283 | 284 | ```cpp 285 | Var mutex: semaphore:=1; 286 | begin 287 | parbegin 288 | process 1: begin 289 | repeat 290 | wait(mutex); 291 | critical section 292 | signal(mutex); 293 | remainder section 294 | until false; 295 | end 296 | 297 | process 2: begin 298 | repeat 299 | wait(mutex); 300 | critical section 301 | signal(mutex); 302 | remainder section 303 | until false; 304 | end 305 | parend 306 | end 307 | ``` 308 | 309 | **22.试写出相应的程序来描述图2-17所示的前驱图。** 310 | 311 | 答:(a)Var a, b, c, d, e, f, g, h; semaphore:= 0, 0,0, 0, 0, 0, 0, 0; 312 | 313 | ```cpp 314 | begin 315 | parbegin 316 | begin S1; signal(a); signal(b); end; 317 | begin wait(a); S2; signal(c); signal(d); end; 318 | begin wait(b); S3; signal(e); end; 319 | begin wait(c); S4; signal(f); end; 320 | begin wait(d); S5; signal(g); end; 321 | begin wait(e); S6; signal(h); end; 322 | begin wait(f); wait(g); wait(h); S7; end; 323 | parend 324 | end 325 | ``` 326 | 327 | (b)Var a, b, c, d, e, f, g, h, i, j; semaphore:= 0,0, 0, 0, 0, 0, 0,0,0, 0; 328 | 329 | ```cpp 330 | begin 331 | parbegin 332 | begin S1; signal(a); signal(b); end; 333 | begin wait(a); S2; signal(c); signal(d); end; 334 | begin wait(b); S3; signal(e); signal(f); end; 335 | begin wait(c); S4; signal(g); end; 336 | begin wait(d); S5; signal(h); end; 337 | begin wait(e); S6; signal(i); end; 338 | begin wait(f); S7; signal(j); end; 339 | begin wait(g);wait(h); wait(i); wait(j); S8;end; 340 | parend 341 | end 342 | ``` 343 | 344 | **23.在生产者消费者问题中,如果缺少了signal(full)或signal(empty),对执行结果有何影响?** 345 | 346 | 如果缺少signal(full),那么表明从第一个生产者进程开始就没有改变信号量full 值,即使缓冲池产品已满,但full值还是0,这样消费者进程执行wait(full)时认为缓冲池是空而取不到产品,消费者进程一直处于等待状态。 347 | 348 | 如果缺少signal(empty),在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品empty值并不改变,直到缓冲池取空了,empty 值也是0,即使目前缓冲池有n 个空缓冲区,生产者进程要想再往缓冲池中投放产品也会因为申请不到空缓冲区被阻塞。 349 | 350 | **24.在生产消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)与signal(full)互换位置,结果如何?** 351 | 352 | 答:将wait(full)和wait(mutex)互换位置后,可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。若signal(mutex)和signal(full)互换位置后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。 353 | 354 | **25.我们在为某一临界资源设置一把锁W,当W=1时表示关锁,当W=0时表示锁已打开。** 355 | 356 | **试写出开锁和关锁的原语,并利用他们实现互斥。** 357 | 358 | ```cpp 359 | // 整型信号量: 360 | lock(W): while W=1 do no-op 361 | W:=1; 362 | unlock(W): W:=0; 363 | 364 | // 记录型信号量: 365 | lock(W): W:=W+1; 366 | if(W>1) then block(W, L) 367 | unlock(W): W:=W-1; 368 | if(W>0) then wakeup(W, L) 369 | 370 | // 例子: 371 | Var W:semaphore:=0; 372 | begin 373 | repeat 374 | lock(W); 375 | critical section 376 | unlock(W); 377 | remainder section 378 | until false; 379 | end 380 | ``` 381 | 382 | **26.试修改下面生产者-消费者问题解法中的错误:** 383 | 384 | ```cpp 385 | producer: 386 | begin 387 | repeat 388 | … 389 | producer an item in nextp; 390 | wait(mutex); 391 | wait(full); // 应为wait(empty), 而且还应该在wait(mutex)前 392 | buffer(in):=nextp; // 缓冲池数组游标应前移:in:=(in+1) mod n 393 | signal(mutex); // signal(mutex) 394 | until false; 395 | end 396 | 397 | consumer: 398 | begin 399 | repeat 400 | wait(mutex); 401 | wait(empty) // 应为wait(full), 而且还应该在wait(mutex)前 402 | nextc:=buffer(out); 403 | out:=out+1; // 考虑循环,应改为:out:=(out+1) mod n 404 | signal(mutex) // signal(empty) 405 | consumer item in nextc; 406 | until false; 407 | end 408 | ``` 409 | 410 | **27.试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法.** 411 | 412 | ```cpp 413 | Var chopstick:array[0,…,4] of semaphore; 414 | // 所有信号量均被初始化为1,第i 位哲学家的活动可描述为: 415 | Repeat 416 | Wait(chopstick[i]); 417 | Wait(. chopstick[(i+1) mod 5]); 418 | … 419 | Ea.t ; 420 | … 421 | Signal(chopstick[i]); 422 | Signal(chopstick[(i+1) mod 5]) 423 | Ea.t ; 424 | … 425 | Think; 426 | Until false; 427 | ``` 428 | 429 | **28.在测量控制系统中的数据采集任务,把所采集的数据送一单缓冲区;计算任务从该单缓冲中取出数据进行计算.试写出利用信号量机制实现两者共享单缓冲的同步算法。** 430 | 431 | ```cpp 432 | a. Var mutex, empty, full: semaphore:=1, 1, 0; 433 | gather: 434 | begin 435 | repeat 436 | …… 437 | gather data in nextp; 438 | wait(empty); 439 | wait(mutex); 440 | buffer:=nextp; 441 | signal(mutex); 442 | signal(full); 443 | until false; 444 | end 445 | 446 | compute: 447 | begin 448 | repeat 449 | …… 450 | wait(full); 451 | wait(mutex); 452 | nextc:=buffer; 453 | signal(mutex); 454 | signal(empty); 455 | compute data in nextc; 456 | until false; 457 | end 458 | 459 | 460 | b. Var empty, full: semaphore:=1, 0; 461 | gather: 462 | begin 463 | repeat 464 | …… 465 | gather data in nextp; 466 | wait(empty); 467 | buffer:=nextp; 468 | signal(full); 469 | until false; 470 | end 471 | 472 | compute: 473 | begin 474 | repeat 475 | …… 476 | wait(full); 477 | nextc:=buffer; 478 | signal(empty); 479 | compute data in nextc; 480 | until false; 481 | end 482 | ``` 483 | 484 | **29.画图说明管程由哪几部分组成,为什么要引入条件变量?** 485 | 486 | 答:管程由四部分组成:①管程的名称;②局部于管程内部的共享数据结构说明;③对该数据结构进行操作的一组过程;④对局部于管程内部的共享数据设置初始值的语句;当一个进程调用了管程,在管程中时被阻塞或挂起,直到阻塞或挂起的原因解除,而在此期间,如果该进程不释放管程,则其它进程无法进入管程,被迫长时间地等待。为了解决这个问题,引入了条件变量condition。 487 | 488 | **30.如何利用管程来解决生产者与消费者问题?** 489 | 490 | 答:首先建立一个管程,命名为ProclucerConsumer,包括两个过程: 491 | 492 | (1)Put(item)过程。生产者利用该过程将自己生产的产品放到缓冲池,用整型变量count表示在缓冲池中已有的产品数目,当count≥n 时,表示缓冲池已满,生产者须等待。 493 | 494 | (2)get(item)过程。消费者利用该过程从缓冲池中取出一个产品,当count≤0时,表示缓冲池中已无可取的产品,消费者应等待。PC 管程可描述如下: 495 | 496 | ```cpp 497 | type producer-consumer=monitor 498 | Var in,out,count:integer; 499 | buffer:array[0,…,n-1]of item; 500 | notfull,notempty:condition; 501 | 502 | procedure entry dot(item) 503 | begin 504 | if count>=n then not full.wait; 505 | buffer(in):=nextp; 506 | in:=(in+1)mod n; 507 | count:=count+1; 508 | if notempty.queue then notempty.signal; 509 | end 510 | 511 | procedure entry get(item) 512 | begin 513 | if count<=0 then not full.wait; 514 | nextc:=buffer(out); 515 | out:=(out+1)mod n; 516 | count:=count-1; 517 | if notfull.quene then notfull.signal; 518 | end 519 | 520 | begin in:=out:=0; 521 | count:=0 522 | end 523 | 524 | // 在利用管程解决生产者一消费者问题时,其中的生产者和消费者可描述为: 525 | producer: begin 526 | repeat 527 | produce an inem in nestp 528 | PC.put(item); 529 | until false; 530 | end 531 | 532 | consumer: begin 533 | repeat 534 | PC.get(item); 535 | consume the item in enxtc; 536 | until false; 537 | end 538 | ``` 539 | 540 | **31.什么是AND信号量?试利用AND信号量写出生产者一消费者问题的解法。** 541 | 542 | 答:为解决并行带来的死锁问题,在wait 操作中引入AND 条件,其基本思想是将进程在整个运行过程中所需要的所有临界资源,一次性地全部分配给进程,用完后一次性释放。解决生产者-消费者问题可描述如下: 543 | 544 | ```cpp 545 | var mutex,empty,full: semaphore:=1,n,0; 546 | buffer: array[0,...,n-1] of item; 547 | in,out: integer:=0,0; 548 | begin 549 | parbegin 550 | producer: begin 551 | repeat 552 | produce an item in nextp; 553 | wait(empty); 554 | wait(s1,s2,s3,...,sn); //s1,s2,...,sn为执行生产者进程除empty外其余的条件 555 | wait(mutex); 556 | buffer(in):=nextp; 557 | in:=(in+1) mod n; 558 | signal(mutex); 559 | signal(full); 560 | signal(s1,s2,s3,...,sn); 561 | until false; 562 | end 563 | 564 | consumer: begin 565 | repeat 566 | wait(full); 567 | wait(k1,k2,k3,...,kn); //k1,k2,...,kn 为执行消费者进程除full外其余的条件 568 | wait(mutex); 569 | nextc:=buffer(out); 570 | out:=(out+1) mod n; 571 | signal(mutex); 572 | signal(empty); 573 | signal(k1,k2,k3,...,kn); 574 | consume the item in nextc; 575 | until false; 576 | end 577 | parend 578 | end 579 | ``` 580 | 581 | **32.什么是信号量集?试利用信号量集写出读者一写者问题的解法。** 582 | 583 | 答:对AND信号量加以扩充,形成的信号量集合的读写机制。 584 | 585 | ```cpp 586 | Var RN integer; 587 | L,mx: semaphore:=RN,1; 588 | begin 589 | parbegin 590 | reader:begin 591 | repeat 592 | Swait(L,1,1); 593 | Swait(mx,1,1); 594 | perform read operation; 595 | Ssignal(L,1); 596 | until false 597 | end 598 | writer:begin 599 | repeat 600 | Swait(mx,1,1;L,RN,0); 601 | perform write operation; 602 | Ssignal(mx,1); 603 | until false 604 | end 605 | parend 606 | end 607 | ``` 608 | 609 | **33.试比较进程间的低级与高级通信工具。** 610 | 611 | 答:用户用低级通信工具实现进程通信很不方便,效率低,通信对用户不透明,所有操作都必须由程序员来实现,而高级通信工具弥补了这些缺陷,用户直接利用操作系统提供的一组通信命令,高效地传送大量的数据。 612 | 613 | **34.当前有哪几种高级通信机制?** 614 | 615 | 答:共享存储器系统、消息传递系统以及管道通信系统。 616 | 617 | **35.消息队列通信机制有哪几方面的功能?** 618 | 619 | 答:(1)构成消息(2)发送消息(3)接收梢息(4)互斥与同步。 620 | 621 | **36.为什么要在OS中引入线程?** 622 | 623 | 答:在操作系统中引入线程,则是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性,提高CPU的利用率。进程是分配资源的基本单位,而线程则是系统调度的基本单位。 624 | 625 | **37.试说明线程具有哪些属性?** 626 | 627 | 答:(1)轻型实体(2)独立调度和分派的基本单位(3)可并发执行(4)共享进程资源。 628 | 629 | **38.试从调度性,并发性,拥有资源及系统开销方面对进程和线程进行比较。** 630 | 631 | 1. 调度性。线程在OS中作为调度和分派的基本单位,进程只作为资源拥有的基本单位。 632 | 2. 并发性。进程可以并发执行,一个进程的多个线程也可并发执行。 633 | 3. 拥有资源。进程始终是拥有资源的基本单位,线程只拥有运行时必不可少的资源,本身基本不拥有系统资源,但可以访问隶属进程的资源。 634 | 4. 系统开销。操作系统W在创建、撤消和切换进程时付出的开销显著大于线程。 635 | 636 | **39. 为了在多线程OS中实现进程之间的同步与通信,通常提供了哪几种同步机制?** 637 | 638 | 答:同步功能可以控制程序流并访问共享数据,从而并发执行多个线程。共有四种同步模型:互斥锁、读写锁、条件变量和信号。 639 | 640 | **40.用于实现线程同步的私用信号量和公用信号量之间有何差别?** 641 | 642 | 1. 私用信号量。当某线程需利用信号量实现同一进程中各线程之间的同步时,可调用创建信号量的命令来创建一个私用信号量,其数据结构存放在应用程序的地址空间中。 643 | 2. 公用信号量。公用信号量是为实现不同进程间或不同进程中各线程之间的同步而设置的。其数据结构是存放在受保护的系统存储区中,由OS为它分配空间并进行管理。 644 | 645 | **41.何谓用户级线程和内核支持线程?** 646 | 647 | 1. 用户级线程:仅存在于用户空间中的线程,无须内核支持。这种线程的创建、撤销、线程间的同步与通信等功能,都无需利用系统调用实现。用户级线程的切换通常发生在一个应用进程的诸多线程之间,同样无需内核支持。 648 | 649 | 2. 内核支持线程:在内核支持下运行的线程。无论是用户进程中的线程,还是系统线程中的线程,其创建、撤销和切换等都是依靠内核,在内核空间中实现的。在内核空间里还为每个内核支持线程设置了线程控制块,内核根据该控制块感知某线程的存在并实施控制。 650 | 651 | **42.试说明用户级线程的实现方法。** 652 | 653 | 答:用户级线程是在用户空间中的实现的,运行在“运行时系统”与“内核控制线程”的中间系统上。运行时系统用于管理和控制线程的函数的集合。内核控制线程或轻型进程LWP可通过系统调用获得内核提供服务,利用LWP进程作为中间系统。 654 | 655 | **43.试说明内核支持线程的实现方法。** 656 | 657 | 答:系统在创建新进程时,分配一个任务数据区PTDA,其中包括若干个线程控制块TCB空间。创建一个线程分配一个TCB,有关信息写入TCB,为之分配必要的资源。当PTDA中的TCB用完,而进程又有新线程时,只要所创建的线程数目未超过系统允许值,系统可在为之分配新的TCB;在撤销一个线程时,也应回收线程的所有资源和TCB。 658 | 659 | ## 第三章 处理机调度与死锁 660 | 661 | **1.高级调度与低级调度的主要任务是什么?为什么要引入中级调度?** 662 | 663 | 答:高级调度的主要任务是根据某种算法,把外存上处于后备队列中的那些作业调入内存。低级调度是保存处理机的现场信息,按某种算法先取进程,再把处理器分配给进程。引入中级调度的主要目的是为了提高内存利用率和系统吞吐量。使那些暂时不能运行的进程不再占用内存资源,将它们调至外存等待,把进程状态改为就绪驻外存状态或挂起状态。 664 | 665 | **2.何谓作业、作业步和作业流?** 666 | 667 | 1. 作业包含通常的程序和数据,还配有作业说明书。系统根据该说明书对程序的运行进行控制。批处理系统中是以作业为基本单位从外存调入内存。 668 | 669 | 2. 作业步是指每个作业运行期间都必须经过若干个相对独立相互关联的顺序加工的步骤。 670 | 671 | 3. 作业流是指若干个作业进入系统后依次存放在外存上形成的输入作业流;在操作系统的控制下,逐个作业进程处理,于是形成了处理作业流。 672 | 673 | **3.在什么情况下需要使用作业控制块JCB?其中包含了哪些内容?** 674 | 675 | 答:每当作业进入系统时,系统便为每个作业建立一个作业控制块JCB,根据作业类型将它插入到相应的后备队列中。 676 | 677 | JCB 包含的内容通常有:1)作业标识 2)用户名称 3)用户账户 4)作业类型(CPU繁忙型、I/O芳名型、批量型、终端型) 5)作业状态 6)调度信息(优先级、作业已运行) 7)资源要求 8)进入系统时间 9)开始处理时间 10)作业完成时间 11)作业退出时间 12)资源使用情况等 678 | 679 | **4.在作业调度中应如何确定接纳多少个作业和接纳哪些作业?** 680 | 681 | 答:作业调度每次接纳进入内存的作业数,取决于多道程序度。应将哪些作业从外存调入内存,取决于采用的调度算法。最简单的是先来服务调度算法,较常用的是短作业优先调度算法和基于作业优先级的调度算法。 682 | 683 | **5.试说明低级调度的主要功能。** 684 | 685 | 答:(1)保存处理机的现场信息(2)按某种算法选取进程(3)把处理机分配给进程。 686 | 687 | **6.在抢占调度方式中,抢占的原则是什么?** 688 | 689 | 答:抢占的原则有:时间片原则、优先权原则、短作业优先权原则等。 690 | 691 | **7.在选择调度方式和调度算法时,应遵循的准则是什么?** 692 | 693 | 1. 面向用户的准则:周转时间短、响应时间快、截止时间的保证、优先权准则。 694 | 695 | 2. 面向系统的准则:系统吞吐量高、处理机利用率好、各类资源的平衡利用。 696 | 697 | **8.在批处理系统、分时系统和实时系统中,各采用哪几种进程(作业)调度算法?** 698 | 699 | 1. 批处理系统的调度算法:短作业优先、优先权、高响应比优先、多级反馈队列调度算法。 700 | 701 | 2. 分时系统的调度算法:时间片轮转法。 702 | 703 | 3. 实时系统的调度算法:最早截止时间优先即EDF、最低松弛度优先即LLF算法。 704 | 705 | **9.何谓静态和动态优先级?确定静态优先级的依据是什么?** 706 | 707 | 静态优先级是指在创建进程时确定且在进程的整个运行期间保持不变的优先级。 708 | 709 | 动态优先级是指在创建进程时赋予的优先权,可以随进程推进或随其等待时间增加而改变的优先级,可以获得更好的调度性能。 710 | 711 | 确定进程优先级的依据:进程类型、进程对资源的需求和用户要求。 712 | 713 | **10.试比较FCFS和SPF两种进程调度算法。** 714 | 715 | 相同点:两种调度算法都可以用于作业调度和进程调度。 716 | 717 | 不同点:FCFS调度算法每次都从后备队列中选择一个或多个最先进入该队列的作业,将它们调入内存、分配资源、创建进程、插入到就绪队列。该算法有利于长作业/进程,不利于短作业/进程。SPF算法每次调度都从后备队列中选择一个或若干个估计运行时间最短的作业,调入内存中运行。该算法有利于短作业/进程,不利于长作业/进程。 718 | 719 | **11.在时间片轮转法中,应如何确定时间片的大小?** 720 | 721 | 答:时间片应略大于一次典型的交互需要的时间。一般应考虑三个因素:系统对相应时间的要求、就绪队列中进程的数目和系统的处理能力。 722 | 723 | **12.通过一个例子来说明通常的优先级调度算法不能适用于实时系统?** 724 | 725 | 答:实时系统的调度算法很多,主要是基于任务的开始截止时间和任务紧急/松弛程度的任务优先级调度算法,通常的优先级调度算法不能满足实时系统的调度实时性要求而不适用。 726 | 727 | **13.为什么说多级反馈队列调度算法能较好地满足各方面用户的需求?** 728 | 729 | 1. 终端型作业用户提交的作业大多属于较小的交互型作业,系统只要使这些作业在第一队列规定的时间片内完成,终端作业用户就会感到满足。 730 | 731 | 2. 短批处理作业用户,开始时像终端型作业一样,如果在第一队列中执行一个时间片段即可完成,便可获得与终端作业一样的响应时间。对于稍长作业,通常只需在第二和第三队列各执行一时间片即可完成,其周转时间仍然较短。 732 | 733 | 3. 长批处理作业,它将依次在第1,2,…,n个队列中运行,然后再按轮转方式运行,用户不必担心其作业长期得不到处理。所以,多级反馈队列调度算法能满足多用户需求。 734 | 735 | **14.为什么在实时系统中,要求系统(尤其是CPU)具有较强的处理能力?** 736 | 737 | 答:实时系统中通常有着多个实时任务。若处理机的处理能力不够强,有可能因为处理机忙不过来而使某些实时任务得不到及时处理,导致发生难以预料的后果。 738 | 739 | **15.按照调度方式可将实时调度算法分为哪几种?** 740 | 741 | 答:可分为非抢占式和抢占式两种算法。而非抢占式算法又分为非抢占式轮转和优先调度算法;抢占式调度算法又分为基于时钟中断的抢占式优先权和立即抢占式优先权调度算法。 742 | 743 | **16.什么是最早截止时间优先调度算法?举例说明。** 744 | 745 | 答:根据任务的开始截止时间确定的任务优先级调度算法。截止时间越早则优先级越高。该算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间的先后排序。 746 | 747 | 举例:非抢占式调度方式用于非周期实时任务。图3-9是将该算法用于非抢占调度方式之例。该例中具有四个非周期任务,它们先后到达。系统首先调度任务1执行,在任务1执行期间,任务2、3又先后到达。由于任务3的开始截止时间早于任务2,故系统在任务1后将调度任务3执行。在此期间又到达作业4,其开始截止时间仍是早于任务2的,故在任务3执行完后,系统又调度任务4执行,最后才调度任务2执行。 748 | 749 | 图3-9 EDF算法用于非抢占调度的调度方式 750 | 751 | **17.什么是最低松弛度优先调度算法?举例说明之。** 752 | 753 | 答:该算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈高,以使之优先执行。例如,一个任务在200 ms 时必须完成,而它本身所需的运行时间就有100 ms,因此,调度程序必须在100 ms 之前调度执行,该任务的紧急程度(松弛程度)为100 ms。又如,另一任务在400 ms 时必须完成,它本身需要运行 150 ms,则其松弛程度为 250 ms。 754 | 755 | **18.何谓死锁?产生死锁的原因和必要条件是什么?** 756 | 757 | 答:死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。产生死锁的原因为竞争资源和进程间推进顺序非法。其必要条件是:互斥条件、请求和保持条件、不剥夺条件、环路等待条件。 758 | 759 | **19.在解决死锁问题的几个方法中,哪种方法最易于实现?哪种方法使资源利用率最高?** 760 | 761 | 答:解决死锁的四种方法即预防、避免、检测和解除死锁中,预防死锁最容易实现;避免死锁使资源的利用率最高。 762 | 763 | **20.请详细说明可通过哪些途径预防死锁。** 764 | 765 | 1. 摈弃“请求和保持”条件,就是如果系统有足够资源,便一次性把进程需要的所有资源分配给它; 766 | 767 | 2. 摈弃“不剥夺”条件,就是已经拥有资源的进程,当它提出新资源请求而不能立即满足时,必须释放它已保持的所有资源,待以后需要时再重新申请; 768 | 769 | 3. 摈弃“环路等待”条件,就是将所有资源按类型排序标号,所有进程对资源的请求必须严格按序号递增的次序提出。 770 | 771 | **21.在银行家算法的例子中,如果P0发出请求向量由Request(0,2,0)改为Request(0,1,0),问系统可否将资源分配给它?** 772 | 773 | (此答案有点问题,需重新考虑) 774 | 775 | 1. 可以。银行家算法各种资源数量分别为10、5、7,在T0时刻的资源分配如图所示: 776 | 777 | 2. 具体分析如下: 778 | 779 | ①Requst0(0,1,0)<=Need0(7,4,3); 780 | ②Requst0(0,1,0)<=Available(2,3,0); 781 | 系统先假定可为P0分配资源,并修改Available**0**,Allocation**0**和Need**0**向量,由此形成的资源变化情况如下图所示: 782 | 783 | 3. P0请求资源:P0发出请求向量Requst0(0,1,0),系统按银行家算法进行检查: 784 | 785 | ①Requst0(0,1,0)<=Need0(7,4,3); 786 | ②Requst0(0,1,0)<=Available(2,3,0); 787 | ③系统暂时先假定可为P0分配资源,并修改有关数据,如下图所示 788 | 789 | 综上所述系统可以将资源分配给它。 790 | 791 | **22.银行家算法中出现以下资源分配,试问(1)该状态是否安全?(2)若进程P2提出Request(1,2,2,2)后,系统能否将资源分配给它?** 792 | 793 | (1)安全,因为存在安全序列{P0,P3,P4,P1,P2} 794 | 795 | (参考答案有错) 796 | (2)系统能分配资源,分析如下。 797 | ① Request(1,2,2,2) <=Need2(2,3,5,6); 798 | ② Request(1,2,2,2) <=Available2(1,3,5,4)改成Available2(1,6,2,2); 799 | ③ 系统先假定可为P2分配资源,并修改Available2,Allocation2和Need2向量, 800 | 由此形成的资源变化情况如下图所示: 801 | ④ 再利用安全性算法检查此时系统是否安全。如下图 802 | 由此进行的安全性检查得知,可以找到一个安全序列{P2,P0,P1,P3,P4}。 803 | 804 | ## 第四章 805 | 806 | **1.为什么要配置层次式存储器?** 807 | 808 | 答:设置多个存储器可以使存储器两端的硬件能并行工作;采用多级存储系统,特别是Cache技术,是减轻存储器带宽对系统性能影响的最佳结构方案;在微处理机内部设置各种缓冲存储器,减轻对存储器存取的压力。增加CPU中寄存器数量大大缓解对存储器压力。 809 | 810 | **2.可采用哪几种方式将程序装入内存?它们分别适用于何种场合?** 811 | 812 | 1. 绝对装入方式,只适用于单道程序环境。 813 | 814 | 2. 可重定位装入方式,适用于多道程序环境。 815 | 816 | 3. 动态运行时装入方式,用于多道程序环境;不允许程序运行时在内存中移位置。 817 | 818 | **3.何谓静态链接?何谓装入时动态链接和运行时的动态链接(P120)?** 819 | 820 | 1. 静态链接是指在程序运行前,先将各目标模块及它们所需的库函数,链接成一个完整的装配模块,以后不再拆开的链接方式。 821 | 822 | 2. 装入时动态链接是指将用户源程序编译后得到的一组目标模块,在装入内存时采用边装入边链接的链接方式。 823 | 824 | 3. 运行时动态链接是指对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。 825 | 826 | **4.在进行程序链接时,应完成哪些工作?** 827 | 828 | 答:由链接程序Linker将编译后形成的一组目标模块,以及它们需要的库函数链接在一起,形成一个完整的装入模块Load Module。主要工作是修改程序内的相对地址和修改目标程序中的外部调用标号。 829 | 830 | **5.在动态分区分配方式中,应如何将各空闲分区链接成空闲分区链?** 831 | 832 | 答:在每个分区的起始部分,设置一些控制分区分配的信息,以及用于链接各分区所用的前向指针;在分区尾部设置一个后向指针,通过前后向链接指针,将所有空闲分区链成一个双向链。当分区分配出去后,把状态位由“0”改为“1”。 833 | 834 | **6.为什么要引入动态重定位?如何实现?** 835 | 836 | 答:在程序执行过程中,每当访问指令或数据时,将要访问的程序或数据的逻辑地址转换成物理地址,引入了动态重定位;具体实现方法是在系统中增加一个重定位寄存器,用来装入程序在内存中的起始地址,程序执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加之和,从而实现动态重定位。 837 | 838 | **7.在采用首次适应算法回收内存时,可能出现哪几种情况?应怎样处理这些情况?** 839 | 840 | 答:在采用首次适应算法回收内存时可能出现4种情况: 841 | 842 | 1. 回收区前邻空闲区。将回收区与前邻空闲区合并,将前邻空闲区大小修改为两者之和。 843 | 844 | 2. 回收区后邻空闲区。将两区合并,改后邻空闲区始址为回收区始址,大小为两者之和。 845 | 846 | 3. 回收区前后均邻空闲区。将三个分区合并,修改前邻空闲区大小为三者之和。 847 | 848 | 4. 回收区前后均不邻空闲区。为回收区设置空闲区表项,填入回收区始址和大小并插入空闲区队列。 849 | 850 | **8.令 表示大小为 、地址为x 的块的伙伴系统地址,试写出的通用表达式。** 851 | 852 | 答:当 时, ;当 时, 853 | 854 | **9.分区存储管理中常用那些分配策略?比较它们的优缺点。** 855 | 856 | 答:分区存储管理中的常用分配策略:首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法。 857 | 858 | 首次适应算法优缺点:保留了高址部分的大空闲区,有利于后来的大型作业分配;低址部分不断被划分,留下许多难以利用的小空闲区,每次查找都从低址开始增加了系统开销。 859 | 860 | 循环首次适应算法优缺点:内存空闲分区分布均匀,减少了查找系统开销;缺乏大空闲分区,导致不能装入大型作业。 861 | 862 | 最佳适应算法优缺点:每次分配给文件的都是最适合该文件大小的分区,内存中留下许多难以利用的小空闲区。 863 | 864 | 最坏适应算法优缺点:剩下空闲区不太小,产生碎片几率小,对中小型文件分配分区操作有利;存储器中缺乏大空闲区,对大型文件分区分配不利。 865 | 866 | **10.在系统中引入对换后可带来哪些好处?** 867 | 868 | 答:交换技术将暂不需要的作业移到外存,让出内存空间以调入其它作业,交换到外存的作业也可以被再次调入。目的是解决内存紧张问题,带来的好处是进一步提高了内存利用率和系统吞吐量。 869 | 870 | **11.为实现对换,系统应具备哪几方面的功能?** 871 | 872 | 答:系统应具备三方面功能:对换空间管理,进程换出,进程换入。 873 | 874 | **12.在以进程为单位进行对换时,每次是否都将整个进程换出?为什么?** 875 | 876 | 答:在以进程为单位进行对换时,并非每次都将整个进程换出。这是因为: 877 | 878 | 1. 从结构上讲,进程由程序段、数据段和进程控制块组成的,其中进程控制块总有部分或全部常驻内存,不被换出。 879 | 880 | 2. 程序段和数据段可能正被若干进程共享,此时它们也不能换出。 881 | 882 | **13.为实现分页存储管理,需要哪些硬件的支持?** 883 | 884 | 答:动态重定位技术、虚拟存储技术、多道程序设计技术。 885 | 886 | **14.较详细的说明引入分段存储管理是为了满足用户哪几方面的需要。** 887 | 888 | 1. 方便编程。用户通常把自己的作业按照逻辑关系划分为若干段,每段都从0编址,并有自己名字和长度。因此,希望要访问的逻辑地址是由段名和段内偏移量决定。 889 | 890 | 2. 信息共享。在实现对程序和数据的共享时,是以信息逻辑单位为基础。分页系统中的页是存放信息的物理单位,无完整意义,不便于共享;段是信息的逻辑单位。为了实现段的共享,希望存储管理能与用户程序分段的组织方式相适应。 891 | 892 | 3. 信息保护。对信息的逻辑单位进行保护,分段能更有效方便地实现信息保护功能。 893 | 894 | 4. 动态增长。在实际应用中,有些段特别是数据段,在使用过程中会不断增长,事先又无法确切知道增长多少。分段存储管理方式能较好解决这个问题。 895 | 896 | 5. 动态链接。运行时先将主程序对应的目标程序装入内存并启动运行,运行过程中又需要调用某段时,才将该段调入内存链接。所以动态链接也要求以段作为管理单位。 897 | 898 | **15.在具有快表的段页式存储管理方式中,如何实现地址变换?** 899 | 900 | 答:在CPU给出有效地址后,由地址变换机构自动将页号P送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号比较,若找到匹配页号,表示要访问的页表项在快表中。可直接从快表读出该页对应物理块号,送到物理地址寄存器中。如快表中没有对应页表项,则再访问内存页表,找到后,把从页表项中读出物理块号送地址寄存器;同时修改快表,将此页表项存入快表。但若寄存器已满,则OS必须找到合适的页表项换出。 901 | 902 | **16.为什么说为什么说分段系统比分页系统更易于实现信息的共享和保护?** 903 | 904 | 答:分页系统的每个页面是分散存储的,为了实现信息共享和保护,页面之间需要一一对应,为此需要建立大量的页表项;而分段系统的每个段都从0编址,并采用一段连续的地址空间,在实现共享和保护时,只需为要共享和保护的程序设置一个段表项,将其中的基址与内存地址一一对应就能够实现。 905 | 906 | **17.分段和分页存储管理有何区别?** 907 | 908 | 1. 页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外部零头,提高内存利用率。段则是信息的逻辑单位,它含有一组相对完整的信息。 909 | 910 | 2. 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机械硬件实现的,因而在系统中只能有一种大小的的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对原程序进行编译时,根据信息的性质来划分。 911 | 912 | 3. 分页的作业地址空间是一维的,而分段作业地址空间则是二维的。 913 | 914 | **18.试全面比较连续分配和离散分配方式.** 915 | 916 | 1. 连续分配是指为一个用户程序分配一个连续的地址空间,包括单一和分区两种分配方式。单一方式将内存分为系统区和用户区,最简单,只用于单用户单任务操作系统;分区方式分固定和动态分区。 917 | 918 | 2. 离散分配方式分为分页、分段和段页式存储管理。分页式存储管理旨在提高内存利用率,分段式存储管理旨在满足用户(程序员)的需要,段页式存储管理则将两者结合起来,具有分段系统便于实现、可共享、易于保护和动态链接等优点,又能像分页系统很好解决外部碎片及为各段可离散分配内存等问题,是比较有效的存储管理方式; 919 | 920 | **19.虚拟存储器有哪些特征?其中最本质的特征是什么?** 921 | 922 | 答:虚拟存储器有多次性、对换性、虚拟性三大特征。最本质的特征是虚拟性。 923 | 924 | **20.实现虚拟存储器需要哪些硬件支持?** 925 | 926 | 答:(1)请求分页(段)的页(段)表机制(2)缺页(段)中断机构(3)地址变换机构 927 | 928 | **21.实现虚拟存储器需要哪几个关键技术?** 929 | 930 | 1. 在分页请求系统中是在分页的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。允许只装入少数页面的程序(及数据),便启动运行。 931 | 932 | 2. 在请求分段系统中是在分段系统的基础上,增加了请求调段及分段置换功能后形成的段式虚拟存储系统。允许只装入少数段(而非所有段)的用户程序和数据,即可启动运行。 933 | 934 | **22.在请求分页系统中,页表应包括哪些数据项?每项的作用是什么?** 935 | 936 | 答:页表应包括:页号、物理块号、状态位P、访问字段A、修改位M和外存地址。其中状态位P指示该页是否调入内存,供程序访问时参考;访问字段A用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考;修改位M表示该页在调入内存后是否被修改过;外存地址用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用。 937 | 938 | **23.在请求分页系统中,应从何处将所需页面调入内存?** 939 | 940 | 答:请求分页系统中的缺页从何处调入内存分三种情况: 941 | 942 | 1. 系统拥有足够对换区空间时,可以全部从对换区调入所需页面,提高调页速度。在进程运行前将与该进程有关的文件从文件区拷贝到对换区。 943 | 944 | 2. 系统缺少足够对换区空间时,不被修改的文件直接从文件区调入;当换出这些页面时,未被修改的不必换出,再调入时,仍从文件区直接调入。对于可能修改的,在换出时便调到对换区,以后需要时再从对换区调入。 945 | 946 | 3. UNIX方式。未运行页面从文件区调入。曾经运行过但被换出页面,下次从对换区调入。UNIX系统允许页面共享,某进程请求的页面有可能已调入内存,直接使用不再调入。 947 | 948 | **24.在请求分页系统中,常采用哪几种页面置换算法?** 949 | 950 | 答:采用的页面置换算法有:最佳置换算法和先进先出置换算法,最近最久未使用(LRU)置换算法,Clock置换算法,最少使用置换算法,页面缓冲算法等。 951 | 952 | **25.在请求分页系统中,通常采用哪种页面分配方式?为什么?** 953 | 954 | 答:固定分配方式是基于进程的类型(交互型)或根据程序员、系统管理员的建议,为每个进程分配固定页数的内存空间,整个运行期间不再改变;采用可变分配方式有全局置换和局部置换两种,前者易于实现,后者效率高。 955 | 956 | **26.在一个请求分页系统中,采用LRU 页面置换算法时,假如一个作业的页面走向为4 , 3 , 2 ,1 , 4 , 3 , 5 , 4 ,3 , 2 , 1 ,5,当分配给该作业的物理块数M分别为3和4时,试计算访问过程中所发生的缺页次数和缺页率 ? 比较所得结果?** 957 | 958 | 答:当分配给该作业的物理块数M为3时,缺页9次,缺页率: 9/12=3/4; 959 | 960 | 当分配给该作业的物理块数M为4时,缺页10次,缺页率: 10/12=5/6. 961 | 962 | **27.实现LRU算法所需的硬件支持是什么?** 963 | 964 | 答:需要寄存器和栈等硬件支持。寄存器用于记录某进程在内存中各页的使用情况,栈用于保存当前使用的各个页面的页面号。 965 | 966 | **28.试说明改进型 Clock 置换算法的基本原理.** 967 | 968 | 答:因为修改过的页面在换出时付出的开销比未被修改过的页面大,在改进型Clock算法中,既考虑页面的使用情况,还要增加置换代价的因素;在选择页面作为淘汰页面时,把同时满足未使用过和未被修改作为首选淘汰页面。 969 | 970 | **29.说明请求分段系统中的缺页中断处理过程。** 971 | 972 | 答:请求分段系统中的缺页中断处理过程描述如下: 973 | 974 | 1. 根据当前执行指令中的逻辑地址查页表,判断该页是否在主存储器中 975 | 976 | 2. 该页标志为“0”形成缺页中断,中断装置通过交换PSW让操作系统的中断处理程序占用处理器。 977 | 978 | 3. 操作系统处理缺页中断处理的办法是查主存分配表找一个空闲的主存块,查页表找出该页在磁盘上位置,启动磁盘读出该页信息。 979 | 980 | 4. 把从磁盘上读出的信息装入找到的主存块中。 981 | 982 | 5. 当页面住处被装入主存后,应修改页表中对应的表目,填上该页所占用的主存块把标志置为“1”,表示该页已在主存储器中 983 | 984 | 6. 由于产生缺页中断时的那条指令并没执行完,所以在把页面装入之后应重新执行被中断指令。 985 | 986 | 请求分段系统中的缺页中断处理过程如下图所示: 987 | 988 | **30.如何实现分段共享 ?** 989 | 990 | 答:在每个进程的段表中,用相应的表项指向共享段在内存中起始地址;配置相应的数据结构作为共享段表,在段表项中设置共享进程计数Count,每调用一次该共享段,Count值增1,每当进程释放一个共享段时,Count减1,若减为0,则系统回收该共享段的物理内存,取消在共享段表中该段对应的表项;共享段应给不同的进程以不同的存取权限;不同的进程可以使用不同的段号去共享该段。 991 | 992 | ## 第五章 993 | 994 | **1.试说明设备控制器的组成。** 995 | 996 | 答:由设备控制器与处理机的接口,设备控制器与设备的接口与I/O逻辑组成。 997 | 998 | **2.为了实现CPU与设备控制器间的通信,设备控制器应具备哪些功能?** 999 | 1000 | 答:接收和识别命令;数据交换;标识和报告设备状态;地址识别;数据缓冲;差错控制。 1001 | 1002 | **3.什么是字节多路通道?什么是数组选择通道和数组多路通道?** 1003 | 1004 | 1. 字节多路通道。按字节交叉方式工作的通道。通常含有许多非分配型子通道,数量从几十到数百个,每个子通道连接一台I/O设备,控制其I/O操作。子通道按时间片轮转方式共享主通道。 1005 | 1006 | 2. 数组选择通道。按数组方式传送数据,传输速率很高,每次只允许一个设备数据。 1007 | 1008 | 3. 数组多路通道。将数组选择通道传输速率高和字节多路通道的各子通道分时并行操作的优点结合而成。含有多个非分配型子通道,具有很高的数据传输率和通道利用率。 1009 | 1010 | **4.如何解决因通道不足而产生的瓶颈问题?** 1011 | 1012 | 答:解决问题的有效方法是增加设备到主机间的通路而不增加通道,把一个设备连到多个控制器上,控制器又连到多个通道上,这种多通路方式解决了“瓶颈”问题,提高了系统可靠性,个别通道或控制器的故障不会使设备和存储器之间没有通路。 1013 | 1014 | **5.试对VESA 及PCI两种总线进行比较。** 1015 | 1016 | 1. VESA总线的设计思想是以低价占领市场。总线带宽32位,最高传输速率132Mb/s。广泛用于486微机。缺点是能连接的设备数仅为2~4 台,控制器中无缓冲,难于适应处理器速度的提高,不支持Pentium机。 1017 | 1018 | 2. PCI总线在CPU和外设间插入了复杂的管理层,协调数据传输和提供一致接口。管理层中配有数据缓冲,放大了线路的驱动能力,最多支持10种外设,支持高时钟频率的CPU运行,最大传输速率132Mb/s。可连接ISA、EISA等传统总线,又支持Pentium的64位系统,是基于奔腾等新一代微处理器而发展的总线。 1019 | 1020 | **6.试说明推动I/O控制发展的主要因素是什么?** 1021 | 1022 | 答:推动I/O控制发展的主要动力在于尽量减少主机对I/O控制的干预,把主机从繁杂的I/O控制事务中解脱出来,用更多的时间和精力去完成其数据处理任务。同时,中断机制在计算机系统中的引入、DMA控制器的出现和通道研制的成功使I/O控制的发展具备了技术支持和成为可能。 1023 | 1024 | **7.有哪几种I/O控制方式?各适用于何种场合?** 1025 | 1026 | 共有四种I/O控制方式。 1027 | 1028 | 1. 程序I/O方式:早期计算机无中断机构,处理机对I/O设备的控制采用程序I/O方式或称忙等的方式。 1029 | 1030 | 2. 中断驱动I/O控制方式:适用于有中断机构的计算机系统中。 1031 | 1032 | 3. 直接存储器访问(DMA)I/O控制方式:适用于具有DMA控制器的计算机系统中。 1033 | 1034 | 4. I/O通道控制方式:具有通道程序的计算机系统中。 1035 | 1036 | **8.试说明DMA 的工作流程。** 1037 | 1038 | 答:以从磁盘读入数据为例,说明DMA的工作流程。当CPU要从磁盘读入数据块时,先向磁盘控制器发送一条读命令。该命令被送到命令寄存器CR中。同时还发送本次要读入数据的内存起始目标地址,送入内存地址寄存器MAR;本次要读数据的字节数送入数据计数器DC,将磁盘中的源地址直接送DMA控制器的I/O控制逻辑上。然后启动DMA 控制器传送数据,以后CPU便处理其它任务。整个数据传送过程由DMA控制器控制。下图为DMA方式的工作流程图。 1039 | 1040 | **9.引入缓冲的主要原因是什么?** 1041 | 1042 | 答:引入缓冲的主要原因是: 1043 | 1044 | 1. 缓和CPU与I/O 设备间速度不匹配的矛盾 1045 | 1046 | 2. 减少对CPU的中断频率,放宽对中断响应时间的限制 1047 | 1048 | 3. 提高CPU与I/O 设备之间的并行性 1049 | 1050 | **10.在单缓冲情况下,为什么系统对一块数据的处理时间为max(C,T)+M?** 1051 | 1052 | 答:在块设备输入时,先从磁盘把一块数据输入到缓冲区,耗时为T;然后由操作系统将缓冲区数据送给用户区,耗时M;接下来由CPU对块数据进行计算,耗时C。在单缓冲情况下,磁盘把数据输入到缓冲区的操作和CPU对数据的计算过程可以并行展开,所以系统对每一整块数据的处理时间为max(C, T) + M。 1053 | 1054 | **11.为什么在双缓冲情况下,系统对一块数据的处理时间为max(T,C)?** 1055 | 1056 | 答:写入者花费时间T 将数据写满一个缓冲区后再写另一个缓冲区;读出者花费时间M将一个缓冲区数据送到用户区后再传送另一个缓冲区数据,计算者读出用户区数据进行处理。由于将数据从缓冲区传到用户区操作必须与读用户区数据处理串行进行,而且可以与从外存传送数据填满缓冲区的操作并行。因此耗时大约为max(C+M,T)。考虑M是内存数据块的移动耗时非常短暂可以省略,因此近似地认为系统对一块数据处理时间为max(C,T)。 1057 | 1058 | **12.试绘图说明把多缓冲用于输出时的情况。** 1059 | 1060 | 答:多缓冲用于输出的示意图如下: 1061 | 1062 | **13.试说明收容输入工作缓冲区和提取输出工作缓冲区的工作情况。** 1063 | 1064 | 1. 收容输入工作缓冲区的工作情况为:在输入进程需要输入数据时,调用GetBuf(EmptyQueue)过程,从EmptyQueue队列的队首摘下一个空缓冲区,作为收容输入工作缓冲区Hin。然后把数据输入其中,装满后再调用PutBuf(InputQueue,Hin)过程,将该缓冲区挂在输入队列InputQueue的队尾。 1065 | 1066 | 2. 提取输出工作缓冲区的工作情况为:当要输出数据时,调用GetBuf(OutputQueue)过程,从输出队列的队首取得一装满输出数据的缓冲区作为提取输出工作缓冲区Sout。在数据提取完后,再调用PutBuf(EmptyQueue,Sout)过程,将该缓冲区挂到空缓冲队列EmptyQueue的队尾。 1067 | 1068 | **14.何谓安全分配方式和不安全分配方式?** 1069 | 1070 | 1. 安全分配方式是指每当进程发出I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。在采用这种分配策略时,一旦进程已获得某种设备资源后便阻塞,使它不可能再请求任何资源,而在它运行时又不保持任何资源。这种分配方式已经摒弃了造成死锁的“请求和保持”条件,分配是安全的。缺点是进程进展缓慢,CPU与I/O设备串行工作。 1071 | 1072 | 2. 不安全分配方式是指进程发出I/O请求后仍继续执行,需要时又可发出第二个I/O请求、第三个I/O请求。仅当进程请求的设备已被另一个进程占有时,进程才进入阻塞状态。优点是一个进程可同时操作多个设备,进程推进迅速。缺点是分配不安全,可能具有“请求和保持”条件,可能造成死锁。因此,在设备分配程序中需增加一个功能,用于对本次的设备分配是否会发生死锁进行安全性计算,仅当计算结果表明分配安全的情况下才进行分配。 1073 | 1074 | **15.为何要引入设备独立性?如何实现设备独立性?** 1075 | 1076 | 答:现代操作系统为了提高系统的可适应性和可扩展性,都实现了设备独立性或设备无关性。基本含义是应用程序独立于具体使用的物理设备,应用程序以逻辑设备名请求使用某类设备。实现了设备独立性功能可带来两方面的好处:(1)设备分配时的灵活性;(2)易于实现I/O重定向。 1077 | 1078 | 为了实现设备的独立性,应引入逻辑设备和物理设备概念。在应用程序中,使用逻辑设备名请求使用某类设备;系统执行时是使用物理设备名。鉴于驱动程序是与硬件或设备紧密相关的软件,必须在驱动程序之上设置一层设备独立性软件,执行所有设备的公有操作、完成逻辑设备名到物理设备名的转换(为此应设置一张逻辑设备表)并向用户层(或文件层)软件提供统一接口,从而实现设备的独立性。 1079 | 1080 | **16.在考虑到设备的独立性时,应如何分配独占设备?** 1081 | 1082 | 答:在考虑到设备的独立性时,应按如下步骤来分配独占设备: 1083 | 1084 | 1. 进程以逻辑设备名提出I/O请求。 1085 | 1086 | 2. 根据逻辑设备表获得I/O请求的逻辑设备对应物理设备在系统设备表中的指针。 1087 | 1088 | 3. 检索系统设备表,找到属于请求类型、空闲可用且分配安全设备的设备控制表,将对应设备分配给请求进程;未找到则等待等待唤醒和分配。 1089 | 1090 | 4. 到设备控制表中找出与其相连接的控制器的控制器控制表,根据状态字段判断是否忙碌,忙则等待;否则将该控制器分配给进程。 1091 | 1092 | 5. 到该控制器的控制器控制表中找出与其相连接的通道的通道控制表,判断通道是否忙碌,忙则等待;否则将该通道分配给进程。 1093 | 1094 | 6. 只有在设备、控制器和通道三者都分配成功时,这次的设备分配才算成功,然后便可启动设备进行数据传送。 1095 | 1096 | **17.何谓设备虚拟?实现设备虚拟时所依赖的关键技术是什么?** 1097 | 1098 | 答:设备虚拟是指把独占设备经过某种技术处理改造成虚拟设备。可虚拟设备是指一台物理设备在采用虚拟技术后,可变成多台逻辑上的虚拟设备,则可虚拟设备是可共享的设备,将它同时分配给多个进程使用,并对这些访问该物理设备的先后次序进行控制。 1099 | 1100 | **18.试说明SPOOLing 系统的组成。** 1101 | 1102 | 答:SPOOLing系统由输入井和输出井、输入缓冲区和输出缓冲区、输入进程 SPi 和输出进程 SPo 三部分组成。 1103 | 1104 | **19.在实现后台打印时,SPOOLing 系统应为请求I/O的进程提供哪些服务?** 1105 | 1106 | 答:在实现后台打印时,SPOOLing 系统应为请求 I/O的进程提供以下服务: 1107 | 1108 | 1. 由输出进程在输出井中申请一空闲盘块区,并将要打印的数据送入其中; 1109 | 1110 | 2. 输出进程为用户进程申请空白用户打印表,填入打印要求,将该表挂到请求打印队列。 1111 | 1112 | 3. 一旦打印机空闲,输出进程便从请求打印队列的队首取出一张请求打印表,根据表中要求将要打印的数据从输出井传送到内存缓冲区,再由打印机进行打印。 1113 | 1114 | **20.试说明设备驱动程序具有哪些特点。** 1115 | 1116 | 答:设备驱动程序具有如下特点: 1117 | 1118 | 1. 是请求 I/O 进程与设备控制器间的一个通信程序; 1119 | 1120 | 2. 驱动程序与 I/O 设备的特性紧密相关; 1121 | 1122 | 3. 驱动程序与 I/O 控制方式紧密相关; 1123 | 1124 | 4. 驱动程序与硬件紧密相关,部分程序用汇编语言书写,基本部分往往固化在ROM中。 1125 | 1126 | **21.试说明设备驱动程序应具有哪些功能?** 1127 | 1128 | 答:设备驱动程序的主要功能包括: 1129 | 1130 | 1. 将接收到的抽象要求转为具体要求; 1131 | 1132 | 2. 检查用户I/O请求合法性,了解I/O设备状态,传递有关参数,设置设备工作方式; 1133 | 1134 | 3. 发出I/O命令,启动分配到的I/O设备,完成指定I/O操作; 1135 | 1136 | 4. 及时响应由控制器或通道发来的中断请求,根据中断类型调用相应中断处理程序处理; 1137 | 1138 | 5. 对于有通道的计算机,驱动程序还应该根据用户I/O请求自动构成通道程序。 1139 | 1140 | **22.设备中断处理程序通常需完成哪些工作?** 1141 | 1142 | 答:设备中断处理程序通常需完成如下工作: 1143 | 1144 | 1. 唤醒被阻塞的驱动程序进程; 1145 | 1146 | 2. 保护被中断进程的CPU环境; 1147 | 1148 | 3. 分析中断原因、转入相应的设备中断处理程序; 1149 | 1150 | 4. 进行中断处理; 1151 | 1152 | 5. 恢复被中断进程。 1153 | 1154 | **23.磁盘访问时间由哪几部分组成?每部分时间应如何计算?** 1155 | 1156 | 答:磁盘访问时间由寻道时间Ts、旋转延迟时间Tr、传输时间Tt 三部分组成。 1157 | 1158 | 1. Ts 是启动磁臂时间s 与磁头移动n条磁道的时间和,即Ts = m × n + s。 1159 | 1160 | 2. Tr是指定扇区移动到磁头下面所经历的时间。硬盘15000r/min时Tr为2ms;软盘300或600r/min时Tr为50~100ms。 1161 | 1162 | 3. Tt 是指数据从磁盘读出或向磁盘写入经历的时间。Tt的大小与每次读/写的字节数b和旋转速度有关:Tt = b/rN。 1163 | 1164 | **24.目前常用的磁盘调度算法有哪几种?每种算法优先考虑的问题是什么?** 1165 | 1166 | 答:目前常用的磁盘调度算法有先来先服务、最短寻道时间优先及扫描等算法。 1167 | 1168 | 1. 先来先服务算法优先考虑进程请求访问磁盘的先后次序; 1169 | 1170 | 2. 最短寻道时间优先算法优先考虑要求访问的磁道与当前磁头所在磁道距离是否最近; 1171 | 1172 | 3. 扫描算法考虑欲访问的磁道与当前磁道间的距离,更优先考虑磁头当前的移动方向。 1173 | 1174 | **25.为什么要引入磁盘高速缓冲?何谓磁盘高速缓冲?** 1175 | 1176 | 答:目前磁盘的I/O速度远低于内存的访问速度,通常低上4-6个数量级。因此,磁盘I/O已成为计算机系统的瓶颈。为提高磁盘I/O的速度,便引入了磁盘高速缓冲。 1177 | 1178 | 磁盘高速缓冲是指利用内存中的存储空间,暂存从磁盘中读出的一系列盘块中的信息。 1179 | 1180 | **26.在设计磁盘高速缓冲时,如何实现数据交付?** 1181 | 1182 | 答:数据交付是指将磁盘高速缓存中的数据传给请求进程。当进程请求访问某个盘块中的数据时,由核心先查看磁盘高速缓冲,看其中是否存在所需盘块数据的拷贝。若有便直接从中提取数据交付给请求进程,避免了访盘操作,本次访问速度提高4-6个数量级;否则先从磁盘中将要访问的数据读入并交付给请求者进程,同时送高速缓存以便下次直接读取。 1183 | 1184 | **27.何谓提前读、延迟写和虚拟盘?** 1185 | 1186 | 答:提前读是指在读当前盘块的同时,将下一个可能要访问的盘块数据读入缓冲区,以便需要时直接从缓冲区中读取,无需启动磁盘。延迟写是指在写盘块时,将对应缓冲区中的立即写数据暂时不立即写以备不久之后再被访问,只将它置上“延迟写”标志并挂到空闲缓冲队列的末尾。当移到空闲缓冲队首并被分配出去时,才写缓冲区中的数据。只要延迟写块仍在空闲缓冲队列中,任何要求访问都可直接从其中读出数据或将数据写入其中,而不必去访问磁盘。虚拟盘又称RAM盘,是利用内存空间仿真磁盘。其设备驱动程序可以接受所有标准的磁盘操作,但这些操作不是在磁盘上而是在内存中,因此速度更快。 1187 | 1188 | **28.廉价磁盘冗余阵列是如何提高对磁盘的访问速度和可靠性的?** 1189 | 1190 | 答:廉价磁盘冗余阵列RAID是利用一台磁盘阵列控制器,统一管理和控制一组(几台到几十台)磁盘驱动器,组成高度可靠快速大容量的磁盘系统。操作系统将RAID中的一组物理磁盘驱动器看作一个单个的逻辑磁盘驱动器。用户数据和系统数据可分布在阵列的所有磁盘中,并采取并行传输方式,大大减少数据传输时间和提高了可靠性。 1191 | 1192 | ## 第六章 1193 | 1194 | **1.何谓数据项、记录和文件?** 1195 | 1196 | 1. 数据项分为基本数据项和组合数据项。基本数据项描述一个对象某种属性的字符集,具有数据名、数据类型及数据值三个特性。组合数据项由若干数据项构成。 1197 | 1198 | 2. 记录是一组相关数据项的集合,用于描述一个对象某方面的属性。 1199 | 1200 | 3. 文件是具有文件名的一组相关信息的集合。 1201 | 1202 | **2.文件系统的模型可分为三层,试说明其每一层所包含的基本内容。** 1203 | 1204 | 第一层:对象及其属性说明(文件、目录、硬盘或磁带存储空间); 1205 | 1206 | 第二层:对对象操纵和管理的软件集合(I/O控制层即设备驱动程序、基本文件系统即物理I/O层、基本I/O管理程序或文件组织模块层、逻辑文件系统层) 1207 | 1208 | 第三层:文件系统接口(命令接口/图形化用户接口与程序接口)。 1209 | 1210 | **3.试说明用户可以对文件施加的主要操作有哪些?** 1211 | 1212 | 答:用户通过文件系统提供的系统调用对文件实施操作。 1213 | 1214 | 1. 基本文件操作:创建、删除、读、写、截断、设置读/写位置等; 1215 | 1216 | 2. 文件打开和关闭操作:第一步通过检索文件目录找到指定文件属性及其在外存上位置;第二步对文件实施读写等相应操作。 1217 | 1218 | 3. 其他文件操作:一是文件属性操作;二是目录操作;三是文件共享与文件系统操作的系统调用实现等。 1219 | 1220 | **4.何谓逻辑文件?何谓物理文件?** 1221 | 1222 | 答:逻辑文件是物理文件中存储的数据的一种视图方式,不包含具体数据,仅包含物理文件中数据的索引。物理文件又称文件存储结构,是指文件在外存上的存储组织形式。 1223 | 1224 | **5.如何提高对变长记录顺序文件的检索速度?** 1225 | 1226 | 答:基本方法是为变长记录顺序文件建立一张索引表,以主文件中每条记录的长度及指向对应记录的指针(即该记录在逻辑地址空间的首址)作为相应表项的内容。由于索引表本身是一个定长记录的顺序文件,若将其按记录键排序,则实现了对主文件方便快捷的直接存取。如果文件较大,应通过建立分组多级索引以进一步提高检索效率。 1227 | 1228 | **6.试说明对索引文件和索引顺序文件的检索方法。** 1229 | 1230 | 1. 索引文件的检索,首先根据用户(程序)提供的关键字,利用折半查找法检索索引表,找到相应表项;再利用给出的指向记录指针值,访问对应记录。 1231 | 1232 | 2. 索引顺序文件的检索,首先利用用户(程序)提供的关键字及查找方法,检索索引表,找到该记录在记录组中的第一条记录表项,得到第一个记录在主文件中的位置;再利用顺序查找法查找主文件,找到所要求的记录。 1233 | 1234 | **7.试从检索速度和存储费用两方面对索引文件和索引顺序文件进行比较。** 1235 | 1236 | 答:索引文件的主文件每条记录配置一个索引项,存储开销N,检索到具有指定关键字的记录,平均查找N/2条记录。对于索引顺序文件,每个记录分组配置一个索引项,存储开销为*N*,检索到具有指定关键字的记录,平均需要查找*N* /2次。 1237 | 1238 | **8.试说明顺序文件的结构及其优点。** 1239 | 1240 | 答:第一种是串结构:各记录之间的顺序与关键字无关。第二种是顺序结构:指文件中的所有记录按关键字(词)排列。可以按关键词长短排序或英文字母顺序排序。 1241 | 1242 | 顺序文件的最佳应用场合是对诸记录进行批量存取时,存取效率最高;只有顺序文件才能存储在磁带上并有效工作。 1243 | 1244 | **9.在链接式文件中常用哪种链接方式?为什么?** 1245 | 1246 | 答:链接方式分为隐式链接和显式链接两种形式。隐式链接是在文件目录的每个目录项中,都含有指向链接文件第一个盘块和最后一个盘块的指针。显式链接则把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。 1247 | 1248 | **10.在MS-DOS中有两个文件A 和B,A占用11、12、16和14四个盘块;B 占用13、18和20三个盘块。试画出在文件A和B中各盘块间的链接情况及FAT的情况。** 1249 | 1250 | 答:如下图所示。 1251 | 1252 | **11.NTFS文件系统对文件采用什么样的物理结构?** 1253 | 1254 | 答:在NTFS文件系统中,以簇作为磁盘空间分配和回收的基本单位。一个文件占若干个簇,一个簇只属于一个文件。 1255 | 1256 | **12.假定一个文件系统的组织方式与MS-DOS相似,在FAT中可有64K个指针,磁盘的盘块大小为512B,试问该文件系统能否指引一个512MB的磁盘?** 1257 | 1258 | 解:512MB/512B=1M 个盘块,而每个盘块都应有一个指针来指示,所以应该有1M个指针,因此若有64K指针不能指引一个512MB的磁盘。 1259 | 1260 | **13.为了快速访问,又易于更新,当数据为以下形式时,应选用何种文件组织方式。⑴不经常更新,经常随机访问;⑵经常更新,经常按一定顺序访问;⑶经常更新,经常随机访问。** 1261 | 1262 | 答:以上三种宜分别采用(1)顺序结构(2)索引顺序结构(3)索引结构的组织方式。 1263 | 1264 | **14.在UNIX中,如果一个盘块的大小为1KB,每个盘块号占4个字节,即每块可放256个地址。请转换下列文件的字节偏移量为物理地址。⑴9999; ⑵18000;⑶420000。** 1265 | 1266 | 答:首先将逻辑文件的字节偏移量转换为逻辑块号和块内偏移量,就是将[字节偏移量]/[盘块大小],商为逻辑块号,余数是块内偏移量。在FCB中,第0-9个地址为直接地址,第10个为一次间接地址,第11个地址为二次间接地址,第12个地址为三次间接地址。再将文件的逻辑块号转换为物理块号。使用多重索引结构,在索引节点中根据逻辑块号通过直接索引或间接索引找到对应的物理块号。 1267 | 1268 | 1. 9999/1024=9余783,则逻辑块号为9,直接索引第9个地址得到物理块号,块内偏移地址为783。 1269 | 1270 | 2. 18000/1024=17余592,则逻辑块号为10<17<10+256,通过一次间接索引在第10个地址可得到物理块号,块内偏移地址为592。 1271 | 1272 | 3. 420000/1024=410余160,则逻辑块号为10+256<410,通过二次间接索引在第11个地址可得到一次间址,再由此得到二次间址,再找到物理块号,其块内偏移地址160。 1273 | 1274 | **15.什么是索引文件?为什么要引入多级索引?** 1275 | 1276 | 答:索引文件是指当记录为可变长度时,通常为之建立一张索引表,并为每个记录设置一个表项构成的文件。通常将索引非顺序文件简称为索引文件。索引是为了是用户的访问速度更快,多级索引结构可以有效的管理索引文件,可根据用户的访问情况多级处理。 1277 | 1278 | **16.试说明UNIX系统中所采用的混合索引分配方式。** 1279 | 1280 | 答:混合索引分配方式是指将多种索引分配方式结合而成的分配方式。常见的是采用直接地址和一级索引联合的分配方式,或两级索引分配方式,甚至三级索引分配方式。在UNIX SystemⅤ和BSD UNIX 的索引结点中,都设置了13个地址项,即iaddr(0)~iaddr(12),把所有地址项分成直接地址和间接地址。 1281 | 1282 | **17.对目录管理的主要要求是什么?** 1283 | 1284 | 答:实现按名存取、提高检索目录的速度、文件共享、允许文件重名。 1285 | 1286 | **18.采用单级目录能否满足对目录管理的主要要求?为什么?** 1287 | 1288 | 答:不能。单级目录在整个文件系统中只建立一张目录表,每个文件占一个目录项,其中含文件名、文件扩展名、文件长度、文件类型、文件物理地址、状态位等其它文件属性。 1289 | 1290 | 单级只能实现目录管理的基本功能,不能满足查找速度、允许重名和文件共享的要求。 1291 | 1292 | **19.目前广泛应用的目录结构有哪些?它有什么优点?** 1293 | 1294 | 答:现代操作系统都采用多级目录结构。基本特点是查询速度快、层次结构清晰、文件管理和保护易于实现。 1295 | 1296 | **20.Hash 检索法有何优点?又有何局限性?** 1297 | 1298 | 答:Hash检索法是系统把用户提供的文件名变换为文件目录的索引值,再利用该值查找目录,有效提高目录的检索速度,但Hash检索法局限于非通配符文件名。 1299 | 1300 | **21.在Hash检索法中,如何解决“冲突”问题?** 1301 | 1302 | 答:在Hash法查找目录时,如果目录表中相应目录项为空,表示系统中无指定文件。如果文件名与指定文件名匹配,表示找到了目标文件,也就找到了文件的物理地址。如果目录表中找到的相应文件名不匹配,则发生了冲突,需要Hash转换形成新的索引值,返回第一步重新查找。 1303 | 1304 | **22.试说明在树型目录结构中线性检索法的检索过程,并给出相应的流程图。** 1305 | 1306 | 答:在树型结构的目录中,当有两个或多个用户共享一个子目录或文件时,将共享文件或字母路连接到两个或多个用户目录中,方便找到该文件。此时目录结构不再是树形结构,而是个有向非循环图DGA。 1307 | 1308 | **23.有一计算机系统利用图6-33所示的位示图来管理空闲盘块。盘块的大小为1KB,现要为某文件分配量个盘块,试说明盘块的具体分配过程。** 1309 | 1310 | 答:分配量个盘块的过程如下: 1311 | 1312 | 1. 顺序扫描位示图,从中找到第一个值为0的二进制位,得到行号i=3,列号j=3。 1313 | 1314 | 2. 将找到的二进制位转换成对应盘块号。盘块号为:b=(3-1)*16+3=35; 1315 | 1316 | 3. 修改位示图,令map[3,3]=1,并将该盘块分配出去。 1317 | 1318 | 类似地,可使用相同的方法找到第二个值为0的二进制位,得到行号i=4,列号j=7,其对应的盘块号为55,令map[i,j]=1,并将该盘块分配出去。 1319 | 1320 | **24.某操作系统磁盘文件空间共500块,若用字长为32位的位示图管理磁盘空间,试问:(1)位示图需要多少字?(2)第i字第j位对应的块号是多少?(3)给出申请/归还一块的工作流程。** 1321 | 1322 | (1)位示图需要的字数计算:INT(500/32)=16 个字。 1323 | 1324 | (2)块号b=(i-1)*32+j 1325 | 1326 | (3)申请的过程:顺序扫描位示图、找到空闲块并分配、修改位示图map[i,j]=1。 1327 | 1328 | 归还的过程:找到回收盘块在位示图中的行和列,修改位示图map[i,j]=0。 1329 | 1330 | **25.对空闲磁盘空间的管理常采用哪几种分配方式?在UNIX系统中采用何种分配方式?** 1331 | 1332 | 答:空闲表法、空闲链表法、位示图法、成组链接法。UNIX系统采用的是成组链接法 1333 | 1334 | **26.基于索引节点的文件共享方式有何优点?** 1335 | 1336 | 答:优点是建立新的共享链接时,不改变文件拥有者关系,仅把索引结点共享计数器加1,系统可获悉了由多少个目录项指向该文件。缺点是拥有者不能删除自己的文件,否则会出错。 1337 | 1338 | **27.基于符号链的文件共享方式有何优点?** 1339 | 1340 | 答:能够通过网络链接世界上 任何地方的计算机中的文件。 1341 | 1342 | **28.在一级系统容错技术中,包括哪些容错措施?什么是写后读校验?** 1343 | 1344 | 答:一级系统容错技术包括双份目录、双份文件分配表及写后读校验等容错措施。 1345 | 1346 | 写后读校验是每次从内存缓冲区向磁盘写入一个数据块后,又立即从磁盘上读出该数据块,并送至另一缓冲区中,再将该缓冲区内容与内存缓冲区中在写后仍保留的数据进行比较。若两者一致,才认为写入成功,继续写下一个盘块。否则重写。若重写后仍不一致,则认为盘块缺陷,便将应写入该盘块的数据,写入到热修复重定向区中。 1347 | 1348 | **29.在第二级系统容错技术中,包括哪些容错措施?画图说明之。** 1349 | 1350 | 答:第二级容错技术包括磁盘镜像和磁盘双工两种容错措施。图示如下: 1351 | 1352 | **30.何谓事务?如何保证事务的原子性?** 1353 | 1354 | 答:事务是用于访问和修改各种数据项的一个程序单位。要保证事务的原子性必须要求一个事务在对一批数据执行修改操作时,要么全部完成,用修改后的数据代替原来数据,要么一个也不改,保持原来数据的一致性。 1355 | 1356 | **31.引入检查点的目的是什么?引入检查点后又如何进行恢复处理?** 1357 | 1358 | 答:引入检查点的目的是使对事务记录表中事务记录的清理工作经常化。恢复处理由恢复例程来实现。首先查找事务记录表,确定在最近检查点以前开始执行的最后的事务Ti。找到Ti后再返回搜索事务记录表,找到第一个检查点记录,从该检查点开始,返回搜索各个事务记录,利用redo和undo过程对他们进行相应的处理。 1359 | 1360 | **32.为何引入共享锁?如何用互斥锁或共享锁来实现事务的顺序性?** 1361 | 1362 | 答:引入共享锁是为了提高运行效率。在给对象设置了互斥锁和共享锁的情况下,如果事务Ti要对Q执行读操作,只需获得Q的共享锁。如果对象Q已被互斥锁锁住,则Ti必须等待;否则便获得共享锁对Q执行读操作。如果Ti要对Q执行写操作,则Ti还要获得Q的互斥锁。若失败则等待;成功则获得互斥锁并对Q执行写操作。 1363 | 1364 | **33.当系统中有重复文件时,如何保证他们的一致性?** 1365 | 1366 | 答:可以采用两种方法:一是对所有的重复文件进行同样的修改,二是用新修改的文件替换所有的重复文件。 1367 | 1368 | **34.如何检索盘块号的一致性?检查时可能出现哪几种情况?** 1369 | 1370 | 答:为了保证盘块号的一致性,先将计数器表中的所有表项初始化为0,用N个空闲盘块号计数器组成的第一组计数器对从空闲盘块表中读出的盘块号计数,用N个数据盘块号计数器组成的第二组计数器对从文件分配表中读出的已分配给文件使用的盘快号计数。如果两组计数中的对应数据互补则数据一致,反之则发生错误。检查时可能出现的情况: 1371 | 1372 | 1. 两组计数器中盘块K的计数值均为0,应在空闲盘块表中增加盘块号K; 1373 | 1374 | 2. 空闲盘块号计数器中盘块K的计数值为2,应删除一个空闲盘块号K; 1375 | 1376 | 3. 空闲盘块号计数器中盘块号K的计数值为0,而数据盘块号计数器中盘块号K的计数值大于1,则错误严重,存在数据丢失等事件,必须立即报告系统加以处理。 1377 | 1378 | ## 第七章 1379 | 1380 | **1.操作系统包括哪几种类型的用户接口?它们分别适用于哪种情况?** 1381 | 1382 | 答:操作系统包括四种类型的用户接口:命令接口(分为联机与脱机命令接口)、程序接口、图形化用户接口和网络用户接口。命令接口和图形化用户接口支持用户直接通过终端来使用计算机系统,程序接口提供给用户在编制程序时使用,网络用户接口是面向网络应用的接口。 1383 | 1384 | **2.联机命令接口由哪些部分构成?** 1385 | 1386 | 答:联机命令接口由一组联机命令、终端处理程序和命令解释程序构成。 1387 | 1388 | **3.联机命令通常包含哪些类型?每种类型又包含哪些主要命令?** 1389 | 1390 | 答:联机命令通常包含如下类型: 1391 | 1392 | 1. 系统访问类,主要是注册命令login、password; 1393 | 1394 | 2. 磁盘操作类,包括磁盘格式化format、软盘复制diskcopy、软盘比较diskcomp及备份backup等命令; 1395 | 1396 | 3. 文件操作类,包括文件显示type、文件拷贝copy、文件比较comp、文件重命名rename、文件删除erase等命令; 1397 | 1398 | 4. 目录操作类,包括子目录建立mkdir、目录显示dir、子目录删除rmdir、目录结构显示tree、当前目录改变chdir等命令; 1399 | 1400 | 5. 其它命令,包括输入输出重定向>、<,管道联接|、过滤命令/,批命令.bat等。 1401 | 1402 | **4.什么是输入输出重定向?试举例说明。** 1403 | 1404 | 答:命令的输入通常取自标准输入设备键盘,命令输出则送往标准输出设备显示终端。如果在命令中设置输出定向“>”,其后接文件或设备名,则命令的结果输出将送到指定文件或设备上;如果使用输入重定向“<”,则不从键盘而是从重定向符右边的指定文件或设备上取得输入信息。这就是输入输出的重定向。 1405 | 1406 | **5.何谓管道联接?试举例说明。** 1407 | 1408 | 答:管道联接是指把第一个命令的输出作为第二个命令的输入,或把第二个命令的输出作为第三条命令的输入,以此类推,由两条以上的命令可形成一条管道。在MS-DOS和UNIX中,都用"|"作为管道符号。其一般格式为:command1 |command2 | …|commandn。 1409 | 1410 | **6.终端设备处理程序的主要作用是什么?它具有哪些功能?** 1411 | 1412 | 答:主要用于实现人机交互,它具有以下功能: 1413 | 1414 | (1)接收用户从终端上键入的字符;(2)字符缓冲,用于暂存接收的字符;(3)回送显示;(4)屏幕编辑;(5)特殊字符处理。 1415 | 1416 | **7.命令解释程序的主要作用是什么?** 1417 | 1418 | 答:主要作用是:在屏幕上给出提示符,请用户输入命令,读入并识别命令,转至相应命令处理程序入口地址,把控制权交给该处理程序执行,最后将处理结果或出错信息送屏幕显示。 1419 | 1420 | **8.试说明MS-DOS的命令处理程序COMMAND.COM的工作流程。** 1421 | 1422 | COMMAND.COM的工作流程如下: 1423 | 1424 | 1. 系统通电或复位后,初始化程序对整个系统完成初始化工作,自动执行Autoexec.bat文件,然后把控制权交给暂存部分,给出提示符等待接收用户键入命令; 1425 | 1426 | 2. 暂存部分读入键盘缓冲区中的命令,判别文件名、扩展名及驱动器名是否正确,若有错则出错返回,正确则查找和识别命令; 1427 | 1428 | 3. 若为内部命令,暂存部分找到后便从对应表项中获得命令处理程序的入口地址并执行;若为外部指令,则建立命令行,执行系统调用exec装入其命令处理程序,得到对应基地址并执行;若键入命令非法,则出错返回; 1429 | 1430 | 4. 命令完成后,控制权重新交给暂存部分给出提示符等待接收用户命令,转(2)。 1431 | 1432 | **9.为了将已存文件改名,应用什么UNIX 命令?** 1433 | 1434 | 答:对已存文件改名的命令为mv,其格式为:*mv oldname newname*。 1435 | 1436 | **10.要想将工作目录移到目录树的某指定点上,应利用什么命令?** 1437 | 1438 | 答:用命令“cd ..”或“cd .”将当前目录上移或转移,直到工作目录移到目录树的指定点。 1439 | 1440 | **11.如果希望把file1的内容附加到原有的文件file2的末尾,应用什么指令?** 1441 | 1442 | 答: `cat file1 >> file4` 1443 | 1444 | **12.试比较mail和write命令的作用有何不同?** 1445 | 1446 | 答: mail命令作为UNIX的多用户之间非交互式通信的工具。write命令是用户与当前系统中的其他用户直接进行联机通讯的工具。 1447 | 1448 | **13. 试比较一般的过程调用和系统调用?** 1449 | 1450 | 答: 系统调用本质上是过程调用的一种特殊形式,与一般过程调用有差别: 1451 | 1452 | 1. 运行状态不同。一般过程调用的调用过程和被调用过程均为用户程序,或者均为系统程序,运行在同一系统状态(用户态或系统态);系统调用的调用过程是用户态下的用户程序,被调用过程是系统态下的系统程序。 1453 | 1454 | 2. 软中断进入机制。一般的过程调用可直接由调用过程转向被调用过程;而系统调用不允许由调用过程直接转向被调用过程,一般通过软中断机制,先进入操作系统内核,经内核分析后,才能转向相应命令处理程序。 1455 | 1456 | 3. 返回及重新调度。一般过程调用在被调用结束后,返回调用点继续执行;系统调用被调用完后,要对系统中所有运行进程重新调度。只有当调用进程仍具有最高优先权才返回调用过程继续执行。 1457 | 1458 | 4. 嵌套调用。一般过程和系统调用都允许嵌套调用,注意系统过程嵌套而非用户过程。 1459 | 1460 | **14.什么是系统调用?它都有哪些类型?** 1461 | 1462 | 答:系统调用是指在操作系统内核设置的一组用于实现各种系统功能的子程序或过程,并提供给用户程序调用。主要类型包括: 1463 | 1464 | 1. 进程控制类。用于进程创建、终止、等待、替换、进程数据段大小改变及进程标识符或指定进程属性获得等; 1465 | 1466 | 2. 文件操纵类。用于文件创建、打开、关闭、读/写及文件读写指针移动和属性修改,目录创建及索引结点建立等; 1467 | 1468 | 3. 进程通信类,用于实现通信机制如消息传递、共享存储区及信息量集机制等; 1469 | 1470 | 4. 信息维护类,用于实现日期、时间及系统相关信息设置和获得。 1471 | 1472 | **15.如何设置系统调用所需的参数?** 1473 | 1474 | 答:设置系统调用参数包括两种方式: 1475 | 1476 | 1. 直接将参数送入相应的寄存器中。问题是寄存器有限,限制了设置参数的数目。 1477 | 1478 | 2. 参数表方式。将系统调用所需参数,放入参数表中,再将该表指针放在寄存器中。 1479 | 1480 | **16.试说明系统调用的处理步骤。** 1481 | 1482 | 1. 设置系统调用号和参数。 1483 | 1484 | 2. 对系统调用命令的一般性处理。如保护CPU现场,PSW、PC、系统调用号、用户栈指针及通用寄存器入栈,保存用户定义参数等。UNIX中执行CHMK命令将参数表中的参数传到User结构的U.U-arg()中;MS-DOS执行INT21软中断。 1485 | 1486 | 3. 根据系统调用入口表及具体系统调用命令转至对应命令处理程序具体处理。 1487 | 1488 | **17.为什么在访问文件前,要用open系统调用先打开该文件?** 1489 | 1490 | 答: 系统将在用户与该文件之间建立一条快捷通路。在文件被打开后,系统将给用户返回一个该文件的句柄或描述符。 1491 | 1492 | **18.在UNIX系统中是否设置了专门用来删除文件的系统调用?为什么?** 1493 | 1494 | 答: 没有。当用户不再使用此文件时,利用系统调用unlink断开连接,做i.link减1操作。当i.link减1结果为0,表示此文件不再被用户需要,该文件将从文件系统中删除。 1495 | 1496 | **19.在IPC软件包中包含哪几种通信机制?在每种通信机制中设置了那些系统调用?** 1497 | 1498 | 答: IPC中提供了三种通信机制: 1499 | 1500 | 1. 消息机制。存在msgget,msgsend,msgrcv系统调用。 1501 | 1502 | 2. 共享存储器机制。存在shmget,shmid,shmdt系统调用。 1503 | 1504 | 3. 信号量机制。无系统调用。 1505 | 1506 | **20. trap.S是什么程序?它完成哪些主要功能?** 1507 | 1508 | 答:UNIX系统V内核中的trap.S文件,是中断和陷入总控程序。用于中断和陷入的一般性处理,由汇编语言编写。trap.S中包含了绝大部分的中断和陷入向量的入口地址,每当系统发生中断和陷入时,通常都是直接进入trap.S程序。 1509 | 1510 | **21.在UNIX系统内,被保护的CPU环境中包含哪些数据项?** 1511 | 1512 | 答:当用户程序处在用户态且执行CHMK (CHange Mode toKernel)之前,应在用户空间提供系统调用所需参数表,并将参数表地址送入R0寄存器。执行CHMK命令后,处理机转为核心态,由硬件自动将处理机状态长字(PSL)、PC和代码操作数(code)压入用户核心栈,从中断和陷入向量表中取出trap.S入口地址,转入trap.S中执行。 1513 | 1514 | trap.S程序执行后,将陷入类型type和用户栈指针usp压入用户核心栈,将被中断进程的CPU环境中的一系列寄存器如R0~R11的部分或全部压栈。哪些寄存器内容压栈,取决于特定寄存器的屏蔽码,屏蔽码每一位都与R0~R11中的寄存器相对应。当某一位置1时,表示对应寄存器内容压栈。 1515 | 1516 | **22. trap.C 是什么程序?它将完成哪些处理?** 1517 | 1518 | 答:trap.C 程序是处理各种陷入情况的C语言文件,共处理12种陷入后的公共问题。包括:确定系统调用号、实现参数传递、转入相应系统调用处理子程序。在由系统调用子程序返回到trap.C后,重新计算进程的优先级,对收到的信号进行处理等。 1519 | 1520 | **23.为方便转入系统调用处理程序,在UNIX系统中配置了什么样的数据结构?** 1521 | 1522 | 答:在UNIX系统中配置了系统调用定义表sysent[],在表的每个结构中包含三个元素,一是相应系统调用所需参数的个数;二是系统调用经寄存器传送的参数个数;三是相应系统调用处理子程序的入口地址。系统中设置了该表之后,可根据系统调用号i从系统调用定义表中找出相应表目,按表目中的入口地址转入相应处理子程序,完成系统调用的特定功能。执行完后,返回中断和陷入总控程序中的trap.C程序中,返回断点前的公共处理部分。 1523 | 1524 | ## 第八章网络操作系统 1525 | 1526 | **1.按网络拓扑结构可以把计算机网络分为哪几类?试画出它们的网络拓扑图。** 1527 | 1528 | 答:计算机网络可分为星形、环形、总线形、树形和网状形网络。它们的网络拓扑图如下: 1529 | 1530 | **2.试说明分组交换网的组成。** 1531 | 1532 | 答:由分组交换机、网路管理中心、远程集中器、分组装拆设备以及传输设备等组成。 1533 | 1534 | **3.何谓帧交换方式及信元交换方式?** 1535 | 1536 | 答:帧交换方式是在传统分组交换的基础上发展起来的,传输基本单位是帧,长度可变,采用“存储转发”方式,即帧交换器每接到一个新帧时,都将该帧送帧缓冲区排队,按照该帧中的目标地址,将该帧转发给相应路径的下一个帧交换器。信元交换方式是改进了的帧中继交换方式。当源帧交换器收到用户设备发来的帧,便分割为多个定长信元,在整个帧中继器网络中传输和交换时,都以信元为基本单位,到达目标帧交换器后,被重组为帧。 1537 | 1538 | **4.局域网可分为基本型和快速型两大类,每一类中包括哪几种局域网?** 1539 | 1540 | 答:基本型局域网有:(1)以太网(2)令牌环网。快速局域网有:(1)FDDI光纤环网(2)快速以太网100 BASE-T。 1541 | 1542 | **5.为实现同构LAN网络互连,应采用什么样的网络互连设备?应具有哪些功能?** 1543 | 1544 | 答:同构LAN网络互连设备与功能: 1545 | 1546 | 1. 网桥。功能:帧的发送和接受、缓冲处理、协议转换。 1547 | 1548 | 2. 路由器。功能:拆包和打包、路由选择、协议转换、分段和重组 1549 | 1550 | **6.为实现异构型网络互连,应采用什么样的网络互联设备?它又应具有哪些功能?** 1551 | 1552 | 答:采用网关。实现异构LAN互连、LAN与WAN互连、WAN互连、LAN与主机互连。 1553 | 1554 | **7.网络层向传输层提供了哪两类数据传输服务?试对它们做简要的说明。** 1555 | 1556 | 1. 数据包服务。发方网络层从传输层接收报文,为它配上完整的目标地址,作为独立信息单位传送出去。数据包每经过一个中继节点都根据当时当地情况,按一定算法选择一条最佳传输路径转发出去。采用数据包服务的收、发双发无需建立连接。 1557 | 1558 | 2. 虚电路服务。通信前由源主机发送呼叫报文分组,包含源和目标主机的全网地址。目标主机同意通信,便由网络层在双方间建立一条虚电路。在以后通信中只需填上虚电路的逻辑信道号;通信结束拆除该虚电路。 1559 | 1560 | **8.传输层所起的桥梁作用具体表现在哪几方面?** 1561 | 1562 | 1. 传输出错率和建立连接的失败率。 1563 | 1564 | 2. 数据传输速率、吞吐量和传输时延。 1565 | 1566 | 3. 分段和组段功能。 1567 | 1568 | **9.TCP/IP模型中包含了哪几个层次?简要说明每个层次的主要功能。** 1569 | 1570 | 答:TCP/IP模型中包含4个层次。 1571 | 1572 | 1. 应用层。对应于OSI高层,为用户提供需要的服务。如FTP、Telnet、DNS等。 1573 | 1574 | 2. 传输层。对应于OSI传输层,为应用层实体提供端到端的通信功能。定义了面向连接的TCP和无连接的用户数据报协议UDP这两个主要协议。 1575 | 1576 | 3. 网络互联层。对应于OSI网络层,解决主机到主机的通信问题。有网际协议IP、地址解析协议ARP、互联网组管理协议IGMP和互联网控制报文协议ICMP四个主要协议。 1577 | 1578 | 4. 网络访问层。对应OSI的物理层和数据链路层。 1579 | 1580 | **10.网络互联层IP协议的主要作用是什么?为什么在有了IP协议之后还要配置TCP协议?** 1581 | 1582 | 1. IP协议主要用于异构网络间的相互连接和路由选择。IP 提供的是不可靠、面向无连接的数据报传递服务。 1583 | 1584 | 2. TCP协议提供面向连接、可靠的端端通信机制。TCP比IP可以确保数据传输的可靠性,即使网络层出错,TCP仍能正确控制建立连接、数据传输和连接释放。 1585 | 1586 | **11.试说明在介质访问控制MAC子层中,IEEE 802.2、IEEE802.3、IEEE 802.3u、IEEE 802.2z、IEEE 802.5、IEEE802.6都是些什么标准?** 1587 | 1588 | 1. IEEE 802.2是逻辑链路控制的标准。IEEE 802.3是以太网的标准。 1589 | 1590 | 2. IEEE 802.3u是以太网的标准。IEEE 802.2z是以太网的标准。 1591 | 1592 | 3. IEEE 802.5是令牌环的标准。IEEE 802.6是城域网的标准。 1593 | 1594 | **12.何谓网络体系结构?OSI/RM由哪几部分组成?** 1595 | 1596 | 答:网络体系结构是指通信系统的整体设计,为网络硬件、软件、协议、存取控制和拓扑提供标准。OSI/RM 从低到高分七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 1597 | 1598 | **13.什么是网络协议?扼要说明其所含的三要素。** 1599 | 1600 | 答:网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。计算机网络协议主要由语义、语法和交换规则三部分即协议三要素组成。语义:规定通信双方彼此讲什么,确定协议元素类型,如规定通信双方发什么控制信息,执行的动作和返回的应答。语法:规定通信双方彼此如何讲,确定协议元素格式,如数据和控制信息的格式。交换规则:规定信息交流的次序。 1601 | 1602 | **14.ISO将OSI/RM分成几层?各层的主要用途是什么?** 1603 | 1604 | 答:OSI/RM分7层。各层的主要用途是: 1605 | 1606 | 物理层:规定了网络设备间物理连接标准,在网络设备间透明地传输比特流。 1607 | 1608 | 数据链路层:提供相邻节点间可靠的数据传输功能。 1609 | 1610 | 网络层:在通信子网中进行路由选择和通信控制。 1611 | 1612 | 传输层:提供两个端系统间的可靠通信。 1613 | 1614 | 会话层:建立和控制两个应用实体间的会话过程。 1615 | 1616 | 表示层:提供统一的网络数据表示。 1617 | 1618 | 应用层:提供网络用户间的分布式应用环境(普通用户)和应用开发环境(网络程序员)。 1619 | 1620 | **15.客户/服务器模式得以广泛流行的主要因素是什么?** 1621 | 1622 | 1. 模块化与应用的分布特性 1623 | 1624 | 2. 充分利用资源,提高网络效率 1625 | 1626 | 3. 便与系统维护,扩充性强 1627 | 1628 | 4. 并发特性 1629 | 1630 | **16..试说明客户与服务器之间的交互情况。** 1631 | 1632 | 答:C/S 模式的两层结构系统是:第一层在客户机系统上结合表示与业务逻辑;第二层通过网络结合了数据库服务器。C/S 模式主要由客户应用程序、服务器管理程序和中间件三部分组成。 1633 | 1634 | **17.两层C/S模式有哪些局限性?如何解决?** 1635 | 1636 | 1. 不能适应应用不断增多的情况。 1637 | 1638 | 2. 需要在客户机与服务器上安装特定的网络软件,实现C/S间的互用性。 1639 | 1640 | 3. 客户机直接与服务器交互。 1641 | 1642 | 解决办法:设法使C与提供数据等服务的S无关,在C/S间增设中间实体。 1643 | 1644 | **18.为什么在大型信息系统和Internet环境下,应采用三层客户/服务器模式?** 1645 | 1646 | 答:因为Internet发展极为迅速,三层客户/服务器模式更适合发展。把客户机作为Web浏览器,从而形成了Web浏览器、Web服务器和数据库服务器三层的C/S 模式。 1647 | 1648 | **19.试比较两层和三层的**C/S**模式。** 1649 | 1650 | 答:三层与两层模式相比的优点:(1)增加了系统的灵活性和可扩展性。(2)简化了客户机,降低了系统费用。(3)使客户机安装、配置和维护更为方便。 1651 | 1652 | 三层的缺点:(1)软件开发难度大,开发周期长。(2)访问效率低。 1653 | 1654 | **20.现代计算机网络有哪些主要功能。** 1655 | 1656 | 答:计算机网络的主要功能是数据通信和资源共享、系统容错、网络管理、应用互操作功能。 1657 | 1658 | **21.试说明在层次式结构的网络中进行数据通信时,信息的流动过程。** 1659 | 1660 | 答:请求信息从客户机到应用服务器,再到数据服务器,然后数据服务器根据要求向应用服务器传送信息,再由应用服务器找到客户机。 1661 | 1662 | **22.为实现数据通信,计算机网络应有哪些具体功能?** 1663 | 1664 | 答:连接的建立和拆除、报文的分解和组装、传输控制、流量控制、差错检测与纠正。 1665 | 1666 | **23.试说明当前实现文件和数据共享的两种主要方式。** 1667 | 1668 | 答:以虚拟软盘方式和以文件服务方式实现的数据共享方式。 1669 | 1670 | **24.网络管理的主要目标是什么?** 1671 | 1672 | 答:A.增强网络的可用性。 B.提高网络运行质量。 C.提高网络资源利用率。D.保障网络的安全性 E.提高网络和社会经济效益。 1673 | 1674 | **25.网络管理包括哪几方面的具体功能?** 1675 | 1676 | 答:配置管理、故障管理、性能管理、安全管理、计费管理。 1677 | 1678 | **26.何谓信息“互通性”和信息“互用性”?** 1679 | 1680 | 答:信息的互通性是指在不同网络结点间实现通信。目前主要利用TCP/IP实现信息互通。信息的互用性是指在不同网络中的站点间实现信息的互用,即一个网络中的用户能访问另一个网络文件系统或数据库系统中的文件或数据。 1681 | 1682 | **27.何谓电子邮件?它可分为哪几种类型?** 1683 | 1684 | 答:电子邮件E-mail,标志@,又称电子信箱、电子邮政,是用电子手段提供信息交换的通信方式。电子邮件服务器分为两种类型,MIME 协议和SMTP协议。现代E-mail中可包含多种不同类型的文件,如文本、图像、音频和视频信息等。 1685 | 1686 | **28.文件传输的复杂性表现在哪几方面?如何解决?** 1687 | 1688 | 答:异构网络下的文件传输,需要在Internet中建立了统一的文件传输协议FTP。 1689 | 1690 | (1)内部用户FTP。只允许在文件服务器上拥有账户的用户使用FTP服务。 1691 | 1692 | (2)匿名FTP。在Internet 上实现资源共享的重要手段,允许非注册用户拷贝文件。 1693 | 1694 | **29.试比较电子邮件服务和文件传输服务。** 1695 | 1696 | 答:电子邮件服务借助于E-mail设施与世界上所有国家和地区的网络用户通信。文件传输服务是在Internet 中建立统一的文件传输协议FTP,实现用户在不同主机间的文件拷贝功能。 1697 | 1698 | **30.网络环境下的目录服务有何特点?** 1699 | 1700 | 答:规模小的局域网不需要提供目录服务,对于大型企业网必须对网络管理员和用户提供目录服务,发挥网络的应有作用。目录服务还应能对每台物理设备提供的网络服务进行管理。对服务器提供的网络服务可以是文件/打印服务、数据库服务等。 1701 | 1702 | **31. 目录服务包括哪些主要功能?** 1703 | 1704 | 1. 用户管理。保证核准用户能方便地访问各种网络服务,禁止非法用户访问。 1705 | 1706 | 2. 分区和复制。将庞大目录库分成若干个分区,并分别复制到多台服务器,使每个分区被复制的位置尽量靠近最常使用这些对象的用户,有的目录服务还允许一台服务器上存放多个不同分区的拷贝。 1707 | 1708 | 3. 创建扩充和继承功能。创建是在目录中创建新的对象,并设置属性。扩充指对原有目录服务功能的扩充。继承是指目录对象继承其他对象的属性和权力的能力。 1709 | 1710 | 4. 多平台支持功能。由于目录服务存在着管理对象的差异,要求具有跨越平台能力。 1711 | 1712 | **32. Internet 具有哪些特征?** 1713 | 1714 | 答:(1)广域性 (2)广泛性 (3)高速性(4)综合性 1715 | 1716 | **33.何谓WWW?它与一般的信息检索工具有何不同?** 1717 | 1718 | 答:WWW(Word Wide Web)称为万维网或Web,是当前最为流行的信息服务类型。它与一般信息检索工具不同表现在:一般检索工具每次只能从一台主机上查找需要的文件,且文件数据类型单一;而Web检索可以一次从多台主机中查找需要的数据,允许类型各异,并将这些数据形成一份文件。 1719 | 1720 | **34.何谓BBS?它何以会受到广大网络用户的欢迎?** 1721 | 1722 | 答:BBS(Bulletin BoardSystem)即电子公告板。BBS用户已经扩展到各行各业,BBS可以交换各种文件。通过BBS系统可随时取得国际最新软件及信息,可以和别人讨论计算机软件、硬件、Internet、多媒体、程序设计以及医学等各种有趣话题,可以利用BBS刊登征友、廉价转让及公司产品等启事。只要拥有1台计算机和上网设备就能立刻进入“超时代”BBS领域,享用它无比的威力!因此BBS 受到了广大网络用户的欢迎。 1723 | 1724 | **35.什么是域名服务?Internet的域名是由几段构成的?** 1725 | 1726 | 答:域名是Internet 网络上的一个服务器或一个网络系统的名字。域名的形式是以若干个英文字母和数字组成,由"."分隔成几部分,如cctv.com就是一个域名。一个完整的域名由两个或两个以上词段组成,部分之间用英文句号"."分隔,最后一个"."的右边部分称为顶级域名(TLD)或一级域名,最后一个"."的左边部分称为二级域名(SLD),二级域名的左边部分称为三级域名,以此类推,每一级的域名控制它下一级域名的分配。 1727 | 1728 | **36.什么是域名解析?最基本的一种域名解析方式是如何实现的?** 1729 | 1730 | 答:域名解析是将域名重新转换为对应IP地址的过程。一个域名只对应一个IP地址,多个域名可以同时解析到一个IP地址。域名解析需要由专门的域名解析服务器DNS完成。域名解析的过程:当应用过程需要将一个主机域名映射为IP地址时,就调用域名解析函数将待转换的域名放在DNS请求中,以UDP报文方式发给本地域名服务器。查到域名后将对应IP地址放在应答报文中返回。若域名服务器不能回答该请求,则此域名服务器向根域名服务器发出请求解析,找到下面的所有二级域名服务器,以此类推,直到查询到所请求的域名并赋IP值返回。 1731 | 1732 | **37.为能支持Internet所提供的服务,在操作系统中应配置哪些软件?** 1733 | 1734 | 答:应配置WEB浏览器,如IE、firefox、Chrome等,特殊的服务可以根据需要安装对应的软件。 1735 | 1736 | **38.何谓浏览器/服务器模式?浏览器和服务器的基本功能是什么?** 1737 | 1738 | 答:浏览器/服务器模式即B/S结构或Browser/Server结构。只安装维护一个服务器Server,客户端采用浏览器Browse 软件。利用成熟的WWW技术,结合多种Script语言(VBScript、JavaScript…)和ActiveX技术,是全新的软件系统构造技术。在B/S体系结构系统中,浏览器向分布在网络上的许多服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。而数据请求、加工、结果返回及动态网页生成、数据库访问和应用程序执行等工作全部由Web Server完成。随着Windows将浏览器技术植入操作系统内部,这种结构已成为当今应用软件的首选体系结构。B/S 结构的主要特点是分布性广、维护方便、开发简单、共享性强、总体成本低。但数据安全性、服务器要求高、数据传输慢、软件个性化特点明显降低,难以实现传统模式下的特殊功能要求。浏览器是指可以显示网页服务器或者文件系统的HTML文件内容,并让用户与这些文件交互的一种软件。服务器是网络上为客户端计算机提供各种服务的高可用性计算机。 1739 | 1740 | ## 第九章系统安全性 1741 | 1742 | **1.系统安全的复杂性表现在哪几个方面?** 1743 | 1744 | 1. 多面性:大规模系统存在多个风险点,每点都包括物理、逻辑及管理三方面安全。 1745 | 1746 | 2. 动态性:信息技术不断发展和攻击手段层出不穷,系统安全问题呈现出动态性。 1747 | 1748 | 3. 层次性:系统安全涉及多方面且相当复杂的问题,需要采用系统工程方法解决。 1749 | 1750 | 4. 适度性:根据实际需要提供适度安全目标加以实现。 1751 | 1752 | **2.对系统安全性的威胁有哪几种类型?** 1753 | 1754 | 答:假冒身份、数据截获、拒绝服务、修改伪造信息、否认操作、中断传输、通信量分析。 1755 | 1756 | **3.攻击者可通过哪些途径对软件和数据进行威胁?** 1757 | 1758 | 答:数据截获,修改信息,伪造信息,中断传输 1759 | 1760 | **4.可信任计算机系统评价标准将计算机系统的安全度分为哪几个等级?** 1761 | 1762 | 答:该标准将计算机系统安全程度分为8级,有D1(安全度最低级)、C1(自由安全保护级)、C2(受控存取控制级)、B1、B2、B3、A1、A2。 1763 | 1764 | **5.何谓对称加密算法和非对称加密算法?** 1765 | 1766 | 答:对称加密也叫私钥加密,是指加密和解密使用相同密钥的加密算法。加密密钥能够从解密密钥中推算出来,解密密钥也能够从加密密钥中推算出来。在大多数对称算法中,加密和解密的密钥相同,也称为保密密钥算法或单密钥算法。非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥配对,如果用公钥加密数据,只有用对应的私钥才能解密。 1767 | 1768 | **6.什么是易位法和置换算法?试举例说明置换算法。** 1769 | 1770 | 答:易位法是指按一定规则,重新安排明文中的比特或字符顺序形成密文,而字符本身保持不变。置换法是按照一定规则,用一个字符去置换另一个字符形成密文。如:How are you?的每个字符用后面的字母代替就是Ipx bsf zpv? 1771 | 1772 | **7.试说明DES加密的处理过程。** 1773 | 1774 | 答:分为四个阶段: 1775 | 1776 | 第一阶段,将明文分出64位明文段,并做初始易位得到X0,左移32位,记为L0,右移32位,记为R0。 1777 | 1778 | 第二阶段,对X0进行16次迭代,每一次用56位加密密钥Ki。 1779 | 1780 | 第三阶段,把经过16次迭代处理的结果的左32位与右32位互换位置。 1781 | 1782 | 第四阶段,进行初始易位的逆变换。 1783 | 1784 | **8.试说明非对称加密的主要特点。** 1785 | 1786 | 答:非对称加密算法复杂、安全性依赖于算法与密钥,加密解密速度慢。对称密码体制只有密钥,安全性就是密钥的安全性,而非对称加密有公钥和私钥,安全性更强。 1787 | 1788 | **9.试说明保密数据签名的加密和解密方式。** 1789 | 1790 | 1. 发送者A可用自己的私用密钥Kda对明文P进行加密,得到密文DKda(P)。 1791 | 1792 | 2. A再用B的公钥Keb对DKda(P)加密,得到EKeb(DKda(P))后送B。 1793 | 1794 | 3. B收到后,先用私钥Kdb解密,得到DKda(EKeb(DKda(P)))=DKda(P)。 1795 | 1796 | 4. B再用A的公钥Kea 对DKda(P)解密,得到EKeb(DKda(P))=P。 1797 | 1798 | **10.数字证明书的作用是什么?用一例来说明数字证明书的申请、发放和使用过程。** 1799 | 1800 | 答:数字证明书又称公钥证明书,用于证明通信请求者的身份。数字证明书的申请、发放和使用过程如下: 1801 | 1802 | 1. 用户A先向CA申请数字证明书,A应提供身份证明和希望使用的公钥A。 1803 | 1804 | 2. CA收到A发来的申请报告后,若接受申请,便发给A一份数字证明书,其中包括公钥A和CA发证者的签名等信息,并对所有信息利用CA私钥加密(即对CA进行数字签名)。 1805 | 1806 | 3. 用户A在向B发送信息时,由A用私钥对报文加密(数字签名),连同证明书发给B。 1807 | 1808 | 4. 为能对收到的数字证明书解密,用户B须向CA申请获得CA的公钥B。CA 收到用户B的申请后,可决定将公钥B发给用户B。 1809 | 1810 | 5. 用户B利用CA公钥B对数字证明书解密,确认该数字证明书系原件,并从数字证明书中获得公钥A,并且确认该公钥A系用户A的密钥。 1811 | 1812 | 6. 用户B再利用公钥A对用户A发来的加密报文解密,得到用发来报文的真实明文。 1813 | 1814 | **11.何谓链路加密?其主要特点是什么?** 1815 | 1816 | 答:链路加密是对网络相邻节点间的通信线路上传输的数据的加密过程。特点是: 1817 | 1818 | 1. 相邻节点间的物理信道上传输的报文是密文,在所有中间节点上的报文则是明文。 1819 | 1820 | 2. 对不同的链路分别采用不同的加密密钥。 1821 | 1822 | **12.何谓端-端加密?其主要特点是什么?** 1823 | 1824 | 答:端-端加密是在源主机或前端机FEP高层(从传输层到应用层)对传输数据进行的加密。特点: 1825 | 1826 | 1. 整个网络传输过程中的报文正文都是密文,信息到达目标主机后才译成明文。 1827 | 1828 | 2. 不能对报头中的控制信息加密,否则中间结点无法得知目标地址和控制信息。 1829 | 1830 | **13.可利用哪几种方式来确定用户身份的真实性?** 1831 | 1832 | 答:(1)口令密码组合;(2)物理标志(3)生物标志 (4)公开密钥 1833 | 1834 | **14.在基于口令机制的身份认证技术中,通常应满足哪些要求?** 1835 | 1836 | 答:口令长度适中、自动断开连接、隐蔽回送显示、记录和报告。 1837 | 1838 | **15.基于物理标志的认证技术又可细分为哪几种?** 1839 | 1840 | 答:主要有基于磁卡或IC卡的两种认证技术。 1841 | 1842 | **16.智能卡可分为哪几种类型?这些是否都可用于基于用户持有物的认证技术中?** 1843 | 1844 | 答:智能卡分为存储器卡、微处理器卡和密码卡等类型。存储器卡没有安全功能,不能用于基于用户持有物的认证;微处理器卡和密码卡采用了加密措施,可以用于基于用户持有物的认证。 1845 | 1846 | **17.被选用的人的生理标志应具有哪几个条件?请列举几种常用的生理标志。** 1847 | 1848 | 答:被选用的生理标志应具有三个基本条件,即足够的可变性、稳定性好、不易伪装。常用的生理标志是指纹、视网膜组织、声音、手指长度等。 1849 | 1850 | **18.对生物识别系统的要求有哪些?一个生物识别系统通常是有哪几部分组成的?** 1851 | 1852 | 答:对生物识别系统的要求有:性能满足要求(抗欺骗和防伪防攻击)、能被用户接受、系统成本适当。一个生物识别系统通常由注册和识别两部分组成。注册部分配有一张用户注册表,识别部分要对用户进行身份认证和生物特征识别。 1853 | 1854 | **19.试详细说明SSL所提供的安全服务。** 1855 | 1856 | 答:SSL称为安全套接层协议,用于提供Internet上的信息保密,身份认证服务,目前SSL已成为利用公开密钥进行身份认证的工业标准。SSL 提供的安全服务有:申请数字证书(服务器申请数字证书、客户申请数字证书)和SSL握手协议(身份认证、协商加密算法和协商加密密钥)。 1857 | 1858 | **20.什么是保护域?进程与保护域之间存在着什么动态联系?** 1859 | 1860 | 答:保护域是进程对一组对象访问权的集合,规定了进程能访问对象和执行的操作。进程与保护域之间的动态联系是指进程的可用资源集在个生命周期中是变化的;进程运行在不同的阶段可以根据需要从一个保护域切换到另一个保护域。 1861 | 1862 | **21.试举例说明具有域切换权的访问控制矩阵。** 1863 | 1864 | 答:在访问矩阵中增加几个对象,分别作为访问矩阵中的几个域,当且仅当switch包含在access(i,j)时,才允许进程从域i切换到域j。例如在下图中,域D1和D2对应的项目中有S,故允许域D1中的进程切换到域D2中,在域D2和D3中也有S,表示D2域中进行的进程可切换到域D3中,但不允许该进程再从域D3返回到域D1。 1865 | 1866 | **22.如何利用拷贝权来扩散某种访问权?** 1867 | 1868 | 答:如果域i具有对象j的某访问权acess(i,j)的拷贝权,则运行在域i的进程可将其访问权acess(i,j)扩展到访问矩阵同一列中的其它域,即为运行在其它域的进程也赋予关于同一对象的同样访问(acess(i,j))。 1869 | 1870 | **23.如何利用拥有权来增删某种访问权?** 1871 | 1872 | 答:如果域i具有关于对象j的所有权,则运行在域i的进程可以增删在j列的任何项中的任何访问权。或该进程可以增删在任何其它域中运行的进程关于对象j的任何访问权。 1873 | 1874 | **24.增加控制权的主要目的是什么?试举例说明控制权的应用。** 1875 | 1876 | 答:控制权用于改变某个域中运行进程关于不同对象的访问权。若某域访问权access(i,j)中含有控制权C,则运行在Di域中的进程能改变运行在Qj域中的任何进程关于任何对象的任何访问权。 1877 | 1878 | **25.什么是访问控制表?什么是访问权限表?** 1879 | 1880 | 答:访问控制表是指对访问矩阵按列划分,为每列建立一张访问控制表ACL,由有序对(域,权集)组成,用来保证系统安全性的一种手段。访问权限表是指对访问矩阵按行划分,由每行构成一张访问权限表。 1881 | 1882 | **26.系统如何利用访问控制表和访问权限表来实现对文件的保护?** 1883 | 1884 | 答:当进程第一次试图访问一个对象时,必须先检查访问控制表,查看是否有权访问该对象。如果无则拒绝访问,并构成一个例外异常事件;否则便允许访问,并为之建立访问权限,以便快速验证其访问的合法性。当进程不再访问该对象时便撤销该访问权限。 1885 | 1886 | **27.什么是病毒?它有什么样的危害?** 1887 | 1888 | 答:病毒是编制或者在计算机程序中插入的破坏计算机功能或数据,影响计算机系统使用并且能够自我复制的一组计算机计算机指令或程序代码。计算机病毒的危害:占用系统空间、占用处理机时间、破坏文件、使机器运行异常。 1889 | 1890 | **28. 计算机病毒的特征是什么?它与一般的程序有何区别?** 1891 | 1892 | 答:计算机病毒的特征是寄生性、传染性、隐蔽性和破坏性。它与一般程序的区别是:病毒程序通常不是独立的程序,具有自我复制和迅速传播的传染性,想方设法隐藏自身,存在的基本目标就是破坏性。 1893 | 1894 | **29.什么是文件型病毒?试说明文件型病毒对文件的感染方式。** 1895 | 1896 | 答:文件型病毒是指采用寄生方式附着在正常程序里,病毒发作时原来程序仍能正常运行,以致用户不能及时发现而长期潜伏下来的病毒。文件型病毒对文件的感染方式是主动攻击和执行时感染的方式。 1897 | 1898 | **30.病毒设计者采取了哪几种隐藏方式来让病毒逃避检测?** 1899 | 1900 | 1. 隐藏于目录和注册表空间。 1901 | 1902 | 2. 隐藏于程序的页内零头里。 1903 | 1904 | 3. 更改用于磁盘分配的数据结构。 1905 | 1906 | 4. 更改坏扇区列表。 1907 | 1908 | **31.用户可采用哪些方法来预防病毒?** 1909 | 1910 | 1. 定期在外存备份重要软件和数据 1911 | 1912 | 2. 使用安全性高的操作系统 1913 | 1914 | 3. 使用正版软件 1915 | 1916 | 4. 使用高性能反病毒软件 1917 | 1918 | 5. 不轻易打开来历不明的电子邮件 1919 | 1920 | 6. 定期检查外存并清除病毒 1921 | 1922 | **32.试说明基于病毒数据库的病毒检测方法。** 1923 | 1924 | 答:(1)建立病毒数据库 (2)扫描硬盘上的可执行文件 1925 | 1926 | ## 第十章 1927 | 1928 | **1.UNIX系统具有哪些特征?** 1929 | 1930 | 答:开放性、多用户多任务环境、功能强大高效、丰富网络功能、支持多处理器。 1931 | 1932 | **2.试说明UNIX系统的内核结构。** 1933 | 1934 | 答:UNIX内核结构分四层:最底层是硬件,次底层是OS 核心,第二层是OS与用户接口shell及编译程序等,最高层是应用程序。 1935 | 1936 | **3.UNIX系统中的PCB含哪几部分?用图说明各部分之间的关系。** 1937 | 1938 | 答:UNIX系统中的PCB含进程表项、U区、系统区表、进程区表。 1939 | 1940 | **4.进程映像含哪几部分?其中系统级上、下文动态部分的作用是什么?** 1941 | 1942 | 答:进程映像含用户上下文、寄存器上下文、系统级上下文。系统级上下文动态部分的作用是当因中断或系统调用进入核心状态时,核心把一个寄存器上下文压入核心栈,退出系统调用时,核心又弹出寄存器上下文,在上下文切换时,核心将压入老进程的上下文,弹出新进程的上下文。 1943 | 1944 | **5.在UNIX系统中用于进程控制的主要系统调用有哪些?它们各自的主要功能是什么?** 1945 | 1946 | 答:用于进程控制的主要系统调用有: 1947 | 1948 | 1. fork系统调用:用于创建新进程 1949 | 1950 | 2. exit系统调用:实现进程自我终止 1951 | 1952 | 3. exec系统调用:改变进程原有代码 1953 | 1954 | 4. wait系统调用:将调用进程挂起并等待子进程终止 1955 | 1956 | **6.为创建一个新进程,须做哪些工作?** 1957 | 1958 | 答:为新进程分配一个进程表项和进程标志符;检查同时运行的进程数目;拷贝进程表项中的数据;子进程继承父进程的所有文件;为子进程创建进程上下文;子进程执行。 1959 | 1960 | **7.为何要采取进程自我终止方式?如何实现exit?** 1961 | 1962 | 答:为了及时回收进程占用的资源,在进程任务完成后应尽快撤销。Unix内核用exit实现进程的自我终止。父进程在创建子进程时,应在子进程末尾安排exit使子进程能自我终止。实现exit的具体操作是:关闭软中断、回收资源、写记账信息和置进程为僵死状态。 1963 | 1964 | **8.在UNIX系统中采用了何种调度算法?如何确定进程的优先数?** 1965 | 1966 | 答:UNIX 系统采用动态优先数轮转的进程调度算法。优先数确定公式:优先数 =(最近使用CPU的时间/2)+ 基本用户优先数 1967 | 1968 | **9.在进入sleep过程后,内核应做哪些处理?** 1969 | 1970 | 答:进入sleep过程后,核心首先保存进入睡眠时的处理机运行级,提高处理机的运行优先级屏蔽所有中断,将该进程置为睡眠状态,将睡眠地址保存在进程表项中,将该进程放入睡眠队列。如果进程的睡眠不可中断,在进程上下文切换后,进程便安稳睡眠。当进程被唤醒并被调度执行,将恢复处理机的运行级为进入睡眠时的值,此时允许中断处理机。 1971 | 1972 | **10.试说明信号与中断两种机制间的异同处。** 1973 | 1974 | 答:不同点:中断有优先级,而信号没有,所有信号皆平等;信号处理程序在用户态运行,而中断处理程序是在核心态运行;还有中断响应及时,而信号响应通常都是延时的。 1975 | 1976 | 相同点:都采用异步通信方式;当检测出信号或中断请求时都暂停正在执行的程序而转去执行相应的处理程序;都在处理完毕返回到原来断点;对信号或中断都可进行屏蔽。 1977 | 1978 | **11.扼要说明信号机制中信号的发送和对信号的处理功能。** 1979 | 1980 | 答:信号发送是指由发送进程把信号送到目标进程的proc结构中信号域的某一位上。对信号的处理功能:首先利用系统调用signal(sig,func)预置对信号的处理方式,func=1时屏蔽该类信号;func=0时,进程收到信号后终止自己;func为非0非1时,func值作为信号处理程序的指针,系统从核心态转为用户态并执行相应的处理程序,处理完毕再返回用户程序的断点处。 1981 | 1982 | **12.什么是管道?无名管道和有名管道的主要差别是什么?** 1983 | 1984 | 答:管道是指能连接写进程和读进程,并允许它们以生产者消费者方式进行通信的一个共享文件或pipe文件。无名管道是个临时文件,是利用系统调用pipe()建立起来的无路径名文件,只有调用pipe的进程及其子孙进程才能识别此文件描述符而利用该文件(管道)进行通信;有名管道是利用mknod 系统调用建立的、可以在文件系统中长期存在的有路径名文件,其它进程可以知道其存在,并利用该路径名访问的文件。 1985 | 1986 | **13.在读、写管道时,应遵循哪些规则?** 1987 | 1988 | 1. 对pipe文件大小的限制 1989 | 1990 | 2. 进程互斥 1991 | 1992 | 3. 进程写管道时在管道空间上满足生产者操作规则 1993 | 1994 | 4. 进程读管道时在管道空间上满足消费者操作规则 1995 | 1996 | **14.在消息机制中有哪些系统调用?说明它们的用途。** 1997 | 1998 | 答:在消息机制中的系统调用是msgctl( )、msgsnd( )、msgrcv( )。 1999 | 2000 | 1. msgctl( )系统调用于指定的消息队列进行操纵。 2001 | 2002 | 2. msgsnd( )系统调用来发送消息。 2003 | 2004 | 3. msgrcv( )系统调用从指定消息队列中读取一个消息。 2005 | 2006 | **15.在共享存储机制中有哪些系统调用?扼要说明它们的用途。** 2007 | 2008 | 答:在共享存储机制中的系统调用有shmget() 、shmctl()、shmat()。 2009 | 2010 | 1. shmget( )用于建立一块共享存储区,提供该区名字key和共享存储区长度size等参数。 2011 | 2012 | 2. shmctl( )系统调用于查询共享存储区的状态信息。 2013 | 2014 | 3. shmat( )系统调用于将该共享存储区附接到用户给定的某个进程虚地址shmaddr上,并指定该存储区的访问属性是只读还是可读可写。 2015 | 2016 | **16.核心在执行shmget系统调用时需完成哪些工作?** 2017 | 2018 | 1. 检查共享存储区表,若找到key 表项,表明该区已建立,返回共享区描述符shmid; 2019 | 2020 | 2. 若未找到指定key 表项,而flag 标志为IPC_CREAT 且参数size值在系统限制值内,则分配一系统空闲区作为共享区的页表区,分配相应的内存块,将这些块号填入页表中; 2021 | 2022 | 3. 核心在共享存______xîÿl/___储区和系统区表中,为新建立的共享区分配一空表项,并填上存储区的关键字及大小、共享区页表始址,指向系统区表项指针等,最后返回共享区描述符shmid。 2023 | 2024 | **17.在信号量机制中有哪些系统调用?说明它们的用途。** 2025 | 2026 | 答:在信号量机制中的系统调用是senget( )和semop( )。semget()用于用户建立信号量集。semop()用来对信号量集进行操作。 2027 | 2028 | **18.核心是如何对信号量进行操作纵的?** 2029 | 2030 | 答:核心根据sem_op改变信号量的值,分3种情况:若sem_op值为正,则将其值加到信号量值上,相当于V操作;若sem_op值为负,相当于P操作,若信号量值大于操作值的绝对值,则核心将一个负整数加到信号量值上,否则核心将已操作的信号量恢复到系统调用开始时的值;若(sem_flg&IPC_NOWAIT)为真,便立即返回,否则让进程睡眠等待。 2031 | 2032 | **19.为实现请求调页管理,在UNIX系统中配置了那些数据结构?** 2033 | 2034 | 答:UNIX 系统V 将进程的每个区分为若干个虚页,这些虚页可以分配到不邻接的页框中,为此设置了一张页表。其中每个表项中,记录了每个虚页和页框的对照关系。 2035 | 2036 | **20.当访问的缺页是在可执行文件上或在对换设备上时,应如何将它们调入内存?** 2037 | 2038 | 1. 缺页在可执行文件上。如果欲访问虚页对应磁盘块描述表项类型是file,表示该缺页尚未运行,其拷贝在可执行文件中,核心应将该页调入内存。调入过程是:根据对应系统区表项中的索引结点指针,找到该文件的索引节点,把该页的逻辑块号作为偏移量,查找索引结点中的磁盘块号表,找到磁盘块号,将该页调入内存。 2039 | 2040 | 2. 缺页在对换设备上。核心先为缺页分配一内存页,修改该页表项,指向内存页,并页面数据表项放入相应散列队列中,把该页从对换设备上调入内存,当I/O操作完成时,核心把请求调入该页的进程唤醒。 2041 | 2042 | **21.在将一页换出时,可分成哪几种情况?应如何处理这些情况?** 2043 | 2044 | 1. 若在对换设备上有被换出页的拷贝,内容未改,则核心只将该页页表项中的有效位清零,将引用计数减1,将该页框数据表项放入空闲链表中。 2045 | 2046 | 2. 若在对换设备上没有换出页的拷贝,则将该页写到对换设备上。先将所有要换出页链入到待换出页面链上。当链上页面数达到规定值时才将这些页面写到对换区中。 2047 | 2048 | 3. 在对换设备上有换出页副本,但页内容已修改,核心应释放该页在对换设备上原占有的空间,再重新将该页拷贝到对换设备上,使拷贝内容最新。 2049 | 2050 | **22.如何对字符缓冲区进行分配与回收?** 2051 | 2052 | 答:在字符设备进行I/O 时,内核利用getcf过程从空闲字符缓冲区队列中取得空闲缓冲区,若队列空,则无缓冲区可分配,返回;否则从队首取得一个空闲缓冲区,把该缓冲区指针bp返给调用者。采取互斥访问措施,在过程开始处将处理机优先级提升为6,在取得空缓冲区之后再恢复处理机的优先级。当不再需要缓冲区时,调用putcf过程释放缓冲区。输入参数是指向已不再需要的缓冲区指针bp,把该缓冲区送回到空闲缓冲区队列的队首指针cfreelist指向的头部。此时若有申请空缓冲区而阻塞的进程,则唤醒它。对空闲缓冲区队列的访问应互斥进行。 2053 | 2054 | **23.试说明盘块缓冲区的组成和盘块缓冲池的构成。** 2055 | 2056 | 答:UNIX系统的每一个盘块缓冲区均有两部分:一是用于存放数据的数据缓冲区;另一部分是缓冲控制块,用于存放对应缓冲区的管理信息。盘块缓冲池结构:(1)空闲链表(2)散列队列。 2057 | 2058 | **24.getblk()和getblk(dev,blkno)进程的主要区别是什么?** 2059 | 2060 | 答:getblk()用于从空闲缓冲区队列中获得任意空闲缓冲区。getblk(dev,blkno)用于为指定设备dev和盘块号为blkno的盘块申请一个缓冲区。仅当要把数据写入特定盘块的内容不在缓冲区时,才调用getblk过程分配一个空缓冲区。 2061 | 2062 | **25.试说明gdopen、gdstart、gdstartegy和gdintr过程的主要功能。** 2063 | 2064 | 答:gdopen用于打开磁盘驱动器,输入参数是设备号,无输出参数。gdstart 用于装配磁盘控制器中的各个寄存器,然后启动磁盘控制器。gdstartegy 把指定缓冲首部排在磁盘控制器I/O 队列末尾,并启动磁盘控制器。gdintr用于磁盘I/O传送完成并发出中断请求时的磁盘中断处理过程。 2065 | 2066 | **26.在UNIX系统中设置了哪些读和写过程?两者的主要区别是什么?** 2067 | 2068 | 答:读过程有一般读过程bread和提前读过程breada。写过程有一般写过程bwrite、异步写过程bawrite和延迟写过程bdwrite。 2069 | 2070 | **27.试说明UNIX文件系统的特点?** 2071 | 2072 | 1.文件系统的组织是分级树形结构形式。 2073 | 2074 | 2.文件的物理结构为混合索引式文件结。 2075 | 2076 | 3.采用成组链接法管理空闲盘块。 2077 | 2078 | 4.引入了索引结点的文件检索技术。 2079 | 2080 | **28.在UNIX系统中的文件物理结构采用了何种形式?试举例说明。** 2081 | 2082 | 答:UNIX文件物理结构采用混合索引式文件结构。在查找文件时,只要找到了文件的索引结点,用直接或间接寻址方式获得该文件的盘块。 2083 | 2084 | **29.在UNIX系统中如何将文件的逻辑块号转换为物理盘块号?** 2085 | 2086 | 答:寻址方式不同,转换方法也不同。 2087 | 2088 | 1. 直接寻址,仅当文件的逻辑块号不大于10时采用。如访问对象是字节偏移量9999处的数据。则9999/1024=9余783,则文件逻辑块号9,直接索引地址项i-addr(9)中的块号,其块内偏移地址为783字节处就是文件的9999字节处。 2089 | 2090 | 2. 一次间址,仅当文件的逻辑块号大于10而不大于10+256时采用。如访问对象是字节偏移量18000处的数据。则18000/1024=17余592,则逻辑块号为10<17<10+256,需要通过一次间接索引方式。先从i-addr(10)中得到一次间址盘块号,再将逻辑盘块号减10,根据一次间址中的逻辑块号得到间址块号地址项的下标,再从中得到最终的物理盘块号。这里的逻辑盘块号17,从i-addr(10)中得到的块号设为428,则17-10=7就是一次间址号,其对应的盘块号就是要找的物理盘块号,块内偏移地址为592处就是文件的18000字节处。 2091 | 2092 | 3. 多次间址,仅当文件的逻辑块号大于266而不大于64266时采用。如访问对象是字节偏移量420000处的数据。则逻辑块号为266<410<64266,通过二次间址索引。在i-addr(11)中得到一次间址盘块号,再将逻辑盘块号减266,根据一次间址中的逻辑块号得到间址块号地址项的下标,再从中得到二次间址,再找到对应的物理块号,块内偏移地址160处就是文件的420000字节处。 2093 | 2094 | **30.如何对磁盘索引节点进行分配与回收?** 2095 | 2096 | 答:分配过程ialloc是:先检查超级块是否上锁,检索i 结点栈空否,从空闲i 结点编号栈中分配一个i结点并初始化,填写有关文件属性,分配内存i结点,将磁盘i结点总数减1,并置超级块修改标志后返回。回收过程ifree是:先检查超级块上锁否;检查i结点编号栈满否;若i 结点编号栈未满,便使回收的i结点的编号进栈,并使当前空闲i 结点数加1;置超级块修改标志后返回。 2097 | 2098 | **31.何时需要构造目录项?核心需完成哪些工作?** 2099 | 2100 | 答:当用户(进程)要创建新文件时,内核便应在其父目录文件中构造一个目录项;当某进程需要共享另一用户的某文件时内核也将为共享该文件的用户建立一个目录项。由系统调用creat过程完成目录项的构造。 2101 | 2102 | **32.何时需删除一个目录项?核心须完成哪些工作?** 2103 | 2104 | 答:对于某用户独享的文件,当该用户不需要它时,应将它删除而腾出存储空间。核心须完成的工作是利用unlink断开连接,当nlink值为0 时,系统将自动删除该文件。 2105 | --------------------------------------------------------------------------------