《IBM AIX & Linux 课件 chap8-linux内核分析与相关工具》由会员分享,可在线阅读,更多相关《IBM AIX & Linux 课件 chap8-linux内核分析与相关工具(38页珍藏版)》请在金锄头文库上搜索。
1、,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,哈尔滨工业大学,*,AIX/LINUX,操作系统,教师:刘远超 哈尔滨工业大学 计算机科学与技术学院,第八章,linux,内核分析,主要内容,Linux,内核版本以及,linux,内核的特点,内核源代码的物理分布,内核重编译与配置,Linux,内核版本以及,linux,内核的特点,Linux,内核版本,在,redhat,linux,下有一个目录,即,/,usr,/,src,/kernels/,目录,里面是,linux,系统的内核源文件,一般分为,3,个目录,其中:,2.6.9-11.EL-hugement-i
2、686 for,大于,4G memory,的,内核,.,2.6.9-11.EL-smp-i686,是,for,多,CPU,的,内核,.,Linux,内核版本号由,3,个数字组成:,例:,2.6.18-128.Elsmp,。其中,第一个数字,:,2,表示主版本号,第二个数字,6,表示次版本号,表示稳定版本,(,因为有偶数,),。而第三个数字,18,表示修订版本号,即表示修改的次数。,128,表,示微调次数。前两个数字合在一齐可以描述内核系列。如稳定版的,2.6.0,,它是,2.6,版内核系列。而,ELsmp,指出了当前内核是为,ELsmp,特别调校的,EL:,Enterprise Linux,;
3、,smp,:,表示支持多处理器,即该内核版本支持多处理器。,Linux,内核的特点,1,广泛的支持,处理器芯片的广泛支持:,Linux 2.4,提供了大量的处理器芯片的支持。如,Intel x86,、,Motorola/IBM PowerPC,、,Compaq(DEC)Alpha,等等。,还支持,S/390,、,SuperH,等体系结构的处理器的支持。,Linux,内核的特点,广泛的文件系统支持:,很少有一个操作系统能支持这么多种文件系统。,Linux,使用的是,VFS,(虚拟文件系统)的技术,提供了对多种文件系统的支持。,Linux,可支持如,Windows 9x,的,VFAT,、,DOS,
4、的,FAT,、,Mac OS,的,HFS,、,OS/2,的,HPFS,、,Windows,的,NTFS,(,NTFS,的支持还处于测试阶段)等等;,当然还包括,Linux,自己使用的高性能的,Ext2,Ext3,Ext4,文件系统。,新版本的,Linux,新增支持现在的,DVD,使用的,UDF,文件系统和,SGI,的,IRIX,系统上的,XFS,文件系统。,在,Windows,里面使用,SMB,协议来实现“网上邻居”的共享访问。,Linux,内核的特点,对,USB,总线的支持,:,近年来,,USB,(通用串口总线)的技术是计算机界振奋人心的事情之一,现在已经出现了大量的使用这种接口的设备,如键
5、盘、鼠标、音箱、,Modem,等等。,使用,USB,接口使得计算机外设的安装和使用变得更为简单,自然成为了一种潮流。现在的,Linux,也可以很好地支持这种总线接口的设备。,Linux,内核的特点,新型的二进制执行代码类型,(Binary Types),:,Linux,是第一个在内核级提供内建,Java,解释器的支持,从而进行,Java,代码的执行的操作系统之一。,Linux 2.4,版本又做了改进,将这种支持的方法改为对“,Misc”,二进制类型的支持。通过使用这种类型的二进制代码类型,用户甚至可以利用,DOSEMU,(,MS DOS,模拟器)或者,WINE,(,MS Windows,模拟器
6、)来运行在,DOS/Windows,下的,.exe,或,.com,的程序。同样用户也可以自己配置出,Java,字节码运行类型。,Linux,内核的特点,3,高性能,对高端服务器的支持,:,Linux 2.4,版本可以支持多达,10,个,IDE,控制器。过去的,Linux,版本只能支持最多,4,个,IDE,控制器。一些强大的企业级,Web,服务器正需要这样的硬件支持。,现在的内核可以支持多达,42,亿个用户。在,Intel,架构上可以支持到多达,4GB,的内存。并且现在的内核还可以支持多达,16,块以太网卡,同时支持最大容量为,2GB,的文件。,Linux,内核的特点,对高速网的支持:,Linu
7、x 2.4,版本支持,ATM,网络适配器等高速网络设备,为进一步的网络发展做好了准备。,对低端用户来说,,Linux,提供的,PPP,层和,ISDN,层的结合,提供了在并口线上的,PPP,和在以太网上的,PPP,支持。,Linux,内核的特点,4.,小内核,内核本来就很小:,Linux,的整个内核源代码大概需要占用,20,多,MB,的硬盘空间,但是编译出来的二进制代码只占用,600KB,左右的空间,完全可以放在一张软盘上,随时可以使用这张软盘将系统启动。,对内存的需求很小:,Linux,可以进行个性化的定制,用户完全可以根据自己的系统配置来生成自己需要的操作系统内核,也可以根据需要启动或关闭一
8、些系统服务,这样可以减少系统对资源的占用,。,Linux,内核源代码的结构,Linux,内核源代码的结构,(1),Redhat,Linux,内核源代码位于,/usr/src/kernels/2.6.9-5.EL-i686/,目录下。,其中:,include/,子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其它模块重建内核。,init/,子目录包含了内核的初始化代码,这是内核开始工作的起点。,arch/,子目录包含了所有硬件结构特定的内核代码。,arch/,子目录下有,i386,和,alpha,模块等等。,Linux,内核源代码的结构,(2),drivers/,目录包含了内核中所有
9、的设备驱动程序,如块设备,,scsi,设备驱动程序等等。,fs/,目录包含了所有文件系统的代码,如:,ext2,vfat,模块的代码等等。,net/,目录包含了内核的连网代码。,mm/,目录包含了所有的内存管理代码。,ipc/,目录包含了进程间通信的代码。,kernel/,目录包含了主内核代码,从何处开始阅读源代码(,1,),源代码导航器站点:,http:/,lxr.linux.no,/source,系统的启动和初始化,在基于,Intel,的系统上,当,GRUB,把内核装入到内存并把控制权传递给内核时,内核开始启动。,关于这一部分,看,arch/i386/kernel/,head.S,,,he
10、ad.S,进行特定结构的设置,然后跳转到,init,/,main.c,的,main(),例程。,从何处开始阅读源代码(,2,),2.,内存管理,内存管理的代码主要在,/mm,,但特定结构的代码在,arch/*/mm,。缺页中断处理的代码在,mm/memory.c,,而内存映射和页高速缓存器的代码在,mm/filemap.c,。缓冲器高速缓存是在,mm/buffer.c,中实现,而交换高速缓存是在,mm/swap_state.c,和,mm/swapfile.c,中实现。,3.,内核,内核中,特定结构的代码在,arch/*/kernel,,调度程序在,kernel/sched.c,,,fork,的
11、代码在,kernel/fork.c,,,task_struct,数据结构在,include/linux/sched.h,中。,从何处开始阅读源代码(,3,),4.PCI,PCI,伪驱动程序在,drivers/pci/pci.c,,其定义在,include/linux/pci.h,。每一种结构都有一些特定的,PCI BIOS,代码,,Intel,的在,arch/alpha/kernel/bios32.c,。,5.,进程间通信,所有,System V IPC,对象权限都包含在,ipc_perm,数据结构中,这可以在,include/linux/ipc.h,中找到。,System V,消息是在,ip
12、c/msg.c,中实现,共享内存在,ipc/shm.c,中,信号量在,ipc/sem.c,中,管道在,ipc/pipe.c,中实现。,从何处开始阅读源代码(,4,),6.,中断处理,内核的中断处理代码是几乎所有的微处理器所特有的。中断处理代码在,arch/i386/kernel/irq.c,中,其定义子在,include/asm-i386/irq.h,中。,从何处开始阅读源代码(,5,),7.,设备驱动程序,Linux,内核源代码的很多行是设备驱动程序。,Linux,设备驱动程序的所有源代码都保存在,/driver,,根据类型可进一步划分为:,/block,块设备驱动程序如,ide(,在,id
13、e.c),。如果你想看包含文件系统的所有设备是如何被初始化的,你应当看,drivers/block/genhd.c,中的,device_setup(),,,device_setup(),不仅初始化了硬盘,当一个网络安装,nfs,文件系统时,它也初始化网络。块设备包含了基于,IDE,和,SCSI,的设备。,/char,这是看字符设备,(,如,tty,,串口及鼠标等,),驱动程序的地方。,/cdrom,Linux,的所有,CDROM,代码都在这儿,如在这儿可以找到,Soundblaster CDROM,的驱动程序。注意,ide CD,的驱动程序是,ide-cd.c,,放在,drivers/bloc
14、k,,,SCSI CD,的驱动程序是,scsi.c,,放在,drivers/scsi,。,从何处开始阅读源代码(,6,),/pci,这是,PCI,伪驱动程序的源代码,在这里可以看到,PCI,子系统是如何被映射和初始化的。,/scsi,在这里可以找到所有的,SCSI,代码及,Linux,所支持的,scsi,设备的所有设备驱动程序。,/net,在这里可以找到网络设备驱动程序,如,DECChip 21040 PCI,以太网驱动程序在,tulip.c,中。,/sound,这是所有声卡驱动程序的所在地。,从何处开始阅读源代码(,7,),8.,文件系统,EXT2,文件系统的源代码全部在,fs/ext2/,
15、目录下,而其数据结构的定义在,include/linux/ext2_fs.h,ext2_fs_i.h,及,ext2_fs_sb.h,中。虚拟文件系统的数据结构在,include/linux/fs.h,中描述,而代码是在,fs/*,中。缓冲区高速缓存与更新内核的守护进程的实现是在,fs/buffer.c,中。,9.,网络,网络代码保存在,/net,中,大部分的,include,文件在,include/net,下,,BSD,套节口代码在,net/socket.c,中,,IP,第,4,版本的套节口代码在,net/ipv4/af_inet.c,。一般的协议支持代码,(,包括,sk_buff,处理例程,
16、),在,net/core,下,,TCP/IP,联网代码在,net/ipv4,下,网络设备驱动程序在,/drivers/net,下。,从何处开始阅读源代码(,8,),10.,模块,内核模块的代码部分在内核中,部分在模块包中,前者全部在,kernel/modules.c,中,而数据结构和内核守护进程,kerneld,的信息分别在,include/linux/module.h,和,include/linux/kerneld.h,中。,例如:,#,cd,/usr/src/kernels/2.6.9-5.EL-i686/include/linux,#,more,module.h,关于内核的重新编译和配置,为什么重编译内核,为什么重编译内核,标准发行版本的内核可能不满足需求,升级到新内核版本,体验或开发内核,好玩,!,内核编译的步骤,1,、获取内核源代码,2,、配置内核(创建配置文件,.config,),3,、编译内核,4,、内核的安装、配置,grub,5,、重新起动计算机,使用该新内核,Step 1:,获取内核资源,先把,linux-2.6.18.tar.bz2,(可从,www.kernel.o