Linux 2.6 内核阅读笔记 进程

本文是关于Linux 2.6内核中进程管理的阅读笔记,涉及获取当前进程的方法,通过thread_info和内核栈的联合体提高效率;pid哈希链表的使用,用于快速查找同线程组、进程组、会话的pid;以及进程等待队列的设计,包括wait_queue_head_t、__wait_queue和不同类型的唤醒函数。
摘要由CSDN通过智能技术生成

2014年7月22日 获取当前进程

linux使用了轻量级进程(lightweight process)来对多线程应用程序有更好的支持,在task_struct里面存放了一个thread_info来表示当前正在执行的线程信息,并且在thread_info里也存了一个反向到task_struct的指针以便获得当前进程。

获取当前进程正在运行的进程这个行为在linux内核中是非常频繁的,所以内核为了效率采用了将thread_info和内核栈存放在一起的策略,使用了这么一个联合体:

union thread_union {
         struct thread_info thread_info;
         unsigned long stack[THREAD_SIZE/sizeof(long)];
};


这里的THREAD_SIZE是指内核栈的大小,通常是两个页框的大小。

在内核线程时,esp存放的就是内核栈的栈顶指针,由于栈的生长方向是从上到下的,所以只要将esp的值与~(THREAD_SIZE-1)进行按位与操作之后,就可以得到栈顶的thread_info的指针位置了,具体的处理过程:

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值