预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共30页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一Linux内核结构 Linux内核主要有五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 进程调度(SCHED):Linux2.6内核推出了一种内嵌0(1)调度算法的调度器,该算法在进程间切换时有恒定的时间复杂度O(1)。该调度器在进程调度性能、实时性、内核可抢占中发挥了极大的作用,迎合了嵌入式的要求。 内存管理(MM):Linux操作系统支持虚拟内存,允许多个进程共享内存区域,而Linux2.6版本又引进了基于页的反向映射技术,显著地改善了虚拟内存在一定负载下的性能。该技术提供了一个发现哪些进程正在使用给定的内存物理页的机制。 虚拟文件系统(VirtualFileSystem,VFS):虚拟文件系统使Linux安装和支持不同类型的文件系统成为可能。它对Linux的每个文件系统的所有细节进行了抽象,使得不同的文件系统在Linux内核及其进程看来都是相同的。 网络接口(NET):网络向来都是Linux引以自傲的强项,它提供了对各种网络标准的存取和各种网络硬件的支持。 进程间通信(IPC):linux不但支持单个计算机进程间的通信,而且支持基于Socket的进程间通信 这五个子系统除了各自完成自己的功能外,还是相互依赖功能完成linux内核应有的义务。在多道程序环境下,程序要运行必须要进程调度,而进程调度的第一件事就是通过内存管理为程序和数据分配内存;进程间通信中的共享内存通信机制则需要内存管理的协助;虚拟文件系统是在网络接口的基础上来支持网络文件系统(NFS)。Linux内核个子系统及其依赖关系开用图2-4-1来表示。 内存管理 虚拟文件系统 文件系统 进程调度 进程间通信 网络接口 图2-4-1Linux内核子系统及其以来关系 二Linux2.6内核源码目录结构分析 在linux的内核源码一般都安装在/usr/src/linux目录下,在安装linux发行版本,如RedHat、ubuntu等过程中我们可以选择是否安装linux内核源码。对linux内核的研究,当然首先要对其源码目录结构了解一下。不同版本的linux内核其源码组织结构没有多大的差别,都是以树形结构组织的,但本次分析以linux2.6.19为例。Linux内核源码的结构目录(简单的树形结构图见附录B)如下: arch目录 此目录下包括了所有与体系结构有关的核心代码,其下的每一个子目录都代表一种体系结构。Linux支持众多的处理器体系结构,主流的有x86系列处理器、arm系列的处理器、mips体系结构处理器。这些体系结构在本目录下都有其对应的子目录。每一个子目录下又至少包含三个子目录:kernel,存放支持体系结构特有的诸如信号处理和SMP之类特征的实现;lib,存放高速的体系结构特有的诸如strlen和memcpy之类的通用函数的实现;mm,存放了体系结构特有的内存管理程序的实现。除此之外,大部分的体系结构子目录还包含了供附加特性或改进组织使用的其他子目录。 COPYING文件 该文件中是GPL版权声明。 documentation目录 这个目录下没有内核源码,是一些内核相关的文档,但是这些文档只是对内核部分源码的解释和描述,有些内核模块该目录中并没有相应的文档。 drivers目录 在这个目录中是系统所有的设备驱动程序。Linux又将这些驱动程序分成不同的种类,每个种类存在不同的子目录中,如char主要是字符设备驱动程序,block主要是快设备的驱动程序,scsi是scsi设备的驱动目录,net是网络设备的驱动程序目录等等。而这些驱动目录有些是和处理器体系结构相关的,如Zorro总线只是Amiga特有,pci也只是针对部分平台的。 fs目录 该目录存放了linux支持的文件系统代码和各种类型的文件操作代码。其中的每一个子目录代表了一种文件系统,其中有ext3子目录存放ext3文件系统代码,nfs目录存放了网络文件系统(NFS)的代码。要指出的是,在nfs子目录中的网络文件系统代码是依赖于drivers目录下的net子目录中的网络驱动程序的。 include目录 该目录包含了编译内核所需要的大部分头文件。在建立交叉编译环境时也用得到该目录下的文件。其下的子目录中的代码部分是与体系结构有关的,而部分则是无关的。 “asm-*”格式的子目录是与体系结构有关的,它们每一个都对应arch目录下的一个子目录。每个子目录下的文件支持给定体系结构所必须的预处理宏和短小的内联函数。这些内联函数全部或是部分的使用汇编编写,而且在C或者汇编代码中都会用到这些文件。当我们编译内核时,系统将建立一个include/asm到给定体系结构特有的子目录的符号链接。 linux子目录中的文件多数是与体系结构无关的。其中包含了内核和用户应用程序请求内核服务时所需要的常