今天我们开始介绍进程和线程
进程和线程呢实际上讨论的是
操作系统在让一个程序
执行的过程当中
这个执行的过程
我们是如何在维护的
那今天呢我们首先来讲进程
在实际的操作系统当中
我们有一组工具
可以让你知道一个程序
它执行的状态是什么样的
比如说这个执行的是哪一个程序
然后它目前占用内存是多少
然后CPU的使用时间是多少
那这地方都是它的相关信息
那这时候有一个问题
程序和程序的执行
也就是我们这里说的
进程它到底是什么样的关系
那我们首先呢对进程给一个定义
进程是一个具有一定功能的程序
在一个数据集上的一次动态的执行
那我们说程序肯定是具有功能的
那我们在这里进程多加的两个属性
是数据和动态执行
有了这个程序
加上数据和动态执行之后呢
就变成我们的进程
那这是我们在前面讲的时候
我写的程序那这是它的源代码
然后源代码我们经过编译之后呢
变成目标文件
这时候有我们前面讲的地址的转换
然后在加载的时候呢
把它放到内存里头
我们把一个程序
放到内存里的目标是什么
就是为了让它对数据进行处理
让它能够执行
那这就是我们这里头数据和执行
那进程呢就是讨论这个
程序在对数据进行处理的时候
这个处理过程
操作系统是如何维护的
那我们换个角度来看一下
进程和程序之间的变化的内容
这是我们的源代码
你写出来的静态的程序
好这个程序在被加到内存当中的
我们首先以一种形式
把它的代码放在这里头
然后在这上面又加了一段
这就是我们的 堆 栈 和数据 数据段
这些内容呢实际上是为了
让我这程序在执行的
过程当中进行维护的
比如说我这里有函数调用
那函数调用和返回的地址呢
就必须写到我的堆栈里头
以便于我知道
进到一个函数里头是从哪过去的
回来的时候我要回到什么地方去
那这是呢
这个进程在和程序
相比较而言我们加的内容
那进程到底有些什么样的组成呢
简单的来说进程包括
程序执行的所有状态
那具体说起来呢
包括这样一些代码数据
这是我们在前面提到过的
但更多的呢是我们这里
现在执行过程当中状态
你比如状态寄存器通用寄存器
和进程所占用的资源
这些内容呢最后会构成
我们在进程里一个
很重要的组成部分叫进程控制块
好这些内容呢搁到一起
由于操作系统提供了进程概念
好那我们进程在这里呢
就体现出这样一些特征
一种呢是动态性
那说我的一个程序它在执行的过程当中
有从创建到结束这个过程
第二个呢是并发性
那么我们通常所说的程序执行
它只是一个指令指针在执行
那我们有了操作系统之后
这时候可以交替执行多个程序
这个多个程序呢它可以在
操作系统的调度下占用CPU来执行
这种交替性呢就可以体现出
我们在宏观上的一种并发性
再有一个呢是独立性
不同的进程呢我们希望
它们之间的工作呢相互不影响
这是它的独立性
但是另外一个呢
它还有一个特征叫制约性
也就是说我两个或者多个进程
在同一个操作系统下运行的时候
它们就会由于共享数据
或者说资源进程之间的通讯和
同步产生相互之间制约
这时候我们就需要有一个
需要仔细把握的地方就是在于
进程的独立性和制约性
它们俩之间我怎么来权衡
我们希望一个程序的执行是独立的
但是我们同时也希望一个程序
在执行过程中能够跟外界打交道
这样的话我才能用同一个程序
对不同的数据进行处理
好那下边呢我们通过
这样一个图示来说程序进程
和我们在原来的CPU上执行的程序
它怎么就体现出上面这几个特征来
那我们这地方看到这条线索呢
你可以理解为进程CPU
在执行指令的时候的情况
执行进程A的指令
然后切换到进程B
执行进程B的指令
这个切换呢有一段进程切换的代码
交替切换到最后然后再绕回来
这时候我们看到
物理的CPU上的指令指针
它还是任何一个时刻
只执行一条指令
好这有一个执行的顺序
那在操作系统管理下
我们把这个切换代码
作为一个独立的部分来看待
我们可以观察
各个进程内部它自己的执行状态
好这时候呢我们就把
一个CPU里头物理的指令指针
转变成了四个并发执行的进程
的指令指针
A B C D
应用程序在做的时候
只观察你所关心的进程A B或者C D里头
它的执行的情况
那这是一个 啊 这是体现出四个
好这种特征我们从时间轴上
可以看到一种什么样的特征
就是ABCD四个进程
在时间轴上它们是交替运行的
宏观上它是并发执行的
好 有了这些讨论之后
我们需要来强调一下
进程和程序之间的联系
和它们之间的区别
它们之间的联系是什么呢
进程是处于运行状态下的
程序的抽象
和程序是相关的
好程序呢是一个静态的文件
你比如说你的源代码
或者说可执行文件
而进程呢是执行中的程序
除了程序之外它还有它的执行状态
然后进程同一个程序的
多次执行对应着不同的进程
那我们不同的程序呢
它的代码肯定是不一样的
比如说在这里头我同一个命令
IS多次执行它对应的是不同的进程
那进程执行呢除了我们的程序之外
还需要其它的一些资源
比如说我们在这里头内存和CPU
内存负责保存代码和数据
CPU呢是用来执行指令的
这是它们之间联系
它们之间的区别呢
我们刚才说了一静一动
程序是有序代码的集合
而进程呢是程序的执行
它有用户态和内核态的切换
然后进程是暂时的
程序是永久的
程序我可以放到一个文件系统里头
那它就可以长期保存
而进程呢它总是有一个开始
一个结束
一个变化的过程
这个结束了
那这个进程也就不存在了
而进程和程序
它们的组成呢是不一样的
进程除了你的程序
还包括数据和控制信息
进程控制块
好 那到现在呢
我们就对进程的大致的情况呢
有一个基本的介绍