目录
一、操作系统引论
1.1操作系统的目标和作用
1.2操作系统的发展过程
1.3操作系统的基本特性
1.4操作系统的主要功能
二、进程的描述与控制
2.1前趋图
顺序执行与并发执行
2.2进程的描述
进程的基本状态及转换
进程控制块PCB
2.3 进程控制
进程的创建
2.4 进程同步
信号量机制
信号量的应用
生产者——消费者问题:
读者——写者问题:
哲学家进餐问题
前驱关系
三、处理机调度与死锁
3.1 处理机调度的层次和调度算法的目标
3.2 作业调度
先来先服务(FCFS)调度算法
短作业优先(SJF)调度算法
优先级调度算法(PSA)
高响应比优先(HRRN)调度算法
3.3 进程调度
时间片轮转(RR)调度算法
3.4死锁概述
预防死锁
避免死锁
银行家算法
检测与解除
四、存储器管理
4.1存储器的层次结构
4.2 连续分配
动态分区分配算法
动态可重定位分区分配
4.3 分页存储&分段存储
五、虚拟存储器
5.1 虚拟存储器概述
5.2 请求分页存储管理
页面调入策略
5.3 页面置换算法
六、输入输出系统
6.1 I/O系统的功能、模型和接口
6.2 I/O设备& 设备控制器
6.3 缓冲区管理
6.4 磁盘调度算法
七、文件管理
7.1 文件和文件系统
7.2 文件的逻辑结构
7.3 文件目录
7.4 文件共享
操作系统的概念:控制和管理计算机硬件与软件资源的计算机程序
操作系统的地位:配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充,现代计算机系统中最基本和最重要的系统软件
操作系统的目标:方便性、有效性、可扩充性、开放性
操作系统的作用:管理计算机系统资源,提高资源利用率和系统的吞吐量,作为用户和计算机硬件系统之间的接口
操作系统发展的主要动力:
1.不断提高计算机资源利用率
2.方便用户
3.硬件的不断更新换代(主要原因)
4.计算机体系结构的不断发展
5.不断提出新的应用需求
(1)1945——50年代中期:人工操作方式
缺点:1.一台计算机的全部资源由上机用户所独占
2.CPU等待人工操作→严重降低了计算机的资源利用率
(2)50年代末:脱机输入输出(Off-Line I/O)方式
优点:1.减少了CPU的空闲时间
2.提供了I/O速度
(3)50年代中期—60年代中期:单道批处理系统
虽然系统对作业的处理是成批进行的,但在内存中始终只保持一道作业,故称为单道批处理系统
缺点:不能充分地利用系统资源
(4)60年代中期:多道批处理系统
优点:
1.资源利用率高2.系统吞吐量大。
缺点:
1.平均周转时间长2.无交互能力。
(5) 分时系统
分时系统的特征:
(1)多路性:系统允许多个终端同时连接到一台主机上,并按分时原则为每个用户服务
(2)独立性:每个用户在各自的终端上进行操作,彼此之间互不干扰
(3)及时性:用户的请求能在很短时间内得到响应
(4)交互性:用户可通过终端与系统进行广泛的人机对话。
(6) 实时系统
实时系统的类型:工业(武器)控制系统,信息查询系统,多媒体系统,嵌入式系统
实时系统的特点:
(1)多路性:系统周期性地对多路现场信息进行采集,以及对多个对象或多个执行机构进行控制
(2)独立性:在实时控制系统中,对信息的采集和对对象的控制彼此互不干扰
(3)及时性:实时控制系统的实时性以控制对象所要求的截止时间来确定,一般为秒级到毫秒级
(4)交互性:在信息查询系统中,人与系统的交互性仅限于访问系统中某些特定的专用服务程序
(5)可靠性:在实时系统中,往往采取多级容错措施来保障系统和数据的安全性
基本特征:并发,共享,虚拟,异步
资源共享(资源复用):系统中的资源可供内存中多个并发执行的进程共同使用。
实现方式:
1.互斥共享:一个进程访问完并释放系统资源后,才允许另一进程对该资源进行访问。这种资源共享方式称为互斥式共享。在一段时间内只允许一个进程访问的资源称为临界资源(或独占资源)
2.同时访问:允许在一段时间内由多个进程同时对它们进行访问
并发和共享是多用户(多任务)OS的两个最基本的特征,又是互为存在的条件
虚拟技术:
1.时分复用:利用处理机为一用户服务的空闲时间,又转去为其他用户服务,提高处理机的利用率。
(1)虚拟处理机技术:利用多道程序设计技术,为每个程序建立至少一个进程,让多道程序并发执行。
(2)虚拟设备技术:将一台物理I/O设备虚拟为多台逻辑上的I/O设备,并允许每个用户占用一台逻辑上的I/O设备。
2.空分复用:利用存储器的空闲空间分区域存放和运行其它的多道程序,提高内存的利用率。
虚拟存储技术:本质上是实现内存的分时复用,通过分时复用内存的方式,使一道程序仅在远小于它的内存空间中运行。
异步:由于资源等因素的限制,进程的执行退出不可能“一气呵成”,而是以“停停走走”的方式运行。进程以不可预知的速度向前推进,即进程的异步性。
处理机管理功能:进程控制,进程同步,进程通信,进程调度,作业调度
存储器管理功能:内存分配,内存保护,地址映射,内存扩充
设备管理功能:缓冲管理,设备分配,设备处理
文件管理功能:文件存储空间的管理,目录管理,文件的读/写管理和保护
用户接口(联机用户接口,脱机用户接口,图形用户接口),程序接口
现代操作系统的新功能:系统安全,网络的功能和服务,支持多媒体
一个有向无循环图(DAG),用于描述进程之间执行的顺序。图中每个结点表示一个进程或程序段,结点间的有向边表示两个结点之间的偏序关系或前趋关系
进程(或程序)之间的前趋关系可用“→”表示,若进程Pi和Pj存在前趋关系,可表示为(Pi,Pj)∈→,或Pi→Pj 。
在前趋图中,没有前趋的结点称为初始结点,没有后继的结点称为终止结点
前趋图中不允许有循环,否则会产生不可能实现的前趋关系
顺序执行的特征:顺序性,封闭性,可再现性
并发执行的特征:间断性,失去封闭性,不可再现性
只有不存在前趋关系的程序之间才可能并发执行
进程的定义:进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
为了使参与并发执行的每个程序独立运行,必须为之配置一个专门的数据结构,称为进程控制块(PCB)。由程序段,相关的数据段和PCB构成了进程实体(进程映像)
PCB是判断进程存在的唯一标志
进程的特征:
(1)动态性:进程的实质是进程实体的执行过程,因此动态性是进程的最基本的特征。
(2)并发性:多个进程实体同存与内存中,且能在一段时间内同时运行。
(3)独立性:进程实体是一个能独立运行,独立获得资源和独立接受调度的基本单位。
(4)异步性:进程是按各自独立的,不可预知的速度向前推进
1.进程的三种基本状态
(1)就绪:一个进程获得了除CPU以外的所有资源,只要再获得CPU,便可立即执行。
(2)执行:进程已获得CPU,其程序正在执行的状态。在单处理机系统中,只有一个进程处于执行状态。
(3)阻塞:一个进程正在等待某事件发生(请求I/O,等待I/O完成等)而停止运行,即时把CPU分配给进程也无法运行。
2.三种基本状态的转换
挂起操作和进程状态的转换
活动就绪→静止就绪:当进程处于未被挂起的就绪状态时,称为活动就绪状态,此时进程可以接受调度。将该进程挂起后,转变为静止就绪状态,不再被调度执行。
活动阻塞→静止阻塞:当进程处于未被挂起的阻塞状态时,称为活动阻塞状态,将它挂起后,转变为静止阻塞状态。在其所等待的事件发生后,它将从静止阻塞变为静止就绪状态。
静止就绪→活动就绪:处于静止就绪的进程被激活后,将转变为活动就绪状态。
静止阻塞→活动阻塞:处于静止阻塞的进程被激活后,将转变为活动阻塞状态。
PCB的作用:
(1)作为独立运行基本单位的标志
(2)实现间断性运行方式
(3)提供进程管理与调度所需要的信息
(4)实现与其它进程的同步与通信
PCB中的信息:进程标识符,处理机状态,进程调度信息,进程控制信息
为了防止OS本身及关键数据遭受到应用程序的破坏,将处理机的执行状态分成系统态和用户态两种:
(1)系统态(管态,内核态):具有较高的特权,能执行一切命令,访问所有寄存器和存储区。
(2)用户态(目态):具有较低特权的执行状态,仅能执行规定的命令,访问指定的寄存器和存储区。
大多数OS内核都包含以下两方面的功能:
1.支撑功能
(1)中断处理
(2)时钟管理
(3)原语操作:由若干条指令组成的,用于完成一定功能的一个过程。是一个不可分割的基本单位
2.资源管理功能:
(1)进程管理
(2)设备管理
(3)存储器管理
进程的创建步骤:
(1)申请空白PCB
(2)为新进程分配其运行所需的资源
(3)初始化PCB
(4)如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列
引起进程终止的事件:
(1)正常结束
(2)异常结束
(3)外界干预
引起进程阻塞和唤醒的事件:
(1)向系统请求共享资源失败
(2)等待某种操作的完成
(3)新数据尚未到达
(4)等待新任务的到达
间接相互制约关系:进程在并发执行时,由于互斥共享系统资源致使程序之间相互制约
直接相互制约关系:多个进程为了完成同一项任务而相互合作
临界资源:进程只能以互斥的方式实现共享
进入区 | 检查欲访问的临界资源的代码 |
---|---|
临界区 | 访问临界资源的代码 |
退出区 | 将临界区正被访问的标志恢复为未被访问的标志的代码 |
剩余区 | 除进入区、临界区、访问区之外的代码 |
同步机制的规则:(1)空闲让进(2)忙则等待(3)有限等待(4)让权等待
整型信号量S:用于表示资源数目,除初始化外,仅能通过wait(S)和signal(S)访问
P操作:只要信号量S<=0,就会不断测试。未遵循让权等待,使进程处于忙等状态
wait(S){
while(S<=0);//资源不够则一直等待
S--;//资源数够则占用一个资源
}
V操作
signal(S)
{
S++;//使用完资源后释放资源
}
记录型信号量:采取让权等待策略,不存在忙等现象,采用了记录型的数据结构
typedef struct{
int value;//剩余资源数
struct process_control_block *list;//等待队列
}semaphore;
//P操作
wait(semaphore *S){
S->value--;//进程请求一个单位的资源
if(S->value<0)//该类资源分配完毕
block(S->list);//进程调用block原语自我阻塞
}
//V操作
signal(semaphore *S){
S->value++;//资源数目加1
if(S->value<=0)//该信号量链表中仍有等待该资源的进程被阻塞
wakeup(S->list);//调用wakeup原语将S->list的第一个进程唤醒
}
进程互斥:PV操作必须成对出现
semaphore mutex = 1;//将互斥信号量s初始化为1
Pa(){
while(1){
wait(mutex);//若资源未被访问,本次P操作必然成功,进入临界区。s=0,其他进程无法进入临界区
临界区;
signal(mutex);//释放资源
剩余区;
}
}
进程同步
问题分析:
semaphore mutex = 1;//互斥信号量,实现对缓冲区的互斥访问
semaphore empty = n;//同步信号量,表示空闲缓冲区的数量
semaphore full = 0;//同步信号量,表示产品的数量,即非空缓冲区的数量
producer(){
while(1){
生产一个产品;
P(empty);//消耗一个空闲缓冲区
P(mutex);
把产品放入缓冲区;
V(mutex);
V(full);//增加一个产品
}
}
sonsumer(){
while(1){
P(full );//消耗一个产品(非空缓冲区)
P(mutex);
从缓冲区取出一个产品;
V(mutex);
V(empty);//增加一个空闲缓冲区
问题分析:
semaphore rw = 1;//实现对文件的互斥访问
int count = 0;//记录当前有几个读进程在访问文件
semaphore mutex = 1;//实现对count变量的互斥访问
semaphore w = 1;//实现写优先
writer(){
while(!){
P(w);
P(rw);//写之前加锁
写文件;
V(rw);//写之后解锁
V(w);
}
}
reader(){
while(1){
P(w);
P(mutex);
if(count==0)
P(rw);
count++;
V(mutex);
V(w);
读文件;
P(mutex);
count--;
if(count==0)
V(rw);
V(mutex);
问题分析
semaphore chopstick[5]={1,1,1,1,1};
semapore mutex = 1;//互斥地取筷子
Pi(){
while(1){
P(mutex);
P(chopstick[i]);//拿左边的筷子
P(chopstick[(i+1)%5]);//拿右边的筷子
V(mutex);
吃饭;
V(chopstick[i]);//放左边的筷子
V(chopstick[(i+1)%5]);//放右边的筷子
思考;
处理机调度的层次:
1.高级调度:又称为长程调度或作业调度,调度对象是作业,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程,分配必要的资源,并将它们放入就绪队列。
2.低级调度:又称为进程调度或短程调度,调度对象是进程(或内核级线程)决定就绪队列中的=哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。进程调度是最基本的一种调度。
3.中级调度:又称为内存调度,主要目的是提高内存利用率和系统吞吐量。
运行频率:低级调度>中级调度>高级调度
处理机调度算法的共同目标:
(1)资源利用率
CPU的利用率=CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间)
(2)公平性
(3)平衡性
(4)策略强制执行
批处理系统的目标:
(1)平均周转时间短
周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔
(2)系统吞吐量高
(3)处理机利用率高
完成时间=开始时间+运行时间
响应时间=等待时间+运行时间
周转时间=完成时间-提交时间
分时系统的目标:
(1)响应时间快
(2)均衡性
实时系统的目标:
(1)截止时间的保证
(2)可预测性
死锁:多个进程在运行过程中因争夺资源而造成的一种僵局
死锁的起因:
1.竞争不可抢占性资源
2.竞争可消耗资源
3.进程推进顺序不当
产生死锁的必要条件:①互斥②请求和保持③不可抢占④循环等待
处理死锁的方法:①预防死锁②避免死锁③检测死锁④解除死锁
有n个进程、m个资源、每个进程所需要的资源数为k,
判断是否会发送死锁:m>=n(k-1)+1*
为真则不会发生死锁,为假会发生死锁
预防死锁的方法:破坏产生死锁的四个必要条件中的一个或几个
由于互斥条件是非共享设备的固有属性,不仅不能改变,还应加强,因此主要是破坏产生死锁的后三个条件
方法:在资源动态分配过程中,防止系统进入不安全状态
安全序列:系统按某种推进顺序为每个进程分配所需资源,满足每个进程对资源的最大需求,使每个进程都可顺利完成
安全状态:存在一个或多个安全序列,使系统不会发生死锁
不安全状态:不存在安全序列,系统可能会发生死锁
假设系统中有n个进程,m种资源
银行家算法的数据结构:
安全性算法:
资源分配图:
存储器管理的目标:
外部碎片:在分配单元间的未使用内存
内部碎片:在分配单元中的未使用内存
单一连续分配:
固定分区分配:将用户空间分为多个固定大小的分区,每个分区只装入一道作业
首次适应算法:
循环首次适应算法:
最佳适应算法:
最坏适应算法:
紧凑(拼接):通过移动内存中作业的位置,把多个分散的小分区拼接成一个大分区
动态重定位算法
分页存储
页表:为了知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表
分段存储
段表:为了保证程序正常运行,必须从物理内存中找到各个逻辑段的存放位置,需要为每个进程建立一张段映射表
分页、分段的区别:
页是信息的物理单位,分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,对用户是不可见的
段是信息的逻辑单位,分段的主要目的是更好地满足用户需求,对用户是可见的,用户编程时需要显式地给出段名
页的大小固定且由系统决定,段的长度不固定,决定于用户编写的程序
分页的用户进程地址空间是一维的,用户只需利用一个助记符即可表示一个地址
分段的用户进程地址空间是二维的,表示地址时,用户需要给出段名和段内地址
分段比分页更容易实现信息的共享和保护
不能被修改的代码称为纯代码或可重入代码(不属于临界资源),可以共享,可修改的代码不能共享
传统存储管理方式的缺点
虚拟内存的最大容量由计算机的地址结构确定
虚拟内存的实际容量=min(内存与外存之和,CPU寻址范围)
在程序接入时,将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,当访问的信息不在内存时,由操作系统负责将所需信息换出到外存
缺页中断机构
地址变换机构
驻留集:请求分页存储管理中给进程分配的物理块的集合
在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小
若驻留集太小,会导致缺页频繁,系统要花大量时间处理缺页,实际用于进程推进的时间很少
若驻留集太大:会导致多道程序并发度下降,资源利用率降低
工作集:在某段时间间隔里,进程实际访问页面的集合
驻留集大小不能小于工作集大小,否则进程运行过程中将频繁缺页
固定分配:系统为每个进程分配一组固定数目的物理块即驻留集大小不变
可变分配:先为每个进程分配一定数目的物理块,在运行期间根据情况做适当的增加或减少即驻留集大小可变
局部置换:发送缺页是只选进程自己物理块进行置换
全局置换:将系统保留的空闲物理块分配给缺页进程,或将别的进程持有的物理块置换到外存,再分配给缺页进程
固定分配局部置换:系统为每个进程分配一定数量的物理块,在运行期间不改变。若进程在运行中发送缺页,只能从该进程所在内存中的页面中选出一页换出,然后调入需要的页面
缺点:很难在刚开始就确定应为每个进程分配多少个物理块才算合理
可变分配全局置换:开始时为每个进程分配一定数量的物理块,系统会保持一个空闲物理块队列。当某进程发送缺页时,从空闲物理块中取出一块分配给该进程。若已无空闲物理块,则选择一个未锁定的页面换出外存,再将该物理块分配给缺页的进程。只要某进程发送缺页,都将获得新的物理块被选择调出的页可能是系统中任何一个进程中的页,因此被选中的进程拥有的物理块会减少,缺页率会增加
可变分配局部置换:开始时为每个进程分配一定数量的物理块,某进程发送缺页时,只允许从该进程自己的物理块中选出一个换出外存
何时:
何处:
最佳置换算法(OPT)
先进先出算法(FIFO)
最近最久未使用置换算法(LRU)
I/O系统分层
接口:①块设备接口②流设备接口③网络通信接口
I/O设备的类型
设备控制器
缓冲区是一个由专门的硬件寄存器组成的存储区域,也可利用内存作为缓冲区
使用硬件作为缓冲区的成本较高,容量也较小,一般利用内存作为缓冲区
缓冲区的作用:
T:磁盘把一块数据输入到缓冲区的时间
M:系统将缓冲区中的数据传到用户区的时间
C:CPU处理这块数据的时间
文件的属性:
无结构文件:文件内部的数据时一系列二进制流或字符流组成,又称流式文件
有结构文件:有一组相似的记录组成,又称记录式文件,每条记录有若干个数据项组成根据各条记录的长度是否相等,分为定长记录和可变长记录两种
文件控制块FCB
单级目录结构
两级目录结构
多级目录结构(树形目录结构)
基于有向无循环图DAG
基于符号链接