免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1363 | 回复: 0
打印 上一主题 下一主题

[系统管理] 求教关于Linux中current宏重定向的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-13 14:22 |只看该作者 |倒序浏览
      最近在学习Linux内核(Linux2.6.33),看到current宏的时候,就想动手实现current的重定向,这样以实现自己在特定函数的一个特殊功能。通常情况下,current宏是获取当前进程的进程描述符的地址,而我现在需要做的就是使用current宏获取指定进程的进程的描述地址。

    在比较早的内核版本中,current宏以前是通过如下汇编指令实现的:movl $-8192,%eax; andl %esp, %eax来实现的,但是Linux2.6.33中current的宏的实现是调用了get_current函数,而get_current函数其实是调用了percpu_read_stable(current_task)宏,其底层是通过如下的汇编指令asm(“movl %%fs:%P1","%0" : "=r" (pfo_ret__) :"p" (&(var))实现的,其实对于这段汇编指令也不是特别的了解,希望可以有大侠可以指点一二。

    我自己也尝试着解决这个问题,但是采取了两种方法都没有达到预期的效果。
    其一是通过汇编指令修改"%%fs:%P1"部分,但是没有理解上述汇编指令,老师有些问题
    其二通过percpu_write(current_task,previous_tsk)宏试图修改,但是也有问题。current_task是自己定义的每cpu变量,DECLARE_PER_CPU(struct task_struct * ,current_task);previous_tsk 是指定的进程的进程描述符指针。
   

   还有一个问题就是,Linux内核这样修改current宏的有什么好处?
   希望各位大侠不吝赐教,能指出我实现的过程中的问题,也希望大侠们可以提出关于Linux current宏重定向更多更好的方法!谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP