Unix 多进程编程

Unix 多进程编程

ID:41032930

大小:85.00 KB

页数:28页

时间:2019-08-14

Unix 多进程编程_第1页
Unix 多进程编程_第2页
Unix 多进程编程_第3页
Unix 多进程编程_第4页
Unix 多进程编程_第5页
资源描述:

《Unix 多进程编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一.多进程程序的特点由于UNIX系统是分时多用户系统,CPU按时间片分配给各个用户使用,而在实质上应该说CPU按时间片分配给各个进程使用,每个进程都有自己的运行环境以使得在CPU做进程切换时不会"忘记"该进程已计算了一半的"半成品".以DOS的概念来说,进程的切换都是一次"DOS中断"处理过程,包括三个层次:(1)用户数据的保存:包括正文段(TEXT),数据段(DATA,BSS),栈段(STACK),共享内存段(SHAREDMEMORY)的保存.(2)寄存器数据的保存:包括PC(programcounter,指向下一条要执行的指令

2、的地址),PSW(processorstatusword,处理机状态字),SP(stackpointer,栈指针),PCBP(pointerofprocesscontrolblock,进程控制块指针),FP(framepointer,指向栈中一个函数的local变量的首地址),AP(augumentpointer,指向栈中函数调用的实参位置),ISP(interruptstackpointer,中断栈指针),以及其他的通用寄存器等.(3)系统层次的保存:包括proc,u,虚拟存储空间管理表格,中断处理栈.以便于该进程再一次得到CP

3、U时间片时能正常运行下去.既然系统已经处理好所有这些中断处理的过程,我们做程序还有什么要担心的呢?我们尽可以使用系统提供的多进程的特点,让几个程序精诚合作,简单而又高效地把结果给它搞出来.另外,UNIX系统本身也是用C语言写的多进程程序,多进程编程是UNIX的特点,当我们熟悉了多进程编程后,将会对UNIX系统机制有一个较深的认识.首先我介绍一下多进程程序的一些突出的特点:1.并行化一件复杂的事件是可以分解成若干个简单事件来解决的,这在程序员的大脑中早就形成了这种概念,首先将问题分解成一个个小问题,将小问题再细分,最后在一个合适的规

4、模上做成一个函数.在软件工程中也是这么说的.如果我们以图的方式来思考,一些小问题的计算是可以互不干扰的,可以同时处理,而在关键点则需要统一在一个地方来处理,这样程序的运行就是并行的,至少从人的时间观念上来说是这样的.而每个小问题的计算又是较简单的.2.简单有序这样的程序对程序员来说不亚于管理一班人,程序员为每个进程设计好相应的功能,并通过一定的通讯机制将它们有机地结合在一起,对每个进程的设计是简单的,只在总控部分小心应付(其实也是蛮简单的),就可完成整个程序的施工.3.互不干扰这个特点是操作系统的特点,各个进程是独立的,不会串位.

5、4.事务化比如在一个数据电话查询系统中,将程序设计成一个进程只处理一次查询即可,即完成一个事务.当电话查询开始时,产生这样一个进程对付这次查询;另一个电话进来时,主控程序又产生一个这样的进程对付,每个进程完成查询任务后消失.这样的编程多简单,只要做一次查询的程序就可以了.二.常用的多进程编程的系统调用1.fork()功能:创建一个新的进程.语法:#include#includepid_tfork();说明:本系统调用产生一个新的进程,叫子进程,是调用进程的一个复制品.调用进程叫父进程,子进程继承了父进程的几乎所有的属性:.实际UI

6、D,GID和有效UID,GID..环境变量..附加GID..调用exec()时的关闭标志..UID设置模式比特位..GID设置模式比特位..进程组号..会话ID..控制终端..当前工作目录..根目录..文件创建掩码UMASK..文件长度限制ULIMIT..预定值,如优先级和任何其他的进程预定参数,根据种类不同决定是否可以继承..还有一些其它属性.但子进程也有与父进程不同的属性:.进程号,子进程号不同与任何一个活动的进程组号..父进程号..子进程继承父进程的文件描述符或流时,具有自己的一个拷贝并且与父进程和其它子进程共享该资源..子

7、进程的用户时间和系统时间被初始化为0..子进程的超时时钟设置为0..子进程的信号处理函数指针组置为空..子进程不继承父进程的记录锁.返回值:调用成功则对子进程返回0,对父进程返回子进程号,这也是最方便的区分父子进程的方法.若调用失败则返回-1给父进程,子进程不生成.例子:pid_tpid;if((pid=fork())>0){/*父进程处理过程*/}elseif(pid==0){/*子进程处理过程*/exit(0);/*注意子进程必须用exit()退出运行*/}else{printf("forkerror");exit(0);

8、}2.system()功能:产生一个新的进程,子进程执行指定的命令.语法:#include#includeintsystem(string)char*string;说明:本调用将参数string传递给一个命令解释器(一般为sh)执行,即string

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。