没有合适的资源?快使用搜索试试~ 我知道了~
毕业论文-操作系统课程设计论文之消息函数的分析论文.doc
0 下载量 85 浏览量
2023-07-08
18:22:11
上传
评论
收藏 924KB DOC 举报
温馨提示
试读
43页
毕业论文-操作系统课程设计论文之消息函数的分析论文.doc
资源推荐
资源详情
资源评论
1
摘 要
Linux 是一种自由和开放源码的类 Unix 操作系统。目前存在着许多不同的
Linux,但它们都使用了 Linux 内核。Linux 可安装在各种计算机硬件设备中,从手机、
平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。
Linux 采用消息队列的方式来实现消息传递。System V 的消息队列(message queues)
是进程之间互相发送消息的一种异步(asynchronously)方式,在这种情形之下,发
送方不必等待接收方检查它的消息——即在发送完消息后,发送方就可以从事其它工
作了——而接收方也不必一直等待消息。
新的消息总是放在队列的末尾,接收的时候并不总是从头来接收,可以从中间来
接收。消息队列允许一个或多个进程写消息,一个或多个进程读取消息。Linux 维护
了一系列消息队列的 msgque 向量表。其中的每一个单元都指向一个 msqid_ds 的数据
结构,完整描述这个消息队列。当创建消息队列的时候,从系统内存中分配一个新的
msqid_ds 的数据结构并插入到向量表中。
关键字: Linux , 消息函数 ,分析
2
目 录
摘 要.............................................................1
1 课设简介.........................................................3
1.1 课程设计题目 ....................................................3
1.2 课程设计小组成员 ................................................3
2 LINUX 的消息函数主模块功能描述 ...................................3
3 LINUX 的消息函数各个子模块功能描述 ...............................4
3.1 Msgget:.......................................................4
3.2 Msgsnd:.......................................................5
3.3 Msgrcv:.......................................................6
3.4 Msgctl:.......................................................7
4 LINUX 的消息函数各个子模块相关函数代码分析结果 ...................9
4.1 有关常量、函数及相关错误信息的含义: ............................9
4.1.1 常量含义:...................................................9
4.1.2 错误信息含义.................................................9
4.1.3 相关函数及文件首部含义.......................................9
4.2 函数 sys_msgget 的分析 ..........................................16
4.2.1 代码及注释..................................................16
4.3 发送消息函数 real_msgsnd 的分析 .................................23
4.3.1 代码分析....................................................23
4.4 接收消息函数 real_msgrcv 的分析 .................................28
4.4.1 代码及注释..................................................28
4.5 函数 sys_msgctl 的分析 ..........................................33
4.5.1 代码及注释..................................................33
心得体会...........................................................42
参考文献...........................................................43
3
1 课设简介
1.1 课程设计题目
LINUX 的消息函数的分析
1.2 课程设计小组成员
○
1
Msgget:孙帅,分析消息队列的创建函数(sys_msgget)以及与它相关的函数
newque、findkey、msg_init,写出代码分析结果,明确组内成员的明细分工,总体
把握组内成员的进度。后期组织组内成员成果汇总进行本组总体报告撰写。王亚璇,
画出流程图来表示相关函数之间的相互调用关系。魏蕾,负责查阅资料。
○
2
Msgsnd:张婷,分析消息的发送函数(real_msgsnd)以及与它相关的函数
sys_msgsnd,写出代码分析结果。王鑫坤,画出流程图来表示相关函数之间的相互调
用关系。闫瞳,张飞龙,负责查阅资料。
○
3
Msgrcv:樊德山,分析消息的接收函数(real_msgrcv)以及与它相关的函数
sys_msgrcv,写出代码分析结果。赵松,画出流程图来表示相关函数之间的相互调用
关系。鹿新宇,孙适,负责查阅资料。
○
4
Msgctl:刘晶,分析消息队列的控制函数(sys_msgctl)以及与它相关的函数
freeque,写出代码分析结果。鞠冰霜,画出流程图来表示相关函数之间的相互调用
关系。刘航,负责查阅资料。
2 LINUX 的消息函数主模块功能描述
Linux 采用消息队列的方式来实现消息传递。System V 的消息队列(message
queues)是进程之间互相发送消息的一种异步(asynchronously)方式,在这种情形
之下,发送方不必等待接收方检查它的消息——即在发送完消息后,发送方就可以从
事其它工作了——而接收方也不必一直等待消息。
新的消息总是放在队列的末尾,接收的时候并不总是从头来接收,可以从中间来
接收。消息队列允许一个或多个进程写消息,一个或多个进程读取消息。Linux 维护
了一系列消息队列的 msgque 向量表。其中的每一个单元都指向一个 msqid_ds 的数据
结构,完整描述这个消息队列。当创建消息队列的时候,从系统内存中分配一个新的
msqid_ds 的数据结构并插入到向量表中。
每一个 msqid_ds 数据结构都包括一个 ipc_perm 的数据结构和进入这个队列的
消息的指针。另外,Linux 保留队列的改动时间,例如上次队列写的时间等。Msqid_ds
队列也包括两个等待队列:一个用于向消息队列写,另一个用于读。
4
每一次一个进程试图向写队列写消息,它的有效用户和组的标识符就要和队列的
ipc_perm 数据结构的模式比较。如果进程可以向这个队列写,则消息会从进程的地址
空间写到 msg 数据结构,放到消息队列的最后。每一个消息都带有进程间约定的,应
用程序指定类型的标记。但是,因为 Linux 限制了可以写的消息的数量和长度,可能
会没有空间容纳消息。这时,进程会被放到消息队列的写等待队列,然后调用调度程
序选择一个新的进程运行。当一个或多个消息从这个消息队列中读出去的时候会被唤
醒。
从队列中读是一个相似的过程。进程的访问权限一样被检查。一个读进程可以选
择是不管消息的类型从队列中读取第一条消息还是选择特殊类型的消息。如果没有符
合条件的消息,读进程会被加到消息队列的读等待进程,然后运行调度程序。当一个
新的消息写到队列的时候,这个进程会被唤醒,继续运行。
3 LINUX 的消息函数各个子模块功能描述
3.1 Msgget:
功能:取得一个消息队列。调用者提供消息队列的键标(用于表示一个消息列的唯一
的名字),当这个队列存在的时候,这个系统调用负责返回这个队列的标识号;如果
这个队列不存在,就创立一个消息队列,然后返回这个消息队列的标识号。主要由
sys_msgget 执行。
说明:系统调用返回与参数 key 相关的消息队列的标识符.
若以下事实成立,则与消息队列相关的标识符和数据结构将被创建出来:
若参数 key 等于 IPC_PRIVATE.
若参数 key 没有存在的消息队列标识符与之相关,同时(msgflg&IPC_CREAT)为
真.
创建消息队列的同时,与新的消息队列标识符相关的数据结构将被初始化为如
下:
msg_perm.cuid 和 msg_perm.uid 设置为调用进程的有效 UID.
msg_perm.cgid 和 msg_perm.gid 设置为调用进程的有效 GID.
msg_perm.mode 访问权限比特位设置为 msgflg 访问权限比特位.
msg_qnum,msg_lspid,msg_lrpid,msg_stime,msg_rtime 设置为 0.
msg_ctime 设置为当前系统时间.
msg_qbytes 设置为系统允许的最大值.
返回值:调用成功则返回一个非 0 值,称为消息队列标识符;否则返回值为-1.
简单框图:
5
3.2 Msgsnd:
功能:发送消息到指定的消息队列中。主要由 real_msgsnd 执行。
说明:发送一个消息到由 msqid 指定消息队列标识号的消息队列.
参数 msgp 指向一个用户定义的缓冲区,并且缓冲区的第一个域应为长整型,指
定消息类型,其他数据放在缓冲区的消息中其他正文区内.
下面是消息元素定义:
long mtype;
char mtext[];
mtype 是一个整数,用于接收进程选择消息类型.
mtext 是一个长度为 msgsz 字节的任何正文,参数 msgsz 可从 0 到系统允
许的最大值之间变化.
msgflg 指定操作行为:
若(msgflg&IPC_NOWAIT)是真的,消息并不是被立即发送而调用进程会立即
返回.
若(msgflg&IPC_NOWAIT)不是真的,则调用进程会被挂起直到下面情况之一
发生:
消息被发送出去.
消息队列标志被系统删除.系统调用返回-1.
调用进程接收到未被忽略的中断信号,调用进程继续执行或被终止.
调用成功后,对应指定的消息队列的相关结构做如下动作:
消息数(msg_qnum)加 1.
消息队列最近发送进程号(msg_lspid)改为调用进程号.
剩余42页未读,继续阅读
资源评论
zzzzl333
- 粉丝: 689
- 资源: 7万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功