免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mq110
打印 上一主题 下一主题

写了一个内核模块 实现简单的类似ps命令. [复制链接]

论坛徽章:
0
1 [报告]
发表于 2005-11-22 15:19 |显示全部楼层
mq110兄,写的不错

一个小问题,for_each_process时,要加读锁的。

read_lock(&tasklist_lock);
…………
read_unlock(&tasklist_lock);

否则在SMP机器上容易出问题

论坛徽章:
0
2 [报告]
发表于 2005-11-23 09:14 |显示全部楼层
原帖由 mq110 于 2005-11-22 19:16 发表


接受..
我写的时候也在想这个问题 到底要分配多少空间才合适..


没仔细看代码,proc以前没写过..内核栈一般是8k,还有很多人愿意配成4k,要省着用呀

论坛徽章:
0
3 [报告]
发表于 2005-11-23 09:53 |显示全部楼层
原帖由 1jjk 于 2005-11-23 09:43 发表
现在这么发达@!浪费点也没关西啦!哈哈!


开玩笑了吧? 内核中如果存在一定点内存泄漏,kmalloc的不释放,极短的时间就会耗尽内存;
何况栈? 你去看哪些TCP/IP协议栈的中断处理,全都是kmalloc/get_free_pages,没有谁敢随便用栈空间。

论坛徽章:
0
4 [报告]
发表于 2005-12-26 15:36 |显示全部楼层
原帖由 richardhesidu 于 2005-12-26 15:33 发表


大牛能解释一下ps_read()在smp中是怎么执行的吗? 我实在看不错问题出在哪儿?


SMP中可能同时有n个进程在运行, 如果这同时运行的n个进程中都在读/proc中你提供的文件,而且都在ps_read()中,那块buffer就可能变得inconsistent──例如进程A在内核态写buffer,B此刻也在写这个buffer。

论坛徽章:
0
5 [报告]
发表于 2005-12-26 17:48 |显示全部楼层
原帖由 xdkui 于 2005-12-26 17:44 发表


问下albcamus兄
你说这里要加锁是不是为了保护什么?为了保护static char buf[1024*8]缓冲吗?

不太明白 谢谢了


保护task链表。 多个CPU的机器上,假如别的CPU在更改它,你同时试图访问它,可能会出问题。

论坛徽章:
0
6 [报告]
发表于 2005-12-26 18:09 |显示全部楼层
>>  for_each_process(p)的时候,如果别的cpu要改变task链表,该cpu也不会读取tasklist锁,所以不会被锁,仍会继续改变task链表。

是的。锁是这样一种机制,给哪些想要得到保护的人用的。 如果某个程序员不管共享数据会有多少个CPU在同事操作,就是不加锁而访问──那么,它一定访问得到,虽然结果未必是正确的。

论坛徽章:
0
7 [报告]
发表于 2005-12-27 09:18 |显示全部楼层
我表达能力有限了。 如果每一个要访问tasklist的代码,都把访问动作用rwlock保护起来,那么就保护得住了。自旋锁、读写自旋锁、信号量、读写信号量都是这样的:只有大家都用,才能真正保护。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP