目录
2.2.3进程控制块PCB(Process Control Block)
2.3.3线程的结构TCB(Thread Control Block)
2.1多道程序设计
1.多道程序设计是操作系统所采用的最基本、最重要的技术
2.吞吐量:衡量系统效率的尺度。系统的吞吐量定义为单位时间内系统所处理的作业(程序)的道数(数量),即
吞吐量T_P=作业道数n/全部处理时间t
2.1.1单道程序设计的缺点
1.处理器利用率低
2.设备利用率低
3.内存利用率低
2.1.2多道程序设计的提出
1.通过提高处理器、设备、内存等各种资源的利用率,从而提高系统效率
2.策略:错开使用资源
2.1.3多道程序设计的问题
1.处理器资源的管理
程序个数>>处理器个数(如何分配?)
2.存储资源的管理
地址空间的相对独立性、共享性
内存、外存(swap space)的分配与去配
3.设备资源管理
分配策略
IO控制
(I/O(Input/Output),即输入/输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。输入/出(英文:Input/Output,简写为 I/O)是信息处理系统(例如计算器)与外部世界(可能是人类或另一信息处理系统)之间的通信。输入是系统接收的信号或数据,输出则是从其发送的信号或数据。)
2.2进程的引入
1.因为轮流使用资源,多道系统中程序的活动规律
推进=>暂停=>推进=>暂停=>……
2.暂停前保存现场(PSW+PC,寄存器)
(PSW是Program Status Word的缩写,即程序状态字(也叫程序状态寄存器),可用于OS在管态(系统态)和目态(用户态)之间的转换。)
(PC(Program Counter,PC)用来存放当前欲执行指令的地址,它与主存的MAR之间有一条直接通路,且具有自加1的功能,即可形成下一条指令的地址。)
3.推进前恢复现场(寄存器,PSW+PC)
4.暂停的原因
自身原因:等待资源,启动I/O
外部原因:剥夺CPU给其它程序运行机会
5.并发(concurrent) :宏观同时,交替执行,不要求多个CPU
6.并行(parallel) :微观同时,要求多个CPU
2.2.1进程的概念
进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。
(进程是竞争系统资源的基本单位)
2.2.2进程状态及状态转换
1.进程的基本状态
运行态(run): 占有CPU正在运行
就绪态(ready): 可以运行,等待CPU
等待态(wait): 等待某一事件发生
2.状态转换
就绪=>运行:获得CPU
运行=>就绪:剥夺CPU
运行=>等待:申请资源未得到,启动I/O
等待=>就绪:得到资源,I/O中断
2.2.3进程控制块PCB(Process Control Block)
标志进程存在的数据结构,其中保存着系统管理进程所需的全部信息
2.2.4进程的组成与上下文
1.进程由两个部分组成:进程控制块PCB+程序(代码+数据)
2.数据:
静态变量(static variables)
动态栈(dynamic stack):保存参数、返回值、局部变量、断点等
动态堆(dynamic heap):保存动态变量
3.进程的程序(代码和数据)被称为进程映像(process image)
4.进程上下文(process context),进程的物理实体与支持进程运行的物理环境统称为进程上下文,
是进程执行活动全过程的静态描述
5.系统开销(system overhead),运行操作系统程序完成系统管理工作所花费的时间和空间
2.2.5进程的队列
1.进程的队列实际上是PCB的队列(以链的形式)
2.PCB链不一定FIFO,可单向也可双向
就绪队列:整个系统有一个或多个
等待队列:每个等待事件有一个
运行队列:每个CPU有一个,每个队列里只有一个进程
2.2.6进程的类型与特征
1.系统进程,也被称为守护(daemon)进程
运行操作系统程序,完成系统管理(服务)功能
生命周期:开机=>关机
优先级高于一般用户进程
2.用户进程
运行用户(应用)程序,为用户服务
在OS之上运行的所有应用程序都是用户进程
3.进程的特征
并发性:可以与其它进程一道向前推进
动态性:动态产生、消亡,生存期内状态动态变化
独立性:一个进程是可以调度的基本单位
交互性:同时运行的进程可能发生相互作用
异步性:每个进程以各自独立,不可预知的速度向前推进
结构性:每个进程都有一个PCB
抽象性:进程是一个抽象的对象
2.2.7进程间相互联系与相互作用
1.相关进程:在逻辑上具有某种联系的进程
知晓彼此的存在
同一家族的进程 可以共享文件,需要相互通讯,协调推进速度…
父进程可以监视子进程,子进程完成父进程交给的任务
2.无关进程:在逻辑上没有任何联系的进程
没有逻辑关系但被同时执行的进程 不
知晓彼此的存在
存在资源竞争关系
3.直接相互作用,发生在相关进程之间 知
晓彼此存在=>合作=>同步(协同步调,主动等待)
4.间接相互作用,可发生在任何进程之间
公共资源=>竞争=>互斥(相互排斥)
2.2.8进程的创建与撤销
1.进程创建(初始化)
建立PCB,分配内存,加载程序,入就绪链
UNIX:pid=fork(),exec(prog,args)
2.进程撤销(善后)
去配资源,撤销PCB,通知父进程
UNIX:exit() vs. kill
(除初始进程外,其它进程由(父)进程创建,并形成进程家族)
3.进程汇聚
在jave语言中,父线程创建子线程后,可以执行join系统调用,等待子线程结束并与其汇聚,之后父线程继续执行。
2.2.9进程与程序间的联系与差别
1.进程与程序的联系
进程包括一个程序
进程存在的目的就是执行这个程序
2.进程与程序的差别
程序静态,进程动态
程序可长期保存,进程有生存期
一个程序可对应多个进程,一个进程只能执行一个程序
2.3 线程与轻进程
2.3.1线程的引入
进程切换
1.上下文涉及内容多,开销大,“笨重”
PCB+程序
系统环境:寄存器,地址空间,系统栈,打开文件表等
2.相关进程之间耦合关系差
2.3.2线程的概念
1.线程是进程中一个相对独立的执行流
进程是资源的分配单位
线程是CPU的调度(执行)单位
2.多线程优点
上下文切换速度快(地址空间不变,light weighted)
系统开销小(创建速度快)
通讯容易(共享数据空间)
2.3.3线程的结构TCB(Thread Control Block)
2.3.4线程控制块
1.标志线程存在的数据结构, 其中包含对线程管理需要的全部信息。
2.存放位置
用户级线程存放在用户空间(由运行系统管理)
核心级线程存放在系统空间(由操作系统管理)
2.3.5线程的实现
1.用户级别线程,user level thread,在目态实现
实现方法
基于系统库函数,对操作系统不可见=>只能进程级别调度
线程的创建、撤销、状态转换在目态完成
TCB在用户空间,每个进程有一个系统栈
优点
不依赖于操作系统,调度灵活
同一进程中多线程切换速度快(不需进入操作系统)
缺点
同一进程中多个线程不能真正并行,即使是在多CPU系统中
一个线程进入系统受阻,进程中其它线程都不能运行
2.核心级别线程,kernel level thread,在管态实现
实现方法
基于系统调用
创建、撤销、状态转换由操作系统完成
线程是CPU调度的基本单位,每个线程一个系统栈
优点
同一进程内多线程可以并行执行
某一线程进入核心等待,其它线程仍可执行
缺点
系统开销大,同一进程内多线程切换速度慢
调度算法不能灵活控制
3.混合线程,hybrid approach ,较为灵活
4.运行时系统,runtime system,程序在运行时所需要的支持系统
2.3.6线程的应用
1.Word字处理(不同代码)
交互编辑(T1)
词法检查(T2)
定时保存(T3)
2.HTTP server(相同代码)
对每个http请求,pop up一个线程
3.网络游戏(相同代码)
socket套接字,每个连接一个服务线程
2.4 作业(Job)
1.作业概念
用户要求计算机系统为其完成的计算任务集合
作业控制块JCB(Job Control Block),标志作业存在的数据结构
2.作业步(job step)
作业处理过程中一个相对独立的步骤
一般一个作业步可由一个进程完成
某些作业步之间可以并行
3.作业分类
批处理作业:
交互式作业
2.5系统举例
2.5.1 Java线程
1.Java线程的基本状态
New:新建线程
Runnable:可运行状态
Blocked:阻塞状态
Wait:等待状态
Timed Wait:超时等待
Dead:死亡状态
2.Java线程状态和转换关系
2.5.2 Linux进程与线程
1.进程与线程在系统内部具有统一的表示
2.进程与线程的差别通过与fork不同的另外一个系统调用clone体现出来
3.Clone系统调用的形式
pid=clone(function,stack_ptr,sharing_flag,arg)
Sharing-flag:CLONE_VM, CLONE_FILES, CLONE_SIGHAND, CLONE_PID
2.5.3 Windows10的进程线程与纤程
1.进程:进程是一种活动对象,进程管理器提供进程创建、撤销等功能。
2.线程:Windows中线程被视为对象加以管理,每个进程中至少包含一个线程,线程是核心调度的基本单位,每个线程包括一个系统栈和一个用户栈。
3.Windows的线程状态
初始(initialized):初始创建
就绪(ready):等待在任何处理器上运行
备用(standby):等待进入处理器,每个处理器只能有一个线程处于该状态
运行(running):在某个处理器上运行
等待(waiting):等待某个对象以同步线程执行
过渡(transition):与就绪态类似,但核心堆栈位于外存
终止(terminated):执行结束
未知(unknown):系统不能确定的状态,因错误导致
4.Windows的纤程
在Windows中,纤程(fiber)相当于用户级别线程或轻进程
纤程属于目态对象,由库函数支持,对核心不可见
在Windows下,纤程比线程切换速度快
纤程的引入主要是为了方便将其他系统的代码移植入Windows