第一章 操作系统引论
操作系统的目标:
- 方便性
- 有效性,提高系统资源的利用率。
- 可扩充性
- 开放性
操作系统的作用:
- OS作为用户与计算机硬件系统之间的接口。
- OS作为计算机系统资源的管理者。可以将资源分为四类:处理机、处理器、I/O设备以及信息(数据和程序)
- OS实现了对计算机资源的抽象。
推动操作系统发展的主要动力:
- 不断提高计算机系统资源的利用率
- 方便用户。
- 器件不断更新换代。
- 计算机体系结构不断发展。
- 不断提出新的应用需求。
未配置操作系统的计算机系统
- 人工操作方式。
- 用户独占全机。
- CPU等待人工操作。
- 脱机IO方式
- 减少了CPU的空闲时间。
- 提高了IO速度。
单道批处理系统。
缺点:系统中的资源得不到充分利用。
多道批处理系统。
优缺点:
- 资源利用率高。
- 系统吞吐量大。
- 平均周转时间长。
- 无交互能力。
分时系统
需求表现为:
(1). 人机交互
(2).共享主机
分时系统实现过程中的关键问题:及时接收,及时处理。
分时系统的特征:多路性,独立性,及时性,交互性。
实时系统
- 实时系统的类型
(1)工业控制系统
(2)信息查询系统
(3)多媒体系统
(4)嵌入式系统
- 实时任务的类型
- 周期性实时任务和非周期实时任务。
- 硬实时任务和软实时任务。
微机操作系统
- 单用户单任务OS
- 单用户多任务OS
- 多用户多任务OS
嵌入式操作系统
- 嵌入式系统
- 嵌入式OS
嵌入式OS的特点:系统内核小,系统精简,实时性高,具有可配置性。
网络操作系统
特征:硬件独立性,接口一致性,资源透明性,系统可靠性,执行并行性。
分布式系统:
分布性,透明性,同一性,全局性。
分布式OS
通信管理功能,资源管理功能,进程管理功能。
操作系统的基本特性
并发、共享、虚拟、异步。
处理机管理功能:
- 进程控制、
- 进程同步、
- 进程通信、
- 进程调度
存储器管理功能:
- 内存分配和回收
- 内存保护
- 地址映射
- 内存扩充
设备管理功能:
缓冲管理、设备分配、设备处理。
文件管理:文件存储空间管理,目录管理,文件的读、写管理和保护。
第二章 进程的描述与控制
前趋图:不允许有环。
程序顺序执行时的特征:顺序性,封闭性,可再现性。
不存在前驱关系就可以并行。
程序并发执行的特征:间断性,失去封闭性,不可再现性。
进程的描述
进程:进程是程序的执行过程,是系统进行资源分配和调度的一个独立单位。
进程的特征:动态性、并发性、异步性。
进程的三种基本状态:就绪状态,执行状态,阻塞状态。
他们之间的相互转换:
引入挂起操作主要是为了满足下列需要:
- 终端用户的需要。
- 父进程的需要。
- 负荷调节的需要。xc
- OS的需要。
![image-20220612202920779](https://tva1.sinaimg.cn/large/e6c9d24egy1h35qgzcufrj212g0nwac0.jpg)
进程管理中的数据结构
PCB的作用:
-
作为独立运行基本单位的标志。
-
实现间断性运行方式
-
提供进程管理所需要的信息。
-
提供进程调度所需要的信息。
-
实现与其他进程的同步与通信。
PCB中的信息
进程标识符、处理机状态、进程调度信息、进程控制信息。
PCB的组织方式
线性方式、链接方式、索引方式。
进程控制
进程的创建、进程的终止、进程的阻塞和唤醒、进程的挂起和激活。
进程通信
进程通信,是指进程之间的信息交换,通常有低级和高级之分。
目前高级通信机制可归结为四类:共享存储器系统、管道通信系统、消息传递系统以及库户机——服务器系统。
共享存储器系统:
- 基于共享数据结构的通信方式:由程序员对数据结构进行设置,属于低级通信。
- 基于共享存储区的通信方式。在内存中划分出一块内存区域,专门用于读写交换信息、实现通信。属于高级通信。
管道通信系统
管道通信就是写进程往管道里发送数据,而读进程则从管道里读出数据,发送和接受进程是利用管道进行通信的,故称为管道通信,可以有效地传送大量的数据,首创与UNIX系统中。
管道机制必须提供3方面的协调能力:互斥、同步、确定对方是否存在。
消息传递系统
不借助任何数据结构和共享存储区,而是利用OS提供的一组通信命令。在进程之间进行消息传递,完成数据交换。
- 直接通信方式,利用OS提供的发送原语将消息发送给有需要的进程。
对称寻址:
send(reveiver,message);
receive(sender,message);
非对称寻址:
send(P,message); 发送信息给进程P。
receive(id,message);可以接受任何进程的信息。
- 间接通信方式,利用信箱来发送信息。
信箱的结构:有信箱头和信箱体组成。
原语:
send(reveiver,message); 将一个信息发送到指定信箱
receive(sender,message);从指定信箱中接收一个信息
线程
线程可以理解为,进程划分为更小的多个小进程,这个小进程就是线程,线程是能够独立运行的调度和分派的基本单位。相比进程占有很小的资源就可以运行。各个线程之间相互独立,占用系统开销也小。
第三章 处理机调度与死锁
- 高级调度,调度的对象是作业
- 低级调度,调度的对象是进程。
- 中级调度,调度的主要目的是提高内存利用率和系统吞吐量。
作业和作业调度
作业:作业是一个比程序更为广泛的概念,不仅包含了通常的程序和数据,而且还配有一份说明书,系统根据说明书对程序的运行进行控制。在多道批处理系统中,会将作业作为基本单位调入内存。
作业控制块
JCB中包含的内容通常有:作业标志,用户名称,用户账号,作业类型,作业状态,调度信息,资源需求情况,资源使用情况。
作业调度的主要任务
- 接纳多少个作业
- 接纳哪些作业
进程调度
进程调度任务:保存CPU现场信息,按某种算法选取进程,将CPU分配给进程。
进程调度的方式:抢占式和非抢占式调度方式。
处理机调度算法的目标
处理机调度算法的共同目标
-
资源利用率。
C P U 利用率 = C P U 有效工作时间 C P U 有效工作时间 + C P U 空闲等待时间 CPU利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间} CPU利用率=CPU有效工作时间+CPU空闲等待时间CPU有效工作时间
-
公平性
-
平衡性
-
策略强制执行
批处理系统中处理机调度算法的目标
- 平均周转时间短
平均周转时间: T = 1 n ∑ i = 1 n T i T=\frac{1}{n} \sum_{i=1} ^{n} T_{i} T=n1∑i=1nTi
平均带权周转时间: T = 1 n ∑ i = 1 n T i T s i T=\frac{1}{n} \sum_{i=1} ^{n} \frac{T_{i}}{T_{s_{i}}} T=n1∑i=1nTsiTi
- 系统吞吐量高
- 处理机利用率高
调度算法
FCFS先来先服务调度算法
既可以用作业调度,也可以用于进程调度。按照作业到达的先后次序来进行调度。
SJF短作业优先调度算法
短作业优先级高,长短是按照作业运行时间最短的作业。
缺点:
- 必须先知道作业的运行时间。
- 对于长作业非常不利。
- 采用SJF调度算法时,无法实现人机交互,会出现等待时间过长出现饥饿现象,一直有短作业来,长作业一直处于等待的过程。
- SJF调度算法没有考虑到作业的紧迫程度,不能保证紧迫性作业能得到及时处理。
RR 时间片轮转调度算法
基于时间片的轮转调度算法,每一个作业运行一个时间片,在就绪队列中循环运行。
A B A C B D A E C B D A E C B C E
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
周转时间:从作业到达的时间到运行结束的时间的差。
代权周转时间:周转时间/服务时间
MFQ多级反馈队列调度算法
调度机制:
- 设置多个就绪队列
- 每个队列都采用FCFS调度算法
- 按队列优先级调度
实时调度
实现实时调度的条件:
假定系统中有m个周期性任务,处理时间表示为 C i C_{i} Ci,周期时间表示为 P i P_{i} Pi ,则在单处理机情况下,必须满足下式:
单个处理机: ∑ i = 1 m C i P i ≤ 1 \sum_{i=1} ^{m} \frac{C_{i}}{P_{i}} \le 1 i=1∑mPiCi≤1
N个处理机: ∑ i = 1 m C i P i ≤ N \sum_{i=1} ^{m} \frac{C_{i}}{P_{i}} \le N i=1∑mPiCi≤N
实时调度算法分类:
EDF最早截止时间优先算法
根据任务的截止时间确定任务的优先级,任务的截止时间越早,优先级越高。
LLF最低松弛度优先算法
松弛度=必须完成时间-其本身的运行时长-当前时间
死锁
资源:可重用资源和可消耗资源,可抢占资源(可被优先级高的资源抢占)和不可抢占资源(分配之后不能强行收回,只能等用完释放)
计算机系统中的死锁
- 竞争不可抢占资源引起死锁
- 竞争可消耗资源引起死锁
- 进程推进顺序不当引起死锁
死锁的定义:在一组进程中发生死锁的情况下,这组死锁进程中的每个进程都在等待另一个思索进程所占有的资源,或者说每个进程所等待的事件是该组中其他进程释放所占有的资源。
产生死锁的必要条件:
- 互斥条件
- 请求和保持条件
- 不可抢占条件
- 循环等待条件
死锁的处理方法:预防死锁、避免死锁、检测死锁、解除死锁。
死锁预防
由于互斥条件是非共享设备所必须具备的条件,不仅不能改变,还应加以保证。因此预防死锁主要是破坏产生死锁的后三个条件。
-
请求和保持条件
当一个进程在请求资源时,他不能持有不可抢占资源。
-
不可抢占条件
实现比较复杂
-
循环等待条件
对系统资源类型进行线性排序,规定每个进程必须按序号递增顺序请求资源。
死锁避免
安全状态:处于安全状态可以避免发生死锁,如果处于不安全状态,则可能进入死锁状态。
如果存在一个或多个安全序列,则称系统是安全的。
银行家算法:
检测某一个时刻的安全性
对于每一个请求,都先尝试给它分配,如果分配之后系统安全的,则为他分配资源。
第四章 进程同步
进程同步概念
两种形式的制约关系
- 互斥关系
- 同步关系
临界资源
进程中使用需要使用互斥的方式,这样的资源称为临界资源。
进程共享变量:
int in=0,out=0,counter=0;//in out 分别表示输入输出指针 counter表示产品数量
item buffer[n];//n个缓冲区
生产者:
void producrer(){
while(true){
生产一个产品nextp
...
while(counter==n);//如果已经放满了,阻塞
buffer[in]=nextp;
in=(in+1)%n;
counter++;
}
}
消费者:
void consumer(){
while(true){
while(counter==0);//没有产品消费,阻塞
buffer[out]=nextp;
out=(out+1)%n;
counter--;
消费一个产品
...
}
}
临界区问题
解决临界区问题的同步机制都应遵循下述四条准则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
信号量机制
- 整型信号量,PV操作
wait(s){//申请
while(s>=0);
s--;
}
signal(s){//释放
s++;
}
- 记录型信号量
增加一个进程链表指针list,用于连接上述所有等待进程。
生产者消费者问题
加了互斥信号量,empty,full分别表示空缓冲区和满缓冲区。
生产者:
void producrer(){
while(true){
生产一个产品nextp
...
wait(empty);
wait(mutex);
while(counter==n);//如果已经放满了,阻塞
buffer[in]=nextp;
in=(in+1)%n;
counter++;
signal(mutex);
signal(full);
}
}
第五章 存储器的管理
多层结构的存储器
CPU寄存器:寄存器
主存储器:主存储器、高速缓存、磁盘缓存
辅助存储器:固定磁盘、可移动存储介质
可执行存储器:寄存器和主存储器又称为可执行存储器。
主存储器:简称主存或内存,也称为可执行存储器,是计算机系统中的主要部件,用于保存进程运行是的程序和数据。
寄存器:用于暂时存放参与运算的指令、数据和运算结果等内容。
装入和链接
程序的装入:
- 绝对装入方式:要求对内存位置非常熟悉,程序数据修改就要修改地址,适用于单道程序。
- 可重定位装入方式:映射,多道程序环境。
- 动态运行时装入方式:等到真正要运行的时候才把逻辑地址映射到物理地址。
程序的链接:
-
静态链接:运行之前链接成一个完整的模块,以后不再拆开。
需要解决两个问题:
- 修改相对地址
- 变换外部调用符号
-
装入时动态链接
采用边装入边链接的方式。
优点:
- 便于修改和更新
- 便于实现对目标模块的共享
-
运行时动态链接:对某些模块的链接推迟到程序执行时才进行。
对换与覆盖
对换是指把内存中暂时不能运行的进程或程序数据,转移到外存上,一边腾出足够的内存空间,再把已具备运行条件的进程或所需要得程序或数据调入内存,进而实现所谓的调换。
对换的类型:整体对换、页面对换。
对换区的主要目标:对换区只占用存储器小部分空间,但是它对换的操作频率非常高所以使用连续分配管理方式才能提高进程换入换出的速度,然后才是提高文件存储空间的利用率。
连续分配存储管理方式
单一连续分配
固定分区分配
动态分区分配
- 基于顺序搜索动态分区分配算法
- 首次适应算法
- 循环首次适应算法
- 最佳适应算法
- 基于索引搜索动态分区分配算法
- 快速适应算法
- 伙伴系统
- 哈希算法
动态重定位分区分配
紧凑:将小分区合并成大分区。
动态重定位分区分配算法:在动态分区分配算法加入紧凑功能。
分页存储管理方式
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
分页存储管理的基本方法
页号+偏移量
若给定一个逻辑地址空间中的地址为A,页面大小为L,则页号P和页内地址d可按下式:
P=int(A/L)
d=A % L ;
这里计算的时候单位需要统一。
地址变换结构
-
基本的地址变换机构
从页面找到页号和块号,和起始地址,最后映射乘物理地址。
有效访问时间EAT=t+t
-
具有快表的地址变换机构
先查快表,快表没有查到,则查页表
假设快表命中率为 a ,时间为 m ,
EAT=a*m+(1-a)*(t+m)+t
两级页表和多级页表
分段存储方式
分段存储要实现以下需要:
- 方便编程
- 信息共享
- 信息保护
- 动态链接
- 动态增长
基本原理:
段表每一项:段号+段长+起始地址
分页和分段的主要区别:
- 页是信息的物理单位
- 页的大小固定且由系统决定
- 分页的用户程序地址空间是一维的。
第六章 虚拟存储器
基本概念
常规存储器的特征:
- 一次性
- 驻留性
局部性原理:
- 时间局限性:某条指令被执行,在不久之后它又会被执行。
- 空间局限性:一段时间放的存储空间,在一定的范围之内。
虚拟存储器:先装入小部分页面和数据,在有需要的时候再从外村申请页面。
其逻辑容量由内存容量和外村容量之和决定,其运行速度接近内存速度,而每个存储位的成本确接近于外存。
特征:多次性、对换性、虚拟性
请求分页存储管理方式
页表机制:
页号+物理块号+状态位+访问字段+修改位+外存地址
页面置换算法
OPT最佳页面置换算法
选择未来最长时间内不会被访问的页面。
FIFO先进先出页面置换算法
是最早出现的页面置换算法,总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
LRU最近最久未使用页面置换算法
在当前页面之前最久未被使用的页面将它淘汰。
第七章 输入/输出系统
磁盘调度算法
FCFS调度算法
先来先服务,按顺序逐一调度。
SSTF调度算法
选择与当前磁头距离最近的。
SCAN调度算法 电梯算法
按给定固定方向扫描,最近的。
CSAN
扫描到尾部,立即回到前面需要的地方。
题目:
相关临界区是指并发进程涉及到相同变量的哪些程序段。
16.一种既有利于短小作业又兼顾到长作业的作业调度算法是( )。
A、先来先服务 B、轮转
C、最高响应比优先 D、均衡调度
17.两个进程合作完成一个任务。在并发执行中,一个进程要等待其合作伙伴发来消息,或
者建立某个条件后再向前执行,这种制约性合作关系被称为进程的( )。
A、互斥 B、同步 C、调度 D、伙伴
5.信号量被广泛用于三个目的是( 同步 )、( 互斥 )和描述前趋关系。
6.程序并发执行时的特征是( 间断性 )、( 失去了封闭性 )、( 不可再现性 )和独立性。
使用信号量机制解决独木桥问题
int eastcount=0,westcount=0;
semaphore eastmutex=1,westmutex=1,bridge=1;
东方:
while(true){
P(eastMutex);
eastCount++;
if(eastCount == 1)
P(brigde);
V(eastMutex);
上桥
下桥
P(eastMutex);
eastCount--;
if(eastCount == 0||eastCount == 100)
V(brigde);
V(eastMutex);
}
西方:
while(true){
P(westMutex);
westCount++;
if(westCount == 1)
P(brigde);
V(westMutex);
上桥
下桥
P(westMutex);
westCount--;
if(westCount == 0 || westCount==100) V(bridge);
V(westMutex);
}