分类: LINUX
2006-07-27 13:18:39
这是《从加电到shell中的一部分》,感觉不错,就拣出来了。
如果你尝试ps aux命令,你会看到类似下面的内容:
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
root 1 0.1 8.0 1284 536 ? S 07:37 0:04 init [2]
root 2 0.0 0.0 0 0 ? SW 07:37 0:00 (kflushd)
root 3 0.0 0.0 0 0 ? SW 07:37 0:00 (kupdate)
root 4 0.0 0.0 0 0 ? SW 07:37 0:00 (kpiod)
root 5 0.0 0.0 0 0 ? SW 07:37 0:00 (kswapd)
root 52 0.0 10.7 1552 716 ? S 07:38 0:01 syslogd -m 0
root 54 0.0 7.1 1276 480 ? S 07:38 0:00 klogd
root 56 0.3 17.3 2232 1156 1 S 07:38 0:13 -bash
root 57 0.0 7.1 1272 480 2 S 07:38 0:01 /sbin/agetty 38400 tt
root 64 0.1 7.2 1272 484 S1 S 08:16 0:01 /sbin/agetty -L ttyS1
root 70 0.0 10.6 1472 708 1 R Sep 11 0:01 ps aux
这是在你系统中运行的程序清单。这些信息来自/proc文件系统。请注意init是1号进程,进程2,3,4和5分别是kflushd, kupdate, kpiod and kswapd。这里有一件很奇怪的事:你会注意到虚拟占用(SIZE)和实际占用(RSS)列都是0,进程怎么会不使用内存呢?
这些进程就是内核守护进程。大部分内核并不显示在进程列表里,你只能通过做减法的方式来了解内核用了多少内存。守护进程在init之后启动,所以他们和其他进程一样有进程ID,但是他们的代码和数据都存放在内核占有的内存中。
守护进程带有括号,因为/proc文件系统不包含这些进程的命令行信息。There are brackets around the entries in
the command column because the /proc
filesystem does not contain
command line information for these processes.
那么守护进程是用来干吗的呢?这个文章以前的版本曾经请求大家帮助,由于我对守护进程了解不多,下面部分是由从网友回复的内容中综合而来的。欢迎发来更多的线索,参考,订正!
输入和输出是通过内存中的缓冲来完成的,这让事情变得更快,程序的写入会存放在内存缓冲中,然后再一起写入硬盘。守护进程kflushd和 kupdate管理这些工作。kupdate间断的工作(每5秒?)来检查是否有写过的缓冲,如过有,就让kflushd把它们写入磁盘。
进程有时候无事可做,当他运行时也不一定需要把所有的代码和数据都放在内存中。这意味着我们可以通过把运行中程序不用的内容切换到交换分 区来更好的是用内存。把这些数据移入/移出内存通过kpiod和kswapd,大约每隔1秒,kswapd醒来并检查内存情况。如果在硬盘的东西要读入内 存,或者内存可用空间不足。kpiod就会被调用。
kapmd也可能在你的系统中运行,如果你在内核中配置过自动电源管理。
update程序可以让你配置Kflushd和kswapd,尝试update -h获得更多信息。
交换空间由swapon打开,由swapoff关闭。init脚本(/etc/rc.sysinit 或/etc/rc.d/rc.sysinit)通常会在启动时调用swapon。我听说swapoff可以为笔记本电脑省不少电。