- 1
- 0
- 约5.52千字
- 约 31页
- 2020-09-14 发布于广西
- 举报
3.5 进程通信
信号通信机制
管道通信机制
共享存储区通信机制
消息通信机制
3.5.0 进程通信
• 进程通信:进程之间的信息交换
• 进程同步是一种进程通信,但有别于本节讨论的内容,因
为本节讨论的进程通信是专门用于在进程间传递大批数
据的通信,而进程同步只是在进程间传递信号
3.5.0 进程通信分类
• 低级通信:交换信息量少,通信控制复杂,对用户不透明
• 信号通信机制 (3.5.1)
• 信号量及其原语操作
• 高级通信:用户直接利用OS提供的通信命令传输大量数据,
通信控制细节由OS完成,对用户透明
• 管道提供的共享文件通信机制 (3.5.2)
• 共享存储区通信机制 (3.5.3)
• 信箱和发信/收信原语的消息传递通信机制 (3.5.4)
信号通信机制
管道通信机制
共享存储区通信机制
消息通信机制
3.5.1 信号通信机制
• 信号机制又称软中断 (如 Ctrl + C),是一种进程之间
进行通信的简单通信机制,通过发送一个指定的信号来
通知进程某个异常时间发生,并进行适当处理
1. 用户按中断组合键 Ctrl+C;
2. 终端驱动程序收到输入字符,并调用信号系统;
3. 信号系统发送SIGINT信号给shell,shell再把它发送给进程;
4. 进程受到SIGINT信号;
5. 进程撤销。
3.5.1:与硬中断的差别
• 软中断运行在用户态,往往延时较长
• 硬中断运行在核心态,能及时发现
3.5.1:信号的发送
• 可以由用户、进程、内核发送给其他的进程。
• 用户:通过特殊键 (如Ctrl+C),请求内核产生信号
• 进程:通过系统调用kill(pid,sig);利用信号与其它进程通信
• 内核:程序执行出错,如非法段存取、浮点数溢出、非法操作码;
通知进程特定事件
• 同步信号:进程执行指令产生的信号称为同步信号
• 异步信号:进程以外的事件所引起的信号称为异步信号
3.5.1:信号处理
• 忽略此信号:大多数信号可以被忽略,除了SIGKILL (除
了init进程)和SIGSTOP。
• 捕捉信号:通知内核在某种信号发生时,调用一个用户
函数。但不能捕捉SIGKILL和SIGSTOP。
• 执行系统默认动作:
• 终止 (+core) [大多数信号如此默认响应,core文件用于调试]
• 忽略
• 继续
3.5.1:Linux下的信号
分类 信号
终止进程 SIGCHLD, SIGHUP, SIGKILL, SIGABRT, SIGSTOP, SIGTSTP, …
例外事件 SIGBUS, SIGSEGV, SIGPWR, SIGFPE, SIGSTKFLT,
SIGURG, …
执行系统调用 SIGPIPE, SIGILL, SIGIO, …
终端交互 SIGINT, SIGQUIT, SIGTTIN, SIGTTOU, …
用户进程相关 SIGTERM, SIGALRM, SIGUSR1, SIGUSR2, …
跟踪进程执行 SIGTRAP
信号通信机制
管道通信机制
共享存储区通信机制
消息通信机制
3.5.2 示例
Linux 下执行命令时使用管道:
who│grep martin | wc - l
3.5.2:管道分类
• 匿名管道 (unnamedpipe)
• 是在父进程和子进程之间,或同一父进程的两个子进程之间传输
数据的无名字的单向管道
• 命名管道 (namedpipe)
• 是服务器进程和一个或多个客户进程之间通信的单向或双向管道
3.5.2 管道通信机制
• 管道 (UNIX, Windows)是连接读写进程,实现他们之间
通信的一个特殊文件。属于一种共享文件通信机制
• 管道是一个共享文件,连接读写进程实现通信。写进程
往管道一端写入信息,读进程从管道另一端读信息。
• 管道借助于文件系统的机制实现,包括 (管道)文件的
创建、打开、关闭和读写
3.5.2 (续)
• 管道基于文件系统,利用一个打开的共享文件连接两个
相互通信的进
原创力文档

文档评论(0)