一、进程与线程
- 为什么要引入进程?
在多道程序环境下,允许多个程序并发执行,此时他们将失去封闭性,并具有间断性和不可再现性的特征,为此引入进程的概念,以便更好的描述和控制程序的并发执行,实现操作系统的并发型和共享性。 - 什么是进程?进程由什么组成?
进程是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位 PCB、程序段、数据段 - 进程是如何解决问题的?
(一)进程的概念和特征
1、进程和程序的区别?
- 程序:静态的,存储在磁盘里的可执行文件,指令集合
- 进程:动态的,是程序的一次执行过程
2、多个进程如何区分?——引入数据结构PCB(进程控制块)
PCB用于描述进程的基本情况和运行状态,进行控制和管理进程:
- 实现区分各个进程:PID、UID
- 实现资源管理:进程分配了哪些资源(内存、I/O、文件)
- 实现对进程的控制调度:进程的运行情况(cpu使用时间、磁盘使用情况、网络流量使用情况)
PCB是进程存在的唯一标识
3、进程实体及其组成
进程实体(进程映像):进程在某一时刻的快照(状态) 组成:
注意:
- PCB是给操作系统用的,程序段和数据段是给进程自己用的
- 进程映像是静态的,进程是动态的
4、程序是如何运行的?
- 程序编译链接形成可执行文件存储在硬盘
- 程序运行前把程序放入内存
- 程序开始运行前,操作系统创建对应的进程,建立PCB
- 指令序列读入内存——程序段
- 内存中存放运行中产生的数据——数据段
- CPU从内存中取出指令开始运行
5、进程的定义?
- 进程是程序的一次执行过程
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
6、名词理解
资源分配:对CPU、内存、I/O在时间上的分配,即时间片 调度:操作系统决定让这个进程上CPU运行
7、进程的特征
- 动态性——最基本
- 并发性——多个进程并发
- 独立性——是系统进行资源分配和调度的一个独立单位
引入线程后,线程是独立接受调度的基本单位,进程仍是独立获得资源的基本单位 - 异步性——由并发导致,为避免异步的混乱结果,从而引出“进程同步”
- 结构性——PCB+程序段+数据段
(二)进程的状态、进程的组织
1、进程的状态
-
创建态——系统完成创建进程的一系列工作 -
就绪态——万事俱备,只欠处理机 进程被调度——>运行态 -
运行态——万事俱备,也拥有处理机 1、进程用系统调用的方式申请某种系统资源,或请求等待某个事件发生——>阻塞态(主动行为) 2、进程运行结束,或运行中遇到不可修复的错误——>终止态 3、时间片到,或处理机被抢占——>就绪态 -
阻塞态——万事无,处理机无 申请的资源被分配,或等待的事情发生(不包括对处理机的期待)——>就绪态(被动行为) -
终止态——进程结束,释放资源
“丁字裤”模型
2、进程的组织
- 链接方式
按照进程状态将PCB分为多个队列 操作系统持有指向各个队列的指针 -索引方式 根据进程状态不同,建立几张索引表 操作系统持有指向各个索引表的指针
(三)进程控制
1、概念
1)什么是进程控制?
进程控制就是要实现进程状态转换——讨论进程转换过程中操作系统做一些什么事情?
2)如何实现进程控制?
用原语实现“一气呵成”地转换状态
3)为什么进程控制(状态转换)的过程要“一气呵成”?
当PCB要从阻塞态转换到就绪态时,负责进程控制的内核程序至少要做两件事: 1、将PCB的state设置为1(state是在PCB中的一个标识进程当前所处状态的变量,state=1标识就绪态,state=2标识阻塞态) 2、将PCB从阻塞队列放到就绪队列 如果完成第一步后收到中断信号,转换过程被打断,会出现这种情况:PCB的state=1,但却在阻塞队列里
4)如何实现原语的原子性?
用“关中断指令”和“开中断指令”两个特权指令实现原子性(只能让内核使用,而不能让用户使用)
2、进程控制相关原语
3、总结
进程控制原语的三件事情:
- 更新PCB中的信息(修改进程状态state/保存/恢复运行环境)
- 将PCB插入合适的队列
- 分配/回收资源(在创建和终止原语中)
4、区分
- 进程切换:进程环境信息要改变
- 处理机模式切换:操作系统进入内核态前后的进程不变,只需要保存进入内核态之前的CPU环境,回到用户态后恢复环境
—————————— - 调度:决定资源分配给哪一个进程的行为,决策
- 切换:实际分配的行为,执行
- 先有决策才有切换
(四)进程通信
1、什么是进程通信?
进程通信指进程之间的信息交换 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立 为了保证安全,一个进程不能直接的访问另一个进程的地址空间,但进程间信息交换必须实现,所以操作系统提供了一些方法:
2、进程通信的方法
- 共享存储(大布袋)
- 管道通信(读进程最多只能有1个,数据一旦被读取,就从管道中被抛弃)
- 消息传递(写信)
(五)线程的概念和多线程模型
1、什么是线程?为什么要引入线程?
传统进程是程序执行流的最小单位,但有的进程可能需要同时做很多事情,二传统的进程只能串行的执行一系列程序,为此,引入了线程来增加并发度 EG、传统进程下,qq和微信是两个进程,能够实现并发执行,但qq内部的视频、文字只能串行执行,增加线程后,qq内部继续将视频、文字划分为线程,线程可以并发执行。
2、引入线程机制后,有什么变化?
引入线程后,线程成为了程序执行流的最小单位,每个进程可以有多个线程 但资源分配的最小单位仍然是进程,即,打印机分配给qq,而不是分配给qq内的文件线程
3、线程有哪些重要属性
3、线程的实现方式
操作系统能看见内核级线程,只有内核级线程才是处理机分配的单位,所以,内核级线程是可以并发的,用户级线程只能在由内核级线程的情况下才能运行
4、多线程模型(用户级线程和内核级线程的连接方式)
多对一:一个线程阻塞,操作系统操作系统只看得见内核级线程,所以默认这个线程阻塞,用户层面的所有线程也被阻塞
二、处理机调度
(一)调度的概念、层次
1、调度的基本概念
当有一堆任务要处理,由于资源有限,这些事情没法同时处理,这就需要确定某种规则来决定处理这些任务的顺序,这就是调度研究的问题
2、三个层次
- 高级调度(作业调度)
1、作业:一个具体的任务 用户向系统提交一个作业=用户让操作系统启动一个程序来处理一个具体任务 2、高级调度:因为内存空间有限,不能将用户提交的作业全部放入内存,当外存的作业后备队列中有好几个作业需要启动,先把哪个作业调入内存,就将相应的作业从外存的作业后备队列中选中调入内存,并创建进程(PCB),每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。作业进入内存后变成进程。 - 低级调度(进程/处理机调度)
因为内存中会存在很多进程处于就绪队列中,而处理机只能允许分配给一个进程,当就绪队列中有多个进程,应该先给哪一个进程分配处理机资源 - 中级调度(内存调度)
因为内存资源有限,当内存中就绪队列中的进程过多时,可以将某些进程的数据调出到外存,等内存空闲或者需要运行时再重新调入内存。进程调出到外存仍是进程。处于挂起状态,组成挂起队列。中级调度:决定将哪个处于挂起状态的进程重新调入内存。
3、三层调度的联系、对比
4、补充知识
-
进程的挂起状态和七状态模型 挂起态进一步分为就绪挂起和阻塞挂起 1、就绪挂起:进程从就绪队列被调到外存的挂起队列 (也能从运行态运行完毕调入外存,从创建态创建完毕被调入外存) 2、阻塞挂起:进程从阻塞队列被调到外存的挂起队列 -
激活——挂起 互为逆过程,但阻塞挂起可以直接到就绪挂起,所以阻塞挂起激活后能直接到就绪态 -
阻塞态——挂起态 都是暂时不能获得CPU服务,但挂起态是将进程调到外存,而阻塞态仍在内存中
(二)进程调度(低级调度)的时机、切换与过程、进程调度方式
1、进程调度的时机
区分两个概念 内核程序临界区VS普通的临界区
2、进程调度VS进程切换、进程切换过程
进程切换是有代价的
3、进程调度方式
根据是否允许进程被动的放弃处理机分为:
(三)调度算法的评价指标
1、CPU利用率
CPU忙碌的时间占总时间的比例 有时也会计算某种设备的利用率
2、系统吞吐量
单位时间完成作业的数量
3、周转时间
指作业从被提交给系统开始,到作业完成为止的时间间隔 包括四个部分:
- 作业在后备队列上等待作业调度的时间(仅一次)
- 进程再就绪队列上等待进程调度的时间(多次)
- 进程再CPU上执行的时间(多次)
- 进程等待I/O操作完成的时间(多次)
周转时间=作业完成时间-作业提交时间
—————————————————————————— 操作系统更关系整体表现:
平均周转时间=各作业周转时间之和/作业数
—————————————————————————— 让不同执行时间的用户有相同的体验:
带权周转时间=作业周转时间/作业实际运行的时间=(作业完成时间-作业提交时间)/作业实际运行时间
- 带权周转时间必然>=1
- 带权周转时间与周转时间都是越小越好:
1、对周转时间相同的两个作业,实际运行时间长的作业再相同时间内被服务的时间更多,带权周转时间更小,用户满意度更高 2、对实际运行时间相同的两个作业,周转时间短的带权周转时间更小,用户满意度更高
——————————————————————————
平均带权周转时间=各作业带权周转时间之和/作业数
4、等待时间
指进程/作业处于等待处理机状态的时间之和,等待时间越长,用户满意度越低
- 对进程来说,等待时间指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实也是被服务的,不算入等待时间
- 对作业来说,作业在外存后备队列等待时间+建立进程后等待的时间
一般服务时间都是确定不变的,调度算法只会影响等待时间。 也有平均等待时间来评价整体性能
5、响应时间
指用户提交请求到首次产生响应所用的时间
(四)调度算法
1、学习思路
- 算法思想
- 算法规则
- 用于作业调度还是进程调度
- 抢占式?非抢占式?
- 优点和缺点
- 是否会导致饥饿(某进程/作业长期得不到服务)
2、先来先服务FCFS
3、短作业优先SJF
抢占式:除了在当前进程主动放弃处理机时要发生调度,每当就绪队列发生改变时,也需要检查是否会发生抢占,调度新的进程
4、HRRN
——————————————————
5、时间片轮转RR——用于分时操作系统,关心响应时间
6、优先级——实时操作系统
通过不同的方法确定优先级 静态优先级 动态优先级(EG最高响应比) 根据优先级排序进行调度(分为抢占式/非抢占式) 非抢占式: 抢占式:
7、多级反馈队列
|