linux内核管理的一些基本知识

linux操作系统组成

  1、linux组成:硬件,kernel,库,rootfs,程序

  2、运行中的系统环境可以分两层

    1)用户空间:应用程序

    2)内核空间:系统调用时会运行在内核空间

  3、kernel(内核)的功能:

    内核的这些功能都通过系统调用给用户接口

     进程管理  内存管理  网络管理  驱动程序  安全管理  文件系统

 

  (本图片出自 “潇洒哥是先知” 博客,请务必保留此出处http://hoolee.blog.51cto.com/7934938/1368831

  4、库

    函数功能模块集合,调用接口是二进制程序,要想运行,必须别其他程序调用,即其他程序面向硬件的一个中间层,有两种情形

      1)过程调用:没有返回值

      2)函数调用:有返回值

  5、rootfs

    linux一切皆文件,除了一级文件外,其他文件需要挂载至根文件系统

  6、程序

    1)、开机过程
                  开机 -->内核运行 --> 内核加载根文件系统 -->运行根文件系统上的第一个应用程序init

        init:它是负责后面的总的应用程序的启动回收等,启动可能需要向内核申请,这一切都在用户空间运行,如果init程序终止了,则用户空间的所有程序终止
            2)、配置文件
                让程序按照我们需要的方式进行运行

  

  7、内核程序设计流派

    内核说到底也是应用程序,面对电脑硬件,如上面所说,内核具有速许多功能,那么是将这些功能全都整合到内核中,还是各功能独立成子系统,是内核设计流派不同的主要原因。

    

 

    linux在一步步的发展中吸取了微内核的设计经验,虽然是单内核,但是兼具微内核的特性。

   linux通过使用模块化内核设计来兼具微内核特性,但这样的模块化设化设计并不是像微内核一样是各个子系统,而是由核心加外围的功能性模块组成内核。而微内核子系统都是各自独立运行的,不需要依赖其他部分就能工作。而linux各模块必许依赖核心,只是能在使用时进行装载,不用时被动态卸载。linux下的模块外在表现为类型程序的库文件,只是程序库文件为.so,而内核模块为.ko(kernel object),被内核调用。 

    (本片段出自 “潇洒哥是先知” 博客,请务必保留此出处http://hoolee.blog.51cto.com/7934938/1368831

 

linux操作系统中内核特点

  1、支持模块化

    linux内核会将其各部分功能模块化,这使得在安装linux内核时,可以仅保持最基本的内核和功能,不过内核中模块数量会变多。linux内核中的.ko(kernel object)文件就是可以被内核调用的内核模块

假设,如果驱动是内核提供的,想象下,编译好一个内核,装在主机上,万一后来发现他无法驱动我们后来新添加的新硬件设备。各种硬件都是由内核驱动的,内核没有提供新添加硬件的驱动程序。假设我们有了驱动程序,怎样才能让他驱动起来,是不是从新编译内核,这是对用户和厂商的不幸。。。。

   模块化设计得以避免这种情况,故各赢家厂商的以模块化的形式开发自己的驱动,只需针对某一特定设备开发自己驱动程序的即可,而后我们编译这些模块即可。由于linux支持动态装卸载模块,因此当我需要和不需要某一功能时,可自行拆卸,并不影响核心的运行。(http://hoolee.blog.51cto.com/7934938/1368831

 

linux内核的组成部分

  1、内核核心文件

    /boot/vmlinuz-VERSION-release

       VERSION :内核版本,release:rpm包的发行号,不是必要的  

  2、ramdisk(内存盘)

     CentOS 5:/boot/initrd-VERSION-release.img
                  CentOS 6,7:/boot/initramfs-VERSION-release.img

     有ramdisk这个文件的原因:

      当系统完成内核的加载之后,内核要加载根文件系统以启动用户空间,但是根文件系统是在某个硬件设备之上,内核需要某驱动程序来装载根文件系统,但是驱动程序的文件又存在某目录之下,也就是存在根文件系统之下,这样子内核有两种解决方法:

    1、将驱动程序编译进内核,但是因为不知道用户要装载哪种根文件系统,会导致内核变复杂

    2、借助一个外部设备来生成驱动根文件系统的驱动程序,ramdisk就是这样一个文件,它把内存当做一个磁盘来使用,将硬盘设备装载至内核,伪根文件系统仅仅存有驱动根文件系统所在硬件设备的文件,它随着内核被装载至内存也装载进内存,它和内核在同一个目录之下,所以内核完成启动初始化后,就来加载这个文件中的各种驱动程序,这个文件不是提前制作后的,而是内核被加载之后动态生成的,以相对应的生成对应硬件设备的驱动程序文件。它仅仅是辅助装载驱动,装载完成之后进行根切换,把临时的这个为根文件系统切换为真正的根文件系统              

  3、功能模块文件

    /lib/modules/VERSION-release

  # 查看内核核心文件
[root@localhost ~]# ls /boot config-3.10.0-514.el7.x86_64 extlinux grub grub2 initramfs-0-rescue-8bfd36b555264ed391d8f85a1d62601b.img initramfs-3.10.0-514.el7.x86_64.img initramfs-3.10.0-514.el7.x86_64kdump.img initrd-plymouth.img symvers-3.10.0-514.el7.x86_64.gz System.map-3.10.0-514.el7.x86_64 vmlinuz-0-rescue-8bfd36b555264ed391d8f85a1d62601b vmlinuz-3.10.0-514.el7.x86_64

说明:
  vmlinuz-3.10.0-514.el7.x86_64 就是内核核心文件,其中3-10.0是核心版本号,514.e17.x86是rpm包的发行号,不是必须

 

  # 查看内核模块文件
[root@localhost ~]# ls /lib/modules/3.10.0-514.el7.x86_64 build modules.builtin modules.modesetting source extra modules.builtin.bin modules.networking updates kernel modules.dep modules.order vdso modules.alias modules.dep.bin modules.softdep weak-updates modules.alias.bin modules.devname modules.symbols modules.block modules.drm modules.symbols.bin
  ----这些文件之间彼此是依赖关系,真正的内核模块文件在其中的kernel中查看。
     这些文件是抛开掉最基本的内核核心之外的一些功能模块文件,内核最基本的模块在kernel中

更详细的了解可以查看:http://hoolee.blog.51cto.com/7934938/1368831

 

posted @ 2017-06-30 15:09  FernLi  阅读(1129)  评论(0)    收藏  举报