操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境的程序集合。
操作系统的基本特征包括:并发、共享、虚拟和异步。
-
并发是指两个或多个事件在同一时间间隔内发生。
-
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。操作系统的虚拟技术可归纳为:时分复用技术,如处理器的分时共享;空分复用技术,如虚拟存储器。
-
异步是指在多道程序环境下,允许多个程序并发执行,但由于自由有限,进程的执行不是一贯到底,而是走走停停,以不可知的速度向前推进,这就是进程的异步性。
进程:
目的:更好地描述和控制程序并发执行;
定义:进程是进程实体的一次运行,是系统进行资源分配和调度的一个独立单位;
组成:
- PCB:保存进程运行期间相关的数据,是进程存在的唯一标志
- 程序段:能被进程调度程序调度到CPU运行的程序代码段
- 数据段:存储程序运行期间的相关数据,可以是原始数据也可以是相关结果
进程状态:
-
状态种类:
- 运行状态:进程正在处理机上运行
- 就绪状态:进程已获得除处理机之外的一切所需资源
- 阻塞状态:进程正在等待某一事件而暂停运行
- 创建状态:进程正在被创建,尚未转到就绪状态
- 创建完成后转到就绪状态
- 结束状态:进程正从系统中消失,分为正常结束和异常退出
-
状态变化:
- 就绪->运行:经过处理机调度,就绪进程得到处理机资源
- 运行->就绪:时间片用完或在可剥夺系统中有更高优先级进程进入
- 运行->阻塞:进行需要的某一资源还没准备好
- 阻塞->就绪:进程需要的资源已准备好
进程控制:
- 创建:终端用户登录系统、作业调度、系统提供服务、用户程序的应用请求等;
- 终止:正常结束、发生异常、外界干预
- 阻塞:等待资源
- 唤醒:资源到达
- 切换:时间片用完、主动放弃处理机、被更高优先级的进程剥夺处理机
进程通信:
- 共享存储:
- 低级方式:基于数据结构的共享
- 高级方式:基于存储区的共享
-
消息传递:
- 直接通信方式:直接把消息挂到接收进程的消息队列
- 间接通信方式:挂到某个中间实体,接收进程找实体接收消息,类似电子邮件
- 管道通信:利用一种特殊的pipe文件连接两个进程
代价:
- 时间代价:进行进程间的切换、同步及通信等所付出的时间开销
- 空间代价:进程控制块及协调各运行机构所占用的内存空间开销
线程:
- 引入目的:为了更好的使多道程序并发执行,以提高资源利用率和系统吞吐量,增加并发程序
- 特点:是程序执行的最小单元,基本不拥有任何系统资源
- 实现方式:用户级线程、系统线程
调度:
调度层次:
- 作业调度(高级调度):选择处于后备状态的作业分配资源,发送频率低
- 内存调度(中级调度):选择暂时不能允许的进程调出内存,发送频率中等
- 进程调度(低级调度):选择就绪队列中合适的进程分配处理机,发生频率高
进程调度原因:合理的处理计算机软硬件资源
进程调度方式:
- 剥夺式:有更为重要或紧迫的进程需要使用处理机,立即分配
- 非剥夺式:有更为重要或紧迫的进程需要使用处理机,仍让当前进程继续执行
典型调度算法:
- 先来先服务:选择最先进入队列的
- 不可剥夺
- 短作业优先:选择完成时间最短的
- 优先级调度:选择优先级最高的
- 高响应比优先:选择响应比最高的
- 响应比Rp = (等待时间+要求服务时间) / 要求服务时间
- 时间片轮转:总数选择就绪队列中的第一个进程,但仅能运行一个时间片
- 绝对可抢占
- 多级反馈队列:时间片轮转调度算法和优先级调度算法的综合和发展
进程同步:
引入原因:协调进程之间的相互制约关系
制约关系:
- 同步:需要在某些位置上协调进程之间的工作次序而等待、传递信息所产生的制约关系
- 互斥:当一个进程进入临界区使用临界资源时,其他要求进入临界区的进程必须等待
临界资源:多个进程可以共享系统中的资源,一次仅允许一个进程使用的资源叫临界资源;
临界区互斥:访问临界资源的那段代码称为临界区
- 原则:空闲让进、忙则等待、有限等待、让权等待
- 基本方法:
- 软件实现:
- 单标志法:违背”空闲让进“原则
- 双标志法先检查:违背”忙则等待“原则
- 双标志法后检查:会导致”饥饿“现象
- 皮特森算法:单标志法和双标志法后检查的结合
- 硬件实现:
- 中断屏蔽法:进区关中断,出区开中断
- 硬件指令法:设立原子操作指令
- 信号量:利用PV操作实现互斥
- P操作即wait(S)
- V操作即signal(S)
- 软件实现:
管程:
- 定义:由一组数据以及定义在这组数据上的对这组数据的操作组成的软件模块
- 组成:
- 局部于管程的共享结构数据(变量)说明
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句,此外还需要为管程赋予一个名字
- 引入管程的目的:解决临界区分散所带来的管理和控制问题。在没有管程之前,对临界区的访问分散在各个进程之中,不易发现和纠正分散在用户程序中的不正地使用P、V操作等问题。管程将这些分散在各进程中的临界区集中起来,并加以控制和管理,管程一次只允许一个进程进入管程,从而便于系统管理共享资源,又能保证互斥。
死锁:
产生原因:非剥夺资源的竞争和进程的不恰当推进顺序
定义:多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进
解决方案:
-
预防死锁:
- 破坏互斥条件:
- 破坏不可剥夺条件:
- 破坏请求和保持条件:
- 破坏循环等待条件:
-
避免死锁:
- 安全状态:能找到一个分配资源的序列能让所有进程都顺利完成
- 银行家算法:采用预分配策略检查分配完成时系统是否处于安全状态
-
检测死锁:利用死锁定理化简资源分配图以检测死锁的存在