多进程环境下UNIX操作系统的程序设计技术的研究.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:5 大小:285KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

多进程环境下UNIX操作系统的程序设计技术的研究.pdf

多进程环境下UNIX操作系统的程序设计技术的研究.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

万方数据多进程环境下UNIX操作系统的程序设计技术的研究UNIX多进程下的网络编程的方杨茹孔宪军引言UNIX多任务的实现UNIX多进程的特点【摘要】本文通过UNIX实现多任务的分析,指出了多进程环境下UNIX操作系统的程序设计的具体方法,并对UNIX几个重要函数进行了分析,提供了多进程环境下函数的应用程序.关键词:UNIX操作系统;多进程;fork()函数;wait()函数0由于UNIX操作系统众所周知的稳定性、可靠性,用来提供各种Intemet服务的计算机运行的操作系统占很大比例的是UNIX及UNIX类操作系统.目前比较常见的运行在PC机上的UNIX类操作系统有:BSD等.多任务是操作系统的重要性能之一.多任务即在同一时间内运行多个应用程序,UNIX多任务是指系统可以同时运行多个进程.多任务是相对于操作系统而言,指的是同一时间执行多个程序的能力,但是实际上在只有一个CPU的条件下不可能同时执行两个以上的程序.CPU在程序之间做高速的切换,使得所有的程序在很短的时间之内可以得到更小的CPU时间,这样从用户的角度来看就好像是同时在执行多个程序.进程就是应用程序的运行过程.每个进程都有自己私有的虚拟地址空间.多任务系统采用的方式基本上不外乎两种:(1)协同式多任务(Cooperative(2)抢占式多任务(PreemptiveUNIX都是抢占式系统.在传统的多任务系统中,“进程”是一个很重要的概念,在系统中进程是程序执行的实体,进程具有结构特征,它由正文(部分程序)、数据以及堆栈等数据结构组成.当一个进程需要由另一个实体执行某项任务时,该进程就派生(fork)一个子进程,让子进程去进行处理.在多任务操作系统内核调度下,系统中许多进程在并发执行.每个进程按自己的一系列指令严格执行,各进程之间的指令空间是独立的,不能跳转到其它的进程,它只会读写自己的数据与堆栈,不能去读写其它进程的数据和堆栈.进程通过系统调用与其它进程和外界通信.31ing);Multitasking);2第23卷第3期哈尔滨师范大学自然科学学报UNIX、Solaris收稿日期:2006—11—13JOURNALNORMAL(黑龙江工程学院)x86、SCOUNIXMultitask—V01.23,No.32007NATURALSCIENCESOFHARBINUNIVERSITY万方数据法sockfd=socket(⋯);/宰创建一个新的插bind(sockfd,⋯);/乖将服务器插口绑定UNIX系统中派生新进程的唯一的方法是调用fork()函数.该函数的原型如下所示:fork函数的一个最重要的特性是:调用一次,如果调用成功则返回两次:在调用进程(父进程)中,它返回一次,返回值为新派生的子进程的进程ID号,父进程需要通过它来区别不同的子进程;在新派生的子进程中还返回一次,返回值为0,子进程可以通过getpid获取父进程的进程ID.如果函数调用失败,则只在调用进程中返回一1.fork函数的两个典型应用是:(1)一个进程在处理一个操作时,同时还需要处理另一个操作,这时,进程就派生一个子进程来执行该任务.大多数网络服务器就是这种应用的典型代表.(2)一个进程在执行过程中,想执行另一个程序,它就通过fork产生一个自己的副本(子进程).再由子进程调用exec序列函数来代替自己去执行新程序.shell程序中常采用这种方式.在网络服务器中,最常见的使用fork函数的工作方式是:父进程调用accept,当客户连接到达,accept成功返回时,调用fork派生一个子进符,继续在监听描述符上调用accept等待下一个连接请求.而子进程则关闭父进程使用的监听描述符,使用accept返回的已连接描述符进行读写操作.典型的调用fork的网络服务器程序结构如/术其它变量定义水//,lc设置服务器地址结构变量代码术/到本地地址和端口木/for(;;){if((pid=fork())=0)/宰if中的代码只在子进程中的执行拳/close(sockfd);/丰子进程关闭父进程/水通过connfd读写操作,任务处理close(connfd);/术在父进程中关闭子进程使用的已连接描述符术/wait()函数的功能是让父进程获取子进程的结束状态信息并释放子进程在PCB表中的资源.其函数原型如下所示:wait的返回值为子进程的进程号,传址参数stat被用来返回子进程退出时的状态值(exit()调用中的传人参数).如果子进程已退出,wait将把结束的子进程完全释放,并获得其返回值.但是,如果子进程的执行没有结束,wait将阻塞调用它的父进程.解决办法是在信号SIGCHLD中断处理子程序中调用wait或waitpid.因为如果有予进程被中断,内核将给父进程发送SIGCHLD信号.下面我们来看看调用wa