欢迎来到天天文库
浏览记录
ID:32366616
大小:47.50 KB
页数:5页
时间:2019-02-03
《linux内核解析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、内容摘要:linux内核的内容的解释,深入介绍linux内核的工作过程。怎样进行内核编译,以及自己学习linux的心得体会。一.内核编译的内容和优点Linux的内核源代码可以从很多途径得到。对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲,我认为,基本要求是:1、操作系统的基本知识;2、对C语言比较熟悉,最好要有汇编语言的知识和GNUC对标准C的扩展的知识的了解。另外在阅读之前,还应该知道Linux内核源代码的整体分布情况。我们知道现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,
2、各个目录大致对应了这些方面。Linux内核源代码的组成如下(假设相对于linux目录):arch这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。 include这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。 init此目录包含核心启动代码。mm此目录包含了所有的内存管理代码。drivers系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。 ipc此目录包含了核心的进程间通讯代码。 modules此目录包含已建好可动态加载的模块。 fsL
3、inux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。 kernel主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel目录下。 net核心的网络部分代码。里面的每个子目录对应于网络的一个方面。 Documentation此目录是一些文档,起参考作用。 我的体会是:开始最好按顺序阅读启动代码,然后进行专题阅读,如进程部分,内存管理部分等。在每个功能函数内部应该一步步来。实际上这是一个反复的过程,不可能读一遍就理解。二.Linux内核的工作过程在kernel内部那么kernel到底是如何工作的呢?如下面的图表。Ker
4、nel通过许多的进入端口也就是我们从技术角度所说的系统调用,来使得运行在它上面的应用程序可用。Kernel使用的系统调用比如"读"和"写"来提供你硬件的抽象(abstraction)。从程序员的视角来看,这些看起来只是普通的功能调用,然而实际上系统调用在处理器的操作模式上,从用户空间到Kernel空间有一个明显的切换。同时,系统调用提供了一个"Linux虚拟机",可以被认为是对硬件的抽象。模块化的KernelKernel的内核在boottime时从位于/boot目录的一个文件加载进存储中,kernel的模块位于目录/lib/modules/KERNELVERSION之下,所有的组件都会在k
5、ernel安装时被拷贝。管理模块大部分情况下,Linux管理它的模块不需要你的帮忙,但是如果必要的时候有命令行可以来手动检查和管理模块你可以使用modprobe来手动加载和卸载模块,(还有两个命令行叫做insmod和rmmod,但modprobe更易于使用因为它自动移除了模块依赖)。Lsmod只是列出了当前被载入的模块,modprobe则将列出所有可用的模块,它实际上输出了/lib/modules/KERNELVERSION目录下所有的模块,名单会很长!对我们来说比较有兴趣的以"parm"开头的那些部分:显示了模块所接受的参数。这些描述都比较简明,如果想要更多的信息,那就安装kernel的
6、源代码,在类似于/usr/src/KERNELVERSION/Documentation的目录下你会找到。/proc系统文件Linuxkernel同样通过/proc系统文件来展示了许多细节。为了说明/proc,我们首先需要扩展我们对于文件的理解。除了认为文件就是存储在硬盘或者CD或者存储空间上的持久信息之外,我们还应当把它理解为任何可以通过传统系统调用如:打开、读、写、关闭等访问的信息,当然它也可以被常见的程序访问。/proc之下的"文件"完全是kernel虚拟的一个部分,给我们一个视角可以看到kernel内部的数据结构。实际上,许多Linux的报告工具均能够很好地呈现在/proc下的文件
7、中寻到的格式化版本的信息。性能调优(performancetuning)有这样一个说法:/proc/sys下可写入的参数孕育了整个Linux性能调优的亚文化。我个人觉得这种说法有点过夸,但这里会有几个你确实很想一试的IBM'Redpaper'在Linux性能和调优方面的说明一些参数可以被设置从而提高安全性,那么有没有一个说明能涵盖这所有的参数?好吧,这有一行命令:#sysctl-a它将展示所有的参数名字和当前值。列表很长
此文档下载收益归作者所有