2.4. Process Management

2009-05-13 08:05:52来源:未知 阅读 ()

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


FreeBSD支持多任务处理环境。每个运行的任务或者线程被称作进程(process)。FreeBSD进程的上下文由用户级状态(包括地址空间和运行时环境)和内核级状态(包括调度参数、资源控制和标识信息)组成。上下文包含内核为该进程提供服务时用到的每个资源和信息。用户可以创建进程、控制进程的执行、在进程状态发生改变是得到通知。每个进程都与一个唯一的值相联系,这个值叫做进程ID(PID)。当内核向用户报告状态变化时用这个值来识别进程。用户调用的系统调用需要识别进程,也要用到这个值。
内核通过复制另外一个进程的上下文来创建新的进程。这个新的进程被称作原(父)进程的子进程。创建进程时被复制的上下文包含用户级的执行状态和被内核管理的该进程的系统状态。
图2.1描述了进程的生命周期。使用系统调用fork,一个进程可以通过拷贝自己的方式创建新的进程。fork会返回两次。一次是在父进程中返回子进程的PID,另一次是在子进程中返回0。父进程与子进程的关联在系统中形成分层的结构。新进程共享父进程的资源,比如文件描述符、信号句柄状态和内存结构。
Figure 2.1. Process-management system calls


尽管可以通过拷贝父进程的方式来创建新的进程,但载入和运行一个不同的程序是更有用和更普遍的做法。一个进程可以用另外一个程序的内存映像来覆盖自己,可以使用系统调用execve来给这个新创建的映像传递参数。其中一个参数是文件名。这个文件的内容是一个可以被系统识别的格式。它可以是一个可执行文件。也可以一个被解释执行的文件,它可以指定一个解释程序来解释并执行它。
执行系统调用exit可以终止一个进程。exit传递一个8位的exit状态给进程的父进程。如果一个进程想与他的父进程传递多于1字节的信息,它必须使用管道或socket建立一个IPC通道,或者使用中介文件。
一个进程可以使用系统调用wait把自己挂起,直到它的某个子进程运行结束。wait会返回子进程的PID和exit状态。当一个父进程的子进程非正常退出,它可以使自己接收到一个通知信号。使用系统调用wait4,一个父进程可以得到导致子进程退出原因的事件和子进程运行是销毁的资源情况。如果一个进程是孤儿进程(因为它执行完成之前它的父进程就退出了),当它退出时,内核可以安排把它的exit状态返回给一个特殊的系统进程。
系统根据 process-priority 参数来调度进程的运行。在默认的分时调度系统下,这个优先级被基于内核的调度运算发展管理。用户进程可以使用一个指定的参数来影响进程调度,这个参数控制它的所有调度优先级。用户进程要根据内核的调度策略共享它在CPU下的资源。FreeBSD也有一个实时的调度器。进程运行在实时调度器下管理自己的优先级,内核不能改变这些优先级。内核运行一个高于所有其他进程的最高优先级的实时进程。因此,实时进程不用共享CPU下的资源。
信号
系统定义了一组可以传递给进程的信号。FreeBSD的信号模拟硬件中断。一个进程可以指定一个用户级的子程序作为信号处理器(handler)。一个信号产生时,当它被handler捕获时,它就被阻止在更深层触发。捕获信号的工作包括保持当前进程的上下文,然后为运行handler而产生新的上下文。当信号到达handler时,即可以终止当前进程,也可以返回到当前进程(通常是在设置一个全局变量后)。如果handler返回,而信号没有被阻塞,它还能继续产生和被捕获。

标签:

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

上一篇:常用网络检测命令

下一篇:RPM问题rpmdb: unable to join the_编译内核2.4.20-8到2.6.19