第一章
基本知识
- 硬件:中央处理器,输入输出设备等,提供基本的计算资源。
- 应用程序:规定了按何种方式使用这些资源来解决用户的计算问题。
- 操作系统:控制和协调各用户的应用程序对硬件的分配与使用,提供正确使用应用程序和硬件的方法。
- 特征:并发(两个或多个事件在同一时间间隔发生),共享(资源共享),虚拟,异步(进程的执行走走停停)
- 操作系统是计算机系统资源的管理者:处理机管理,存储器管理,文件管理,设备管理。
- 作为用户与计算机硬件系统之间的接口:命令接口:用户通过输入命令,控制电脑,程序接口:用户可以通过在程序中使用系统调用命令来请求操作系统提供服务。
- 中断:外中断,强迫中断,来自CPU执行命令以外的事情发生,当中断或异常发生时,运行用户态的CPU会立即进入核心态,通过硬件实现。
- 异常:内中断,源自CPU执行指令内部的事件,指令中断,硬件故障,软件中断。
第二章 进程管理
进程
- 由多程序并发执行而引出的。
- 定义:程序的一次运行,进程实体的运行过程,系统进行资源分配和调度的一个独立单位。
- 基本特征
动态性:最基本的特征,进程是动态的产生,变化和消亡的。
并发性:多个进程实体,同存于内存中,能在一段时间内同时运行。
独立性:独立运行,独立获得资源和独立接受调度的基本单位。
异步性:进程具有执行的间断性,进程按各自独立的,不可预知的速度前进。异步性导致执行结果不可再现性(多次执行的结果不一样)配置相应的进程同步机制。
结构性:程序段:能够被进程调度程序调度到CPU执行的程序代码段,多个进程可以运行同一个程序,数据段:进程对应的程序加工处理的原始数据,程序执行时产生的中间或最终结果。进程控制段(PCB:进程实体的一部分,进程存在的唯一标志)
- 目的:更好的使多道程序并发执行,以提高资源的利用率和系统吞吐量。
进程的状态与转换
- 创建状态:申请空白PCB(程序控制块),向PCB中填写一些控制和管理进程的信息,分配运行时所必需的资源
- 就绪状态:只要获得处理机就可以运行。
- 运行状态:在处理机上运行
- 阻塞(等待)状态:进程正在等待除处理机以外的某一件事而暂停运行。
- 结束状态:正常结束或其他原因中断退出。
线程
- 定义:轻量级进程,一个最基本的CPU执行单元,程序执行的最小单元,被系统独立调度和分派的基本单位,不拥有系统资源。
- 组成:线程ID,程序计数器,寄存器集合,堆栈
- 引入线程后,进程只作为除CPU以外系统资源的分配单元,线程则作为处理机的分配单元。
调度
- 进程在操作系统内核程序临界区中,需要独占式访问共享数据,理论上必须加锁,在原子操作过程中:加锁,解锁,中断现场保护,恢复等,不应该也不能进行进程调度与切换。
- 进程的调度方式:当某一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,此时该如何分配处理机。非剥夺调度式,剥夺调度式。
调度的基本准则:
- CPU利用率:尽可能使CPU保持“忙”状态
- 系统吞吐量:单位时间内CPU完成作业的数量
- 周转时间:作业提交到作业完成。戴权周转时间=周转时间/实际运行时间
- 等待时间:进程处于等处理机状态时间总和
- 响应时间:从用户提交请求到系统首次产生响应所用的时间。
典型的调度算法
- 先来先服务:每次从就绪队列中选择最先进入的进程,分配处理机,使之运行,直达完成或因某种原因而阻塞时才释放,有利于CPU繁忙型,不利于I/O繁忙型。
- 短作业有先:选择运行估计运行时间最短的进程。可能导致长作业长期不被处理(“饥饿现象”)但它的平均等待,平均周转时间最少。
- 优先级调度:主要用于描述作业调度,每次从后备作业队列中选择优先级最高的一个或几个作业,分配运行的资源(内存,处理机),非剥夺式优先级调度算法,剥夺式优先级调度算法。能达到实时操作系统及时性的需求。
- 高响应比优先调度算法:主要用于作业调度,响应比=(等待时间+要求服务时间)/要求服务时间。
- 时间片轮转:将所有的就绪程序按到达时间的先后排列,从第一个进程开始,每个进程运行一个时间片。关键:时间片大小的选择。
- 多级反馈队列:设置多个不同优先级的队列(第一队优先级最高),优先级越高的队列最先运行,分配的运行时间片越小,每一队内采取时间片轮转方式运行,当新的进程进入时,将其放入第一队队尾,如果它不能在设置的时间片内完成,则将该进程放入第二队队尾,在当前队列分配的时间片内不能完成,则将其放入下一队队尾,直到完成。仅当上一级队列为空时,才运行当前队列中的进程。
- 后三种保证每个任务在一定时间内分配到时间片,并轮流占用CPU,适合分时操作系统。
进程同步
- 临界资源:一次仅允许一个进程使用的资源。
- 同步:进程间因相互合作而产生的直接制约关系。
- 互斥:间接制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许访问此资源。
同步机制
- 空闲让进
- 忙着等待
- 有限等待
- 让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。
信号量
- 解决互斥与同步,只能被两个标准的原语 wait(s) : P操作,signal(s):V操作。
管程
- 由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能够初始化并改变管程中的数据和同步进程。
- 一个语言成分,管程的互斥访问完全由编译程序在编译时自动添加,无需程序员关注,且保证正确。
死锁
- 多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都无法推进。
- 对系统中不可剥夺资源的竞争,进程推进顺序不合理,进入相互等待对方释放资源。
死锁产生的必要条件/死锁预防
- 互斥条件:进程要求对所分配的资源进行排他性控制。(允许系统资源都能共享使用,可行性不强)
- 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,只能自己释放。(释放已经保持的所有资源,待以后需要时再重新申请)
- 请求和保持条件:进程已经保持了至少一个资源,但又提出新的资源请求,而它请求的资源又被其他进程占有,此时请求进程被阻塞,但对自己保持的资源又不释放。(预先静态分配,进程在运行前一次申请完它所需要的全部资源,在资源未满足前,不把它投入运行,严重浪费系统资源)
- 循环等待:进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。(采用顺序资源分配法,给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源一次申请完)。
死锁处理策略
- 预防死锁:设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个。
- 避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态。
- 死锁的检测及解除
死锁避免
- 安全状态:系统能按某种进程推进顺序(P1,P2,…Pn)为每个进程分配其所需资源,直至满足每个进程对资源的最大需求,每个进程都能顺序的完成,这样的进程顺序成为安全序列。能找到安全序列的状态为安全状态,找不到则是非安全状态。
- 不安全状态不一定是死锁状态,只是可能进入死锁状态。
- 银行家算法:采用预分配策略检测分配完成是系统是否处在安全状态,如果不处在安全状态则不进行资源分配。
- 操作系统:银行家
- 操作系统管理的资源:银行家的资产
- 进程:用户
- 当进程首次申请资源时,如果系统现存的资源可满足它的最大需求量,则按当前申请量分配资源,否则推迟分配。
- 当进程在执行中继续申请资源时,先判断它已占有的资源与本次申请资源是否超过它的最大需求量,若超过则拒绝分配,若没超则测试现存的资源是否能满足它还需要的最大需求量,若满足则按当前申请量分配资源,否则推迟分配。
- 数据结构:系统可利用资源矢量:Available, 最大需求矩阵Max,分配矩阵Allocation:已分配给每个进程的资源数。需求矩阵Need:每个进程尚需的各类资源。
- 安全性算法:WOrk=Avalible,Finish:系统是否有足够的资源分配给进程,初始值false。Finish[i]=false,Need[i,j]<=Work[j].如果所有的进程都满足Finish[i]=true,则系统处于安全状态。
死锁检测
- 资源分配图:进程指向资源:进程请求资源,资源指向进程:向进程分配了资源。
- 利用死锁定理(使资源分配图中,能够顺利完成的进程成为孤立点)简化资源分配图,不可完全简化的资源分配图,则进入死锁。
- 解除:资源剥夺,撤销进程,进程回退。
作业:用户要求计算机完成的一串任务。
内存管理
- 操作系统对内存的划分和动态分配。
内存管理的功能
- 内存空间的分配与回收
- 地址转换:在多道程序环境下,程序中逻辑地址与内存中物理地址不可能一致,因而存储管理须将逻辑地址转换成相应的物理地址。
- 内存空间扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
- 存储保护:保证各道作业在各自的存储空间内运行,互不干扰。