并发编程基础知识
一、进程的定义
-
狭义定义
进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
-
广义定义
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元。在传统的操作系统中,进程即是基本的分配单元,也是基本的执行单元。
二、进程的概念
-
进程是一个实体。每一个进程都有他自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储活动过程调用的指令和本地变量。
-
进程是一个‘执行中的程序’。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,也就是进程。
三、进程的特征
-
动态性
进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
-
并发性
任何进程都可以同其他进程一起并发执行
-
独立性
进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
-
异步性
由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
-
结构特征
进程由程序、数据和进程控制块三部分组成
四、进程的调度
-
先来先服务调度算法
适合于CPU繁忙性进程,而不利于I/O繁忙型进程。
-
短作业优先调度算法
不利于长进程,不能保证紧迫性进程被及时处理,进程的长短是估算出来的。
-
时间片轮转法
将CPU的处理时间分成固定大小的时间片,如果一个进程在被调度选中之后用完了系统规定的时间片,但又未完成要求的任务,则它自行释放自己所占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。
-
多级反馈队列
-
设置多个就绪队列,赋予不同优先级。优先级越高的队列中,每个进程规定的时间片越小。
-
新进程进入内存后,放入第一队列的末尾。轮到该进程执行时,如果没在时间片内完成,则进入第二队列的末尾,依次执行。
-
仅当上一队列空闲时,下一队列进程才会运行。
五、进程的并行和并发
-
并行
两者同时执行,要求多个处理器
-
并发
资源有限的情况下,两者交替轮流使用资源。
六、进程的三状态
-
就绪状态
进程已分配到除CPU以外的所有必要资源,只要获得处理机便可立即执行,这时的进程状态被称为就绪状态。
-
运行状态
当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态
-
阻塞状态
正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可能有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信号等。
七、同步和异步
-
同步
一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成。这是一种可靠地任务序列,要么都成功或者要么都失败,两个任务状态保持一致。
-
异步
不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,因此是不可靠的任务序列。
八、进程的创建和结束
-
进程的创建
新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的
-
四种创建新进程的形式
-
系统初始化(前台进程负责与用户交互,后台进程与用户无关,运行在后台并且只在需要时才唤醒的进程,成为守护进程。)
-
一个进程在运行过程中开启了子进程(os.fork, subprocess.Popen等)
-
用户的交互式请求(双击可执行文件)
-
一个批处理作业的初始化(只在大型机的批处理系统中应用)
-
-
Windows创建进程
系统调用CreateProcess,CreateProcess既处理进程的创建,也负责把正确的程序装入新的进程。
-
-
进程的结束
-
正常退出
用户点击叉号,程序执行完毕让系统调用正常退出,在windows中用ExitProcess
-
出错退出
-
严重错误
执行非法指令,引用不存在的内存等,可以捕获异常
-
被其他进程杀死
-