linux内核解析.doc_第1页
linux内核解析.doc_第2页
linux内核解析.doc_第3页
linux内核解析.doc_第4页
linux内核解析.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论