详解 Linux 系统内核.docx
详解1inux系统内核1inux内核是一种开源的类Unix操作系统宏内核。1inux内核是1inux操作系统的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件的所有主要功能。内核的用途主要有以下4项工作: 内存管理:追踪记录有多少内存存储了什么以及存储在哪里 进程管理:确定那些进程可以使用中央处理器、何时使用以及持续多长时间 设备驱动程序:充当硬件与进程之间的调解程序/解释程序 系统调用和安全防护:从流程接受服务请求在正确实施的情况下,内核对于用户是不可见的,它在自己的小世界(称为内核空间)中工作,并从中分配内存和跟踪所有内容的存储位置。用户所看到的内容则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。functions1ayers1inuxkerne1maomememorBOryyaccessstoragefi1s&directories>ccssi*networkingsocketsaccess/*.MI-humaninterfacevirtua1bridgessystemprocessingsysteminterfacesHIchardevicesprocessesVirtua1DvGMode1securityprotoco1sgenericHWccssinterruptcontextCPUspecificrtwocingstoragedvicsndbususerspaceinterfaces.systemrunfunctions/fS2nchroniFT*C<!Schedu1er/p,CchtA11ocator<9,devicescontro1"disk1丁contro11ersdriersdv1cdrivershtworkdevice*drivrsvirtua1networkdv1cbstrBctdev½tandHIC>dassdriversphysica1memoryoperationshardwareinterfacesCS1imemoryMM1dhkcontro11ersSCI<MMIAntworfccontro11ersus<rpriphr11inux系统内核概述1.内核简介单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。1inux内核的重要组成部分,主要有以下几部分:kerne1内核核心,一般为bz1mage通常在/boot目录下,名称为VmIinUz-version-re1easekerne1object 内核对象,一般放置于1ibmodu1esVERS1ON-RE1EASE/ =>N=>不编译进内核 M=>M=>编译为模块文件 *=>Y=>编译进内核辅助文件(ramdisk) initrd initramfs2.内核模块2.1 uname命令使用格式 unameOPTION.参数解释 -n显示节点名称 -r显示VERSION-RE1EASE -s内核名称 -v内核版本 -n节点名 -m硬件名称 -i硬件平台 -P处理器类型 -O操作系统u1ySee7168i68i38GN1Jnd2. 2Ismod命令显示由核心已经装载的内核模块命令定义显示的内容来自于:procmodu1es文件。使用ISmOC1命令时,常会采用类似ISmoC1grep-iext4这样的命令来查询系统是否加载了某些模块。二:.,二.孑一;1,()()(U¾j('XtI339(SI22-1.i<-76100,.鬻霞759271.ive0xed6d90dm_region_hash96441dmjnirror,1iveOXed67e000dmOg83222dmjnirror,dm_reg|ionhashdmmod8471111dmjnirror,dm_1Og2. 3modinfo命令显示模块的详细描述信息命令定义 modinfo列出1inux内核中命令行指定的模块的信息。 modinfo能够查询系统中未安装的模块信息。 若模块名不是一个文件名,则会在1ibmodu1esversion目录中搜索,就像modprobe一样。 modinfo默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fie1dname:va1ue0语法 modinfo选项modu1ename|fi1ename.选项 -n只显示模块文件路径 -P显示模块参数 -aauthor -ddescription -11icense -0使用0'字符分隔fie1d值,而不是一个新行,对脚本比较有用实战演示(I(T(Ii1)Ii(川:Foi1门hE1('d('dS卜”7(,川author:RemyCard,StephenTweedie,AndrewMort()1,d门,心I)二*",、'i(,()(k)(,-Id()1h('IdePends:mbcache,2.6.32IVernIagic:573.22.1e16.i686SMPmod_un1oadmodversions686MIid:d(ru,h(':1)1rIv()Eb:.m1"1()士;depends:IibCrC32c,z1ibdef1ate,IZoComPreSS,Izodecom0i8(SMno(B)acnodn>686fci2. 4modprobe命令装载或卸载内核模块命令定义配置文件 etcmodprobe.conf etcmodprobe.d*.conf解决依赖_n()(M】($()(k"m()(M11、“si)川川)mm¾kerne1modu1es,depmodu1es,isapnp门川)门一:h-门川iSSw,蜉¾modu1es,a1iasmodu1es.dep.binmodu1es,modesettingmomodu1es.a1ias.binmodu1es,drmmodu1es,networkingm语法 modprobe-c modprobe-1-tdirnamewi1dcard modprobe-r-v-n-imoduIename选项 -vO显示程序在干什么,通常在出问题的情况下,modprobe才显示信息 -CO重载,默认配置文件(etcmodprobe.conf或etcmodprobe.d) -co输出配置文件并退出 -no可以和-V选项一起使用,调试非常有用 -io该选项会使得modprobe忽略配置文件中的,在命令行上输入的insta11和remove qo一般modprobe删除或插入一个模块时,若没有找到会提示错误。使用该选项,会忽略指定的模块,并不提示任何错误信息。-rO该选项会导致modprobe去删除,而不是插入一个模块o通常没有没有理由去删除内核模块,除非是一些有bug的模块 -fo使用该选项是比较危险的o和同时使用-force-Vermagic,-force-modversion一样 -1O列出所有模块 -ao插入所有命令行中的模块 -to强制-1显示dirname中的模块-So错误信息写入sys1og2.5depmod命令内核模块依赖关系文件及系统信息映射文件的生成工具语法odepmod-adeisvV-m文件he1p模块名称参数o-a分析所有可用的模块o-d执行排错模式o-e输出无法参照的符号o-i不检查符号表的版本o-m文件使用指定的符号表文件o-S在系统记录中记录错误O-V执行时显示详细的信息o-V显示版本信息o-he1p显示帮助2. 6insmod和rmmod命令装载或卸载内核模块O不解决依赖关系,需要自己手动卸载insmod命令O向1inux内核中插入一个模块oinsmod是一个向内核插入模块的小程序o大多数用户使用modprobe因为它比较智能化oinsmodfi1enamemodu1eoptions.rnod命令O命令解析 删除内核中的一模块 rmmod是一个可以从内核中删除模块的小程序,大多数用户使用modprobe-去删除模块o语法格式 rmmodmoduIenameo参数选项 -fo除非编译内核时configmodu1e,force_un1oad被设置该命令才有效果,否则没效果O用该选项可以删除正在被使用的模块,设计为不能删除的模块,或者标记为unsafe的模块 -WOrmmod拒绝删除正在被使用的模块o使用该选项后,指定的模块会被孤立起来,直到不被使用 -SO将错误信息写入sys1og,而不是标准错误(Stde1T)3. /proc目录内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出。111732229855354760973dyinfofsIoCkSIinterruptsmdstatS1abinfo,IPSiomemmeminfoSoftirqS,ioportsmiscstatfoirqmodu1esswapIkaI1syinsmounissYs.Ikcoremtdsysrq-BSkeysnetSySViPCBkey-userspagetypeinfot.imer1ist.塞蹩,9IerkmsgPartitionStimejstats,majjiskpagecounscheddebug_ttyB1171212985334466953.1 sysct1命令语法格式 SySCtI(选项)(参数)命令参数 -n打印值时不打印关键字 -e忽略未知关键字错误 -N仅打印名称 -W当改变sysct1设置时使用此项 -P从配置文件e