第一章
操作系统的目标与应用环境有关。
查询系统中所用的OS,希望能提供良好的人—机交互性;推动分时系统形成和发展也是
工业控制、武器控制以及多媒体环境下的OS,要求其具有实时性;
微机上配置的OS,则更看重的是其使用的方便性。
操作系统的性质
操作系统的作用
OS处于用户与计算机硬件系统之间,用户通过OS来使用计算机系统。
计算机系统可将多种硬件和软件资源分为四类:处理机(分配和控制处理机)、存储器(内存的分配与回收)、I/O设备(I/O设备的分配(回收)与操纵)以及文件->包括数据和程序(文件的存取、共享和保护)。
3. OS实现了对计算机资源的抽象(数据结构和I/O操作命令)
推动操作系统发展的主要动力
操作系统的发展过程
20世纪50年代中期,出现了第一个简单的批处理OS->60年代中期开发出多道程序批处理系统->推出分时系统->与此同时,用于工业和武器控制的实时OS->20世纪70到90年代,了微型机、多处理机和计算机网络、微机OS、多处理机OS和网络OS
单道批处理系统 (实现对作业的连续处理)
多道批处理系统(提高资源的利用率和系统吞吐量)
设计现代操作系统的主要目标是提高资源利用率和方便用户。
单道批处理系统实在解决人机矛盾和cpu和I/O设备速度不匹配的矛盾中发展起来的。
在单处理机环境下的多道程序设计具有多道、宏观上同时运行和微观上交替运行的特点。
批处理系统有着高的资源利用率和系统吞吐量;分时系统能获得及时响应;实时系统具有实时特征。
共同具有并发、共享、虚拟和异步四个基本特征。
共享:资源复用
临界资源:在一段时间内只允许一个进程访问的资源,称为临界资源。Ex打印机属于临界资源
并发和共享是多用户多任务OS的两个最基本的特征,它们互为存在的条件。
虚拟
Ex虚拟处理机技术、虚拟设备技术
2.频分复用技术:信道(称为频带)
3. 空分复用技术:存储器的空闲空间分区
异步
多道程序、多个进程并发执行
操作系统的主要功能(引入OS的主要目的是,为多道程序的运行提供良好的运行环境)
处理机的管理功能
内存分配(静态和动态):作业装入
1.静态:不能申请新空间、不能移动
2.动态:允许作业在运行过程中继续申请新的附加内存空间,也允许作业在内存中“移动”。
地址映射
多道程序、逻辑地址与其在内存空间中的物理地址并不相一致(数组下标)、为保证程序能正确运行、需要在硬件的支持下完成。
内存扩充
虚拟扩大内存,实现请求调入功能、置换功能。
设备管理应具有缓冲管理、设备分配和设备处理以及虚拟设备等功能。
文件管理功能
1. 文件存储空间的管理
2. 目录管理
操作系统与用户之间的接口
1.用户接口(联机、脱机、图形用户接口)
2.程序接口
分层结构的主要缺点是系统效率降低。
经常利用“机制与策略分离”的原理来构造OS结构:
机制:实现某一功能、具体执行机构。
策略:在机制的基础、参数和算法实现该功能的优化,或达到不同的功能目标。
微内核功能:进程(线程)管理、低级存储器管理、中断和陷入处理
DAG
重量表示执行时间、不能连续。
第二章
进程
(原语)
3.阻塞(Block)状态:正在执行的进程由于发生某事件暂时无法继续执行。
引起创建进程
1.用户登录。
2.作业调度。
3.提供服务。(系统内核为用户创建新进程)
4.应用请求。(用户进程自己创建新进程)
引起进程阻塞和唤醒的事件
1.向系统请求共享资源失败。
2.等待某种操作的完成。
3.新数据尚未到达。
4.等待新任务的到达。
两种制约关系
进程的异步性
进程在运行过程中是否能获得处理机运行与以怎样的速度运行,并不能由进程自身所控制。
临界资源:
在一段时间内只允许一个进程访问的资源。
OS管理的这些数据结构
一般分为以下四类:内存表、设备表、文件表和用于进程管理的进程表(PCB)。
生产者消费者(进程同步)
数组buff表示缓冲池
整型变量counter计数,计算商品,两个进程共享变量counter
生产和消费者满足互斥(提出申请,才能使用)和同步(相互合作)
输入指针in指向生产者将存放数据的存放单元:
每当生产者进程生产并投放一个产品后,输入指针加1;输入指针加1表示成 in=(in+1)% n。
输出指针out来指示消费者将取数据的存储单元:
每当消费者进程取走一个产品后,输出指针加1,输出指针加1表示成out=(out+1)% n。
(in+1) mod n=out时表示缓冲池满;in=out表示缓冲池空。
生产者进程中局部变量nextp
用于暂时存放每次刚生产出来的产品
消费者进程中局部变量nextc
用于存放每次要消费的产品。
Mutex为互斥信号量,初值为1,取值范围为(-1,0,1)。
Mutex=1,表示两个进程皆未进入需要互斥的临界区;
Mutex=0时,表示有一个进程进入临界区;
Mutex=-1时,表示有一个进程正在临界区运行,另外一个进程被阻塞在链表中,需要被当前已在临界区的进程退出时唤醒。
进程调度相关
进程状态:
指明进程的当前状态,进程调度和对换时的依据;
进程优先级:
用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机。
事件:
是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。
操作系统内核相关
中断处理
Ex系统调用、键盘命令的输入、进程调度、磁盘驱动等。
时钟管理
Ex时间片用完时,需要时钟管理产生一个中断信号,促使调度程序重新进行调度。
原语操作
Ex原语和一般的程序区别。原子操作在系统态下执行,常驻内存。
操作系统内核功能
1.支撑(中断处理、时钟管理、原语操作)
2.资源管理(进程、存储器、设备管理)
同步机制
让权等待、空闲让进、有限等待、忙则等待
信号量机制
1.主要
wait(S)申请临界资源,p
signal(S)释放临界资源,v
记录型详解
S>list初值为空,暂无阻塞(对它wait表示申请,signal归还)
利用信号量实现前驱关系ex:wait(S)
设置一个初始值0的信号量S,signal放前驱之后,wait放后继之前
利用信号量实现进程互斥ex:wait(mutex)
设置一个初始值1的信号量mutex,临界区放在wait和signal之间
管程
作用:利用共享数据结构抽象地表示系统中的共享资源
形式为:condition x, y(变量可表示为X.wait和X.signal或cwait(x)和csignal(x))
每个条件变量保存一个链表。
x.wait(或cwait(x)):正在调用管程的进程因x条件需要(x条件为false时)被阻塞或挂起,则调用x.wait将自己插入到x条件的等待队列上,并释放管程,直到x条件变化。此时其它进程可以使用管程。
x.signal (或csignal(x)):正在调用管程的进程发现x发生了变化,调用x.signal,重新启动一个因x条件而阻塞或挂起的进程。
信号量
分类:互斥(初始化为1)和资源
互斥信号量mutex:
实现诸进程对缓冲池的互斥使用
资源信号量empty和full:
分别表示缓冲池中空缓冲区和满缓冲区的数量。
读者-写者问题 (Reader与Writer)
wmutex:互斥信号量
readcount(整型变量): 记录谁是第一个读者,计数器、是一个临界资源,对Readcount的访问采用互斥的方式进行,因此设置一个互斥信号量rmutex。
rmutex:互斥信号量,对Readcount互斥访问。
进 程 通 信->信息交换
分类:共享存储器:数据结构(低级)储存区(高级)、管道通信:pipe文件、消息传递系统格式化的消息,高级,分为直接和间接、客户机-服务器系统主流、多对进程同时通信时端口和物理线路的多路复用问题
消息传递通信详解
对称
send(receiver,message):发送一个消息给接收进程
receive(sender,message):接收Sender发来的消息
Ex;Send(P2,m1),receive(P1,m1)
非对称
send(p,message):发送一个消息给进程P。
receive(id,message):接收来自任何进程的消息(id变量可设置为进行通信的发送方进程id或名字)
线程=进程-资源共享
进程崩溃,会导致其所属进程的所有线程崩溃
第三章
处理机调度(资源分配)
吞吐量
在单位时间内系统所完成的作业数
作业控制块JCB
作业运行的三个阶段和三种状态
作业调度也称接纳调度
根据计算机的系统规模、运行速度、作业大小、以及能否获得较好的系统性能等情况作出适当的抉择的。
计算公式
周转时间=作业完成时间-作业提交时间
带权周转时间=作业周转时间/作业实际运行时间
抢占与非抢占
优先权数越小,优先级越高
采用SJF算法时,人—机无法实现交互
高响应比优先
死锁->无法向前推进进程(银行家算法避免死锁)
银行家算法
请求(request)资源:如果请求资源失败,请求进程将会被阻塞或循环等待。
使用(use)资源:进程对资源进行操作,如用打印机进行打印;
释放(release)资源:当进程使用完后自己释放资源。
可利用资源向量Available
Available[j]=K,表示系统中现有Rj类资源K个。
Max(最大需求矩阵或总需求量)
Max[i,j]=K,表示进程i需要Rj类资源的最大数目为K。
分配矩阵Allocation(已分配量)
Allocation[i,j]=K,表示进程i当前已分得Rj类资源的数目为K。
需求矩阵Need(未来需要量)
Need[i,j]= Max[i,j]- Allocation[i,j]
银行家算法详解
Requesti是进程请求向量
Request i[j]=K,表示进程Pi需要K个Rj类型的资源。
当Pi发出资源请求后
Request i[j]≤Need[i, j],便转向Max(最大需求矩阵或总需求量); 否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
Request i[j]≤Available[j],便转向分配矩阵Allocation(已分配量); 否则,表示尚无足够资源,须等待。
分配资源
Available[j] = Available[j] - Request i[j];
Allocation[i, j] = Allocation[i, j] + Request i[j];
Need[i, j] = Need[i, j] - Request i[j];
第四章
存储器管理->冯诺依曼
高速缓存cache
三级存储器:CPU寄存器,主存,辅存(寄存器和主存储器又被称为可执行存储器)
程序运行步骤->装入内存,转变为一个可执行程序(3步)
1.编译:由编译程序对用户源程序进行编译,形成若干个目标模块
2.链接:由链接程序(Linker)将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块。形成逻辑地址的阶段
3.装入:由装入程序(Loader)将装入模块装入内存。
主存储器
简称内存或主存,保存进程运行时的程序和数据,也称可执行存储器。
寄存器
对寄存器的访问速度最快,主要存放操作数,或用作地址寄存器加快地址转换速度。
缓存(高速、磁盘)
高速缓存
存储器,介于寄存器和存储器之间,备份主存中较常用的数据,减少处理机对主存储器的访问次数,提速。
磁盘缓存
暂时存放频繁使用的一部分磁盘数据和信息,利用主存中的部分存储空间暂时存放从磁盘中读出(或写入)的信息。
连续分配存储管理(单一、 固定分区、动态分区分配(可变分区分配))
单一连续分配:
系统区和用户区两部分,整个内存的用户空间由该程序独占。
固定分区分配:
分几个用户区(用户1,用户2...),分区按其大小进行排队
最早出现,每个分区的大小固定,造成存储空间的浪费。
动态分区分配(可变分区分配):
空闲分区、空闲分区链,刚开始是个大分区后面分化成不同功能的部分
可将所有的空闲分区链接成一个双向链
分区分配
分配、回收
动态分区分配算法
基于顺序搜索的动态分区分配算法
1.首次适应(first fit,FF)算法
地址递增的次序链接,优先利用内存中低址部分的空闲分区
2.循环首次适应(next fit,NF)算法
从上次找到的空闲分区的下一个空闲分区开始查找
3.最佳适应(best fit,BF)算法
容量以从小到大的顺序形成一空闲分区链
4.最坏适应(worst fit,WF)算法
最大的空闲区,容量以从小到大的顺序形成一空闲分区链,适用于不太大的系统。
基于索引搜索的动态分区分配算法
1. 快速适应(quick fit)算法
分类搜索法,容量大小,每一类具有相同容量的所有空闲分区
2.伙伴系统(buddy system)
2的k次幂
3. 哈希算法
动态可重定位分区分配
1.紧凑:把原来分散的多个空闲小分区拼接成一个大分区
地址变换过程是在程序执行期间,随着对每条指令或数据的访问自动进行的。
对换(Swapping):交换技术
分页存储管理方式(连续和非连续)
连续存储:存在外零头,浪费存储空间。“紧凑”需要系统额外开销。
非连续存储:允许将一个进程的程序和数据存储在多个独立的分区中,充分利用内存空间。
离散分配方式(分页、分段、段页)
1.分页存储管理方式
将用户程序的地址空间分为若干个固定大小的区域,称为“页”或“页面”。将内存的物理空间划分成若干个物理块或页框。
2.分段存储管理方式
将用户的地址空间分为若干个大小不同的段,每段可定义一组相对完整地信息。作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息
先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。同时配置段表和页表,段表的内容与分段系统略有不同,它不再是内存始址和段长,而是页表始址和页表长度。
段表寄存器
用于存放段表始址和段表长度TL
页是信息的物理单位,段是信息的逻辑单位
第五章
虚拟存储技术:从物理上增加内存容量、从逻辑上扩充内存容量(用户所感觉到的内存容量会比实际内存容量大得多)具有请求调入功能和置换功能
内存分配策略
1.固定分配局部置换
2.可变分配全局置换
3.可变分配局部置换
进程总的页面访问次数
A = S + F(成功+失败)
缺页率
f=F/A(失败/访问次数)
页面置换(访问的页面不在内存,而需把它们调入内存,但内存已无空闲空间)算法
“抖动”状态
运行的进程太多,排队等待页面调进/调出的进程数目增加,每个进程的大部分时间都用于页面的换进/换出,而几乎不能再去做任何有效的工作
第六章
I/O系统的基本功能
1. 隐藏物理设备的细节
2. 与设备的无关性
3.提高处理机和I/O设备的利用率
目前对I/O设备有四种控制方式:
1.轮询的可编程I/O方式;
2.中断的可编程I/O方式;
3.直接存储器访问方式;
4.I/O通道方式。
软件/硬件(RW/HW)接口
I/O系统的分层(3层)
1.中断处理程序。
2.设备驱动程序。进程和设备控制器之间的通信程序,将上层发来的抽象I/O请求转换为对I/O 设备的具体命令和参数,装入控制器的命令和参数寄存器中。
3.设备独立性软件。设备命名、设备分配和数据缓冲
进程之间的切换是通过中断来完成的
设备驱动程序的功能:空闲完成忙则等待
常用的I/O控制方式是中断驱动和DMA方式
很多驱动程序的基本部分已经固化在ROM中
DMA控制器(3部分)
1.主机与DMA控制器的接口
2.DMA控制器与块设备的接口
3.I/O控制逻辑
寄存器
1.命令/状态寄存器CR:用于接收从CPU发来的I/O命令,或有关控制信息,或设备的状态。
2.内存地址寄存器MAR:在输入时,它存放把数据从设备传送到内存的起始目标地址,在输出时,它存放由内存到设备的内存源地址。
DMA工作过程
当CPU要从磁盘读入一数据块时,便向磁盘控制器发送一条读命令。该命令被送入命令寄存器CR中。同时,需要将本次要读入数据在内存的起始目标地址送入内存地址寄存器MAR中。将要读数据的字(节)数送入数据计数器DC中。还须将磁盘中的源地址直接送至DMA控制器的I/O控制逻辑上。然后启动DMA控制器进行数据传送。
DMA控制器每读入一个字(节)的数据,送入数据寄存器,将字节传送到MAR所指示的内存单元中,对MAR加1,DC减1,若DC内容为0,则传送完毕,由DMA控制器发出中断请求。
虚拟设备把一个物理设备变换成多个对应的逻辑设备
磁盘设备的I/O控制主要采取DMA方式
发出磁盘I/O请求后
用户程序-系统调用处理程序-设备驱动程序-中断处理程序