linux中的一个问题,请大侠们帮忙解释一下,谢谢!
linux内核源代码情景分析的进程与进程调度一章中有如下一段代码:
获取当前进程的task_struct结构
static inline struct task_struct * get_current(void)
{
struct task_struct *current;
__asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
return current;
}
书中说这行汇编代码是将当前的堆栈指针寄存器ESP的内容与8191UL相“与”而得到当前进程task_struct结构的起始地址。
进程的task_struct结构与进程系统空间堆栈的关系如下:
------------------ --
| | |
| | |
| | |
| | |
| |
| | 7K 系统空间堆栈
两个连续的物理页面 8K ------------------
| | |
| | |
| | |
| | |
------------------ --
| | 1K task_struct结构
------------------
我的理解是:
将当前的堆栈指针寄存器ESP的内容 + 8191 就得到当前进程task_struct结构的起始地址。
请帮忙解释下,谢谢!
获取当前进程的task_struct结构
static inline struct task_struct * get_current(void)
{
struct task_struct *current;
__asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
return current;
}
书中说这行汇编代码是将当前的堆栈指针寄存器ESP的内容与8191UL相“与”而得到当前进程task_struct结构的起始地址。
进程的task_struct结构与进程系统空间堆栈的关系如下:
------------------ --
| | |
| | |
| | |
| | |
| |
| | 7K 系统空间堆栈
两个连续的物理页面 8K ------------------
| | |
| | |
| | |
| | |
------------------ --
| | 1K task_struct结构
------------------
我的理解是:
将当前的堆栈指针寄存器ESP的内容 + 8191 就得到当前进程task_struct结构的起始地址。
请帮忙解释下,谢谢!
...全文
相关推荐
三网H5游戏【咱要当大侠】最新整理Linux手工服务端.zip
Linux手工服务端的推出,对于《咱要当大侠》这类H5游戏来说,是一个重要的里程碑。它不仅提高了游戏的可运营性,还为游戏的长期发展和创新提供了坚实的基础。
基于多种框架的鹅大侠农产品公益平台Android端的研究与设计.pdf
本文主要探讨的是"基于多种框架的鹅大侠农产品公益平台Android端的研究与设计"。在当前乡村振兴战略的背景下,移动互联网技术对农业发展起到了关键作用,推动农产品线上销售的增长。平台如Android应
Red Hat Linux 9全面掌握
很好很全面的Red Hat Linux 9教程,从LINUX菜鸟到大侠都能从中受益。
Professional Oracle 10g RAC on Linux
Oracle业界大侠Tom Kely 经典作品之一,描述Red Hat Enterprise Linux平台上搭建Oracle10g RAC的过程,详细讲解了RAC相关之技术精髓,由于上传档案大小限制
Debain系Linux基本操作.py
主要用于指导树莓派系统的学习和操作,用于更系统学习linux相关操作。本文档基于仇龙大侠的linux教学的汇总


