CSDN话题挑战赛第2期
参赛话题:学习笔记
目录
多道程序设计:同时把多个程序放入计算机中的内存,并允许他们交替执行,从而共享计算机系统的软、硬件资源
1. 程序的顺序执行 一个具有独立功能的程序独占CPU运行,知道获得最终结果的过程
特点:
顺序性。
封闭性。程序是在完全封闭的环境下运行的
可在现性。程序运行的结果仅与初始条件有关,只要初始条件相同,都将获得相同的结果
缺点:
CPU与外部设备之间不能并行工作,资源利用率低,计算机效率不高
2. 程序的并发执行 在同一时刻,有的程序占用CPU运行、有的程序通过外部设备传递数据。
从宏观上看是多道程序同时运行,微观上看是在交替执行
程序的并发执行通常是指多个程序在单个CPU上交替执行
特点:
程序的并发执行实质上是程序间的并发,CPU与I/O设备之间的并行
程序运行不是封闭环境。
间断性。多个程序并发执行共享资源,导致程序之间产生了相互制约关系,具有”执行-暂停-执行“的间断性活动规律
不可在现性。计算结果不仅与程序本身和初始条件有关,还有程序并发执行的速度有关
3. 进程 程序是静态的概念,无法正确描述并发程序的动态执行
定义:是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和调度的基本单位
结构:进程实体 = 程序段 + 相关数据段 + PCB
PCB——用来存储程序向前推进的执行过程中所要记录的有关运行信息
特征:
动态性:进程有生命周期,具有”创建-运行-消亡“的过程
并发性:
独立性:每个进程都是独立运行的基本单位,也是系统进行资源分配和调度的基本单位
异步性:
结构性:每个进程都由程序段、数据段和PCB这三部分组成
1. 两状态进程模型 两种状态:
运行
非运行
2. 进程的三态模型
三种基本状态:
运行:进程获得CPU和其他所需资源,正在CPU上运行
阻塞:进程运行过程中发生了某种等待事件而暂时不能运行的状态
就绪:进程获得除CPU之外所需的资源,一旦得到CPU即可立即投入使用
3. 进程的五态模型
进程的产生
在一个批处理环境中,为了响应一个任务的要求而产生进程
在一个交互式环境中,当一个新用户企图登录时会产生进程
操作系统代替用户程序产生进程
由用户程序来产生多个进程
进程的终止
进程执行到自然点结束
出现不可克服的错误而不得不取消
被拥有特定权限的进程取消
处于终止状态的进程不能再被调用执行
4. 进程的挂起 在内存中的进程被暂时移出(如磁盘)的过程
当某个进程被挂起时,若处于运行状态则停止执行,若处于就绪状态则暂时不参加进程调度
被挂起原因:
用户的请求
父进程的请求
操作系统的原因,可能有如下三种情况:
交换:当操作系统发现内存资源已经不能满足进程运行的需要时,可将当前不重要的进程挂起,以达到平衡系统负载的目的
出现问题或故障时:系统出故障时,操作系统会暂时将涉及该故障的进程挂起(换出),等故障恢复后再将进程恢复到挂起前的状态(换入,由外村调入到内存)
操作系统的需要:为监视系统活动,操作系统可挂起和激活一些记录系统资源使用状况的进程和用户进程活动的记账进程
5. 进程控制块(PCB) 产生原因:操作系统需要为进程定义一种能够描述和控制进程运行的数据结构
PCB中存放着操作系统所需的用于描述进程当前状况的全部描述信息,以及控制进程运行的全部控制信息和相关的资源信息
进程控制块的组织方式:
线性表方式
链接表方式
索引表方式
1. 进程切换 实质:回收当前运行进程对CPU的控制权,并将CPU控制权转交给新调度的就绪程序
进程上下文:一个程序运行时,CPU所有寄存器中的内容、进程的状态以及运行栈中的内容
操作系统用来管理和控制进程内部数据集合,进程在起上下文中运行
分类:
系统上下文:操作系统内核使用的进程上下文信息集合,主要包括PCB与逻辑地址到物理地址转换的核心数据结构
寄存器上下文:CPU中所有寄存器的信息集合
用户级上下文:用户进程访问和修改的进程上下文信息集合,主要包括进程的程序段、数据段、用户栈和共享存储区
进程切换的时机:进程切换是中断驱动的,分类:
中断:发生中断时,操作系统保存当前运行进程的现场信息,调度新进程运行
异常:CPU运行指令时检测到错误时产生异常,这时终止当前进程转去执行异常处理程序
系统调用:对操作系统服务的一种显式请求
进程的上下文切换
2. 进程控制原语 一个操作可以依次分成几个具体实施的动作,如果这几个动作的执行不会被分割或中断,且这些动作要么全部执行,要么一个都不执行,则称这个操作具有原子性
原语:程序的执行具有原子性,主要作用是保证系统运行的一致性
注意:如果原语中某条执行没有执行成功,则该原语之前已经执行的指令全部作废,并恢复到未执行该原语前的状态
要解决问题:如何把CPU分配给众多处于就绪状态进程中的某一个,使得这种分配下CPU的利用率做高且又保证各进程都能顺利运行
1. 作业与进程的关系:
作业 | 进程 | |
---|---|---|
概念 | 是用户向计算机提交任务的任务实体 | 是完成用户任务的执行实体,是向系统申请分配资源的基本单位 |
关系 | 一个作业可以同时对应多个进程,且至少由一个进程组成 | |
作用范围 | 作业的概念主要用在批处理系统中 | 进程的概念则用在几乎所有的多道程序系统中 |
主要功能 | 检查系统是否满足作业资源要求以及按照一定的算法来把外存后备作业队列中的作用调入内存,为其创建进程并插入到进程就绪队列等待进程调度 | 根据一定的算法把CPU分配给就绪队列中的某个进程并让其执行 |
批处理作业与进程的关系:
批处理作业经历的4种状态:提交状态、后备状态、执行状态、完成状态
分时系统中作业与进程的关系
系统启动时通过与系统连接的终端为每一个终端创建一个终端进程来接收终端用户的作业处理要求2. CPU的三级调度
高级调度:又称作业调度或宏观调度,即按一定的调度算法把外存上处于后备作业队列中的作业调入内存,为它们分配所需的资源并创建进程,然后将新创建的进程插入到系统的就绪队列中
功能:
选择作业
分配资源
创建进程
作业控制
回收资源
中级调度:又称交换调度,在内存使用紧张的情况下,将内存中暂时无法运行的进程挂起,即由内存调至外存(换出),使外存上具备运行条件的就绪进程能够及时进入内存运行
低级调度:又称进程调度或微观调度,功能:按照一定的调度算法将CPU分配给就绪队列中的某个进程
3. 处理器
调度队列模型
仅有进程调度的调度队列模型
具有高级和低级调度的调度队列模型:
同时具有三级调度的调度队列模型:
4. 进程调度的方式和时机
进程调度方式:
非抢占式调度:进程一直运行下去直到结束或者发生等待事件而阻塞后结束
优点:
实现简单
系统开销小
缺点:
出现紧急事件不能立即处理,即实时性差
不适用于实时系统和分时系统
抢占式调度:没有发生等待事件下允许暂停当前运行的进程,并将当前CPU分配给另一个更紧迫的进程
常用抢占原则:
高优先级原则:
时间片原则
优点:
能防止一个进程较长时间占用CPU
能满足实时系统对响应时间的要求
能获得较好的响应时间
缺点:
会增加系统中进程切换的频率
与非抢占式调度相比增加了进程切换的开销
进程调度的时机
当前运行进程执行结束或因等待事件终止时启动进程调度程序选择一个新的就绪进程运行
抢占式调度系统中出现优先级更高进程或当前进程的时间片用完
进程调度的实现
(1)保存当前运行进程的现场信息
(2)选择即将运行的进程
(3)为新选中的进程恢复现场
批处理系统:
设计目标:增加系统的吞吐量及提高资源利用率
CPU调度:使用先来先服务调度算法
分时系统:
设计目标:响应时间和使用计算机的公平性
CPU调度:采用基于时间片的轮转调度算法
实时系统:
设计目标:保证系统对随机发生的外部事件能够及时做出响应
CPU调度:采用高优先级的抢占式调度算法
1. 调度原则
面向系统的准则:
吞吐量:系统单位时间内完成工作的一种度量
CPU利用率:CPU有效工作时间/CPU总工作时间
系统资源平衡利用
公平性
面向用户的准则
周转时间:指该作业由提交到完成所花费的时间
响应时间:从用户通过键盘提交一个请求开始,直到系统首次产生响应为止的时间间隔
截止时间:实时系统选择调度算法的重要准则。可以是某逝世人物(作业或进程)必须开始的最迟时间,或是某实时任务必须完成的最迟时间
优先权准则
2. 常用调度算法
先来先服务调度算法(FCFS) 非抢占式算法
优点:实现简单,公平性
缺点:没有考虑作业的类型或进程/线程执行时间的长短,短作业或I/O进程/线程等待时间过长
短作业/短进程优先调度算法(SJF/SPF) 非抢占式算法
每次从后备作业队列中选择估计运行时间最短的作业进入内存,并创建相应的进程
优点: 能有效地降低作业/进程的平均等待时间,提高系统的吞吐量
缺点: 用户提供的估计运行时间不一定准确, 长作业/长进程可能长时间等待
时间片轮转调度算法(RR)
进程/线程每次使用CPU的时间只能是一个时间片
高响应比优先调度算法(HRRF)
是一种基于动态优先数的非抢占式调度算法
优先级调度算法
既可用于高级调度,也可用于低级调度,还可用于实时系统
优点:公平性好、灵活、资源利用率高
多级反馈队列调度算法(MLFQ)
优点:短进程能够得到优先处理,系统开销不大
缺点:若优先级较高的队列一直不为空,则优先级较低队列中的进程可能长时间不能运行
3. 实时调度 为了完成实时处理任务而分配CPU的调度方法,基本要求是保证计算机在规定时间内对外部事件的请求做出响应
实时调度与非实时调度区别:
实时调度 | 非实时调度 | |
---|---|---|
任务完成时限 | 有 | 没有 |
算法正确与否 | 与算法的逻辑和算法的调度时限有关 | |
进程/线程切换时间 | 较快 | 较长 |
主要强调的 | 资源利用率(批处理系统)或用户共享CPU(分时系统 | 在规定时限范围完成相应对象的控制 |
进程调度方式 | 抢占式调度 | 很少采用抢占式调度 |
分类:
比率单调调度算法:算法的任务优先级按照任务周期决定
优点:算法实现简单、系统开销小、灵活性好,是实时调度的基础算法
缺点:CPU利用率低
最早截止时间优先调度算法:根据任务截止时间动态确定人物的优先级,截至时间越短优先级越高
最短空闲时间优先调度算法:人物的优先级根据任务的空闲时间动态确定,空闲时间越短优先级越高
进程存在的问题:
创建进程:需要为该进程分配所需的除CPU之外的所有资源
进程切换:需要保存被中断运行的进程其CPU现场信息,并恢复新选中的进程的CPU现场信息,花费较多CPU时间
撤销进程:需要先对该进程所占用的资源进行回收,然后撤销PCB
1. 线程的概念 线程是CPU调度和执行的最小单元
进程内的一个执行单元
进程内的一个可独立调度的实体
线程是进程中一个相对独立的控制流序列
线程是执行的上下文
属性:
县城属于轻型实体,基于不拥有系统资源,只拥有为保证其运行而必不可少的资源
是独立调度和分派的基本单位,也是能够独立运行的基本单位
同一个进程中的所有线程共享该进程所拥有的全部资源
线程并发执行程度高,不但同一个进程内部的多个线程可以并发执行,而且属于不同进程的多个线程也可并发执行
多线程操作提供的同步机制:
互斥锁:仅允许每次使用一个线程执行特定的代码或访问特定的数据
读写锁:允许对受保护的共享资源进行并发读取和独立写入。若要修改资源,线程必须首先获取互斥写锁;只有释放了所有的读锁之后,才允许使用互斥写锁
条件变量:会一直阻塞线程,直到特定的条件为真
计数信号量:通常用来协调对资源的访问,达到指定的计数时信号将阻塞;使用计数可限制访问某个信号的线程数量
2. 线程与传统进程的比较
传统进程 | 线程 | |
---|---|---|
基本单位 | 是调度和分派的基本单位 资源分配的基本单位 | 调度和分派的基本单位 |
并发执行度 | 低 | 高 |
创建、切换和撤销操作花费的时空开销 | 大 | 小 |
资源 | 是系统分配资源的基本单位 | 基本不用有资源,但可以使用所隶属进程的资源 |
地址空间 | 不同进程地址空间相互独立 | 同一个进程中的线程共享一个地址空间 |
数据传递 | 通信方式,费时不方便 | 数据传递方便快捷 |
3. 线程实现原理
内核态线程实现
将线程控制块(TCB)放在操作系统内核空间,操作系统内核就同时存在进程控制块(PCB)和线程控制块(TCB)
缺点:效率低
用户态线程实现
用户自己写一个专门负责线程调度的线程
优点:实现灵活,线程切换快
缺点:需要修改操作系统,违反了软件应遵循的层次架构原则
混合式线程实现
将用户态和内核态线程实现结合
用户态的执行系统线程:负责进程内部线程在非阻塞时的切换
内核态的操作系统线程:则负责阻塞线程的切换