OS初识
操作系统的概念
操作系统是控制和管理计算机内各种硬件和软件资源,
有效组织多道程序运行的系统软件(或程序集合)
是用户和计算机之间的接口。
四大基本功能
- 储存管理
- 设备管理
- 作业和进程管理
- 文件管理
- (用户接口服务)
四个基本特征
并发性与共享性为两个最基本特征
- 并发:指两个或多个活动在同一时间间隔内发生
- 并行是同一时刻发生,单核处理器下处理多进程时,宏观上并发,微观上交替执行。
- 共享:多个进程共享有限的计算机操作系统资源
- 异步性:指各种事件的发生顺序不可预测
- 由于并发和共享,使得进程间相互制约变得不可预测
- 虚拟性:一个物理实体映射为多个对应的逻辑实体
- CPU就是每个进程的‘虚处理机’
CPU的执行状态
- 核心态:执行OS程序时的状态,有较高特权,可执行一切指令。
- 用户态:执行用户程序时所处的状态,权限较低,只能执行指令集中的非特权指令。
OS提供的三种接口
- GUI接口:图形界面。
- 命令行接口:由命令程序接收并解释,传递给OS内部程序执行。
- 程序接口:系统调用是OS内核与用户程序,应用程序之间的接口,位于OS系统最外层,所以内核之外的程序必须由系统调用菜能获得OS的服务。(调用操作系统的API)
几种典型系统
- 分时系统:一台计算机连接多个终端。
- 实时系统:指能在规定事件内完成对事件的处理。
实时性+高可靠性| 标题 | 实时系统| 分时系统| | --- | --- | --- | | 交互性 | 专业性强,对操作员要求高 | 应用更广 | | 实时性 | ms-ns级反应 | s级反应 | | 可靠性 | 要求更高,两套系统运行一套备用| 一般 | - 批处理系统:系统吞吐量大但是没有交互
进程与线程
杂记
- 资源分配的基本单位
进程,处理机调度单位线程 - 进程是动态的,程序是静态的
根本区别
进程的基本状态及其转换
- 运行态:正在被执行,占用CPU资源,进程数小于等于CPU数。
- 就绪状态:已经获得出了CPU之外的资源,等待分配处理器资源。
- 阻塞态:等待某个事件的发生(IO操作或者进程同步),在等待的事情发生前有资源也无法运行。
- 创建态:创建但是一般为还未加入主存中的新进程。
- 结束态:回收PCB之外的资源,将退出码传给父进程。
进程控制块CPB
- 概念:OS维护的用来记录进程相关信息的一块内存。
- 意义:
- 是进程组成中最关键的部分,
- 含有进程的描述信息和控制信息,
- 是进程动态的集中反映,
- 是系统对进程施行识别和控制的依据。
- 每个进程有唯一的进程控制块,操作系统根据PCB对进程实施控制和管理
- 进程的动态,并发特征是利用PCB表现的
- PCB是进程存在的唯一标志
结构体型信号量S
- S>0: 该类资源的可用数量
- S=0:没有可用的该类资源
- S<0:S的绝对值为被该资源阻塞的进程数
同步与互斥的概念
- 同步:同步进程通过共享资源来协调行动,在执行时间的次序上有一定约束。
- 互斥:逻辑上完全独立,但是由于需要使用同一个资源而相互制约且不具有时间次序特征。
线程
线程是进程中实施调度和分派CPU的基本单位。
临界资源与临界区
- 一次只允许一个进程使用的资源称为临界资源
- 每个进程访问临界资源的程序叫做临界区。一次只允许一个进程进入临界区。
- 进入前申请--获批后进入--执行后退出
进程间通信方式
- 管道通信,用于父子进程通讯
- 消息队列
- 共享内存
- 信号量
- socket
PV操作编程
生产者消费者问题
- Producer:
while(true){ p(empty);//使用一个空闲空间 p(mutex);//一次只有一个进程可以对缓存堆操作 //生产一个资源 v(mutex);//释放操作权限 v(full);//释放一个可用资源 - Consumer:
while(true){ p(full); p(mutex); //use a full v(mutex); v(empty);
锁
死锁
四个必要条件
- 进程任务互斥
- 占有且等待(请求并保持)
- 不可抢占(不可剥夺)
- 循环等待条件(环路等待)
根本原因
- 资源有限
- 操作不当
不发生死锁的最小资源数
- 所有进程抢夺同一个资源,保证最坏情况(每个进程都占了很多但还是差一点才能运行)下也能有一个进程成功运行。
- 例:11个资源,每个进程需要三个,则进程数不超过(5)时不会发生死锁。
- 最坏情况每个进程都抢到两个资源,保证MAX-2N>=1也就是仍然剩余一个则不会发生死锁
死锁的预防
- 破坏占有并等待
- 空手申请策略:不占有资源才能申请资源
- 预分配策略:执行之前一次性获取所有资源或不获取资源
- 很多情况无法预知所需全部资源
- 提前获取占有导致资源利用率降低
- 降低了进程的并发性能
- 可能出现‘饥饿’现象,无法得到抢手资源
- 破坏不可抢占
- 隐式抢占:一个进程在申请资源的等待状态下,其占有的资源可以被其他进程夺走。
- 抢占等待者:申请资源失败时,可以寻找等待状态的进程抢占其资源
- 可以用于易于保留和恢复环境的资源(CPU寄存器/内存),不能用于打印机等。
- 破坏循环等待
- 资源有序分配:每种资源有唯一不重复优先级,保证各种进程总是按相同的种类顺序请求资源。
- 编号较难,使用前高优先级资源不合理占有
- 先弃大再取小法
- 资源有序分配:每种资源有唯一不重复优先级,保证各种进程总是按相同的种类顺序请求资源。
银行家算法
Allocation:当前已经申请到的资源。
Max:一共需要的资源数。
Need:还需要的资源数。
Work/Availavble:当前可用资源。
不断寻找Work+Allocation >= Max的进程。
运行结束后将当前Allocation释放为Wrok再次寻找。直到所有进程完成。
处理器调度
三级调度
- 高级调度(作业调度):从外存上处于后备状态的作业中挑选若干,为他们分配内存外设等资源,并建立进程,使得他们获得竞争处理器的权利。(一般只有多道批处理系统需要,且高级调度频率较低)
- 中级调度(内存调度):内存紧张时,将暂时不能运行的进程调到外存等待(挂起状态),将当前需要的部分换到内存。
- 低级调度(进程调度):根据一定算法,将CPU分派给就绪队列的一个进程。毫秒级调度要求执行效率。
调度方式
指当一个进程正在执行时,有高优先级进程就绪时,如何调度的逻辑。
主要有两种:抢占式和非抢占式。
- 非抢占式:一旦分配CPU给进程,则保持分配到进程完成或转为等待态。
- 简单,调度开销小
- 适用于批处理系统,不适大部分的分时系统与实时系统
- 抢占式:一个进程正在被CPU处理,有高优先级就绪则立即暂停当前进程让出CPU
- 遵循一定原则,主要有优先权原则,短进程优先原则,时间片原则
- 更加合理但是开销也更大
调度的性能准则##
- 面向系统
- CPU利用率
- 系统吞吐量:单位时间内CPU完成作业的数量
- 面向用户
- 周转时间:作业从提交到完成的时间,包括IO时间等待时间等
- 就绪等待时间
- 响应时间
OS的性能参数
- 字长:CPU能直接处理的二进制数据位数。
- 运算速度:每秒能执行的指令数。
- 主频:计算机的时钟频率,MHz单位
- 内存储器容量与存取速度:内存储器是CPU能直接访问的存储器,其中有需要执行的程序与需要处理的数据。
- CPU主频:每秒钟能执行的指令数,CPU再单位时间内的运行次数
- 外设配置
调度算法
短作业优先SJF
- 非抢占式+需要时间短的先处理
- 减少平均周转时间
最短剩余时间SRTF
- 抢占式+新进程比当前进程剩余时间短则替换
- 平均等待时间短
高相应比HRRF
- 相应比=(等待时间+用户要求时间)/用户要求时间
- 非抢占式+挑选高相应比
- 有利于短作业,但仍然偏向队列式先来先服务,常用于作业调度进程调度
优先级HPF
- 静态优先级:创建进程时确定优先级(进程类型/资源需求量反比/用户要求)
- 动态优先级:随着系统运行不断改变(等待时间/进程每使用一个时间片降低一个等级)
- 抢占式与非抢占式都可使用
轮转法
- 进程执行一个时间片后暂停并放到队列末尾
周转时间
- 周转时间:从就绪到执行完毕的事件
- 平均周转时间:周转时间和/任务个数
- 带权周转时间:周转时间/运行时间
- 平均带权周转时间:带权周转时间/任务个数