UNIX多进程编程
日期:2004年9月25日 作者:清风网络学院 查看:[大字体 中字体 小字体]-
写在前面的话
本文主要根据本人在UNIX系统上的编程实践经验总结而成, 既做为自己在一个时期内编程实践的部分总结, 又可成为文章发表. 对UNIX程序员初学者来说是一个小小的经验, 仅供参考; 对UNIX老手来说则不值一哂, 请各位多多指教.
一.多进程程序的特点
由于UNIX系统是分时多用户系统, CPU按时间片分配给各个用户使用, 而在实质上应该说CPU按时间片分配给各个进程使用, 每个进程都有自己的运行环境以使得在CPU做进程切换时不会"忘记"该进程已计算了一半的"半成品". 以DOS的概念来说, 进程的切换都是一次"DOS中断"处理过程, 包括三个层次:
(1)用户数据的保存: 包括正文段(TEXT), 数据段(DATA,BSS), 栈段(STACK), 共享内存段(SHARED MEMORY)的保存.
(2)寄存器数据的保存: 包括PC(program counter,指向下一条要执行的指 令的地址), PSW(processor status word,处理机状态字), SP(stack pointer,栈指针), PCBP(pointer of process control block,进程控制块指针), FP(frame pointer,指向栈中一个函数的local变量的首地址), AP(augument pointer,指向栈中函数调用的实参位置), ISP(interrupt stack pointer,中断栈指针), 以及其他的通用寄存器等.
(3)系统层次的保存: 包括proc,u,虚拟存储空间管理表格,中断处理栈.以便于该进程再一次得到CPU时间片时能正常运行下去.既然系统已经处理好所有这些中断处理的过程, 我们做程序还有什么要担心的呢? 我们尽可以使用系统提供的多进程的特点, 让几个程序精诚合作, 简单而又高效地把结果给它搞出来.
另外,UNIX系统本身也是用C语言写的多进程程序,多进程编程是UNIX的特点,当我们熟悉了多进程编程后,将会对UNIX系统机制有一个较深的认识.首先我介绍一下多进程程序的一些突出的特点:
1.并行化
一件复杂的事件是可以分解成若干个简单事件来解决的, 这在程序员的大脑中早就形成了这种概念, 首先将问题分解成一个个小问题, 将小问题再细分, 最后在一个合适的规模上做成一个函数. 在软件工程中也是这么说的. 如果我们以图的方式来思考, 一些小问题的计算是可以互不干扰的, 可以同时处理, 而在关键点则需要统一在一个地方来处理, 这样程序的运行就是并行的, 至少从人的时间观念上来说是这样的. 而每个小问题的计算又是较简单的.
2.简单有序
这样的程序对程序员来说不亚于管理一班人, 程序员为每个进程设计好相应的功能, 并通过一定的通讯机制将它们有机地结合在一起, 对每个进程的设计是简单的, 只在总控部分小心应付(其实也是蛮简单的), 就可完成整个程序的施工.
3.互不干扰
这个特点是操作系统的特点, 各个进程是独立的, 不会串位.
4.事务化
比如在一个数据电话查询系统中, 将程序设计成一个进程只处理一次查询即可, 即完成一个事务. 当电话查询开始时, 产生这样一个进程对付这次查询; 另一个电话进来时, 主控程序又产生一个这样的进程对付, 每个进程完成查询任务后消失. 这样的编程多简单, 只要做一次查询的程序就可以了.
二.常用的多进程编程的系统调用
1.fork()
功能:创建一个新的进程.
语法:#include <unistd.h>
#include <sys/types.h>
pid_t fork();
说明:本系统调用产生一个新的进程, 叫子进程, 是调用进程的一个复制品. 调用进程叫父进程, 子进程继承了父进程的几乎所有的属性:
. 实际UID,GID和有效UID,GID.
. 环境变量.
. 附加GID.
. 调用exec()时的关闭标志.
. UID设置模式比特位.
. GID设置模式比特位.
. 进程组号.
. 会话ID.
. 控制终端.
. 当前工作目录. - [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
-
- UNIX多进程编程 相关文章:
- ·编程实例 asp.net传值简单例程
- ·asp.net编程中实现 MD5 加密
- ·Flash AS以贪吃蛇小游戏为实例学习类编程
- ·C#编程中的 New 关键词的几种用法
- ·编程入门 理解属性,字段以及方法
- ·使用 C# 编程对 RTF 文档进行操作
- ·编程高手 ASP.NET 状态管理
- ·C#编程技巧 轻松实现对文件的操作
- ·微软.Net开发中的多线程编程总结
- ·一个C#高级编程中的事件 DEMO 实例
- UNIX多进程编程 相关软件
- ·C专家编程
- ·编程教程-MFC入门
- ·64位CPU指令集及编程方法(英文版)
- ·JXTA-Java P2P网络编程技术
- ·编程经典C++ Builder - 第01讲(全26讲)
- ·vc-mfc编程实例
- ·c#高级编程
- ·中文Lotus_Domino_R5_Web_高级编程
- ·COM、CORBA与Internet编程
- ·Oracle专家高级编程
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:Perl的经典用法
下一篇:jsp计数器制作手册
精品推荐
热点TOP10
- ·UNIX多进程编程
- ·XP实用技巧:关闭"压缩旧文件"功能
- ·共享:宽带ADSL拨号应用技巧五则
- ·独门秘笈--虚拟磁盘分区满汉全席
- ·拒绝死板 ISEE装扮个性漂亮的电脑
- ·新手入门:操作系统重装完全攻略
- ·快速恢复Windows 2000/XP遗忘的管理员密码
- ·如何清除先前保存的网络密码?
- ·Windows文件夹三招特殊技巧
- ·常见Win Installer故障解决
- ·Windows虚拟内存加速密籍
- ·Windows系统目录功能揭密
- ·Windows系统关机故障速解
- ·Windows XP镜像文件减肥实战
- ·40MB Win98极速“瘦身”
- ·Win 2000/XP系统急速“瘦”身
- ·Windows 80%是“赘肉”
- ·Windows操作系统菜鸟秘技
- ·如何取消Windows系统磁盘容量警告
- ·64个Windows技巧与窍门大放送(一)
