序言
个人感觉操作系统记忆背诵的知识点多杂,因而写下这篇blog方便自己记忆背诵。
第1章 引论
操作系统分类
1. 无操作系统的计算机系统
2. 单道'批处理系统'
监督程序:相当于早期操作系统,负责将磁盘中程序调入内存,以及将内存中的程序交给CPU处理。3. 多道'批处理系统'
'一个'。
微观而言,在任一特定时刻,在处理机上运行的作业只有4. '分时系统'
在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户共享主机中的资源,每个用户都可通过自己的终端以交互方式使用计算机。5. '实时系统'
统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。6. 微机操作系统
/M,MS-DOS、Windows 95/98、Solaris OS、Linux OS、Windows、NT/Server
例如:CP7. 嵌入式操作系统
/OS-II、嵌入式Linux、Windows、Embedded、VxWorks、Android、iOS
例如:µC8. 网络操作系统
9. 分布式操作系统
基于软件实现的一种多处理机系统,是多个处理机通过通信线路互连而构成的松耦合系统。 例如:万维网、鸿蒙OS

分时操作系统
操作系统的基本特征
1.'并发'
两个或多个事件在同一时间间隔内发生 '多核'CPU:'并行':两个或多个事件在同一时刻发生
2.'共享'
系统中的资源可供内存中多个并发执行的进程共同使用3.'虚拟'
\虚拟存储
虚拟处理机、虚拟设备4.'异步'
进程是以人们不可预知的速度向前推进的
操作系统内核
支撑功能:1. 中断处理
2. 时钟管理
3. 原语操作
要么不做,要么全做,不可分割。(不可中断)
双重工作模式
1. '内核态'(管态、系统态)
在内核态下运行的指令2. '用户态'(目态)
在用户态下运行的指令

单道处理与多道处理

操作系统概况小结
1.定义
1.操作系统是控制和管理计算机系统内各种'硬件'和'软件'资源、有效地组织多道程序运行的'系统软件'(或程序集合),是'用户'与'计算机'之间的接口。
2.分类
1.根据服务对象不同,常用的处理机操作系统主要分为如下三种类型:允许多个用户在其终端上同时交互地使用计算机的操作系统称为'分时操作系统',它通常采用'时间片轮转策略'为用户服务;
2.允许用户把若干个作业提交计算机系统集中处理的操作系统称为'批处理操作系统',衡量这种系统性能的一个主要指标是'系统的吞吐率';
3.在'实时操作系统'的控制下,计算机系统能及时处理由过程控制反馈的数据并作出响应。设计这种系统时,应首先考虑系统的'实时性'和'可靠性'
3. UNIX 系统是'分时操作系统',DOS 系统是'单用户操作系统'。
4. 现代操作系统通常为用户提供三种使用界面:'命令界面'、'图形界面'和'系统调用界面'。
5. 为了防止操作系统及关键数据受到用户程序的破坏,将CPU的执行状态分为'用户态'和'系统态 '。
第二章 进程的描述与控制
前趋图

程序并发执行的特征
顺序与并发


什么是进程
'进程'是程序的一次执行。
'进程'是一个程序及其数据在处理机上顺序执行时所发生的活动。
'进程'是程序在一个数据集合上运行的过程,它是系统进行'资源分配和调度'的'一个独立单位'。
'进程'是进程实体的运行过程,是系统进行'资源分配和调度'的'一个独立单位'。
引入目的
使多个程序并发执行,提高资源利用率及系统吞吐量
进程控制块(process control block) --> PCB
'进程标识符'信息、'处理机状态'信息、'进程调度'信息、'进程控制'信息

1. 'PCB'是进程实体的一部分,记录了'操作系统所需的、用于描述进程当前状况以及控制进程运行的全部信息'
2. OS是根据'PCB'来对'并发执行的进程'进行'控制'和'管理'的
3. 进程控制块是进程存在的'唯一'标志 -> 进程任务完成时,系统收回它的PCB,进程也随之消亡
4. '进程'='程序'+'数据'+'PCB'
'作用':
PCB的1. 作为独立运行基本单位的标志;
2. 能实现间断性运行方式;
3. 提供进程管理所需要的信息;
4. 提供进程调度所需要的信息;
5. 实现与其他进程的同步与通信。
链接方式
1. 线形表
2. 链表 + 索引表
(跳过了进程操作的一些原语操作)
进程的特征 (重点记忆)
1. '动态性'
生命期2. '并发性'
一段时间内同时运行3. '独立性'
进程实体是一个能独立运行的基本单位
是系统中独立获得资源和独立调度的基本单位4. '异步性'
按各自独立的、不可预知的速度向前推进
进程 vs 程序
1.进程是程序的执行,属于动态,程序是静态的
进程的存在是暂时的,程序的存在是永久的
2.一个程序可以对应多个进程
一个进程可以包含多个程序
进程的状态
1. '就绪状态'
2. '执行状态'
3. '阻塞状态'
进程主动申请进入阻塞状态 阻塞态变为就绪态为被动行为

