什么是操作系统的模块?

    技术2025-06-04  85

    模块是内核的一部分(通常是设备驱动程序),但是并没有被编译到内核里面去。它们被分别编译并连接成一组目标文件,这些文件能被插入到正在运行的内核,或者从正在运行的内核中移走,进行这些操作可以使用insmod(插入模块)或rmmod(移走模块)命令,或者,在必要的时候,内核本身能请求内核守护进程(kerned)装入或卸下模块。这里列出在Linux内核源程序中所包括的一些模块:

     

     

    · 文件系统: minix, xiafs, msdos, umsdos, sysv, isofs, hpfs,

      smbfs, ext3,nfs,proc等

    · 大多数SCSI 驱动程序: (如: aha1542, in2000)

    · 所有的SCSI 高级驱动程序: disk, tape, cdrom, generic.

    · 大多数以太网驱动程序: ( 非常多,不便于在这儿列出,请查看

    ./Documentation/networking/net-modules.txt)

    · 大多数 CD-ROM 驱动程序:

    aztcd:     Aztech,Orchid,Okano,Wearnes

    cm206:     Philips/LMS CM206

    gscd:      Goldstar GCDR-420

    mcd, mcdx: Mitsumi LU005, FX001

    optcd:     Optics Storage Dolphin 8000AT

    sjcd:      Sanyo CDR-H94A

    sbpcd:     Matsushita/Panasonic CR52x, CR56x, CD200,

               Longshine LCS-7260, TEAC CD-55A

    sonycd535: Sony CDU-531/535, CDU-510/515

    · 以及很多其它模块, 诸如:

    lp: 行式打印机

    binfmt_elf: elf 装入程序

    binfmt_java: java 装入程序

    isp16: cd-rom 接口

    serial: 串口(tty)

     

     这里要说明的是,Linux内核中的各种文件系统及设备驱动程序,既可以被编译成可安装模块,也可以被静态地编译进内核的映象中,这取决于内核编译之前的系统配置阶段用户的选择。通常,在系统的配置阶段,系统会给出三种选择(Y/M/N),“Y”表示要某种设备或功能,并将相应的代码静态地连接在内核映像中;“M”表示将代码编译成可安装模块,“N”表示不安装这种设备。

    10.1.2为什么要使用模块?

    按需动态装入模块是非常吸引人的,因为这样可以保证内核达到最小并且使得内核非常灵活,例如,当你可能偶尔使用 VFAT文件系统,你只要安装(mount) VFAT,VFAT文件系统就成为一个可装入模块,kerneld通过自动装入VFAT文件系统建立你的Linux内核,当你卸下(unmount )VFAT部分时,系统检测到你不再需要的FAT系统模块,该模块自动地从内核中被移走。按需动态装入模块还意味着,你会有更多的内存给用户程序。如前所述,内核所使用的内存是永远不会被换出的,因此,如果你有100kb不使用的驱动程序被编译进内核,那就意味着你在浪费RAM。任何事情都是要付出代价的,内核模块的这种优势是以性能和内存的轻微损失为代价的。

      一旦一个Linux内核模块被装入,那么它就象任何标准的内核代码一样成为内核的一部分,它和任何内核代码一样具有相同的权限和职责。像所有的内核代码或驱动程序一样,Linux内核模块也能使内核崩溃。

    10.1.3 Linux 内核模块的优缺点

    利用内核模块的动态装载性具有如下优点:

    ·将内核映象的尺寸保持在最小,并具有最大的灵活性; 

    ·便于检验新的内核代码,而不需重新编译内核并重新引导。 

    但是,内核模块的引入也带来了如下问题:

    ·对系统性能和内存利用有负面影响; 

    ·装入的内核模块和其他内核部分一样,具有相同的访问权限,因此,差的内核模块会导致系统溃; 

    ·为了使内核模块访问所有内核资源,内核必须维护符号表,并在装入和卸载模块时 修改这些符号表; 

    ·有些模块要求利用其他模块的功能,因此,内核要维护模块之间的依赖性。 

    ·内核必须能够在卸载模块时通知模块,并且要释放分配给模块的内存和中断等资源; 

    ·内核版本和模块版本的不兼容,也可能导致系统崩溃,因此,严格的版本检查是必需的。 

    尽管内核模块的引入同时也带来不少问题,但是模块机制确实是扩充内核功能一种行之有效的方法,也是在内核级进行编程的有效途径。

    转自:http://www.eefocus.com/html/09-06/75233s.shtml

     

    最新回复(0)