Linux内核编程实验报告6

Linux内核编程实验报告6

ID:37861306

大小:438.50 KB

页数:8页

时间:2019-06-01

Linux内核编程实验报告6_第1页
Linux内核编程实验报告6_第2页
Linux内核编程实验报告6_第3页
Linux内核编程实验报告6_第4页
Linux内核编程实验报告6_第5页
资源描述:

《Linux内核编程实验报告6》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux内核分析实验报告 实验题目:构造新内核同步机制实验实验目的:设计同步原语模拟内核信号量。硬件环境:内存1G以上软件环境:Linux(Ubuntu)2-6实验步骤:usr/src/linux-2.6.33.2/ipc/shm.c一:实验原理简介:信号量负责对共享缓冲区的互斥,主要实现的方法有信号量的声明(sys_sema_open),在特定信号量的等待(sys_sema_wait),将特定信号量上的等待进程唤醒(sys_sema_signal),删除特定信号量(sys_sema_close)。声明信号量:声明新的信号量结构,对本信号量等待队列初始化,本信号量信号灯数目初始化

2、,然后将其放入信号量等待队列中。在特定信号量的等待:如果信号灯数目大于0,说明还有资源可以利用,将信号灯数目-1。否则,说明没有资源可用,将本进程置为WQ_FLAG_EXCLUSIVE,放入等待队列,调用schedule(),重新调度其他进程。Schedule()方法后是finish_wait()方法,当进程被唤醒后,首先执行此方法。此方法将进程真正地从等待队列中弹出。唤醒信号量上的等待进程:进程即将从缓冲区离开,将信号灯的数目+1。此时,如果等待队列中还有等待进程(判断条件是信号灯的数目<0),则从等待队列中弹出一个进程,使其状态变为RUNNING,等待被调度。删除特定信号量:给

3、出信号量的编号,判断等待队列上是否还有等待的进程,如果有的话,将所有的进程均从队列中弹出。然后从信号量的队列中删除编号是输入数字的信号量结构。二:体结构:typedefstruct__sema{intkey;//本信号量编号intnumber;//本信号量信号灯个数wait_queue_head_t*p;//系统等待队列首指针struct__sema*next;//所有信号量以链形式串在一起,本属性指向下一信号量结构}sema;三:主要函数简介:1.系统函数wake_up()唤醒等待队列中所有没有设置WQ_FLAG_EXELUSIVE的节点对应的进程,并且唤醒等待队列中第一个设置标

4、记WQ_FLAG_EXELUSIVE的进程Wake_up_all()除了唤醒等待队列中所有没有设置WQ_FLAG_EXELUSIVE的节点对应的进程外,还唤醒所有设置了此标记位的进程。prepare_to_wait(queue,&wait,flag);将进程以设置的标志位放入等待队列中。finish_wait(queue,&wait);将进程从队列中弹出2自定义函数(位置:/usr/src/linux-2.6.33.2/ipc/shm.c)1sema*check_sema_key(intkey,sema**prev)作用:检查以key值为编号的信号量是否存在于当前的信号量链中2as

5、mlinkageintsys_sema_open(intkey,intnumber)作用:如果key=0声明一个新的信号量(链表的插入),如果key!=0,返回key值。1asmlinkageintsys_sema_wait(intkey)作用:如果信号灯数目大于0,说明还有资源可以利用,将信号灯数目-1。否则,说明没有资源可用,将本进程置为WQ_FLAG_EXCLUSIVE,放入等待队列,调用schedule(),重新调度其他进程。Schedule()方法后是finish_wait()方法,当进程被唤醒后,首先执行此方法。此方法将进程真正地从等待队列中弹出。4.asmlinkag

6、eintsys_sema_signal(intkey)作用:进程即将从缓冲区离开,将信号灯的数目+1。此时,如果等待队列中还有等待进程(判断条件是信号灯的数目<0),则从等待队列中弹出一个进程,使其状态变为RUNNING,等待被调度。5.intwake_up_all_ones(intkey)作用:唤醒key编号信号量上所有的等待进程。6.asmlinkageintsys_sema_close(intkey)作用:给出信号量的编号,判断等待队列上是否还有等待的进程,如果有的话,将所有的进程均从队列中弹出。然后从信号量的队列中删除编号是输入数字的信号量结构。五:结果检测:设定信号量的n

7、umber值是2,生成3个进程,三个进程争夺两个资源。为了使实验结果明显,进程每次执行时候,使之输出1—1010个数字。预期结果:三个shell中只有两个进程输出,一个停滞。此时,左右上角进程执行中间进程等待。此时,左上角,中间进程执行,右上角进程停滞。结果:三个进程中有两个进程同时输出,另一个进程等待,正确。结论分析与体会:信号量是是内核中重要的同步机制,可以控制对共享数据的读写。原理简单,但是一些编程的细节要注意,比如指针。附:程序源代码/************

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。