4. '创建状态'
申请一个空白PCB;填写PCB;分配资源;设置就绪状态插入就绪队列5. '终止状态'
等待OS善后、收回PCB
6. '挂起操作'
为什么有挂起操作1. 终端用户的请求
2. 父进程请求
3. 负荷调节的需要 (实时系统)
4. 操作系统的需要

进程的通信
1. 低级进程通信
所交换的信息量相对较少2. 高级进程通信
用户可直接利用OS所提供的一组通信命令,高效地传送大量数据的一种通信方式
通信方法
1.'管道'
互斥 同步 确定对方是否存在,只有确定了对方已存在时,才能进行通信1. 匿名管道 (环形队列,内存)
2. 有名管道 (文件, 外存)
2.'消息队列'
链表3.'共享内存'
4.'信号量'
5.'socket'
线程是什么
引入目的
1. 减少程序在'并发执行'时所付出的'时空开销'
2. 使OS具有更好的并发性
3. 适用于SMP结构的计算机系统
线程 vs 进程
1. '线程'作为'调度'和'分派'的'基本单位'(又称为轻型进程)
2. '进程'是拥有'资源'的'基本单位'(传统进程称为重型进程)
关于资源'进程'是系统中拥有资源的一个基本单位,它可以拥有资源。
'线程'本身不拥有系统资源,仅有一点保证独立运行的资源。
'多个线程'共享其'隶属进程所拥有的资源'。
允许
独立性
同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。
系统开销
在创建或撤消进程时,OS所付出的开销将显著大于创建或撤消线程时的开销。
线程切换的代价远低于进程切换的代价。 同一进程中的多个线程之间的同步和通信也比进程的简单。
线程状态
'执行态'、'就绪态'、'阻塞态'
'一样' 线程状态转换与进程状态转换
线程控制块(thread control block) TCB
线程实现
'内核支持线程KST'
'用户级线程ULT'
组合方式
内核支持线程KST
1.
无论用户进程中的线程,还是系统进程中的线程,其创建、撤销和切换都依靠内核,在内核空间通过系统调用实现
在内核空间为每个线程设置了一个线程控制块,内核根据该控制块感知该线程存在,并加以控制
2.优点
在多处理机系统中,内核可同时调度同一进程的多个线程
如一个线程阻塞了,内核可调度其他线程(同一或其他进程)。
线程的切换比较快,开销小。
内核本身可采用多线程技术,提高执行速度和效率。
3.缺点
对用户线程切换,开销较大。
用户级线程ULT
1.
用户级线程仅在用户空间中,与内核无关,所有对线程的操作(创建、撤销、同步、互斥等)也在用户空间中由线程库的函数(过程)完成,而无需内核帮助
2.优点
线程切换不需要转换到内核空间。
调度算法可以是进程专用的。
线程的实现与OS平台无关。
3.缺点
系统调用的阻塞问题。
多线程应用不能利用多处理机 进行多重处理的优点。
ULT与KST组合方式....

第三章 处理机调度与死锁
处理机调度
多级调度
运行性能
进程调度的级别
'高级调度':也称宏观调度,决定哪些程序可以进入系统
'中级调度':也称内存调度,决定内存中程序的位置和状态
'低级调度':也称微观调度,决定CPU资源在就绪进程间的分配
或'高级调度'(长程调度/'作业'调度)
'中级调度'(中程调度/'内存'调度)
'低级调度'(短程调度/'进程'调度)
1.引入'中级调度'的主要目的,是为了'提高内存利用率和系统吞吐量';
;当这些进程具备运行条件、且内存又稍有空闲时,由中级调度来决定把就绪进程,重新调入内存,并修改其状 态为就绪状态,挂在就绪队列上等待进程调度 使那些暂时不能运行的进程不再占用宝贵的内存资源,将它们调至外存上去等待,把此时的进程状态称为就绪驻外存状态或挂起状态

进程调度的方式
1.非抢占方式
决不允许某进程抢占已经分配出去的处理机2.抢占方式:(现代OS广泛采用)
优先权原则
短作业优先原则 时间片原则

计算概念
批处理系统的目标1.'周转时间' -> '作业完成时刻-作业到达时刻' '等待时间+服务时间'
作业被提交给系统开始,到作业完成为止的这段时间间隔2.平均周转时间 '->' 作业周转总时间/作业个数
3.'带权周转时间' -> '周转时间/服务时间'
4.平均带权周转时间 '->' 带权周转总时间/作业个数
5.'服务时间' -> 进程在CPU中运行的时间
6.吞吐量
7.等待时间(进程调度)
调度算法
什么是作业
1.'作业':在多道批处理操作系统中,用户提交给系统的一项相对独立的工作
是用户在一次算题过程中或一次事务处理中,要求计算机系统所做的工作的集合。在批处理系统中,以作业为单位从外存调入内存2.作业和进程的关系
作业是比进程更广泛的概念,不仅包含了通常的程序和数据,而且还配有一份作业说明书,系统根据作业说明书对程序运行进行控制3.作业步
作业运行期间,每个作业由若干相互独立又相互关联的顺序加工步骤才能得到结果。每个加工步骤称为一个作业步
作业控制块
1.'作业控制块(JCB)'
多道批处理系统中,为每个作业设置一个作业控制块。 JCB是一个作业在系统中存在的惟一标志,系统根据JCB才感知到作业的存在。2.'JCB包含内容':作业控制块JCB中包含了对作业进行管理的必要信息,JCB中的信息一部分是从用户提供的作业控制卡或作业说明书中得到,另一部分是记录作业运行过程中的动态信息。
3.'JCB的生成':作业提交给系统后,便由“作业注册”程序为作业建立一个作业控制块JCB,放入后备队列

作业调度算法
1.'FCFS' 先来先服务调度算法
2.'SJF' 短作业优先调度算法
3.'PR' 优先级调度算法
4.HRRN 高响应比优先调度算法
进程调度
任务1. 保存处理机现场信息。
2. 按某种算法挑选进程。
3. 把处理器分配给进程。
机制1.排队器
将就绪进程按一定方式排成队列2.分派器
把进程调度程序选定的进程,从就绪队列中取出,进行上下文切换,把处理器分配给它3.上下文切换机制
1.保存当前进程上下文装入分派程序上下文,分派程序运行 2.移出分派程序,装入新选进程上下文
进程调度算法
1.'FCFS' 先来先服务调度算法
2.'SJF' 短作业优先调度算法
3.'PR' 优先权调度算法
4.'RR' 时间片轮转调度算法
5.多级队列调度算法
6.多级反馈队列调度算法
7.基于公平原则的调度算法
FCFS
作业调度和进程调度均可,最简单,本质上属非抢占方式
有利于长作业/进程,不利于短作业
有利于CPU繁忙型的作业(如通常的科学计算),而不利于I/O繁 忙的作业/进程(如大多数的事务处理)

SJF
对作业:从后备队列中选择若干个估计运行时间最短的作业。
对进程:关联到每个进程下次运行的CPU区间长度,调度最短的进程。
'非抢占式' SJF
'抢占式' SJF(来了个更短的进程)抢占发生在有比当前进程剩余时间片更短的进程到达时,也称为最短剩余时间优先调度
非抢占式 SJF

抢占式 SJF

缺点
只能估算进程的运行时间(估值不准确,作业说明书,偏长估计),所以通常 用于作业调度
对长作业不利(周转时间明显增加,SJF完全忽视等待时间进程饥饿发生 -> 进程饥饿发生)
采用SJF算法时,人-机无法实现交互
完全未考虑作业的紧迫程度(优先级)
PR
既可用于作业调度,也可用于进程调度。
基于作业/进程的紧迫程度,由外部赋予作业相应的优先级,调度算法 根据优先级进行调度。
每个进程都有一个优先数,优先数为整数。
默认:小的优先数具有高优先级。
目前主流的操作系统调度算法
高响应比优先调度算法是一种优先级调度算法,用于作业调度。
分为 非抢占式
抢占式'静态'优先级
以及 '动态'优先级
非抢占式

实现简单,考虑了进程的紧迫程度
灵活,可模拟其它算法 (FCFS:等待时间;SJF:运行时间) 存在问题
饥饿 :低优先级的进程可能永远得不到运行 解决方法
老化 :视进程等待时间的延长提高其优先数
高相应比优先调度算法

RR
响应时间(Response time) =第一次响应 - 到达时间

一般准则:时间片/10>进程上下文切换时间
时间片大>FCFS
时间片小>增加上下文切换的时间,效率降低

多级队列调度算法
就绪队列从一个分为多个(按性质)
每个队列有自己的调度算法
调度须在队列间进行(队列间有优先级)
多级反馈队列调度算法


公平原则的调度算法
保证调度算法
性能保证
如保证处理机分配的公平性
公平分享
调度的公平性主要针对用户而言
实时调度
基本条件
1. 提供必要的信息(向调度程序提供)
2. 系统处理能力强
3. 采用抢占式调度机制
4. 具有快速切换机制
系统规模小、中断时间短、进程切换快、OS管理深度高
算法
1. 'EDF' 最早截止时间优先调度算法
EDF

抢占式

2.'LLF'最低松弛度优先算法
LLF
紧急程度越高(松弛度越低),优先级越高
松弛度slack time=必须完成时间-其本身的运行时间-当前时间
如果已经运行一段时间
松弛度=必须完成时间 - 剩余运行时间 - 当前时间
抢占式
1. 该算法主要用于可抢占调度方式中,当一任务的'最低松弛度减为0时',它必须'立即抢占CPU',以保证按截止时间的要求完成任务。
2.当出现多个进程松弛度相同且为最小时,按照“最近最久未调度”

最低松弛度减为0时


优先级倒置

解决方法:
1.制定一些规定,如规定低优先级进程执行后,其所占用的处理机不允许被抢占(问题:高优先级进程可能会等待很长时间)
2.建立动态优先级继承。

