首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

6.2  多进程机制

所有现代通用操作系统都提供了相应的机制,用来创建多个进程,并对多进程的执行实施管理。进程是资源管理和保护的基本单位。一些嵌入式操作系统,如VxWorks和pSoS的很多版本,只支持单地址空间,类似单进程。这种限制通常是合理的,例如,你的移动电话的处理机可能不需要运行多个进程。但是,这些嵌入式系统实际上大多可以利用多线程。关于多线程,我们将在第6.3节讨论。

不同的操作系统提供的“进程控制”功能大不相同。但是,在多进程操作系统中,以下几方面的功能是共有的。

进程生存期(process lifetime)操作。如果OS或应用程序调用了进程“创建”和“执行”函数,例如,fork()和exec*()系列函数(POSIX)或CreateProcess()函数(Win32),进程就会应运而生。这些函数会创建新的地址空间,以运行某一程序。启动进程(initiating )还可以设置新程序的命令行参数和环境变量,以将命令、参数、文件或目录的位置之类的信息传递给新进程。进程的终止有以下两种方式。

l  自愿(Voluntarily)终止。例如,程序执行到main()函数的结尾处;或者,程序调用了一个“进程退出”API,如ExitProcess()(Win32)或exit()(POSIX),这个API允许将进程的“退出状态”设置为某一特定值。

l  无意(Involuntarily)终止。例如,通过一个信号(POSIX),或通过一个外部“删除操作”如TerminateProcess()(Win32)而终止。

进程同步(process synchronization)操作。当进程退出时,大多数操作系统都会保留这个进程的标识信息(identity)和退出状态。这样,父进程可以与之同步,并获得它的退出状态。常见的进程同步函数有:

l  POSIX的wait()和waitpid()函数;

l  Win32的WaitForSingleObject()和WaitForMultipleObjects()函数。

很多操作系统还会维护“创建者进程”和“被创建进程”固有的“父/子”关系。一个子进程退出时,一些操作系统会根据所维护的这种关系,将退出信息通知给“可能还关注着这个子进程”的父进程。例如,在POSIX系统上,当子进程退出时,OS会发送SIGCHLD信号给父进程。

进程属性(process property)操作。大多数操作系统都会提供一些函数,用来获取和设置进程的各种属性。可以在“进程”级设置的属性包括:文件访问的默认权限、用户识别、资源限制、调度优先级、当前工作目录,等等。一些操作系统还允许锁定进程的虚拟内存区域,以避免分页错误,或允许内存和I/O设备之间交换数据。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论