FreeBSD读书笔记—4进程管理—4.2进程状态

2009-05-13 01:51:11来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


《The Design and Implementation of the FreeBSD Operating System》第二部分“进程”——第四章“进程管理”——第4.2节“进程状态”。
希望有机会看到这些文字的朋友能留下您的宝贵意见,让我们共同为BSD的推广传播而努力。万分感谢!





《The Design and Implementation of the FreeBSD Operating System》
Part II: Processes
Chapter 4. Process Management
4.2. Process State
系统中的每个进程都会被分配一个唯一的标识符,称为进程标识符(process identifier, PID)。PID是应用程序和内核用来指定进程的共同机制。当应用程序向某个进程发送信号或是接收某个死去进程的退出状态时就会用到PID 。对于每个进程来说有两个PID特别重要:它自己的PID和它的父进程的PID。
进程状态的设计方案在FreeBSD5.2中进行了彻底的改造。改造的目的就是为了对共享同一个地址空间以及其它资源的多线程(thread) 提供支持。线程在其它系统中也被称作轻量级进程(lightweight processes)。线程是进程执行过程的单元;它需要一个地址空间以及其它的资源,不过它可以跟其它线程共享其中的许多资源。共享同一个地址空间以及其它资源的那些线程是独立进行调度的,它们可以全部同时进行系统调用。FreeBSD5.2对于进程状态的改造方案可以支持线程对共享的资源进行选择,也就是所谓的可变量级进程(variable-weight processes)。
开发人员通过把进程状态的许多组成部分从进程以及用户结构体中转移到针对每一类状态信息的子结构体里面来实现他们的改造,如图4.1所示。进程结构体直接或间接地指向了所有的子结构体。用户结构体则为了调试器的方便而大体上保留了历史的原样。线程结构体仅包含在内核中运行时所需的信息:调度相关信息、一个在内核中运行时使用的栈,一个线程控制块(thread control block, TCB)、以及其它的取决于机器的状态。TCB是由机器架构定义的,包括通用寄存器、栈指针、程序计数器、处理器状态长字以及内存管理寄存器。

在最轻量级的形式下,FreeBSD的线程可以共享包括PID在内的全部进程资源。每当需要进行额外的并行计算的时候,就会使用kse_create系统调用创建一个新的线程。所有对线程的调度和管理都是由一个用户级的调度程序来处理的,这个调度程序是通过内核中的callback来得知线程状态的变化的。除此之外,这个用户级的调度程序还必须掌握每个线程所使用的用户级栈的情况,因为包括那些通常用作栈的区域在内的整个地址空间都是共享的。由于线程都是共享同一个进程结构体的,它们只拥有一个PID,因此在

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:在VMWare上实现FreeBSD的PPPoE网关(IPFW+NAT)

下一篇:关于BSD的自我注解。。。