计算机系统中几对重要的概念区分——程序、进程和线程

先写出将要解释的哪几对概念:
程序、进程和线程
并发和并行
多线程和超线程
单核和多核。(

必须先咒骂一句,以下内容其实是第二遍写了,在第一次发表的时候,没有发表成功,结果全都没有了,还得重新写一遍,第一次写的内容其实很多,第二次是在没有心思写太多了,只写主要的了,TMD....)

程序是死的,只是安装到你的电脑上的一堆文件而已,你不允许它,它就静静躺在那里,什么都不做。进程:很专业的解释是,操作系统对一个运行的程序的一种抽象(CSAPP)。果然是很抽象的,抽象的基本不懂。进程就是代表程序在电脑里运行的,每一个程序至少有一个进程,进程是进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。当赋予死的程序以生命时,它就成了一个活动的实体,称之为进程。每一个进程运行后,都会向cpu索要相应的系统资源,都会有自己一定的地址空间,在这空间里会存放文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。线程,线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。每一个进程都至少有一个主线程,进程向系统申请一段地址空间,而线程并不拥有专属于自己的地址空间,每个线程都只拥有一点点必不可少的资源,进程中所有的线程共享进程的资源。线程一个创建和撤销另外一个线程。线程其实才是真正利用cpu的单位,它是能独立运行的基本单位,也是独立调度和分派的单位。可以这么认为,进程向cpu申请了地址空间后,然后把真正要做的工作全部交给了线程去做,但是线程使用的资源是由进程代表申请的。
    拿一个c程序举例子来说明下进程和线程的关系,一个c程序只有一个主函数,main函数,但是可以拥有其他很多子函数,main函数是c程序运行的切入点,通过main函数可以调用其他子函数,main函数和其他子函数共享全局变量,也可以相互之间很方便的传递数据。这里,可以把进程看成一个c程序,一个进程也只拥有一个主线程,主线程就是相当于main函数,线程之间共享数据,也可以相互很方便的传递数据。
   再举一个更生动的数据。说:一堆肉,是死的,什么都做不了,但是一堆肉组成了一个人,人是活的有生命的,人又由很多器官组成,当人想要做什么事情的时候,其实是由大脑这个器官调配其余器官来真正做的。可以说人在这个社会上占有一定的资源,但是真正使用这些资源的是器官,但是我们不能说器官占有这些资源。这里,程序就是一堆肉,进程就是一个人,线程就是器官,其中主线程是大脑。
这些概念都有所了解,但是要想完全说清楚很难了,等我逐一弄懂,并且确定自己的了解是正确的后,我会贴出来的。


WAITING...

posted on 2011-06-20 23:57 古月 阅读(448) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2011年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章档案

C++/C

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