当我们双击程序图标,开始运行程序时,就产生了一个进程。所以进程的本质是一个正在执行的程序。进程包含了程序运行的所需要的所有信息,如代码段,数据段,程序计数器(存放下一条指令所在的地址),进程标识符(PID)进程控制块(PCB,用来保存进程退出CPU时的现场信息)等等信息。 所以进程可以看做是容纳程序运行的所有信息的容器。
值得注意的是,一个程序如果运行了两遍,则算是两个进程。如运行了两个word程序,这两个进程除了代码段,其他信息都是不一样的,事实上,这两个进程共享代码段。
进程使得操作系统具有(伪)并发操作的能力,它将一个单独CPU变成多个虚拟的CPU。这是因为CPU在多个进程之间来回切换,使每个进程各运行几十或者几百毫秒,所以就产生了程序并行的错觉。为了使得CPU在进程之间来回切换,所以要保存进程退出CPU时的现场信息,所以进程中很重要的一个数据结构就是PCB。
进程的状态分为运行,就绪,阻塞。
运行态:该进程正在占用CPU
就绪态:可运行,但因为其他进程正在运行而暂时停止
阻塞态:除非某种外部事件发生,否则进程不能运行
线程相当于是进程中的进程,即一个进程中再有一类进程。操作系统引入进程的目的是为了多个程序能够并发执行,以提高资源利用率和系统吞吐量。
那么,操作系统引进线程的概念是为了一个程序内部不同任务的并发执行成为了可能。例如一个浏览器程序,具有下载功能和用户交互的功能,那么该程序具有至少两个线程,一个用来下载,一个用来与用户进行交互。如果只有一个线程,那么当下载功能耗时过长,那么就会使得浏览器失去与用户交互的能力,直到完成下载。
引入线程后,CPU调度的不再是进程,而是线程,即进入CPU运行的是线程, 那么线程也应该具有线程控制块(TCB)用来保存现场信息。
在多线程OS中,CPU调度的不再是进程,那么进程不再是可执行的实体,而线程才是。
线程的状态和进程的状态是一样的,且状态之间的转换也是一样的。
进程是资源分配的单位(除CPU外),而线程是CPU调度的单位。
进程与进程的地址空间是相互独立的,而一个进程的多个线程则是共享该线程的地址空间。
原文:http://www.cnblogs.com/beMaster/p/4984872.html