中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即
- 硬件中断是由与系统相连的外设(比如网卡 硬盘 键盘等)自动产生的. 每个设备或设备集都有他自己的IRQ(中断请求), 基于IRQ, CPU可以将相应的请求分发到相应的硬件驱动上(注: 硬件驱动通常是内核中的一个子程序, 而不是一个独立的进程). 比如当网卡受到一个数据包的时候, 就会发出一个中断.
- 处理中断的驱动是需要运行在CPU上的, 因此, 当中断产生时, CPU会暂时停止当前程序的程序转而执行中断请求. 一个中断只能中断一颗CPU(也有一种特殊情况, 就是在大型主机上是有硬件通道的, 它可以在没有主CPU的支持下, 同时处理多个中断).
- 硬件中断可以直接中断CPU. 它会引起内核中相关代码被触发. 对于那些需要花费时间去处理的进程, 中断代码本身也可以被其他的硬件中断中断.
- 对于时钟中断, 内核调度代码会将当前正在运行的代码挂起, 从而让其他代码来运行. 它的存在时为了让调度代码(或称为调度器)可以调度多任务.
软中断
- 软中断的处理类似于硬中断. 但是软中断仅仅由当前运行的进程产生.
- 通常软中断是对一些I/O的请求.
- 软中断仅与内核相联系, 而内核主要负责对需要运行的任何其他进程进行调度.
- 软中断不会直接中断CPU, 也只有当前正在运行的代码(或进程)才会产生软中断. 软中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求.
- 有一个特殊的软中断是Yield调用, 它的作用是请求内核调度器去查看是否有一些其他的进程可以运行.
硬件中断和软中断的区别
- 硬件中断是由外设引发的, 软中断是执行中断指令产生的.
- 硬件中断的中断号是由中断控制器提供的, 软中断的中断号由指令直接指出, 无需使用中断控制器.
- 硬件中断是可屏蔽的, 软中断不可屏蔽.
- 硬件中断处理程序要确保它能快速地完成任务, 这样程序执行时才不会等待较长时间, 称为上半部.
- 软中断处理硬中断未完成的工作, 是一种推后执行的机制, 属于下半部.
第一章
操作系统的核心目标是运行程序,面向用户方便。面向系统高效
并行:多个作业同一时刻运行
并发:多个作业同一时间间隔依次运行
操作系统是管理软件和硬件的最底层软件,是资源分配器,是控制程序
绝大多数的操作系统具有共性,都包括CPU管理、内存管理、文件管理、设备管理等
系统调用(监督程序调用)是操作系统向应用程序提供服务的接口-----软件可通过执行这个特别操作,触发中断
CPU通过设备控制器控制设备运行的过程:
- 每个设备控制器有一个本地缓冲
- CPU 在内存和本地缓冲之间传输数据
- I/O 控制器从设备到本地缓冲之间传输数据
- 协作:控制器通过调用中断通知CPU完成操作
操作系统是中断驱动
多处理器系统:
- 非对称处理(主处理器控制其他处理器)
- 对称多处理:常用,各CPU相互独立
集群系统:
- 松耦合系统
- 多个计算机系统组成
- 特点:高性能、低成本、高可扩展性、高可靠性
- 由两个或多个独立的系统耦合起来,共享数据,松耦合,每个节点可为单处理器系统或多处理器系统
多道程序系统:目的:使得CPU和设备在所有时间内尽可能忙碌,从而提高CPU和设备的利用率,充分发挥计算机系统各个部件的并行性(使CPU总有一个作业可执行)
分时系统:用户等待交互结果(交互作业)
- 一般采用时间片轮转方式使一台计算机为多个用户服务
- 单位时间内,每个用户获得一个时间片并运行
- 保证用户获得足够小的响应时间,并提供交互能力
操作系统核心功能(确保操作系统能运行的关键技术):
- 双模式
- I/O和内存保护
- 定时器
操作系统的主要功能:
- 进程管理
- 内存管理
- 文件管理
- I/O设备管理
双模式允许OS保护自身和其他的系统部件不受故障的影响,需要CPU具有模式位
将可能引起损害的机器指令作为特权指令,只能运行在内核模式
系统调用:
- 比如printf(),需要调用系统调用write()
第二章
操作系统提供环境以便执行程序。
系统服务ᨀ供对用户有用函数:基本服务
● 用户界面 –形式有命令行界面(CLI)、图形用户界面(GUI)等
● 程序执行 – 将程序调入内存并运行
● I/O 操作 - I/O可能涉及文件或设备.
● 文件系统操作 - 程序需要读写文件和目录,创建删除文件,检索
● 通信 – 进程间可能需要交换信息
● 错误检测 – OS 需要知道可能出现的错误
操作系统通过共享计算机资源来提高效率:增值服务
● 资源分配 –多个作业并发运行时,系统为它们分配资源
● 统计 – 需要记录哪些用户使用了多少和什么类型的资源
● 保护和安全 –用户可能需要控制信息的使用 ! 保护:确保所有对系统资源的访问受控 ! 安全: 不受外界侵犯,延伸到外部I/O设备不受非法访问
系统调用:用户程序可以通过操作系统提供的服务接口调用系 统功能。
CLI:
- 获取并执行用户指定的命令
- 内核或系统程序实现
- 有时有多种实现方式-外壳
- 优点:简单、健壮、效率高
- 缺点:使用不方便,界面不美观
GUI:
- 优点:操作方便、界面直观、漂亮
- 缺点:效率差、不够健壮
一般认为用于管理、维护操作系统的程序是系统程序
简单结构:早期操作系统(规模小,简单,功能有限) MS-DOS,早期Unix
层次结构效率稍差,层定义困难,简化了系统设计和实现,便于调试和升级维护 每层只使用低层次的功能和服务
内核微型化:从核内移出尽可能多功能到用户空间(因为内核越来越大,难以管理,所以需要微型化)
-
优点: ● 便于扩充微内核 ● 便于移植操作系统到新架构系统上 ● 更稳定 (更少的代码运行在核心态) ● 更安全
-
缺点: ● 用户空间和内核空间通信的系统开销增加
-
解决方法: 提出消息传递机制
模块结构:模块可以在需要时加载到内核
- 使用面向对象方法
- 每个核心部件分开多个模块
- 每个与其他组件(模块)的会话被称为接口
- 每个组件(模块)在需要时被加载到内核
- 类似于分层,但更灵活
- 优点: ● 模块可以在需要时加载到内核 ! 类似于硬件的即插即用技术 ● 用户可以自己设计模块并装入系统
虚拟机通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
虚拟机实现的三种途径 • 高级语言虚拟机 • 工作站虚拟机 • 服务器虚拟机
- 高级语言虚拟机主要功能是提供一个代码运行的容器 ,并模拟代码的执行,使得代码能够跨平台运行。
- 工作站虚拟机建立在操作系统之上,是操作系统中的 操作系统,也称为Guest OS(客户操作系统),目的 是多个操作系统可以同时在一个计算机上使用。
- 服务器虚拟机目的是把一个物理计算机虚拟化为多个 虚拟机,使得多用户、多操作系统在一个物理计算机 上并存。安全性好 • 资源共享 • 可扩展性好 • 便于隔离 • 性价比高
第三章
进程是操作系统执行CPU调度和资源分配的单位
进程=代码+数据+运行环境 (程序计数器、堆栈、数据、堆)
-
进程是活动实体,程序是静止实体。
-
进程是程序的一次执行。
-
进程在内存,程序在外存。
-
程序是进程的代码部分
PCB:
- 进程状态
- 进程号
- 程序计数器
- CPU寄存器
- CPU调度信息
- 内存管理信息
- 记账信息
- IO状态信息
父进程与子进程:
资源:
-
共享所有资源
-
子进程共享父进程资源的子集
-
父进程和子进程无资源共享
执行:
- 并发执行
- 父进程等待,直到子进程终止
地址空间:
- 子进程是父进程的复制品
- 子程序加载另一个新程序
进程终止:
- 从子进程向父进程输出数据(通过wait)
- 操作系统收回进程的资源
父进程可中止子进程的执行(abort)
- 子进程超量分配资源
- 赋予子进程的任务不再需要
- 父进程结束–级联终止
原子操作:
- 也称为操作原语
- 操作系统内核中
- 不能被打断,要么成功,要么失败
- 有创建进程原语、撤销进程、阻塞进程、唤醒进程
进程调度器:分时系统的目的是在进程之间切换CPU
上下文切换:切换CPU到另一个进程需要保存当前进程状态和恢复另一个进程的状态
独立进程、协同进程
进程协同的优点:
- 信息共享
- 加速运算
- 模块化
- 方便
进程间通信的两种基本模型:
- 共享内存:以最快的速度 进行方便的通信
- 一块内存在多个进程间共享
- 通信由应用程序自己控制
- 一般用于大数据通信
- 实现手段:文件映射、管道、剪贴板
- 消息传递:交换较少数量 的数据
- 消息传递在微内核中的应用
- 远程通信无法采用共享内存
- 两个原子操作 : ● 发送send(message) - 固定或可变大小消息 ● 接收receive(message)
直接通信:
- 进程必须显式的命名接受者和发送者
- 连接自动建立
- 连接精确地与一对通信进程相关
- 在每一对通信进程间存在一个连接
- 连接可单向,但通常双向
间接通信:
- 消息导向至信箱并从信箱接收
- 每一个信箱有一个唯一的id
- 仅当共享一个信箱时进程才能通信
- 通信连接的特性
- 仅当进程共有一个信箱时连接才能建立
- 连接可同多个进程相关
- 每一对进程可共享多个通信连接
- 连接可是单向或双向的
消息传递可阻塞(blocking)或非阻塞(non -blocking),也称为同步或异步
第四章
资源分配的基本单位----进程
线程是基本调度单位
引入线程的原因:
- 进程是重量级的,负载了程序运行的所有内容,进程操 作开销大
- 进程代码有并行执行的需求
- 多核处理器已经是主流硬件
线程自己不拥有完整的系统资源,通过进程申请资源
线程的结构:
- 代码和数据:来自进程
- 各类资源:来自进程
- 线程控制块
- 线程ID
- 线程计数器PC
- 寄存器集
- 栈空间
多线程编程的优点:
- 响应性:开销小,速度快
- 资源共享
- 经济:线程创建、上下文切换比进程快
- 可伸缩性
用户线程:由用户线程库进行管理的线程
内核线程::内核进行管理的线程
多对一模型:
- 不支持内核线程的操作系统 ,内核只有进程
- 多个线程不能并行运行在多个处 理器上(缺点)
- 进程中的用户线程由进程自己 管理
- 进程内线程切换不会导致进程切 换(优点)
- 一个线程的系统调用会导致整个 进程阻塞
一对一模型:
- 用于支持线程的操作系统 ,用户线程映射到内核线程 ,操作系统管理这些线程
- 并发性好:多个线程可并行运行在多个处理器上
- 内核开销大
多对多模型:
- 多个用户线程映射为相等或更小数目的内核线程
- 并发性和效率兼顾
- 增加复杂度
线程库: 为程序员提供了创建和管理线程的API
- 用户库:存在于用户空间 / 不需要内核支持 / 调用线程库不会产生系统调用
- 内核库:存在于内核 / 操作系统支持 / 调用线程库会产生系统调用
Java 线程由JAVA虚拟机JVM管理 :
- JAVA线程操作系统不可见
- 定义了创建和操纵线程的一整套API
- 跨操作系统平台
JAVA创建线程的两种技术:
- 扩展java.lang.Thread类
- 实现Runnable接口
隐式线程:新方法:由编译器或运行库创建或管理线程
- 线程池
- OpenMP
- 大中央调度
第五章
CPU调度是多道程序操作系统的基础
长程调度:
- 从新建状态转换到就绪状态的操作就是长程调度,又称为作业调度 或高级调度
- 控制进程数量
- 频率低、速度慢、开销大
短程调度:
- 又称为CPU调度或低级调度
- 就绪转到运行
- 频率高、速度快、开销小
中程调度:
- 又称为交换
作业队列(job queue) - 在系统中的所有进程的 集合
就绪队列(ready queue) - 在主内存中的,就绪 并等待执行的所有进程的集合
设备队列(device queue) - 等待某一I/O设备的 进程队列
调度程序:
- 切换上下文
- 切换到用户模式
- 跳转到用户程序的合适位置,以便重新启动程序
非抢占式调度 :
-
优点:容易实现,调度开销小,适合批处理系统
-
缺点:响应时间长,不适合交互式系统
抢占式调度 :
- 可防止单一进程长时间独占CPU
- 系统开销大
指标:
- CPU利用率 – 固定时间内CPU运行时间的比例
- 吞吐量 – 单位时间内运行完的进程数
- 周转时间 – 进程从提交到运行结束的全部时间
- 等待时间 – 进程等待调度(不在运行)的时间片总和
- 响应时间 – 从进程提出请求到 首次被响应[而不是输出结果]的 时间段[在分时系统环境下] ,也就是第一段的等待时间
- 周转时间=等待时间+运行时间
- 带权周转时间—周转时间/运行时间
FCFS:
- 实现简单,可使用FIFO队列实现
- 非抢占式调度
- 公平
- 适用于长程调度,后台批处理系统的短程调度
- 对长CPU脉冲的进程有利,对短CPU脉冲的进程不利
SJF:
- 调度策略:关联到每个进程下次运行的CPU脉冲长度, 调度最短的进程
- 有抢占式和非抢占式
- SJF最优–具有最短的平均等待时间
- 饥饿(Starvation):长进程可能长时间等待
优先级调度:
- 问题: 饥饿 – 低优先级的可能永远得不到运行
- 解决方法:老化 – 视进程等待时间的长提高其优 先数
RR:
- 每个进程运行时间长度为一个时间片。时间片用 完后,该进程将被抢占并插入就绪队列末尾
多级队列:
- 允许系统中存在多个就绪队列,每个就绪队列有自己的 调度算法
- 需要确定就绪队列的数量
- 需要确定新进程进入哪个队列
- 需要确定每一个队列的调度算法
多级反馈队列算法的核心是进程在运行过程中,能在不同队 列间移动
反馈队列比多级队列更多需要的参数:
- 决定进程升级的方法(低级队列到高级队列)
- 决定进程降级的方法(高级队列到低级队列)
第六章
竞争条件: 多个进程并发访问和操作同一数据的情况。共享 数据的最终结果取决于最后操作的进程
为防止竞争条件,并发进程同步或互斥
同步:对多个相关进程在执行次序上进行协调,使 并发执行的进程间能有效地共享资源和相互合作, 使程序执行具有可再现性,保证数据一致性
互斥:进程排他性地运行某段代码,任何时候只有 一个进程能够运行
系统中某些资源⼀次只允许⼀个进程使⽤,称这样的资源为 临界资源或互斥资源或共享变量
涉及到临界资源的代码段叫临界区
临界区使用准则:
- 互斥
- 有空让进
- 有限等待
操作系统通常区分计数信号量和二进制信号量
记录型信号量的改进在于通过加入了阻塞和唤醒机制 ,消除了忙等 :
Wait(semaphore *S)
{
S->value–;
if (S->value < 0)
{ add this process to list S->list;
block();
}
}
Signal(semaphore *S) {
S->value++;
if (S->value <= 0) {
remove a process P from list S->list;
wakeup§;
}
}
typedef struct {
int value;
struct process *list;
} semaphore
死锁和饥饿
一个管程定义了一个数据结构和能为并发进程所执行(在该数据 结构上)的一组操作,这组操作能同步进程和改变管程中的数据
题目:
- 为什么要在设备管理种引入缓冲技术?
答:(1)缓和CPU与IO设备间速度不匹配的矛盾
(2)减少对CPU的中断频率
(3)提高CPU与I/O设备之间的并行性
- CPU调度可能发生的时机有哪些?
答:从运行转到等待
运行转到就绪
从等待转到就绪
终止运行
-
操作系统的主要部件有哪些?
答:进程管理
主存管理
二级储存器管理
I/O系统管理
文件管理
保护系统
网络处理
命令解释器系统
-
在信号量S上执行P、V操作时,S的值发生变化,当S>0,S=0,S<0时,它们的物理意义是什么?P(S)、V(S)的物理意义又是什么?
答:S>0: 有资源可用;
S=0:没有资源可用;
S<0:有进程在等待资源;
P(S):当有S资源可用时,S减一;如果没有S资源可用时,阻塞当前进程;
V(S):当资源不再使用时,S加一;如果有进程因为等待当前资源而阻塞,需要唤醒他们。
-
什么是与设备无关性?有什么好处?
答:
为了提高OS的可适应性和可扩展性,在现代OS中都毫无例外地实现了设备独立性,也称设备无关性。
基本含义:应用程序独立于具体使用的物理设备。为了实现设备独立性而引入了逻辑设备和物理设备两概念。
在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。
优点:
设备分配时的灵活性
易于实现I/O****重定向(用于I/O操作的设备可以更换(即重定向),而不必改变应用程序。
-
一个进程状态的转换是否会导致另一个进程的状态转换,请列出所有的可能?
新建到就绪导致运行到就绪
就绪到运行导致无
运行到就绪导致就绪到运行
运行到等待导致就绪到运行
等待到就绪导致就绪到等待
运行到结束导致就绪到运行
第七章
等待进程有可能再也无法改变状态,称为死锁
引起死锁的原因:
- 竞争互斥资源
- 进程推进不当
死锁的必要条件:同时出现4个条件,死锁将会发生
- 互斥:至少有一个资源必须处于非共享模式
- 占有并等待:一个至少持有一个资源的进程等待获得额外的由其他进程所持有的资源
- 非抢占:资源不能被抢占
- 循环等待
资源分配图:
- 顶点集合V:进程结点P,资源结点R
- 申请边,P---->R
- 分配边
分配图无环,无死锁;有环,可能死锁
每个资源类型只有一个实例,有环必定死锁
每个资源有多个实例,有环有可能死锁
处理死锁的方法:
- 死锁预防
- 死锁避免
- 死锁检测
- 死锁恢复
死锁预防:副作用 降低了设备使用率和系统吞吐量
- 互斥:
- 非共享资源必须有互斥条件
- 虚拟化技术将互斥资源改造为共享资源
- 占有并等待
- 必须保证进程申请资源的时候没有占有其他资源
- 静态分配策略(要求进程在执行前一次性申请全部的资源)
- 进程只有没有占有资源时才可以分配资源
- 非抢占:
- 如果一个进程的申请没有实现,他要释放所有占有的资源
- 被抢占的资源放入进程等待资源列表中
- 进程在重新得到旧的资源的时候可以重新开始
- 循环等待:
- 对所有的资源类型排序进行总排序,并且要求进程按照 递增顺序申请资源
- 设计一个完全排序方法并不能防止死锁,而要靠应用程 序员来按照顺序编写程序
死锁避免:需要系统有一些额外的信息
- 一个简单而有效的模型要求每一个进程声明它 所需要的资源的最大数
- 死锁避免算法动态检查资源分配状态以确保不 会出现循环等待的情况
- 资源分配状态是由 可用的与已分配的资源数 ,和进程所需的最大资源量 决定的。
如果一个系统不是处于安全状态,就有可能死锁
避免算法:
- 单实例算法(资源分配图算法)
- 银行家算法
银行家算法:
- Need [i,j] = Max[i,j] – Allocation [i,j].
死锁检测:
- 每一种资源类型只有一个实例:
- 定期调用算法来检查是否有环
- 一个检查图中是否有环的算法需要n2的操作来进行,n为图 中的节点数,即进程数‘
- 多个实例:找出一个安全序列
死锁恢复:
- 发现死锁后的措施
- 人工处理
- 自动恢复
- 进程终止:中断所有的死锁进程 / 一次中断一个进程直到死锁环消失
- 抢占资源:把抢占的资源分配给其他进程使用,直到死锁循环被打破 为止
- 选择牺牲进程:代价最小
- 回退
- 饥饿:同样进程的可能总是被选中-----解决算法:在代价因素中加入回滚次数
第八章
CPU可以直接访问的存储器只有主存和寄存器
在读取内存数据时,CPU空闲----------解决方案:在内存和CPU之间,增加高速内存来协调速度差异, 这种内存缓冲区称为高速缓存Cache
内存保护需要保证正确的操作(操作系统内核不被用户进程访问)
独立运行内存空间:
- 基址寄存器:进程最小的合法物理内存地址
- 界限寄存器:进程地址的长度
- CPU在执行指令时,需要进行地址合法性验证
逻辑地址:CPU生成的地址,相对地址
物理地址:内存单元看到的地址(加载到内存地址寄存器的地址),绝对地址
有程序所产生的所有逻辑地址的集合称为逻辑地址空间
与逻辑地址所对应的所有物理地址的集合称为物理地址空间
内存管理单元MMU是把虚拟地址映射到物理地址的硬件,是CPU用来管理内存的控制线路
用户程序所对应到的是逻辑地址,物理地址对它从来都不可见
动态加载:
- 例程在调用之前并不加载
- 优点
- 更好的内存空间利用率
- 没有被使用的例程不被载入
- 当需大量代码来处理不经常使用的功能时非常有用
和各种库文件的链接被推迟到执行时期,称为动态链接技术
交换:一个进程可以暂时被交换(swap)到内存外的一个备份区 ,随后可以被换回内存继续执行
内存管理的目的:
- 提高内存利用率
- 提高指令执行速度
- 保证指令安全执行
内存管理的功能:
- 内存分配
- 内存回收
- 地址绑定
- 存储保护
- 存储共享
存储分配算法:在速度和存储空间的利用上,首次适应和最佳适应要好于最差适应。
- 首次适应:分配最先找到的合适的分区
- 最佳适应:搜索整个序列,找到适合条件的最小的分区进行分配
- 最差适应:搜索整个序列,寻找最大的分区进行分配
外碎片 –整个可用内存空间可以用来满足一个请求,但它不 是连续的
可通过紧缩来减少外碎片:
- 把一些小的空闲内存结合成一个大的块。
- 只有重定位是动态的时候,才有可能进行紧缩,紧缩在执行时期进行
分页
内存管理方案允许进程逻辑地址空间不连续
基本方法:
- 把物理内存分成大小固定的块,称为帧(Frame),也叫页框
- 把逻辑内存也分位固定大小的块,称为页(Page)
- 帧和页的大小是由硬件决定的,通常为2的幂,根据计算机结构不同大 小不同,早期:512B-8KB,现在:4KB-64KB
采用分页技术不会产生外碎片,因为每个帧都可以分配给进程
分页有内碎片,进程请求的内存可能不是页的整数倍,因此最后一 帧中可能存在多余的内存空间
页表被保存在内存中
在这个机制中,每一次的数据/指 令存取需要两次内存存取,一次是 存取页表,一次是存取数据/指令
解决两次存取的问题,是采用小但 专用且快速的硬件缓冲,这种缓冲 称为转换表缓冲器(TLB)或联想寄 存器或快表
命中率—在联想寄存器中找到页号的百分比,比率与联想寄 存器的大小有关
有效访问时间 (EAT),根据概率对每种情况进行加权得到, 类似于平均访问时间
联想寄存器的查找需要时间单位a微秒
假设内存一次存取需要b微秒
EAT = λ (a + b) + (1 – λ) (a+2b)
内存保护:通过与每个帧相关联的保护位来实现,这些位保存在页表中,有效-无效位附在页表的每个表项中
共享页:分页的优点:可以共享公共代码
分段:支持用户观点的内存管理机制
逻辑地址空间是由一组段组成的,每个段都有名称和 长度,地址指明了段名称和段内偏移
可采用可变分区方案实现
内存分配:
- 首先/最佳适应法
- 外碎片问题
重定位:
- 动态
- 有段表来执行
共享:
- 段是逻辑上有意义的单位
- 实现更方便
- 比页共享更容易实现
第九章
一个程序只有部分代码需要装入内存进行运行,整个程序不是同一时间都要运行。
部分装入程序可以提高cpu利用率,运行程序更快速
虚拟存储器最大实际容量= min(计算机地址,内存+辅存)
虚拟存储技术:当进程运行时,先将其一部分装入内存, 另一部分暂留在磁盘,当要执行的指令或访问的数据不在 内存时,由操作系统自动完成将它们从磁盘调入内存执行。
虚拟内存——区分开物理内存和用户逻辑内存:
- 只有部分运行的程序需要在内存中
- 逻辑地址空间能够比物理地址空间大
- 必须允许页面能够被换入和换出
- 允许更有效的进程创建
虚拟存储器的 大小由2个因素 决定:
- 操作系统字长
- 内存外存容量
虚拟内存:
- 虚拟页式
- 请求分页
- 预调页
- 虚拟段式
有效-无效位
颠簸:一个进程的页面经常换入换出——原因:系统内存不足,页面置换算法不合理
如果一个进程没有足够的页,那么缺页率将很高,这将导致:
- CPU利用率低下
- 操作系统认为需要增加多道程序设计的道数
- 系统中将加入一个新的进程
通过局部置换算法可以限制系统颠簸
如果缺页率太低,回收一些进程的页框
如果缺页率太高,就分给进程一些页框
颠簸后面的内容考不考
第十章
文件:
- 文件是计算机中信息存储的基本组织形式
- 具有文件名的相关信息集合
操作系统和应用程序决定了文件的结构
为什么要有打开文件操作?:
- 方便文件共享
- 提高文件存取效率
目录是逻辑文件和物理文件之间的桥梁
顺序访问:磁带
直接(随机)访问:磁盘
顺序文件:
- 优点:记录存储紧凑,节省存储空间
- 缺点:访问效率差
直接(随机)文件:
- 优点:访问效率高,可以直接定位到某条记录
- 缺点:浪费存储空间
索引文件集合两者优点
文件控制块FCB存放各类文件属性信息
目录
- 包含着所有文件信息的节点集合
- 根据文件名检索文件的桥梁
- 目录项的有序集合
目录项
-
存放一个文件的各类属性
-
有的系统等同于文件控制块
每个目录项中存放了文件在存储设备的存放地址
目录负责把文件名转换为文件在存储设备上的位置,这个根据文 件名找文件存储位置信息的过程,就是文件检索
检索一个文件需要平均读入的块数=(ds*n/b+1)/2:b为物理块大小
由于物理块大小固定,想要降低读书物理块数有两个途径
- 降低 ds,降低目录项大小 ———— 降低物理块数
- 降低 n,降低文件数 ———— 降低物理块数
一般而言,一个目录中文件越多则文件访问的性能越差
两种文件共享方式:
-
符号链接(软链接)例子:快捷方式
-
硬链接:创建新i node,指向目录项,i node存在物理块中,这样需要的物理块就少
目录结构:
- 单层目录
- 结构简单
- 效率差,不能有同名文件,不能分组
- 双层目录
- 不同用户文件可以分组
- 提高效率
- 可以相同文件名
- 统一用户无法分组,相同文件名
- 树形目录
- 检索高效
- 可以分组,允许重名
- 无环图目录
- 可以实现树形目录不能实现的文件共享
- 通用图目录
第十一章
文件系统:
- 操作系统中负责管理和存储文件信息的模块
- 在存储设备上组织文件的方法和数据结构
- 系统角度:目标:存取速度和存储空间效率
- 用户角度:目标:方便的文件存取机制
内存文件系统:
- 目的:通过缓冲技术提高文件系统性能
- 文件操作需要用到内存文件系统
第十二章
磁盘容量=2 x 盘片个数 x 磁道个数 x 扇区个数 x 扇区容量
平均寻道时间:1/3 磁道移动(1-4ms)=1/3*磁盘移动一个磁道距离的时间 x 磁道数
RPM:每分钟旋转次数
旋转延迟:(平均需要转半圈)1000/(RPM/60)*1/2
- 1000是为了转换成毫秒
磁盘访问时间=随机访问时间(寻道时间+旋转延迟时间)+传输时间+系统开销时间
引入磁盘调度的目的是为了降低磁盘访问时间,提高文件系 统的效率(寻道时间最小化)
磁盘调度算法:
- FCFS:简单公平易实现,效率低
- SSTF:最短寻道时间优先算法
- 寻道距离短
- 存在饥饿
- 磁头频繁变换方向
- 增加寻道时间
- SCAN:先朝一段移动,到达一段再反向
- C-SCAN:0道–>内道处理,从199直接到0[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b6R8qKmx-1616301824753)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20210110100812461.png)]
- C-LOOK:只移动到最远请求,不到199也不到0[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0tsdPcC-1616301824754)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20210110100934332.png)]
RAID01 :
- 先做分散,再做镜像
- 性能好
- 但是一个磁盘的故障会导致 一条磁盘带不能访问
RAID10:
- 先做镜像,再做分散
- 可靠性好,一个磁盘的故障 不会影响其他磁盘
第十三章
IO系统的主要任务:
- 完成用户ᨀ出的I/O请求
- 提高I/O速率
- 改善I/O设备的利用率
IO具有设备独立性,引入逻辑设备和物理设备概念,类似于逻辑地址和物理地址
引入缓冲区的理由:
- 解决设备之间的速度差异
- 协调传输数据大小不一致
- 支持应用程序I/O的“复制语义”
期末复习
综合题:
- 进程调度算法
- 同步问题
- 死锁
- 页面置换算法
简答题:
-
死锁四个必要条件(必考)
- 互斥:至少有一个资源必须处于非共享模式
- 占有并等待:一个至少持有一个资源的进程等待获得额外的由其他进程所持有的资源
- 非抢占:资源不能被抢占
- 循环等待:P0等P1,P1等P2……Pn等P0
-
信号量大题
-
死锁算法:7.12、7.13
- 单实例算法:请求边转换为分配边之后不会导致环存在
- 银行家算法:Need [i,j] = Max[i,j] – Allocation [i,j].
-
地址绑定:在程序装入内存时,把程序中的相对地址 转换为内存中的绝对地址的过程
-
逻辑地址物理地址计算
-
外碎片:在程序装入内存时,把程序中的相对地址 转换为内存中的绝对地址的过程。处理方法:通过紧缩来减少外碎片,即将小的空闲内存合成一个大的快
-
内碎片:分配的内存可能比申请的内存大一点,这两者之间 的差别是在分区内部,但又不被使用
-
分段,分页,连续分配……的特点:见第八章作业
-
连续分配:优点:简单高效率直接寻址。缺点:内存利用率低,有内碎片
-
分页:计算见第8章书后作业
-
可以共享公共代码
-
不会有外碎片,因为每个帧都可以分配,
-
但是会有内碎片,请求的内存可能不是页的整数倍。
-
想要解决两次内存存取问题,可使用快表TLB
-
-
分段:
- 支持用户观点,符合用户习惯
- 方便, 内存动态增长
- 共享实现更方便,比页共享更容易实现
- 有外碎片问题
-
-
快表、页表时间(综合题中有、多级页表):见习题8
-
系统抖动原因,解决办法
- 原因:系统内存不足,页面置换算法不合理
- 解决办法:
- 局部置换算法:如果一个进程开始颠簸,那么它不 能置换其他进程的页框
- 工作集模型
- 缺页率策略:设置可接受的策略
-
虚存请求分页性能:(见习题9)
- EAT=(1-p) x 内存访问时间+p*页错误时间
-
虚存的好处:
- 不再受物理内存容量所限制,简化编程
- 可以同时运行更多程序,增加CPU利用率
- IO变少,程序运行更快
- 系统库可以为多个程序共享
- 虚拟内存允许进程共享内存
- 加快进程创建
-
页面置换算法必考
- 最优置换算法(OPT)难以实现
- FIFO
- 最近最少使用置换算法(LRU)
-
如何提高TLB命中率
- 增加TLB的条目数目
- 使用不同大小的页
- 增加页的大小
-
目录形式,几级目录计算
-
文件系统实现
-
大容量存储计算题
-
文件系统分配方式有哪些,什么特点
- 连续分配
- 每个文件在磁盘上占用一组连续的物理块
- 可直接访问指定块号的物理块
- 存取速度快
- 浪费空间
- 不能动态增长
- 不利于插入删除,移动数据
- 链接分配
- 离散存放,提高磁盘利用率
- 动态扩充文件大小
- 便于插入和删除
- 无法随机访问,访问慢
- 可靠性差
- 隐式链接指针跟着物理块存放,显式链接将指针全部集中存放到一张链接表中,大大提高了检索速度
- 索引分配
- 索引块:存放指 向文件每个物理 块块号的物理块
- 支持随机访问
- 离散存放,没有碎片
- 需要额外空间
- 磁盘访问时间增加
- 多级索引:大文件单极索引无法实现
- 连续分配
-
空闲空间管理
- 空闲表:连续的未分配的物理块集合
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0svXYltv-1616301824755)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20210109214657435.png)]
- 适用于连续分配
- 需要额外空间来存放空闲表
- 空闲链表:将所有空闲块链接在一个链表里
- 不需要额外空间
- 增加IO操作,得到连续空间难
- 位示图
- 块号k=i*8+(7-j)
- i = [ k/8 ]
- j= 7 - k%8
- 成组链接:结合了空闲表和空闲链表
- 空闲表:连续的未分配的物理块集合
-
磁盘访问时间计算:见习题
-
调度算法,小题:书和习题看一遍
-
RAID结构:RAID把很多价格较便宜的磁盘组合成一个大容量的磁盘组,利用 个别磁盘ᨀ供数据所产生加成效果ᨀ升整个磁盘系统效能和可 靠性。
-
IO:CPU如何与IO交换
-
IO控制方式
-
轮询:
- 由CPU代表进程给I/O模块发I/O命令,询问设备是否忙
- 不忙即进行I/O,否则重复前面过程,直到操作完成才 继续执行
- 实现容易,效率低下
- CPU会长期处于忙等
-
中断
- CPU执行完每条指令后,检测IRL
- 如检测到信号,CPU保存当前状态,并跳转到中断处 理程序。
- 执行中断处理程序
- 执行完后,清除中断,返回
-
直接内存访问:绕过CPU,直接在I/O设备和内存之间传输数据
-
-
假脱机
-
13章作业问答题
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rFrdgoiL-1616301824757)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20210114082700654.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INpe79Zg-1616301824758)(file:///E:\qq\995592969\Image\C2C{56EE18F4-4A7E-3525-AB15-9B83690366A8}.jpg)]
的物理块
- 存取速度快
- 浪费空间
- 不能动态增长
- 不利于插入删除,移动数据
-
链接分配
- 离散存放,提高磁盘利用率
- 动态扩充文件大小
- 便于插入和删除
- 无法随机访问,访问慢
- 可靠性差
- 隐式链接指针跟着物理块存放,显式链接将指针全部集中存放到一张链接表中,大大提高了检索速度
-
索引分配
- 索引块:存放指 向文件每个物理 块块号的物理块
- 支持随机访问
- 离散存放,没有碎片
- 需要额外空间
- 磁盘访问时间增加
- 多级索引:大文件单极索引无法实现
-
空闲空间管理
- 空闲表:连续的未分配的物理块集合
- [外链图片转存中…(img-0svXYltv-1616301824755)]
- 适用于连续分配
- 需要额外空间来存放空闲表
- 空闲链表:将所有空闲块链接在一个链表里
- 不需要额外空间
- 增加IO操作,得到连续空间难
- 位示图
- 块号k=i*8+(7-j)
- i = [ k/8 ]
- j= 7 - k%8
- 成组链接:结合了空闲表和空闲链表
- 空闲表:连续的未分配的物理块集合
-
磁盘访问时间计算:见习题
-
调度算法,小题:书和习题看一遍
-
RAID结构:RAID把很多价格较便宜的磁盘组合成一个大容量的磁盘组,利用 个别磁盘ᨀ供数据所产生加成效果ᨀ升整个磁盘系统效能和可 靠性。
-
IO:CPU如何与IO交换
-
IO控制方式
-
轮询:
- 由CPU代表进程给I/O模块发I/O命令,询问设备是否忙
- 不忙即进行I/O,否则重复前面过程,直到操作完成才 继续执行
- 实现容易,效率低下
- CPU会长期处于忙等
-
中断
- CPU执行完每条指令后,检测IRL
- 如检测到信号,CPU保存当前状态,并跳转到中断处 理程序。
- 执行中断处理程序
- 执行完后,清除中断,返回
-
直接内存访问:绕过CPU,直接在I/O设备和内存之间传输数据
-
-
假脱机
-
13章作业问答题
-
[外链图片转存中…(img-rFrdgoiL-1616301824757)]
-
[外链图片转存中…(img-INpe79Zg-1616301824758)]