- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我读到 Linux 不支持线程或轻量级进程的概念,它认为内核线程与任何其他进程一样。然而,这个原则并没有很准确地反射(reflect)在代码中。我们看到保存进程状态信息的 task_struct(如果错误请纠正我)以及附加到进程内核堆栈底部的 thread_info。
现在的问题是,当 linux 应该像任何其他进程一样解释线程时,为什么代码通过 thread_info 支持独立线程的概念?
请让我知道我在这里遗漏了什么——我是 linux 内核开发的新手。
最佳答案
Linux 中的线程被视为恰好共享某些资源的进程。每个线程都有自己的thread_info
(如您所说,位于堆栈底部)和自己的task_struct
。我可以想到将它们作为单独的结构进行维护的两个原因。
thread_info
依赖于架构。 task_struct
是通用的。thread_info
削减了该进程的内核堆栈大小,因此它应该保持较小。 thread_info
被放置在堆栈的底部作为微优化,可以通过向下舍入堆栈大小来从当前堆栈指针计算其地址,从而节省 CPU 寄存器。关于Linux 内核 : Threading vs Process - task_struct vs thread_info,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21360524/
我正在研究一种管理休眠进程的替代方法,为了我的实验,我需要制作一个修改过的 Linux 内核。对于我正在做的事情,我需要访问描述进程的 task_struct,即使它是当前正在运行的进程。我需要这样做
和这个问题有点关系: Direct access to structure task_struct from Usermode as root 编写了一个打印指向任务结构 (task_struct)
Task_struct 用于内核保存进程的必要信息。由于该结构,内核可以暂停一个进程,并在一段时间后继续执行它。但我的问题是:这个 task_struct 存储在内存中的什么地方(我读过内核堆栈,是在
内核 task_struct 如下所示。我对两个成员更感兴趣,即 children 和 sibling ,所以我从这个内核结构中删除了其他元素。 struct task_struct{
我有一个 task_struct *我通过调用 find_task_by_vpid(get_pid()) 得到的.我想弄清楚哪个用户拥有该进程,以便我可以在我正在编写的系统调用中进行一些权限检查,但要
我已经编写了在/proc 文件上读取和写入的模块,并且工作正常,但是当我创建下面所示的权限函数时,想要使用它的权限,它给了我错误(基本上我希望每个人都可以读取该文件,但是只有 root 可以写入)。
我正在尝试实现一个模块,该模块将 pid 作为输入并简单地打印该进程的一些属性。打印 sibling 的信息也是该模块的一部分。但是,当我进入第二或第三级叶进程时,它直接返回 pid=1 的父进程,即
我正在尝试编写一个内核模块来检测 fork 炸弹,为此,我想向 task_struct 添加一个字段 int descendantCount。到目前为止,这是我的代码: struct task_str
Linux中的task_struct中是否有成员可以统计进程中正在运行的线程总数? 我读到,在Linux中没有线程,但是如果我们检查任何进程目录(proc/[PID]/task)内的任务目录,就会发现
在一个模块中,我正在访问 task_struct 并返回 stime+utime。我想将它转换为毫秒。 stime 和 utime 将以什么格式出现在 task_struct 中。我也可以从/proc
我有一个家庭作业,我必须向 task_struct 添加一些条目并用它们做一些事情。此外,我必须在 task_struct 初始化时将一个条目初始化为特定的 int。 task_struct 第一次初
我想从 struct task_struct 中获取完整的进程名称。 comm 字段仅存储 16 个字符,而进程名称可以更长。有没有办法获得完整的进程名称? 这可以通过从task_struct获取st
我想获取有关任务的信息,例如任务的总执行时间(使用task_exec_time(task))、未运行的时间(task->sched_info.run_delay)以及调度程序调用任务的次数(任务->s
我读到线程使用 thread_info ,而 task_struct 是 thread_info 的成员,我怀疑进程也使用 thread_info 还是他们在为进程描述符条目分配内存时使用 task_
我正在尝试弄清楚流程是如何相互关联的。我知道 linux 内核使用循环链表 list_head 将不同的进程连接在一起,信息保存在一个名为 task_struct 的结构中。在 task_struct
我正在阅读 Linux 内核的 try_to_wake_up() 函数的源代码。这个函数做了很多事情,包括:return p->on_rq == TASK_ON_RQ_QUEUED。 那么,task_
在阅读 Linux 内核源代码时,我发现一件事让我感到困惑。 在task_struct中,是这样写的 struct task_struct { #ifdef CONFIG_THREAD_INFO_IN
我正在研究一些内核代码并试图了解数据结构是如何链接在一起的。我知道调度程序如何工作的基本概念,以及 PID 是什么。但是我不知道在这种情况下命名空间是什么,也无法弄清楚所有这些是如何协同工作的。 我已
sched.h 中 task_struct 中的 void *stack 声明是什么? ? 它是指向进程镜像(堆栈、堆、.bss、数据、文本)堆栈的指针吗?如果是这样,指向过程镜像其余部分的指针在哪里
我无法理解 Linux 中进程控制 block 和进程描述符之间的区别? 我看到这两种结构都被称为 task_struct,这些术语似乎可以互换使用 - 两者之间有什么区别? 非常感谢您的帮助! 最佳
我是一名优秀的程序员,十分优秀!