首页 > 操作系统 > 实际系统中的进程与线程

实际系统中的进程与线程

2010年1月9日 行者 发表评论 阅读评论

  我们知道一个进程可以有一个或多个线程。如果一个进程有0个线程那就无法作任何事了,就像是没有人在家就不能实际完成任何事情了。而操作系统可以有一个或多个进程在运行中。这里可以同样引用上面的例子,没有任何进程的系统也做不了什么事情的。

  那么这些线程与进程都干了些什么?最终它们形成了操作系统,就是为了完成某个目标的线程与进程的集合。

  在最高层,系统包含了一定数目的进程。每个进程负责提供某种类型的服务,包括了文件系统、显示驱动、数据采集模块、控制模块等等。

  在每个进程中,都有一定数量的线程。这些线程的数目都是不同的。一个设计者只使用一个线程的设计可能能够完成另外一个设计者使用五个线程实现的功能。有些问题由于自身的原因必须使用多线程来解决,而实际上也是相对来说易于解决的,而另外的问题可能只能使用单线程处理,很难使用多线程来解决。

为何使用多个进程?

  那么我们为什么不在一个进程使用一亿个线程呢?也许有的系统强迫你按照这种方式编码,不过将这些事物分散到多个进程中的益处也是很多的,这些益处包括了:

  • 防干扰与模块化;
  • 可维护性;
  • 可靠性。

  这种将问题分解为几个独立的问题的能力是一个非常有用的概念。这也是操作系统的核心。操作系统包含了很多独立的模块,每个模块负责一定的事务。这些独立的模块都是独立的进程。这些模块之间唯一的依赖就是少数完善定义的接口。

  由于缺少相互之间的依赖,这种结构就能带来增强的可维护性。每个模块有其自己的特别的定义,这样就很容易来对一个模块进行修补,特别是这个模块不和任何其他模块有联系的时候。

  可靠性可能是最重要的一点了。一个进程就像是一个房子一样有着明确的边界定义。房中的一个人可以清晰地分辨出他自己什么时候在房子里面,什么时候在房子外面。一个线程也有同样的情况,只有在其访问进程中的内存时它才能够生存。如果越过了进程地址空间的边界,它就会被杀掉。这就是说,两个运行在不同进程中的线程被有效的相互隔离了。

  进程地址空间由操作系统的进程管理模块维护。当一个进程开始的时候,进程管理器就为其分配一定数量的内存并开始一个线程的运行。这块被分配的内存就被标志为归那个进程所有。

  这就意味着如果在那个进程中有多个线程,内核就需要在这些线程之间完成环境变量切换,这是一个非常高效的操作,因为我们不需要更换地址空间,所有的线程都在这个地址空间运行。如果我们需要切换到其他进程中的一个线程,进程管理器就会介入并执行地址空间的切换。不过不用担心,虽然增加了一步操作会消耗资源,不过在操作系统中这个操作也是非常快的。

Related posts:

  1. 进程与线程
  2. 进程与线程
  3. 系统内核的角色
  4. 内核状态
  5. 进程的启动

分类: 操作系统 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.