Linux内核进程、线程与内存管理解析
1. 进程与线程基础代码分析
以下是一段关键代码:
nr_thrds = get_nr_threads(g);
if (g->mm && (g->tgid == t->pid) && (nr_thrds > 1)) {
snprintf(tmp, TMPMAX-1, " %3d", nr_thrds);
strncat(buf, tmp, TMPMAX);
}
这段代码的作用是获取指定进程中的线程数量。内核线程没有用户空间映射, main() 线程的 current->mm 是一个指向 mm_struct 类型结构的指针,代表整个进程的用户空间映射。若该指针为 NULL ,则可判断这是一个内核线程。我们通过查找任务结构的 comm 成员来打印线程名,而不使用 get_task_comm() 例程是因为它会导致死锁,后续会详细探讨避免死锁的方法。
2. 理解内核内部结构的重要性
理解内核内部细节对于成为经验丰富的内核或设备驱动开发者至关重要。它能帮助我们调试系统编程场景,为深入探索Linux内核,特别是内存管理奠定基础。
3. 内存管理概述
Linux内核主要通过两种方式管理内存:基于虚拟内存的方法和对物理内存的组织。
<
超级会员免费看
订阅专栏 解锁全文
1125

被折叠的 条评论
为什么被折叠?



