Minix操作系统进程间通信中有关消息传递机制的说明
来源:互联网 发布:小米手机如何连mac 编辑:程序博客网 时间:2024/05/15 23:43
Minix操作系统进程间通信中有关消息传递机制的说明
消息传递是Minix中进程间通信的基础,本文根据对Minix源代码和《操作系统设计与实现》一书再进行描述。
1: Minix发送消息的类型有5种,由内核代码负责进程S 向进程D发送消息,消息的发送通常是由硬件中断和系统调用引起的。
在描写之前,先简要写出minix用于进程间消息传递所需要的数据结构。
(1) 进程描述符
Struct proc{
Proc_nr_t p_nr ;(int,进程号)
struct priv*p_priv;(系统优先权表)
Char p_rts_flags;
/*下面两个用于构建消息队列*/
struct proc* p_caller_q;
struct proc* p_q_link;
Message *p_messbuf; 消息
Proc_nr_t p_getfrom;
Proc_nr_t p_sendto;
}
进程间通信的实质就是进程S中P_messbuf所指向的消息复制到进程D中P_messbuf所指的内存,这个工作是由copyMess 完成的。
下面看看消息的结构:
typedef struc{
int m_source; //指出消息所属的进程
int m_type; //指出消息的类型
union {
mess_1 m_m1 ;
mess_2 m_m2 ;
mess_3 m_m3 ;
mess_4 m_m4 ;
mess_5 m_m5 ;
mess_7 m_m7 ;
mess_8 m_m8 ;
} m_u //消息的内容
} message.
关于消息的内容为什么会使用Union类型,我想是消息的类型有很多。如果对每种消息中内容的描述都使用struc结构的话。则将使用的内存会是现在union结构的7倍左右。
消息的操作:
(1) 发送:当一个进程S要发送消息给进程D时,内核先检测进程D是否准备接收进程S的消息(即进程D是否阻塞在接受进程S的消息上),如果是,则消息从进程S的内存空间上通过CopyMess复制到进程D的内存空间上。内存空间的具体位置由S的进程描述符表(Proc)中的P_messbuf指针所指定。如果进程D没有等待从消息S传递消息过来,那么进程S阻塞在给进程D发送消息上,同时把自己加入到进程D中p_caller_q所指向的发送阻塞链表中,如下图所示。
(2) 接受: 对于消息的接受,内核先查看是否有在该进程中挂起的通知,如果有,则先处理通知,因为通知将优于普通消息进行处理。如果没有挂起的通知,则从图1中所示的队列中找到发送方S的消息,进行复制处理。如果发送方S只是为发送消息而阻塞的话,还要将S进程加入就绪队列中。
- Minix操作系统进程间通信中有关消息传递机制的说明
- minix消息传递中rendezvous概念
- 操作系统 -- 进程间通信机制
- VC进程间通信之消息传递
- linux 进程间通信之消息传递
- linux 进程间通信之消息传递
- linux进程间通信之消息传递
- 【操作系统】进程之间的通信机制
- 进程通信-消息机制 .
- 进程间通信机制之一:消息队列
- 进程间通信——消息传递(消息队列)
- 进程间的通信--------操作系统
- [操作系统] 进程间的通信
- 操作系统:进程/线程同步的方式和机制,进程间通信
- 操作系统:进程/线程同步的方式和机制,进程间通信
- [操作系统]进程/线程同步的方式和机制,进程间通信
- iOS中消息的传递机制
- iOS中消息的传递机制
- CSS成为设计师必备知识的十大理由
- JQuery基础之(三)JQuery选择器
- JQuery基础之(四)JQuery包装集
- 优秀的SDK学习资料
- 改进的Oracle分页存储过程
- Minix操作系统进程间通信中有关消息传递机制的说明
- Linux线程实现机制分析(绝对经典)
- Delphi正则表达式使用方法(TPerlRegEx)
- 你还急着买房吗?
- JQuery基础之(五)使用JQuery操作元素的属性和样式
- Oracle数据库恢复-使用RMAN恢复到不同主机实例
- pku 1321 棋盘问题 简单DFS
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找
- 调用存储过程方法 (asp.net C#)