目录
5.典型调度算法【先来先服务调度算法 短作业优先调度算法 时间片轮转调度算法 优先级调度算法 高响应比优先调度算法 多级反馈队列调度算法】
5.经典同步问题【生产者-消费者问题 读者-写者问题 哲学家进餐问题】
一、操作系统概述
(一)操作系统的概念、特征、功能和提供的服务
(二)操作系统的发展与分类
(三)操作系统的运行环境
1.内核态与用户态
2.中断、异常
3.系统调用
二、进程管理
(一)进程与线程
1.进程概念
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。
程序是指令、数据及其组织形式的描述,进程是程序的实体。
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
2.进程的状态与转换
进程的状态
新的:进程正在创建
运行:指令正在执行【1次只有1个进程可在1个处理器上运行】
等待:进程等待发生某个事件(如I/O完成或收到信号)
就绪:进程等待分配处理器
终止:进程已经完成执行
进程的状态转换
3.进程控制
PCB 进程控制块
进程状态
进程编号
程序计数器
寄存器(状态)
内存界限【内存管理信息】
打开文件列表
4.进程组织
上下文切换
切换CPU到另一个进程需要保存当前进程状态和恢复另一个进程的状态
5.进程通信【共享存储系统 消息传递系统 管道通信】
进程间通信允许进程相互交换数据与信息
共享存储系统
要求协作进程共享一个内存区域,并且应用程序开发人员需要明确编写代码,以访问和操作共享内存
消息传递系统
消息传递提供一种机制,以便允许进程不必通过共享地址空间来实现通信和同步
对分布式环境特别有用
管道通信
普通管道允许父进程和子进程之间的通信
命名管道允许不相关进程之间的通信
6.线程概念与多线程模型
线程(英语:thread)是操作系统能够进行运算调度的最小单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程是独立调度和分派的基本单位。
多线程模型
多对一模型
多个线程不能并行运行在多处理核系统上
内核一次只能调度一个线程
一对一模型
允许多个线程并行陨星在多处理器系统上
不要创建太多线程
多对多模型
可以创建任意多的用户线程
相应内核线程能在多处理器系统上并发执行
(二)处理机调度
1.调度的基本概念
进程调度器选择一个可用进程到CPU上执行
2.调度的时机、切换与过程
3.调度的基本准则
最大化
CPU使用率
40% 低负荷系统
90% 高负荷系统
吞吐量
在一个时间单元内进程完成的数量
最小化
周转时间
从进程提交到进程完成的时间段
等待进入内存+在就绪队列中等待+在CPU上执行和I/O执行
等待时间
在就绪队列中等待所花时间之和
响应时间
从提交请求到产生第一相应的时间
4.调度方式
短期调度
短期调度程序(CPU调度程序)从准备执行的进程中选择进程,并分配CPU
中期调度
中期调度程序可将进程从内存(或从CPU竞争)中移出,从而降低多道程序难度
之后,进程可被重新调入内存,并从中断处继续执行
长期调度
长期调度程序(或作业调度程序)从大容量存储设备(通常为磁盘)的缓冲池选择进程,加到内存,以便执行
单处理器调度
多处理器调度
非对称多处理
让一个处理器处理所有调度决定、I/O处理以及其它系统活动
其他的处理器只执行用户代码
对称多处理
每个处理器自我调度
5.典型调度算法【先来先服务调度算法 短作业优先调度算法 时间片轮转调度算法 优先级调度算法 高响应比优先调度算法 多级反馈队列调度算法】
FCFS
先来先服务调度算法
先请求CPU的进程首先分配到CPU
SJF
短作业优先调度算法
当CPU变为空闲时,它会被赋给具有最短CPU执行的进程
如果两个进程具有同样长度的CPU执行,那么可以用FCFS来处理
RR
时间片轮转调度算法
将就绪队列视为进程的FIFO队列
新进程添加到就绪队列的尾部
进程少于时间片的CPU执行,进程本身会自动释放CPU,调度程序接着处理就绪队列的下一个进程
进程的CPU执行大于一个时间片,进行上下文切换,再将进程加到就绪队列的尾部,调度程序会选择就绪队列内的下一个进程
PS
优先级调度算法
每个进程都有一个优先级与其关联,而具有最高优先级的进程会分配到CPU
本书(《操作系统概念(第九版)》)用低数字表示高优先级
(三)同步与互斥
1.进程同步的基本概念
2.实现临界区互斥的基本方法【软件实现方法 硬件实现方法】
软件实现方法【6.3 Peterson解决方案】
硬件实现方法【6.4硬件同步】【6.5互斥锁】
15-2. 要实现临界区,必须采用基于硬件的解决办法。
错。可以用基于软件/算法的方法,例如Peterson算法。
3.信号量
【6.6信号量】
16-1. 如果信号量S的当前值为 -5 时,则表示系统中共有 5 个等待的进程。
错。S=-5表示当前有5个进程等待进入该信号量所对应的临界区。
【P183】如果信号量的值为负,那么它的绝对值就是等待它的进程数。
16-2. 取值为0或者1的信号量只能实现互斥访问。
错。信号量可以实现互斥和同步。
4.管程
管程是由局部于自己的若干公共变量及其说明和所有访问这些公共变量的过程所组成的软件模块。
5.经典同步问题【生产者-消费者问题 读者-写者问题 哲学家进餐问题】
生产者-消费者问题
生产者:为消费者生产满的缓冲区
wait(empty);signal(full);
消费者:为生产者生产空的缓冲区
wait(full);
signal(empty);
int n;
semaphore mutex=1;//缓冲池访问的互斥要求
semaphore empty=n;//空的缓冲区数量
semaphore full=0;//满的缓冲区数量
(四)死锁
1.死锁概念
16-3. 发生死锁时系统一定处于不安全状态。
对。发生死锁时找不到一个安全序列。
16-4. 资源分配图中存在环时,系统中某些进程处于死锁状态。
错。当每种资源实例个数为一时,在环中的每个进程处于死锁状态。但是当资源实例数量不唯一时,不一定处于死锁状态。
16-5.如果一个进程只需要一个资源即可完成,那么这个进程一定不会处于死锁状态。
对。因为不满足死锁必要条件中的持有并等待。
2.死锁处理策略
3.死锁预防
4.死锁避免【系统安全状态 银行家算法】
15-3. 不安全状态未必会导致死锁的发生;始终处于安全状态也不能保证死锁一定不会发生。
错。安全一定无死锁。
15-1. 银行家算法只能保证系统处在安全状态,但不能保证死锁不发生。
错。安全一定无死锁。