专门做地图的网站温州seo推广外包
- 3.3进程操作
- 3.3.1进程创建
- 3.4进程间通信
- 3.4.1共享内存系统
- 3.4.2消息传递系统
- 直接通信:
- 间接通信
- 同步和异步
- 缓冲
个人理解,如有错误敬请斧正
3.3进程操作
3.3.1进程创建
linux中创建新进程实验
进程在其运行过程中会创建新进程,新进程可以再次创建子进程,从而形成进程树。
大多数操作系统根据唯一的一个进程标识符pid来识别进程。pid通常是一个数值。
通常进程需要一定的资源,这些资源可以从操作系统获得,也可以从父进程获得。但限制他从父进程获得,就可以避免创建过多的进程导致系统超载。
在创建子进程时除了资源和逻辑外,初始化数据由父进程传递给子进程。就像传入函数中的实参一样。
当进程创建新进程时,有两种执行可能:
1、父进程和子进程并行执行
2、父进程等待直到某个或所有子进程完成。新进程的地址空间也有两种可能
子进程是父进程的复制品(具有与父进程相同的程序和数据)
子进程装入另一新程序
实验描述更清楚,详见linux中创建新进程
3.4进程间通信
按照一个进程能否被其他进程影响或者影响其他进程,可分为独立进程和协作进程。
提供环境进行进程协作的理由:
- 信息共享
- 提高运算速度
- 模块化
- 方便
进程间通信的基本模式:
- 共享内存:共享内存允许以最快的速度进行方便的通信,在计算机中它
可以达到内存的速度。共享内存比消息传递快,消息传递系统通常用系统调用来实现,因
此需要更多的内核介入的时间消耗 - 消息传递:消息传递对于交换较少数量的数据很有用,因为不需要避免冲突。对于计算机间的通信,消息传递也比共享内存更易于实现
- 共享内存:共享内存允许以最快的速度进行方便的通信,在计算机中它
3.4.1共享内存系统
共享内存方式进程间通信实验
- 为了生产者和消费者并行进行,需要缓冲来被生产者填充和被消费者读取。
- 这种缓冲分为无限缓冲和有限缓冲:
- 无限缓冲( unbounded-buffer) 对缓冲大小没有限制。消费者可能不得不等待新的项,但生产者总是可以产生新项。
- 有限缓冲 (bounded-buffer) 假设缓冲大小固定。对于这种情况,如果缓冲为空,那么消费者必须等待:如果缓冲为满,那么生产者必须等待。
这种方式类似于循环队列的插入和删除操作。课本示例如下:
定义共享区域:
存入相关信息:
读取相关信息:
3.4.2消息传递系统
如果进程 P 和 Q 需要通信,那么它们必须彼此相互发送消息和接收消息,它们之间必须要有通信线路 (communication link) 。下面是逻辑实现线路和send,receive方法。
直接或间接通信
同步或异步通信
自动或显示缓冲
下面讨论相关概念
直接通信:
需要通信的每个进程必须明确地命名通信的接收者或发送者。定义如下:
send(P, message): 发送消息到进程 P。
receive(Q, message): 接收来自进程 Q 的消息。
这种方案的通信线路具有如下属性:
- 在需要通信的每对进程之间自动建立线路。进程仅需知道相互通信的标识符。
一个线路只与两个进程相关。
每对进程之间只有一个线路。
这种方案展示了对称寻址。
- 下面看下非对称寻址:即只要发送者命名接收者,而接收者不需要命名发送者。定义如下:
• send(P, message): 发送消息到进程 P 。
• receive(id, message): 接收来自任何进程的消息,变量 id 设置成与其通信的进程名称。
间接通信
通过邮箱或端口来发送和接收消息,每个邮箱都有一个唯一的标识符。
定义如下:
• send(A, message): 发送一个消息到邮箱 A 。
• receive(A, message): 接收来自邮箱 A 的消息。
这种方案的通信线路具有如下特性:
只有在两个进程共享一个邮箱时才能创建线路。
一个线路可以与两个或者更多进程相关联。
两个进程之间可能有不同的线路,每个线路对应一个邮箱。
进程或者操作系统可以拥有邮箱 ,如果邮箱为进程所有,那么需要区分拥有着和使用者,默认建立邮箱的进程为邮箱拥有者,如果该进程终止,那么邮箱也将也将消失,如果使用者再次发送消息到邮箱,就会提示邮箱不存在。当然也可以通过系统调用把拥有权和使用权传递给其他进程。
同步和异步
- 同步:就是说发送消息的进程send()一条消息,等待接收进程receive(),这条消息。然后在继续发送。
- 异步:发送消息进程发送消息,然后继续工作,无需等待接受消息的进程接受消息。
缓冲
- 零容量:两个进程之间必须是阻塞式(同步)的。
- 有限容量:当队列满了的时候需要等待。
- 无限容量:发送进程无需等待,无限发送。