免费注册 查看新帖 |

Chinaunix

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

[进程管理] 进程描述符 哈希值 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-03 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-07 20:33 |只看该作者 |倒序浏览
/*******************************************************************************
  *函数名称:static s32 hash_it(void *x)
  *函数功能:计算任意指针的哈希值,用于在hash链表中快速找到任务进程对应的内核结构体
  *输入参数:无
  *输出参数:无
  *函数返回值:static s32:计算的哈希值
  *其他:无
*******************************************************************************/
static s32 hash_it(void *x)
{
        u32 tmp = (u32)x;
        tmp = tmp ^ (tmp >> MAP_SHIFT) ^ (tmp >> (MAP_SHIFT * 2));
        return (s32)(tmp % MAP_SIZE);
}

/*******************************************************************************
  *函数名称:void *hash_find(struct task_struct *task)
  *函数功能:根据进程task结构指针的哈希值找出对应的子进程结构
  *输入参数:
                @struct task_struct *task:进程task结构指针
  *输出参数:无
  *函数返回值:void *:子进程结构指针
  *其他:无
*******************************************************************************/
void *hash_find(struct task_struct *task)
{
        s32 index = hash_it(task);
        struct p_body_s *body = NULL;

        list_for_each_entry(body, &hashmap.table[index].list, hash_process)
        {//遍历hash表
                if (body->mypid ==task->pid && body->myself == task)
                {        /*find it */
                        return (void *)body;
                }
        }
        return (void *)0;

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-03 06:20:00
2 [报告]
发表于 2016-05-07 20:36 |只看该作者
我的问题是哈希函数是咋出来的??
MAP_SHIFT 6

MAP_SIZE 64
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP