写在前面的话
本文主要根据本人在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.简单有序
这样的程序对程序员来说不亚于管理一班人, 程序员为每个进程设计
好相应的功能, 并通过一定的通讯机制将它们有机地结合在一起, 对每个
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 编程 进程 调用 信号 返回 消息 一个 系统 队列 命令 |
注册
个人空间