Linux进程调度器

普通进程调度:
Ø 采用SCHED_NORMAL调度策略。
Ø 分配优先级、挑选进程并允许、计算使其运行多久。
Ø CPU运行时间与友好值(-20~+19)有关,数值越低优先级越高。
实时进程调度:
Ø 实时调度的进程比普通进程具有更高的优先级。
Ø SCHED_FIFO:进程若处于可执行的状态,就会一直执行,直到它自己被阻塞
或者主动放弃CPU。
Ø SCHED_RR:与SCHED_FIFO大致相同,只是进程在耗尽其时间片后,不能
再执行,而是需要接受CPU的调度。
死锁
1.指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,'若无外力作用',这些进程都将永远不能再向前推进。
2.对资源不加限制地分配可能导致进程间由于竞争资源而相互制约以至于无法继续运行的局面,人们把这种局面称为'死锁' (deadlock)。
3.'一组等待的进程,其中每一个进程都持有资源,并且等待着由这个组中其他进程所持有的资源'。
死锁原因
1.竞争'不可抢占性资源'引起死锁
2.竞争'可消耗性资源'引起死锁
3.进程推进顺序不当引起死锁



产生死锁的必要条件
1.'互斥'
一段时间内某资源只能被一个进程占用。2.'请求和保持'
一个至少持有一个资源的进程等待获得额外的由其他进程所持有的资源。3.'不可抢占'
一个资源只有当持有它的进程完成任务后,自由的释放。4.循环等待
等待资源的进程之间存在环 {P0, P1, …, Pn} 。4 包含了前三个条件。将它们分别列出是为了方便我们研究各种防止死锁的方法。 上述死锁的四个必要条件不是彼此独立的,比如条件
处理死锁
1.设计无死锁的OS:确保系统永远不会进入死锁状态
'死锁预防'
'死锁避免'
2.先礼后兵:允许系统进入死锁状态,然后恢复系统
'死锁检测'
'死锁恢复'
3.鸵鸟策略:忽略这个问题,假装系统中从未出现过死锁。这个方法被大部分的操作系统采用,包括UNIX、Windows
之所以被某些系统采用,是因为死锁不常发生
定义
'安全状态',就没有死锁
如果一个系统在
如果一个系统不是处于安全状态,就有可能死锁'安全序列',则系统处于安全态 如果存在一个
银行家算法


若所有进程都可执 行完毕,则系统处于安全状态,并根据可完成进程的分配顺序生成安全序列
资源分配图RAG


'死锁定理' -> S状态为死锁状态的充分条件是:当且仅当S的资源分配图是不可完全简化的。
死锁的解除
1.抢占资源
2.终止或撤消进程
第4章 进程同步
使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具 有可再现性
定义
1.'临界资源'
系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量
诸进程间应采取互斥方式,实现对这种资源的共享。
2. 进程'并行运行'时相互制约 (进程发消息限制另一进程运行),而制约关系归结为'互斥'和'同步'
'同步'——指两个事件的发生有着某种时序上的关系(先,后)
'互斥'——资源的使用要排它使用,防止竞争冲突(不同时使用,但无先后次序) (作为一种特殊同步)
3. '临界区':进程中涉及临界资源的代码段
进入区:用于检查是否可以进入临界区的代码段 退出区:将临界区正被访问的标志恢复为未被访问标志
生产者-消费者问题

同步机制应遵循
1.空闲让进 2.忙则等待 3.有限等待 4.让权等待
进程同步机制
1. '软件'同步机制
1.单标志法 -> 共享变量:可实现同一时刻最多只允许一个进程访问临界区,且是轮流访问的,缺陷:违背空闲让进原则
2. 双标志(后)检查法
3. Peterson解决方案
2. '硬件'同步机制
1. 关中断
进入锁测试之前关闭中断,完成锁测试并上锁之后才打开中断
中断关掉后,无进程or线程切换,保证对锁测试和关锁操作的完整性可有效保证互斥
缺点:
影响系统效率,导致系统反应“迟钝”
不适用于多CPU(关CPU A上的中断,CPU B上进程仍然可以执行相同的临界区代码)2. Test-and-Set指令
原子地检查和修改字的内容
lock 为FALSE,资源空闲
lock 为TRUE ,资源正在被使用3. Swap指令
3. '信号量机制'
1.信号量S-整型变量
提供两个不可分割的[原子操作]访问信号量
wait(S)又称为P(S)
signal(S)又称为V(S)2.AND型信号量
将进程在整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放。3.利用信号量实现进程'互斥'
4.利用信号量实现进程'同步'
4. '管程机制'
1.类似 类方法
2. 管程相当于对临界资源的操作进行封装
3. 管程相当于对临界资源的操作进行封装
Swap指令

信号量机制
AND型信号量

利用信号量实现进程互斥

利用信号量实现进程同步

信号量的同步异步问题

同步信号量在后,互斥信号量在前

利用信号量实现前趋关系

