【发布时间】:2021-11-20 05:55:41
【问题描述】:
背景: 我是linux内核领域的初学者。我刚刚通过阅读 Robert Love 的《Linux 内核开发 - 第三版》一书开始了解 Linux 内核。本书大部分讲解都是基于Linux kernel 2.6.34。
因此,很抱歉,如果这是重复性问题,但我在堆栈溢出中找不到与此相关的任何信息。
问题: 我从书中了解到,linux中的每个线程都有一个名为'thread_info'的结构,它有指向它的进程/任务的指针。
这个 'thread_info' 被存储在每个活动线程的内核堆栈的末尾。
并且“thread_info”有一个指向其所属任务的指针,如下所示。
struct thread_info {
struct task_struct *task;
...
};
但是当我在最新的 linux 代码中检查相同的结构时,我看到了一个非常不同的 thread_info 结构,如下所示。 (https://elixir.bootlin.com/linux/v5.16-rc1/source/arch/x86/include/asm/thread_info.h)。它没有'task_struct'。
struct thread_info {
unsigned long flags; /* low level flags */
unsigned long syscall_work; /* SYSCALL_WORK_ flags */
u32 status; /* thread synchronous flags */
#ifdef CONFIG_SMP
u32 cpu; /* current CPU */
#endif
};
我的问题是,如果'thread_info'结构在这里没有其相关的任务结构,那么它如何找到有关其地址空间的信息?
另外,如果您知道任何关于最新 linux 内核的好书,请提供链接给我。
【问题讨论】:
标签: linux linux-kernel