- 论坛徽章:
- 95
|
原帖由 huaping3263 于 2007-3-22 16:48 发表于 3楼
一个进程至少有一个或多个线程
过于简单武断了.
下面以类 Unix 系统的进程模型为例说说我自己对进程和线程概念的理解吧.
进程(process) 是操作系统提供的一种程序执行环境的抽象, 是一种
动态的概念. 在这种抽象中, 正在该进程中执行的程序认为自己独占整个
计算机资源, 包括 CPU 及其寄存器, 所有的(虚拟)内存, 文件系统, 等等.
每个进程对应了一组资源, 包括 CPU 资源, 地址空间或者说虚拟内存(包括
其代码段, 数据段和执行栈), 文件描述符表, 等等. 资源的类型和各个
操作系统实现的进程模型相关, 例如说在 Plan 9 的进程模型中就有类 Unix
操作系统的进程模型所没有的 name space 和 rendezvous group(a spac
of rendezvous tags) 等资源类型. 另外, 在一个进程里面至少有一个执行
序列, 一般称之为线程(thread).
线程在各个操作系统的实现是不同的, 甚至在同一个操作系统中也可能
存在多种实现(Linux 就是这种情况). 一般来说, 线程的实现分为内核线程
和用户态线程. 所谓的内核线程, 就是说操作系统内核意识到了线程的存在,
而且调度(上下文切换)也以线程为单位. 而用户态线程即指内核完全意识
不到线程的存在, 调度也是以进程为单位进行的. 另外, 用户态线程也可以
有多种不同的实现方式, 例如说通过在创建进程时共享某些资源(例如说父子
进程共享数据段[由于一个线程代表一个执行序列, 所以执行栈无法共享; 而
只读的代码段一般都共享], 共享文件描述符表, 等等), 再通过适当的进程间
通信/同步机制实现在这些进程间的可控上下文切换; 再例如说像操作系统
提供对硬件资源的多路复用(multiplex)一样通过对进程资源进行多路复用(
multiplex)在一个进程中提供多个执行序列也是可以的, Plan 9 的 thread
库就是用这种方式实现的.
[ 本帖最后由 MMMIX 于 2007-3-23 05:30 编辑 ] |
|