管程


经典的进程同步问题
1.生产者-消费者问题
2.哲学家进餐问题
3.读者-写者问题
Linux进程同步机制
同步方法1.自旋锁
2.信号量
3.互斥锁
4.禁止中断
第五章 存储器管理
功能
'内存分配'
静态分配
动态分配
内存回收'内存保护' --> '硬件'
确保每个用户程序仅在自己的内存空间运行
绝不允许用户程序访问操作系统的程序和数据'地址映射'
逻辑地址转换为物理地址'内存扩充'
请求调入功能 置换功能
包括
CPU寄存器
主存
辅存
程序的装入
1. '绝对装入'
单道程序中,由编译程序或程序员指定内存地址,装入时直接定位在上述(即文件中记录的地址)内存地址。逻辑地址和物理地址完全相同。2. '可重定位装入'
多道程序环境中,单一装入模块中采用逻辑地址,根据当前内存情况,将装入模块装入到适当位置;操作系统装入模块进行地址映射。地址映射(地址转换)是在装入模块装入内存时一次性进行的,即采用静态重定位;以后不能更改3. '动态运行时装入'
将装入模块原样装入内存,而地址映射工作推迟到程序真正执行时才进行,即采用态重定位。
程序的链接
1. 静态链接
2. 装入时动态链接
3. 运行时动态链接
对换与覆盖
连续分配存储管理方式
连续分配
单一连续分配
单道程序环境下,仅装有一道用户程序,即整个内存 的用户空间由该程序独占
固定分区分配
动态分区分配
基于顺序搜索的动态分区分配算法
首次适应算法
按空闲分区表(或空闲分区链)的先后次序, 从头查找,找到符合要求的第一个分区,没有按升序降序的顺序
循环首次适应算法
最佳适应算法
按空闲分区表(或空闲分区链)的先后次序 (空闲区容量从小到大排序),从头查找,找到符合要求的第一个 分区。就说明它是最适合的(即最佳的)
最坏适应算法
按各空闲分区容量大小的降序方法
每次分配时,总是将最大的空闲区切去一部分分配给请求者,其依据是当 一个很大的空闲区被切割了一部分后可能仍是一个较大的空闲区
索引搜索的动态分区分配
为提高空闲分区搜索速度,大中型系统往往采用基于索引搜索的动态分区分配算法
快速适应算法
将空闲分区按容量大小进行分类,系统有多个空闲分区链表,在内存中设立一张管理索引表,每个表项对应一类 空闲分区,并记录该类空闲分区链表表头指针(glic
的堆freechunk
)
伙伴系统
哈希算法
建立哈希函数,构造一 张以空闲分区大小为关 键字的哈希表,该表的 每一个表项对应于一个 空闲分区链表的头指针,进行分配时,根据空闲区大 小,通过计算哈希函数,得 到在哈希表中的位置,找到 对应的空闲分区链表。
动态重定位分配
零头的方法是拼接(或称紧凑),即向一个方向(例 如向低地址端)移动已分配的作业,使那些零散的小空闲区在另 一方向连成一片
分区的拼接技术,一方面是要求能够对作业进行重定 位,另一方面系统在拼接时要耗费较多的时间
访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的
离散分配
概念
页面:将一个进程的“逻辑地址空间”分成若干个大小相等的“页”
物理块:把内存“物理地址空间”分成与页面相同大小的若干个存 储块,称为(物理)“块”
页内碎片:由于进程的最后一页经常装不满一块而形成了不可利用 的“碎片”,称之为“页内碎片”
分页存储管理方式
系统为每个进程建立了一张页表。记录在该进 程的PCB中
页表的作用:实现从页 号到物理块号的地址映射。
每一次的数据/指令存取需要两次内存访问
解决两次访问的问题,是采用小但专用且快速的硬件缓冲,这种缓冲称为转换表缓冲器(TLB
) 或联想寄存器。
地址变换
'页号'查页表,得到对应页装入内存的块号,并将'块号',转换成二进制数填入地址寄存器的高位部分
以'位移量''直接复制'到内存地址寄存器的低位部分
将'页号' + '页内地址'-> '''块号''' + '''页内地址'''
硬件(动态地址变换机构DAT)实现
概念
内存有效访问时间( Effective Access Time ,简称为EAT
)
快表:存放页表部分内容的快速存储器称为联想寄存器,联想寄存器 中存放的部分页表称为“快表”
引入两级页表结构
反置页表
一个系统一张页表
对每个内存物理块设置一个条目(反置)
每个条目保存页号,以及包括拥有这个页的进程的信息
分段存储管理方式
为了满足用户(程序员)在编程和使用上多方面的要求
一个程序是一些段的集合,一个段是一个逻辑单位
在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定 义了一组逻辑信息。
为每个分段分配一个连续的分区;进 程中的各个段可以离散地装入内存中不同的分区中
分段的一个突出优点, 是易于实现段的共享, 即允许若干个进程共享一个或多个分段
可重入代码
段页式存储管理方式
第六章 虚拟存储器
前面所介绍的各种存储器管理方式,有一个共同特点:作业全部装入内存后方能运行
大作业装不下
概念
'虚拟存储器':具有请求调入功能和置换功能,能从逻辑上对内存容量加 以扩充的一种存储器系统
'多次性':作业中的程序和数据允许被分成多次调入内存允许(相对于一次性而言)
'对换性':作业运行时无须常驻内存,允许作业在运行过程中换进、换出(相对于驻留性而言)
'虚拟性':从逻辑上扩充了内存容量,使用户看到的内存容量远大于实际内存容量(相对于实际内存容量而言)
Note: 虚拟性的基础是多次性和对换性,而多次性和对换性的实现基础是采用离散的内存分配方式
虚拟存储器的实现方法
请求分页系统(以分页系统为基础)
在分页系统的基础上,增加了请求调页 功能、页面置换功能所形成的页式虚拟存储系统
怎样发现页不在内存?
扩充表——以前页表结构只包含页号和块号两个信息,这是进行地址变换 机构所必须的,为了判断页面在不在主存,可在原页表上扩充!
页表机制
缺页中断机构
缺页中断:在地址映射过程中,在页表中发现所要访问的页不 在内存,则产生缺页中断。操作系统接到此中断信号后,就调 出缺页中断处理程序,根据页表中给出的外存地址,将该页调 入内存,使进程继续运行下去
分配:如果内存中有空闲块,则分配一页,将新调入页装入内 存,并修改页表中相应页表项目的状态位及相应的内存块号
淘汰:若此时内存中没有空闲块,则要淘汰某页,若该页在内 存期间被修改过,则要将其写回外存
地址变换机构
- 在地址变换时,首先检索快表,试图从中找到要访问的页。如找到, 修改其访问位。对于“写”指令,还要设置修改位的值。如未找到, 则转3。
- 利用页表项中的物理块号和页内地址,形成物理地址。
- 查找页表,找到页表项后,判断其状态位P,查看该页是否在内存中。 如果在,则将该页写入快表(若快表已满,则应该先调出某个或某 些页表项)。如果不在,则产生缺页中断,由OS从外存将该页调入 内存。
最小物理块数的确定
内存分配策略
固定分配局部置换
可变分配全局置换
可变分配局部置换
物理块分配算法
平均分配算法
按比例分配算法
考虑优先权的分配算法
页面调入策略
缺页率为 f= F/A
请求分段系统(以分段系统为基础)
pass
段页式虚拟存储器
pass
页面置换算法
最佳置换算法
选择的被淘汰或置换的页面,将是以后永不使用的, 或许是在最 长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保 证获得最低的缺页率
先进先出算法
最近最久未使用算法
轮转算法
改进型Clock置换算法
算法:
- 指针从当前位置开始,开始第一轮扫描循环队列,寻找未使用且没有修改 过的页面(第1类页面),找到则可换出。
- 如果找不到,则开始第二轮扫描,寻找未使用但修改过的页面(第2类页 面),并且每经过一个页面时,将其访问位A设置为0。如果找到一个第2 类页面,则可换出。
- 如果仍旧未找到合适的换出页面,则此时指针回到初始位置,且所有页面 其访问位A为0。再转回(1)继续工作。
最不常用置换算法
选择到当前时间为止被访问次数最少的页面被置换;
页面缓冲算法
PBA
被置换页面的选择和处理:由操作系统中专门的页面置换进程,用FIFO算法选择 被置换页,把被置换的页面放入两个链表(空闲页面链表和已修改页面链表)之 一。 l 如果页面未被修改,就将其归入到空闲页面链表的末尾 l 否则将其归入到已修改页面链表。
EAT
查块表+查页表+缺页中断处理+修改快表+访问主存读取数据
抖动
一个进程的页面经常换入换出
工作集
第七章 输入输出系统
I/O系统的基本功能
1 完成I/O请求;
2 提高CPU和I/O设备的利用率。
'隐藏物理设备'的细节
能够/O系统对设备加以抽象,以隐藏物理设备的实现细节,仅向上层进程提供少量的、抽象的接口
I'保证OS与设备无关'
能够/O设备的安装。如即插即用
无需重新编译整个OS便可增添新的设备驱动程序,以方便新的I/O设备的'利用率'
能够提高处理机和I/O设备进行'控制'
能够对I/O方式
采用轮询的可编程I/O方式
采用中断的可编程I
直接存储器访问方式DMA/O通道方式
I'正确共享'
能够确保对设备的
独占设备 互斥
共享设备 允许多个进程同时访问 磁盘'处理错误'
能够 临时性错误,可通过重试操作来纠正,只有在发生了持久性错误时,才需要向上层报告
I/O系统接口
块设备接口
流设备(字符设备)接口
网络通信接口
I/O设备
通常,设备并不是直接与CPU进行通信,而是与设备控制器通信
设备控制器
控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换
设备控制器是CPU与I/O设备之间的接口接收从CPU发来的命令,并去 控制I/O设备工作
设备控制器是一个可编址的设备
当仅控制一个设备时,它只有一个唯一的设备地址
若控制器可连接多个设备时,则应含有多个设备地址,并使每一个设备地 址对应一个设备
功能
接收和识别命令
数据交换
标识和报告设备的状态
地址识别
数据缓冲区
差错控制
组成
设备控制器与处理机的接口
设备控制器与设备的接口
I/O逻辑
内存映像I/O
驱动程序作用
将抽象I/O命令转换成具体的命令和参数等装入设备控制器的相应寄存器,由控制器执行这些命令,具体实施对I/O设备的控制
内存映像I/O形式
在编址上不区分内存单元地址和设备控制器中的寄存器地址
统一 编址 k 。 k在0~n-1范围时,为内存 地址;若k>=n时,为某控制器的寄 存器地址
统一了访问方法,简化了I/O编程
I/O通道
什么是 I/O通道
使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从 繁杂的I/O任务中解脱出来
I/O通道是一个独立于CPU的,专门管理I/O的处理机
I/O通道类型
'字节多路'通道
有许多非分配型子通道(一个通道连接多个逻辑设备),按时间片轮转方式共享主通道。'字节'为单位传输信息,分时地执行'多个'通道程序
以
'数组选择'通道
选择通道是按数组方式进行数据传送,每次传送一批数据,故传送速度很高
在一段时间内只能执行一个通道程序,只允许一台设备进行数据传输'独占性'
'数组多路'通道
'传送速度高'和字节多路通道能进行'分时并行操作'
结合了数组选择通道
某设备进行数据传送时,通道只为该设备服务;当设备在执行寻址等控制性动作时,通道暂时断开与该设备的连接,挂起该设备的通道程序,去为其他设备服务,即执行其他设备的通道程序
含有多个非分配型的子通道,一段时间内可以执行多道通道程序
“瓶颈”问题
通道不足,造成“瓶颈”现象
增加设备到CPU间的通路而不增加通道
多通路方式
不仅解决了“瓶颈”问题,而且提高了系统的可靠性
I/O设备的控制方式
使用轮询的可编程 I/O方式
也称为忙-等待方式,CPU不断循环检测该标志
缺点:靠CPU以“忙等待”的形式与打印机进行通信,浪费CPU资源
使用中断的可编程 I/O方式
CPU发出一条I/O指令后,转去继续完成其他任务。而对外设的I/O工作,则转成了由设备控制器来指挥完成。当I/O操作完成后。外设控制器自动向CPU发出中 断请求信号。CPU接到I/O中断信号后进行干预,启动I/O中断处理程序执行
CPU设定I/O设备的初始值,然后不再忙等待,运行其他进程,当前进程阻塞; I/O设备完成对当前数据的处理后,向CPU发出中断,I/O中断处理程序将负责传 送剩余数据
以字节为单位进行I/O。处理机与I/O设备并行操作
优点:在外设进行数据处理时,CPU不必等待,可以继续执行该程序或其他程序。
缺点:CPU每次处理的数据量少(通常不超过几个字节,由数据寄存器的大小而定), 只适于数据传输率较低的设备。中断控制模式依然造成CPU时间的浪费,而且效率不高
DMA方式
使用独立的DMA控制器代替CPU的工作,I/O设备与DMA通信,DMA在传输完成 一个数据缓冲区之后再向CPU发中断
数据传输的基本单位是数据块,即CPU与I/O设备之间,每次传送至少是一个数据 块,主要用在块设备的I/O操作中
利用总线直接连接外设和内存、所传送的数据是从设备直接送入内存的, 或者相反
DMA模式减少了中断次数,同时又集成了程序控制和中断控制的优点
I/O通道控制方式
I/O通道方式是DMA方式的发展,进一步减少CPU的干预,即把对一个数 据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的 控制和管理为单位的干预
通道独立执行通道程序,在CPU不干预的情况下,完成一组数据的传输
通道的引入,可实现CPU、通道和I/O设备三者的并行操作,进一步提高 CPU与外设之间的并行工作能力
使I/O操作形成独立于CPU的体系,减 少CPU的负担,使外设与内存的数据交换更加灵活,从而更有效地提高整 个系统的资源利用率
在通道机构中含有通道指令,通道程序的执行过程就是I/O 操作的处理过程
中断和中断处理程序
是多道程序得以实现的基础,进程之间的切换
是设备管理的基础,实现CPU与I/O设备并行
中断和陷入
中断(Interrupt)是指CPU对I/O设备发来的中断信号的一种响应
陷入(Trap)是指CPU内部事件所引起的中断
区别:来源不同
设备驱动程序
是I/O系统高层与设备控制器之间的通 信程序(用来控制设备控制器的代码和指令,常以进程形式存在,被称为设备驱动进程
低级系统程序
设备驱动程序的功能
接收上层软件发来的抽象I/O请求,再把它们转换为具体要求后,发送给设备控制器,启动设备去执行
它也将由设备控制器发来的信号传送给上层软件
与设备无关的I/O软件
以物理设备名使用设备
非常不灵活,使用不方便
为实现与I/O的设备无关性,引入了逻辑设备名
逻辑设备名到物理设备名的转换
逻辑设备表LUT:用于将逻辑设备名映射为物理设备名
I/O调度
Ø 改善系统整体性能;
Ø 在进程间公平共享设备访问;
Ø 减少完成I/O调度所需的平均等待时间。
用户层的I/O软件
假脱机系统SPOOLing
外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时,外围操作称为SPOOLing
在多道批处理系统中,专门利用-道程序(SPOOLing
程序)来完成对设备的I/0操作,无需使用外围I/0处理机
利用假脱机技术(也称为虚拟设备技术)可把独享设备转变成具有共享特征的虚拟设备,从而提高设备利用率
假脱机技术是对脱机输入/输出系统的模拟,将一台I/O物理设备虚拟为、多台I/O逻辑设备,“欺骗”进程,让进程误以为自己有一台I/O设备
系统的组成
输入井和输出井 ➢在磁盘上开辟的两个大存储空间 ➢输入井:模拟脱机输入时的磁盘设备,用于暂存输入设备输入的数据 ➢输出井:模拟脱机输出时的磁盘,用于暂存用户程序的输出数据
输入缓冲区和输出缓冲区 ➢缓和CPU和磁盘之间速度不匹配的矛盾 ➢输入缓冲区:用于暂存由输入设备送来的数据,以后再传送到输入井 ➢输出缓冲区:用于暂存从输出井送来的数据,以后再传送给输出设备
输入进程Sp
; ➢Sp模拟脱机输入时的外围控制机,将用户要求的数据从输入设备通过输入缓冲区再送入输入井,当CPU需要输入数据时,直接从输入井读入内存
输出进程Sp
。 ➢Sp
.模拟脱机输出时的外围控制机,把用户要求输出的数据,先从内存送到输出井,待输出设空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上
井管理程序 ➢用于控制作业与磁盘井之间信息的交换
优点 提高了I/O的速度、将独占设备改造为共享设备、实现了虚拟设备功能
例子
共享打印机
打印机属于独占设备。利用SPOOLing
技术,可将之改造为一台可供多个 用户共享的设备,从而提高设备的利用率,也方便了用户。
当用户进程请求打印输出时, SPOOLing
系统同意为它打印输出,但并不真正立即把打印机分给用户进程,而假脱机管理进程为它做两件事:
1.由输出进程在输出井中为之请求一个空闲磁盘块区,并将要打印的数据送入其中.
2.输出进程再为用户进程申请- -张空白的用户请求打印表。并将用户的打印要求填入其中,再将该表挂在请求打印队列上
如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表, 根据表中的要求将要打印的数据,从输出井传送到输出缓冲区,再由打印机进行打印
打印完毕后,输出进程再查看请求打印队列中是否还有等待打印的请求表, 如此下去,直至请求打印队列为空,输出进程才将自己阻塞起来。仅当下 次再由打印请求时,输出进程才被唤醒
守护进程
守护进程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执 行某种任务或等待处理某些发生的事件守护进程是一种很有用的进程
方案修改:取消假脱机管理进程,为打印机建立一个守护进程,由它执行一 部分原来的假脱机管理进程的功能。
守护进程是允许使用打印机的唯一进程
缓冲区管理
内存中
双缓冲
环形缓冲区
缓冲池
磁盘性能概述和磁盘调度
磁盘的结构
➢盘面(磁头) :磁盘设备可包含一 或多个盘片,每个盘片分为一个或两个盘面,每个面上有一个读写磁头
➢磁道(柱面) :每个盘面可分成若干条磁道
➢扇区:每条磁道逻辑上分成若干个大小相同的扇区。每个扇区的大小相当于-个盘块(数据块)
➢每条磁道上可存储相同数目的二进制位
➢磁盘密度即每英寸中所存储的位数,显然是内层磁道的密度较外层磁道的密度高。
'容量'='盘面'×'磁道'×'扇区'
每个扇区包括2个字段
标识符字段、数据字段
磁盘的访问时间
➢寻道时间
➢旋转延迟时间
➢ 传输时间
磁盘调度的目标,是 使磁盘的平均寻道时间最小
磁盘调度算法
先来先服务FCFS
根据进程请求访问磁盘的先后次序进行调度。
最短寻道时间优先SSTF
与当前磁头所在的磁道距离最近,以 使每次的寻道时间最短
SCAN算法
磁臂从磁盘的一端向另一段移动,沿途响应服务请求。当到达另一端时, 磁头改变移动方向,继续处理。磁头在磁盘上来回扫描

CSCAN算法
CSCAN算法提供比SCAN 算法更为均匀的等待时间。
CLOOK
C-SCAN的一种 形式 。
磁头只移动到一 个方向上最远的请求为止 。 接着 , 它马上回头 , 而不是继续到磁盘的尽 头