![bde4b5bc2b0235bababfce570ae8ea3c.png](https://i-blog.csdnimg.cn/blog_migrate/bded3dfee0f055b50a4dbc0a07cbcefc.jpeg)
万字长文预警!!!
操作系统教程期末复习笔记
第五版
第一章 操作系统概论
1.1.2 操作系统资源管理技术
操作系统的两个特性:程序的并发性和资源的共享性
三种资源管理技术
- 复用(此技术又称为多道程序设计技术)
- 空分复用:资源可以从“空间”上分割成更小的单位供进程使用
例如:内存和外存
-
- 时分复用:资源可以从“时间”上分割成更小的单位供进程使用
也就是说轮流使用资源 进一步可以分为:独占式与共享式 独占式:执行周期内不会被剥夺CPU 共享式:执行期间随时可能被剥夺CPU
- 虚拟
将一个物理资源转变为多个逻辑上的对应物 达到多个用户共享同一套计算机资源的目的 - 抽象
复用与虚拟的目的是解决资源不足的问题 抽象则用于处理系统复杂性,重点解决资源易用性 例如:操作系统内部封装操作硬件的细节,对外开放一个接口,这个接口就是抽象
1.1.4 操作系统功能和特性
从资源管理的角度来看,操作系统具有五项主要功能:
- 处理器管理
- 存储管理
- 设备管理
- 文件管理
- 联网与通信管理
特点:
- 并发性(同一时间间隔内发生多个活动事件)
- 共享性(资源可以被多个并发进程共同使用)
- 透明资源共享
- 独占资源共享
- 异步性
1.2.3 多道程序设计与操作系统形成
多道程序设计是指允许多个作业同时进入计算机系统的内存,并启动交替计算的方法
从宏观上看:多个作业是并行的
从微观上看:作业串行执行(所以它的实质是,多个进程轮流占用CPU)
道数不是越多越好,它受到内存、资源特性的限制
概率法计算CPU利用率:CPU利用率 = 1-
p是:程序等待IO的时间占其运行时间的比例
n是:多道程序的道数
实现多道程序设计必须解决的问题
- 存储保护与程序浮动
- 处理器管理与分配
- 资源管理与调度
引入多道程序设计的优点
- 提高CPU、内存、设备的利用率
- 提高系统的吞吐率,使单位时间内完成的作业数量增加
- 充分发挥系统的并行性
缺点
延长了作业周转时间
补充:多重处理系统
多个CPU的系统,可以完成真正意义上的并行,就是不是轮流占用CPU,而是多个CPU同时工作。当然它也必须是多道的。
1.2.4 操作系统的发展与分类
- 批处理操作系统
服务于一系列称为批的作业
根据预先设定的调度策略选择若干作业并发地执行,系统资源利用率高,吞吐量大。
特点:批量集中处理,多道程序运行,作业脱机工作。
缺点:作业周转时间长,不具备交互式计算能力,不利于程序的开发与调试。 - 分时操作系统
多个联机用户同时使用一个计算机系统在他们各自的终端上进行交互式会话。
系统把处理器的时间划分成时间片轮流分配给各个联机终端。
特点:同时性、独立性、及时性、交互性 - 实时操作系统
当外部数据或事件产生时,能够对其予以接收并以足够快的速度并行处理,所得结果能够在规定的时间内控制生产过程或对控制对象作出快速响应,并控制所有实施任务协调运行。
特点:及时响应、高可靠性 - 通用操作系统
兼备1和2的功能的操作系统
1.3.1 基本服务和用户接口
操作系统通过“程序接口”和“操作接口”将其服务与功能提供给用户
程序接口:由一组系统调用组成,在应用程序中使用程序接口获得底层服务。
操作接口:由一组控制命令和作业控制语言组成
![2ed79b457d13d1b194c86fcd62c34bc6.png](https://i-blog.csdnimg.cn/blog_migrate/c61ac1ee97a1af95c032252327988262.png)
第二章 处理器管理
2.1.1 处理器
特权指令
仅在内核态下才可以使用的指令,这些指令涉及改变机器状态、修改寄存器、启动IO、清空内存等,只能被操作系统使用
操作系统可以使用全部的机器指令
非特权指令
应用程序使用的指令
若应用程序执行特权指令会被操作系统拦截抛异常
根据执行程序对资源和机器指令的使用权限将处理器设置成内核态
与用户态
内核态
操作系统所处的状态,运行可信任的系统软件,可执行特权指令
用户态
应用程序所处的状态,运行不可信的程序,只能执行非特权指令
管理处理器、内存、设备一类的程序应该运行在内核态,否则没有安全保证
但是也存在为了减少内核态与用户态的转换,把本来应该在用户态运行的软件放到内核态运行的情况
程序状态字:操作系统将程序运行时的一组动态信息汇集在一起,称为程序状态字(PSW)
2.3 进程及其实现
“进程”一词的诞生与多道程序设计有关,它是一种数据结构,用来准确的刻画程序运行的状态和系统动态变化状况。
定义:进程是具有独立功能的程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的基本单位。
引入进程的目的:
- 刻画程序的并发性
- 解决资源的共享性
进程具有以下属性:
- 动态性
- 共享性
- 独立性
- 制约性
- 并发性
- 结构性:
- 程序
- 数据
- PCB
三态模型:
进程最基本的状态就是这三个
![e580e5e61f7f0d12749f72982837dab3.png](https://i-blog.csdnimg.cn/blog_migrate/4cfd44fa9f2e511bef00c547edb31957.png)
七态模型:
![d1aec6d13cae57974b6fbbcc9fcf2e3c.png](https://i-blog.csdnimg.cn/blog_migrate/30eac0f37952d1d17984398a468a7f86.png)
挂起是指:当系统资源不能满足运进程运行要求时,会把某些进程“挂起”,对换道磁盘对换区中(不再在内存中),暂时不参与调度,启到平滑系统负荷的目的。
挂起的特征:
- 进程不可立即执行
- 进程被挂起是由于系统、父进程、自身阻止了他的运行
- 结束挂起只能由系统、父进程发出
挂起对于线程无意义
进程控制块:每个进程有且仅有一个进程控制块,它是进程存在的唯一标识,是一个数据结构。
2.4 线程及其实现
线程优点:
- 快速切换
- 易于通信
- 减少管理开销
- 并发程度高
2.6 处理器调度
处理器调度分为三级:
- 高级调度(作业调度)
挑选作业进入内存,并为作业分配资源、创建进程。
不是必须的,如纯粹的分时操作系统和实时操作系统不需要高级调度。 - 中级调度(主/辅存对换)
处理挂起与解挂
也不是必须的,中级调度只是为了提高内存利用率与作业吞吐量。 - 低级调度(进程调度/线程调度)
根据调度策略是抢占式还是非抢占式,决定就绪队列中哪个进程/线程获得处理器。
属于最核心的部分,必须具备的,执行十分频繁。
因此,三级调度也可以分为两级调度:高级与低级
周转时间 w:从向系统提交作业开始到作业完成为止用的时间(作业完成意味着所需的CPU时间耗尽)
周转时间包括等待时间与执行时间
带权周转时间 W:周转时间 / 执行时间
平均带权周转时间 T: n个带权周转时间的平均值
作业与进程的关系:
- 作业是任务实体,进程是完成任务的执行实体
- 没有作业,进程无事可做
- 没有进程,作业无法完成
- 作业的概念多用于批处理操作系统,进程的概念多用于多道程序设计系统
![9b878de4f2a277dd900df5847c4758a3.png](https://i-blog.csdnimg.cn/blog_migrate/eba80bdae6a9d993bf8a62ade4b7ecd5.jpeg)
低级调度的基本类型
- 剥夺式(抢占式)
正在运行的进程/线程可以被剥夺CPU,转到就绪队列,让其他线程/进程获得CPU
两种剥夺策略:优先级与时间片 - 非剥夺式(非抢占式)
调度算法:
先来先服务算法(First Come First Served,FCFS,非剥夺式)
原理:先进入系统的作业优先进入内存。
优点:易于实现,利于长作业,利于CPU繁忙型作业
缺点:效率不高,不利于短作业,不利于IO繁忙型作业
如下表,是缺点的具体表现
作业名所需CPU时间/ms作业128作业29作业33
显然,作业2、作业3浪费了大量等待时间
最短作业优先算法(Shortest Job First,SJF,非剥夺式)
以作业要求的CPU运行时间长短为标准,总是选取预计计算时间最短的作业投入运行。
需要预先知道作业所需的CPU时间;
由于系统会不断接受新的作业,如果新的作业的CPU时间短的话,当正在运行的作业结束后,会优先运行CPU时间短的作业,导致CPU时间长的作业产生饥饿现象,一直无法执行。
调度性能比FCFS好,如果存在相同CPU时间的作业则按FCFS算法处理
最短剩余时间优先算法(Shortest Remaining Time First,SRTF,剥夺式)
SRTF是对SJF的改进,改为剥夺式的;
系统在不断地接受新的作业,如果新的作业的CPU时间比当前正在运行的作业的剩余CPU时间还短的话,当正在运行的作业将被剥夺CPU,转为调度更短的作业。
最高响应比优先算法(Highest Response Ratio First,HRRF,非剥夺式)
介于FCFS与SJF之间,既考虑作业等待时间,又考虑作业处理时间,既照顾短作业,又不会让长作业的等待时间过长。
响应比 = 响应时间(周转时间) / 处理时间 = 1 + 等待时间 / 处理时间
响应时间 = 等待时间 + 处理时间
举例:
作业名到达系统时间所需CPU时间/ms作业1020作业2515作业3105作业41510
优先级调度算法(可以是剥夺式,也可以是非剥夺式)
给作业规定优先级,优先级高的先执行;
若是非剥夺式,当前正在执行的作业让出CPU后,让优先级高的先执行;
若是剥夺式,来了一个比当前作业优先级更高的作业,则立即重新调度,让更高优先级的作业执行;
优先级的设定可以人为设定,也可以由操作系统确定。
确定的方式又分为:静态优先级算法(存在饥饿现象,低优先级的可能无限期的推迟运行)与动态优先级算法
轮转调度算法(Round - Robin,RR,剥夺式)
多级反馈队列调度算法(MLFQ)
第三章 同步、通信与死锁
3.1 并发进程
顺序程序设计
只有在前一个操作结束后,才能开始后继操作
特性:
- 执行的顺序性
- 环境的封闭性
- 结果的确定性
- 过程的可再现性
程序顺序执行与执行速度、时间无关,仅与初始数据输入有关
并发
程序并发执行是指:一组程序的执行在时间上是重叠的
并发的进程可以是无关的(即:互不影响),也可以是交互的(对共享变量的操作会影响其他进程的执行结果)
并发进程的无关性是进程的执行与时间无关的一个充分条件,该条件由Bernstein提出,假设:
R(Pi) = {a1,a2,... ,an},程序Pi在执行期间所引用的变量集
W(Pi) = {b1,b2,... ,bn},程序Pi在执行期间所改变的变量集
若:R(P1) ∩ W(P2) ∪ R(P2) ∩ W(P1) ∪ W(P1) ∩ W(P2) = φ
则:并发进程的执行与时间无关
R(P1) ∩ W(P2) ∪ R(P2) ∩ W(P1) = φ代表:一个程序在两次读操作之间的存储单元的数据不会被改变
W(P1) ∩ W(P2) = φ代表:程序的写操作不会丢失
只要满足Bernstein条件,并发执行的程序就可以保证封闭性和可再现性
![42353b5e3f27edf708379557437c0ac5.png](https://i-blog.csdnimg.cn/blog_migrate/91a035e4f1ae765ffda51cf388831bf9.jpeg)
并发程序设计的优点:
- 充分利用硬件资源
- 加快计算速度
- 简化程序设计任务
多道程序设计中同一时刻可能存在多个进程,他们之间存在两种基本关系:竞争和协作
竞争关系:(又叫进程互斥)
共享一套计算机资源的各个进程在访问独占性资源的时候,会发生竞争。
表现为:一个进程获得了资源另外一个必须等待
协作关系:(又叫进程同步)
为完成共同任务的并发进程基于某个条件来协调其活动
例如,发起IO后,可以阻塞自己等待IO就绪后被唤醒
(即wait、notify机制)
其实互斥,也是一种同步关系,只不过是串行的
3.2 临界区管理
临界区:指的是并发进程中与共享变量有关的程序段
临界资源:共享变量所代表的的资源(独占性资源)
竞争条件(竞态条件):并发进程访问临界资源时,结果依赖于他们执行的相对速度
并发进程的执行速度不可预知
临界区调度的三原则:
- 一次只能有一个进程进入临界区执行
- 临界区内存在进程,其他进程必须等待
- 临界区内的进程必须在有限的时间内退出,让等待的进程进入
3.3 信号量与PV操作
生产者——消费者模型是一个同步的问题
信号量:
- 用于表示物力资源的实体
- 是一种整型变量
- 主要用于封锁临界区、进程同步、维护资源计数
- 除了给定初值外,只能由原语P、V操作
- P、V操作可以保证原子性及信号量的完整性
- 既可以用于竞争,又可以用于协作
- P操作代表申请资源,会对信号量做减法
- 除此之外,P还可能导致进程挂起
- P操作的次序不当会导致死锁,V操作不会
- V操作代表归还资源,会对信号量做加法
- 除此之外,V还用于通知其他进程,唤醒被挂起的进程
![69179733e2006fabd5515571c0307161.png](https://i-blog.csdnimg.cn/blog_migrate/006e170908f2e84955fddb1c92bdda94.jpeg)
解决进程互斥问题
semaphore mutex;
mutex = 1;
cobegin
process Pi() {
P(mutex); 1-->0
/*临界区*/ P和V之间的就叫临界区
V(mutex); 0-->1
}
coend
解决生产者——消费者问题
图示的过程为,生产者生产一个产品,消费者就消费一个
生产者、消费者只有一个
![304568b7ddd590fda114b10d58376bd8.png](https://i-blog.csdnimg.cn/blog_migrate/e3bbc0d5824f0cf6492603c513640da6.jpeg)
多个生产者——消费者的问题
请注意,P(mutex)
必须在P(empty)
之后
![283758c3b34cbc2b48567c57f751a8cf.png](https://i-blog.csdnimg.cn/blog_migrate/eedd7d35b9be9f6f18f6c4f49fc07392.jpeg)
生产者进程中的P操作交换次序将导致死锁,即:
P(mutex);
P(empty);
若某时刻,缓冲区中已经存在k个产品,也就是满了,但是消费者此时没有来取走产品;
生产者将会按照如上的P次序,先占据缓冲区的控制权,然后发现满了,等待消费者取走;若此时,消费者回来取产品,发现缓冲区的控制权已经被生产者占据了,于是会等待生产者释放;
死锁就这么产生了,生产者、消费者互相等待对方
3.7 死锁
死锁指的是多个进程互相等待对方释放锁,导致自己一直处于阻塞状态。
上文提到过P操作的次序可能导致死锁
死锁产生的条件:
- 互斥,临界资源为独占性资源
- 占有和等待条件
- 不剥夺条件
- 循环等待条件
解决办法:
- 死锁防止
- 死锁避免
- 死锁检测和恢复
死锁防止策略:
- 破坏上面提到的4个死锁产生条件之一即可
死锁避免策略:
- 银行家算法(重点考察,引用:土豆洋芋山药蛋,教材上的太晦涩了)
概念:
当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。
如何判断是否处于安全状态,看下图:
![9c1b6a3420bbe8d6647fbe2d47f90fab.png](https://i-blog.csdnimg.cn/blog_migrate/57d312d221ca7d4fab2240f982528cc1.jpeg)
- 首先是银行家算法中的进程: 包含进程Pi的需求资源数量(也是最大需求资源数量,MAX) 已分配给该进程的资源A(Allocation) 还需要的资源数量N(Need=M-A)
- Available为空闲资源数量,即资源池(注意:资源池的剩余资源数量+已分配给所有进程的资源数量=系统中的资源总量)
假设资源P1申请资源,银行家算法先试探的分配给它(当然先要看看当前资源池中的资源数量够不够),若申请的资源数量小于等于Available,然后接着判断分配给P1后剩余的资源,能不能使进程队列中的某个进程执行完毕,若没有进程可执行完毕,则系统处于不安全状态,试探分配作废,让该进程继续等待。(即此时没有一个进程能够完成并释放资源,随时间推移,系统终将处于死锁状态)。
若有进程可执行完毕,则假设将它执行完毕并假设回收已分配给它的全部资源(剩余资源Available数量增加),并把这个进程标记为可完成;再继续判断队列中的其它进程,若所有进程都可如此执行完毕,则系统处于安全状态。并根据可完成进程的分配顺序生成安全序列。照着这个安全序列分配资源就不会出错。安全序列不唯一! 如此就可避免系统存在潜在死锁的风险。
课文习题:
练习题1:(教材原题)
![2a21516f827e07edc47b3e57bb3e8b82.png](https://i-blog.csdnimg.cn/blog_migrate/64ef10f8cbb020f21f74a311a435a188.jpeg)
练习题2:(来自网络)
![7d17d8faf1de769990331c2dd161683e.png](https://i-blog.csdnimg.cn/blog_migrate/4cb40b5b6a9ffcf13b17dec4e19a778a.jpeg)
死锁检测和恢复:(知道即可)
系统通过定时的运行死锁检测程序从而达到判断系统中是否存在死锁的目的;
检测方式:用下图的原理
![02bfb44f2b9c1eb2a11c2f12ee4ccebb.png](https://i-blog.csdnimg.cn/blog_migrate/bdfc47197b8b9dce56c8386fbc20f834.jpeg)
检测和恢复往往是同时使用的,恢复的方式有:
- 重启操作系统
- 撤销陷于死锁的所有进程
- 资源剥夺
- 进程回退
课后习题:
车船过桥问题:
![6993347726ae5fb76f2a6e4161b4d5db.png](https://i-blog.csdnimg.cn/blog_migrate/d2ccd452096d35a3da0d688adf62298c.png)
解答:
可能产生死锁,产生死锁的条件是:
- 驳船与汽车逆向行驶
- 驳船长度大于100米
- 车辆很多
防止死锁的办法:
- 静态分配:提前清空桥面,开启全部吊桥。
- PV操作
semaphore A = 1, B = 1;
cobegin
process ship() {
P(A);
吊起过A桥;
航行;
P(B);
吊起过B桥;
航行;
通过A桥;
V(A);
通过B桥;
V(B);
}
/*
反方向行驶才会有死锁,所以PV操作主要解决车子与船反向行驶的问题
*/
process car() {
P(B);
过B桥;
V(B);
过弯道;
P(A);
通过A桥;
V(A);
}
第四章 存储管理
内存空间分为两部分:
- 系统区
- 用户区
存储管理包含以下功能:
- 存储分配
- 地址映射
- 存储保护
- 存储共享
- 存储扩充
4.2 连续存储管理
固定分区存储管理:
又叫静态分区。
内存提前被划分为数目固定的分区,各分区大小不等;
每个分区中只装入一个作业;
多个分区中的作业可以并发执行,是最简单的多道程序设计的存储管理技术。
分区是连续的,作业可按顺序放入分区中。
固定分区可以解决单道程序运行在并发环境下不能与CPU速度匹配的问题;
缺点:
- 大作业可能无法装入
- 存在内存碎片
- 扩容困难
- 一开始就分配了分区的数目,这限制了多道程序的道数
(多道程序设计:多个作业同时进入内存,并启动交替计算)
可变分区存储管理:
又叫动态分区。
按照作业大小来划分分区;
作业装入的位置不固定;
分区的分配算法:
- 最先适应分配算法
- 下次适应分配算法
- 最优适应分配算法
- 最坏适应分配算法
- 快速适应分配算法
内存不足的存储管理技术:
- 移动技术:将内存中空闲的内存区域统一移动到一边以扩大空闲内存可可分配性;因为碎片太小的话什么都装不下,但是多个碎片汇集则有可能装下新进程。
- 对换技术
- 覆盖技术
4.3 分页存储管理
在分区存储的时代,每道程序要求占用内存的一个或多个连续存储区域,导致出现碎片。
分页的基本原理:允许程序存放到若干不相邻的空闲快中。
基本概念:
- 页面:表示逻辑地址,把逻辑地址分成大小相等的区,每个区叫作
页面
- 页框:表示物理地址,把物理地址分成大小相等的区,大小等于页面大小,每个区叫作一个
页框
或者一个物理块 - 逻辑地址格式:页号 + 页内位移(是连续的)
- 内存页框表:物理地址被划分成页框,用页框表记录各个页框(物理块)的信息
- 页表:页面与页框的对照表,页面通过页表可以找到它对应的页框是什么。存放于寄存器中(专用硬件)
物理地址 = 页框号 * 块长 + 页内位移
翻译快表:就是在cache里面做一个缓存,存放最近经常使用的页表,以加快计算速度(因为可以避免访问内存),在快表里面找不到才去访问内存。
每次访问内存后,需要将新内容放到快表中,若快表满了,则删除最先等级的页面,腾出空间。
分页存储空间分配与去配:
用位示图表示内存分配状况,分配前查看位示图,若不能分配则继续挂起进程,若可以,则修改位示图并占用内存。
4.4 分段存储管理
逻辑地址(段号,逻辑地址)
物理地址 = 段起始地址 + 位移d
物理地址 = 块号 * 块长 + d
原理:基于可变分区存储管理,以段为单位来划分和连续存放,为作业的各段分配一个连续内存空间,各段之间不一定连续。把进程的逻辑地址空间分成多段,每一段表示为:段号 + 段内位移
与分页的对比:
对比项分段分页表示信息的逻辑单位信息的物理单位内存划分是否可见可见、段长取决于用户程序,段长可变不可见,页面大小自动划分,页长固定起始地址的位置任意内存地址只能从页大小的整数倍地址开始源程序连接装配后的结果仍保持二维地址结构变成一维地址结构引入目的满足用户模块化程序设计的需求实现离散分配并提高内存利用率
分段是信息的逻辑单位,用户知道知道如何划分为段和段内位移,段长可由用户确定
4.5 虚拟存储管理
原理:把内存里面的数据对换道磁盘上,提高内存利用率,需要时再装入会内存中。
程序局部性原理(时间局部性 + 空间局部性)
页面装入策略:请页式、预调式
- 请页式:当产生缺页异常时装入
- 预调式:在使用页面前预先调入
页面清除策略:请页式、预约式
- 请页式:仅当一页被选中进行替换且其内容被修改过才把他写回磁盘
- 预约式:对于所有更改过的页面在需要替换之前把他们都写回磁盘
页面替换策略:(页面写回磁盘,需要一个好的淘汰算法)
- 局部替换:仅限于进程自己
- 全局替换:作用于整个系统
淘汰算法不好的话会导致刚刚淘汰的页面又要被再次重新调入,如此反复,导致系统经常在做页面调度,而不是执行计算任务,此现象叫“抖动”或者是“颠簸”。
减少抖动的方式:
- 增加页框数
- 挑选好的页面替换算法
- 改进程序结构(局部性要好)
缺页中断率:f = F / S + F
F:访问失败的次数
S:访问成功的次数
影响缺页中断率的因素:
- 内存页框数:进程所分得的块数越多,f越低
- 页面大小:页面大,f低
- 页面替换算法
- 程序特性:程序局部性越好,f越低
全局页面替换策略:
- 最佳页面替换算法
- 先进先出页面替换算法
- 最近最少使用替换算法
- 第二次机会替换算法
- 时钟页面替换算法
课后习题:
1.
![96131d4c0c46b03abba0625afa728829.png](https://i-blog.csdnimg.cn/blog_migrate/c2695c8f57df837f723f92a72697c440.jpeg)
一看就是分段式的题目,上分段式公式:
解答:物理地址 = 段号 + 逻辑地址(由段号可得起始地址/段首址)
计算过程为,先判断是否越界,没有越界再计算,如果越界还计算,即使答案正确,不给分!
越界会发生中断异常
- 逻辑地址430 < 段长600,所以没有越界;物理地址 = 219 + 430 = 649(同理判断了下面的题均无越界)
- 物理地址 = 1327 + 400 = 1727
- 物理地址 = 2300 + 1 = 2301
- 物理地址 = 90 + 50 = 140
- 物理地址 = 1952 + 4 = 1956
2.(此题与上一题类似,放到一起说)
![a9772ed1eca0ee8ab78bece3e6f1aca2.png](https://i-blog.csdnimg.cn/blog_migrate/dd7b59e2888fea5bb35ecc3f2cda6e94.png)
这是分页式的题目,上分页式公式:
解答:公式:物理地址 = 块号 * 块长 + 位移d
页面尺寸就是块长!他等于1KB = ,说明位移d要取逻辑地址的二进制表示的后10位
先吧(11123456)8 转成二进制:
11123456001001001010011100101110
位移d = 10,表明要从后往前取10位作为位移:1100101110
所以,最后的答案是:物理地址 = 块号 * 块长 + 位移d
= (100)8 * + (1100101110)2
将 结果化简转十六进制即可。
3.(此题与上一题类似,放到一起说)
![40a3a0ae687ab09701fd3ff59f586245.png](https://i-blog.csdnimg.cn/blog_migrate/6bc2078125306a06a3b7758afb4b7aa7.png)
出现了页框与页面,需要新的公式:物理地址 = 页框号 * 块长 + 位移d
解答:
由题目可得页表:
页面页框010112214
页面大小就是块长!4096B
= ,说明位移d要取逻辑地址的二进制表示的后12位
逻辑地址2F6AH
的二进制为:
2F6A0010111101101010
没有H,H表示十六进制
当然:位移d = 111101101010
2对应的0010
则表示页号,翻译为十进制就是2,2对应的页框是14
所以,最后的答案是:
物理地址 = 页框号 * 块长 + 位移d
= (14)10 * 2 + (111101101010)2
= EF6AH
4.
![5856399aedfd4c272145ed0e2c268b95.png](https://i-blog.csdnimg.cn/blog_migrate/9c381e06ae72181237fec2e006a61984.png)
解答:
逻辑空间大小为:16 * 2048B = 32768B = B,所以逻辑空间至少为15位
内存空间大小为:8 * 2048B = 16384B = 16KB,所以内存为16KB
(回忆一下,页框大小是等于页面大小的)
5.
![878cc08b6054374263cfe52c5afccc07.png](https://i-blog.csdnimg.cn/blog_migrate/b2eb00355aeb12b949cc8fbcd7044908.jpeg)
解答:
- 磁盘利用率这么高,而CPU低,说明IO频繁,可能存在“抖动”现象,即缺页;解决办法:读辅存
- 正常
- 闲置中;解决办法:安排计算任务
6.
![7be1d484178ce7869063e7cf25dba9ed.png](https://i-blog.csdnimg.cn/blog_migrate/39dd5bc02d4ec16f27036e089ee8a529.png)
解答:
物理地址 = 块号 * 块长 + 位移d
(0BEBCH)16 = (0000 1011 1110 1011 1100)2
页面大小4KB = ,取后12位为位移:1110 1011 1100
前面的自然就是页号:0000 1011,对应的十进制为11,相应的页框号为78
物理地址 = 块号 * 块长 + 位移d
= 78 * + (1110 1011 1100)2
= 4EEBCH
7.(押题)【且给出全新计算方式】
![62d9e29ad3f56e7b444590ce3ba976b9.png](https://i-blog.csdnimg.cn/blog_migrate/35b47de620addbbf910afbd8f46e90d8.jpeg)
解答:(以第一题为例)
1052 / 1024 = 1(取整):得到页号 ---> 退出页框为7
1052 % 1024 = 28 (取整):得到位移
物理地址 = 7 * 1024 + 28 = 7196
(以上计算均用十进制)
第五章 设备管理
设备管理应具备的功能:
- 设备中断处理
- 缓冲区管理
- 设备分配和去配
- 设备驱动调度
- 实现虚拟设备
IO系统指的是IO设备与IO控制软件
IO控制方式
- 轮询(又叫程序直接控制方式,CPU全程参与IO操作)
- 中断
- DMA(若CPU与DMA同时访问内存,CPU会让位,此现象称为“周期窃用”)
- 通道
- 他们之间的区别:CPU和设备并行工作的方式和程度不同
5.3 缓冲技术
为什么要用缓冲技术?
为了解决CPU与设备之间速度不匹配的问题;
提高CPU和设备的并行性;
减少IO操作对CPU的中断次数
在哪里使用缓冲区?
在内存中开辟一个存储区,专门用于存放临时IO数据
常用的缓冲技术:
- 单缓冲
- 双缓冲
- 多缓冲
5.4 驱动调度技术
驱动调度:很多请求要访问磁盘,需要一种调度请求的策略,能够按最佳次序执行要求访问的诸多请求。
磁盘是一种直接存取存储设备,又称随机存取存储设备,每条物理记录都有确定的位置和唯一地址。
文件信息通常并不记录在同一盘面的磁道上,而是记录在同一柱面的不同磁道上。
访问磁盘上一条物理记录需要三个参数:柱面号、磁头号、扇区号
优化分布:
![25bb2ac64f490752503b56fca43e7a65.png](https://i-blog.csdnimg.cn/blog_migrate/10b9e02ce26e833115027f77766f222c.png)
信息在存储空间中的排列方式如图所示,硬盘旋转一周耗时20ms,读出每块后耗时4ms处理,求10条记录全部读出的总耗时?
解答:假设信息从A开始读取,首次定位到A耗时10ms,则:
总时间 = 定位 + 读取 + 处理 + 剩余块 * (定位 + 读取 + 处理)
= 10 + 2 + 4 + 9 * (16 + 2 + 4)ms
= 214ms
说明:磁盘转一周耗时20ms,则读一块耗时2ms;读A再处理A后已经耗时6ms了,此时磁头转到了C结束D开始的位置,要想下一次再读B,必须再转8个扇区到达B的开始位置,然后继续操作,这个过程耗时8 * 2ms = 16ms;其余9个同样处理所以乘以9。
搜查定位:(又叫移臂调度,重点!)
先来先服务算法
磁盘臂的移动顺序与到达的请求次序一致,无优化,性能差。
最短查找时间优先算法
对于到达的各个请求,总是先执行查找时间最短的请求,也就是优先执行靠近磁头的请求。
存在饥饿现象:当靠近磁头的请求不断到达的时候,远离磁头的请求永远无法被执行。
扫描算法
移动臂每次向一个方向移动,扫过所有柱面,遇到最近的IO请求便处理,直达最后一个柱面后,再原路返回扫描一遍。
缺点是必须扫描到头
分步扫描算法
![ecb4f1b544bc7e4f8c390fd938487c0f.png](https://i-blog.csdnimg.cn/blog_migrate/242dd68ca8841d22f0b444801c877bdf.jpeg)
电梯调度算法(LOOK算法,它有多种算法但本书只讲这一种)
是扫描算法的改进,不会一直扫描到头,对LOOK算法而言,电梯同样在最底层和最顶层之间运行。但当LOOK算法发现电梯所移动的方向上不再有请求时立即改变运行方向。
循环扫描算法
跟扫描算法差不多,区别是,此算法里面磁头返回时,不提供服务,直接返回到头,然后从头开始提供服务。就像一个圆圈一样,一圈一圈的服务。
5.5 设备独立性
设备独立性指的是,系统不绑定到具体的物理设备,而是使用逻辑设备,由逻辑设备映射到物理设备。
试想,如果系统绑定到具体的物理设备,设备坏掉了,作业就无法完成,即使有可用的其他设备,你的作业是分配给了具体的物理设备,其他设备无法感知,所以需要逻辑设备的存在。
设备独立性的好处是:应用程序与具体的物理设备无关,系统变更设备时无需修改应用程序代码;易于处理IO故障
5.6 虚拟设备
两个概念:脱机外围操作和SPOOLing(假脱机操作)
![63357bf501a0dcc5da0e430f462086dd.png](https://i-blog.csdnimg.cn/blog_migrate/9961eda638323ae59304a5a8ab9b7d53.png)
![f5d17e5b1273920ce82028bae5e87406.png](https://i-blog.csdnimg.cn/blog_migrate/142ecb1ca5292724927218988f942dbb.jpeg)
必考题
问题:
A、B两个进程需要使用的物理设备是打印机与磁带机,用PV操作设计一个动态分配算法。
解答:
semaphore S = 1, C = 1;
Cobegin
process A() {
P(S);
使用打印机;
P(C);
使用磁带机;
V(S);
V(C);
}
process B() {
P(C);
使用磁带机;
P(S);
使用打印机;
V(C);
V(S);
}
Coend
接着问问题:
以上你写的PV操作是否存在死锁,若不存在说明原因,若存在给出解决死锁的办法
解答:
假设进程A占用打印机后被剥夺了CPU(打印机被锁住了),转而执行B进程,B进程会占用磁带机;B进程若继续执行,发现打印机被锁住了无法使用,B进程将被挂起;B进程若被A进程抢走CPU,A进程执行时会发现磁带机被B锁住了,A进程将会被挂起。
所以此时无论是B进程接着执行还是被A进程抢回CPU,两个进程均无法执行了,产生了死锁。
解决办法:
方案一:用完立即归还,例如下面这样:
P(S);
使用打印机;
V(S);
方案二:按序分配,例如必须先申请S再申请C。PV代码一致,只不过用到的设备按需求定
process A() {
P(S);
P(C);
使用打印机或磁带机;
V(S);
V(C);
}
process B() {
P(S);
P(C);
使用打印机或磁带机;
V(S);
V(C);
}
第六章到最后
不是考试重点(可能会接着更新。。)
PCB:进程控制块
JCB:作业控制块
FCB:文件控制块