Memory management 内核进程kswapd是如何逐步启动的?

Memory management 内核进程kswapd是如何逐步启动的?,memory-management,linux-kernel,kernel,Memory Management,Linux Kernel,Kernel,我了解内核进程的影响和功能kswapd 作为ps-elf | grep swapd的输出,我发现kswapd是由kthread启动的。但它是如何一步一步开始的呢?与提取相关的源代码在哪里 以下是ps-elf | grep swapd的输出: $ ps -elf | head -n 1; sudo ps -elf | grep -i kswapd F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME C

我了解内核进程的影响和功能
kswapd

作为
ps-elf | grep swapd
的输出,我发现
kswapd
是由
kthread
启动的。但它是如何一步一步开始的呢?与提取相关的源代码在哪里

以下是
ps-elf | grep swapd
的输出:

$ ps -elf | head -n 1; sudo ps -elf | grep -i kswapd
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
1 S root        46     2  0  80   0 -     0 kswapd 11:42 ?        00:00:00 [kswapd0]
您可以看到,内核进程
kthread
的PID是2:

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
1 S root         2     0  0  80   0 -     0 kthrea  6/2       00:00:00 [kthreadd]
此外,我在rootfs中找不到同名的二进制程序。详情请参阅下文:

$ cat /proc/46/cmdline
#outputs nothing
sudo find / -iname kswapd 2>/dev/null
#outputs nothing
我想我有你想要的全部或大部分答案

如果您询问如何初始化kswapd,则该文件包含

如果您询问kswapd是如何被需要更多内存的进程唤醒的,则该文件包含


您可以使用grep、printk和dump_stack()命令的组合来逐步执行之前执行的指令,aaft

您不是在问程序如何“启动”kswapd,是吗?换句话说,您是在问kswapd是如何初始化的,还是在问kswapd是如何被任意程序唤醒的?您找不到可执行文件,因为它们是内核线程,内核线程只存在于内核代码本身中,没有单独的可执行文件
kthreadd
也是一个内核线程。