进程与子进程及线程
这次概念性东西比较多。
进程
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。——摘自百度百科
Windows的进程
Mac的进程
如双击Mac的程序:
然后其下面有多个进程。
随便点一个
一个程序的运行,可能包含多个进程,一个进程组管理。
个人觉得,进程就是独立运行的一个程序的实例,相当于常说的运行的软件。进程:进行中的程序
进程则是完成用户任务的执行实体。是向系统申请分配资源的基本单位。进程只要创建了,就会有相应的部分存在于内存中。
1 进程是实体的并且具有它自己的地址空间。
2 包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。
文本区域存储:处理器执行的代码,
数据区存储变量和进程执行期间使用的动态分配内存。
堆栈区:存储着活动过程调用的指令和本地变量。
3 进程是一个“执行中的程序“。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行),它才能成为一个活动的实体。我们称其为进程。
特征:
动态性:进程的实质是程序中多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发行:任何进程都可以同其他进程一起并发执行。
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的/不可预知的速度向前推进。
结构特征:进程由程序+数据+进程控制块三部分组成。
多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
进程切换
进行进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。
这里所说的从某个进程收回处理器,实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。那么被中止运行进程的中间数据存在何处好呢?当然这个地方应该是进程的私有堆栈。
让进程来占用处理器,实质上是把某个进程存放在私有堆栈中寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,并把待运行进程的断点送入处理器的程序指针PC,于是待运行进程就开始被处理器运行了,也就是这个进程已经占有处理器的使用权了。
在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的 切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有堆栈中的。
进程的状态
运行中的进程可能具有以下三种基本状态:
1. 就绪状态(Ready)
进程已获得除处理器外的所需资源,等待分配处理器资源。只要分配处理器就可以立即执行。
2. 运行状态(Running)
进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
3. 阻塞状态(Blocked)
由于进程等待某种条件(如I/O操作或线程同步),在条件满足之前无法继续执行。该事件发生前即使把处理器分配给该线程也无法运行。
进程状态五态模型
程序与进程的区别
1. 程序是静态的,本身可以作为软件资源保存,程序= 指令+数据,进程是程序的一次执行过程。是动态的,它有一定的生命期,是动态地产生和消亡的。
2. 进程是一个能独立运行的单位,能与其它进程并发执行,进程是作为资源申请和调度单位存在的。而通常的程序段不能作为一个独立运行的单位。
3. 程序和进程无一一对于关系,一方面一个程序可由多个进程共用;另一方面,一个进程在活动中又可顺序地执行若干个程序。
个人总结一下:
程序 = 指令+数据
进程:进行的程序,就是运行程序的过程。
进程 = 程序+数据+进程控制块
进程的三个状态:就绪/运行/阻塞
进程的五态:新建/就绪/运行/阻塞/结束(上面有进程状态转换图)
进程可以独立运行,是作为资源申请和调度单位存在的。程序确实静态的。属于资源。
一个程序可以有多个进程。一个进程也可以顺序执行多个程序。
进程的特征:动态/并发/独立/异步/
线程
线程:是程序执行流的最小单元。一个标准的线程由线程ID+当前指令指针(pc)+寄存器集合+堆栈组成。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,除了一些必不可少的资源。但它与同属于一个进程的其它线程共享当前进程的资源。
同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。
在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程中只有能够保证独立运行的资源,不再拥有其它资源。所线程比较轻量,调度与切换比较快。
线程的实体包括:程序/数据/TCB/,线程是动态的,它的动态特性是由线程控制块TCB控制的。
TCB包括以下信息:
1. 线程状态,2. 当线程不运行时,被保存的线程资源。3. 一组执行堆栈。 4. 存放每个线程的局部变量主存区。 5. 访问同一个进程中的主存与其它资源。
用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。
线程是独立调度和分派的基本单位。可并发执行,共享进程资源。
线程与进程的区别
进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。另外进程也是抢占处理机的调度单位。它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。
线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。
通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。