现在,我正在阅读Robert Love的书“ Linux Kernel Development 3d Edition”。他在那里写了有关thread_info结构的信息,该结构包含指向task_struct结构的指针,并且据我所知,它位于进程的内核堆栈的底部或顶部(取决于体系结构)。直到最近我才对Linux内核API感到陌生,并且不了解current()方法的存在。本书摘录涉及current()方法的实际工作方式:
在x86上,电流是通过屏蔽堆栈指针的13个最低有效位以获得thread_info结构来计算的,这是通过current_thread_info()函数完成的,该程序集如下所示:movl $ -8192,%eax和l% esp,%eax假定堆栈大小为8KB。启用4KB堆栈时,将使用4096代替8192。
我的问题是:
对于那些将阅读本主题的人来说,我所说的问题可能会导致结论,即作者对内存分配和管理过程的理解不正确。好的,由于我可以将分配给堆栈的内存表示为充满位(或字节)的功能区,因此这可能是正确的。所有这些字节都可以由表示为十进制值的特定内存地址访问。堆栈的原点是最低的内存地址,堆栈的fin是最高的内存地址值。但是,我们如何才能仅通过屏蔽位于ARBITRARY所在的堆栈指针的13个最低有效位来获得指向位于堆栈末尾的thread_info结构的指针(如果我理解正确,我们就屏蔽掉了堆栈指针ADDRESS表示为十进制值)。