打卡第四天:linux内核功能介绍

(2021年10月31日打卡第四天)



1、linux内核的功能

  • 进程管理
  • 网络管理
  • io设备管理
  • 文件系统
  • selinux
  • 驱动管理

2、内核设计流派

  • 单内核:就只有一个系统内核;
    内核核心和内核的功能模块都给它放到一块了;
    单内核最常见的系统案例就是linux;
    linux虽然用的是单内核,但是它广泛采用了微内核的设计思想,在核心上预留了很多的“插槽”,当它需要某个功能的时候,只需要在那个“插槽”上装载对应的功能模块,也可以实现类似于微内核的结构;

  • 微内核:内核核心+外部功能模块;
    我们需要具有的是一个内核核心,然后很多的功能都是以模块的方式来实现的;这样一来它的内核核心体积就变得相对小了;
    而微内核比较典型的案例就是windows;外部功能模块称之为.ko,即kernel object的缩写;

3、linux的内核以及它的功能模块分别是什么

  • 核心:/boot/版本号
    在这里插入图片描述
    在这里插入图片描述
    vmlinuz这是它的内核核心,后面是它的版本号,以及它的平台,以及适用的CPU架构

  • 功能模块:/lib/modules/版本号/kernel/
    它所有的一些功能模块,其实也就是一些驱动程序,在lib/modules目录下有一个名字为内核版本号的文件夹,就是功能模块所在的目录:
    在这里插入图片描述
    功能模块所在目录的版本号和内核文件名后面的版本号一样,这个目录的名称必须和内核版本号完全相同,一个点都不能差,否则它无法装载这个目录下的驱动程序:
    在这里插入图片描述
    在这里插入图片描述
    这是它的一些功能模块的存放位置。

4、Linux的启动过程

第一步:POST(Power On and Self Test,加电自检)

也就是给我的系统开始供电,并且开始检测系统中的硬件是否正常工作,比如说我的风扇是否正常,我的CPU是否正常,我的显卡、内存、键盘、显示器等等都是否正常;
在加电自检的过程当中,是不是需要来检查各种设备啊,谁来检查,我计算机想执行任何操作是不是都得依靠CPU才能够执行吧,而CPU里面有命令、有指令么,没有,我们在正常情况下,我CPU当中所用到的指令来自于哪呢?
在这里插入图片描述
CPU通常和内存相连,我的程序放在了我的磁盘上,运行的时候将磁盘上的程序运行起来,变成进程放到了内存中,在将内存中的进程指令传递到CPU上来执行;

所以你要清楚,我CPU执行的指令是来自于内存的,可是我刚开机的时候,内存中有指令么?没有,因为我们知道内存都是易失性存储;
我们在开机的时候是有指令的,只是说这个指令没有在内存中,而是在主板上,在主板上有一个组件叫CMOS芯片,在这个芯片当中放了一段程序,这是主板在出厂的时候生产厂家固化在你主板上的,这段程序我们称之为BIOS程序,注意啊,BIOS是程序,CMOS是芯片;
我们在开机启动的时候,它其实就将我的内存和我的CMOS芯片给连接起来了,同时将程序指针指向了内存的最低地址空间,而此时内存的最低地址空间应该指向了CMOS芯片的那个起始地址,这样的话就可以从CMOS芯片当中读取程序来完成系统的自我检测,这就是如何来实现开机自检的;

BISO(Basic Input and Output System),除了指导我们计算机做自检,BIOS还有一个功能也很重要,我们也会用到,设置系统的启动项(Boot Sequence);
所谓的启动项,指定从哪个设备来启动系统,我们一个主机上一定有一块硬盘,也有可能开机的时候插着U盘,还有可能光驱里放着光盘,我的硬盘也有可能有两块,这样一来就有4个设备了;
这4个设备我在启动系统的时候,从哪个设备来启动呢,你可以设想一个这样的场景,我在硬盘1里面安装了linux系统,我在硬盘2里面安装的是windows,我在U盘里安装的是win pe,我在光盘里放的是ubuntu,这样一来,我启动的时候到底启动哪一个呢,它得有一个次序吧,如何来指定次序呢,就是通过Boos Sequence来指定我启动哪一个设备上的启动,Boos Sequence就是干这个活的。

小结:
  • 第一步:POST(Power On and Self Test,加电自检)
    • CMOS芯片------BIOS程序
      • BISO(Basic Input and Output System)
        - 让系统进行自检
        - 通过BIOS设置系统的启动项(Boot Sequence),指定从哪个设备来启动系统
      • 指定了启动设备后,会从指定的设备上,找MBR,主要是需要其中的Bootloader
介质系统
硬盘1linux
硬盘2windows
u盘win pe
光盘ubuntu

比如说我把第一启动项设置为硬盘2,那么我在启动的时候就会从硬盘2的那个MBR当中找到里面的Bootloader;

流程:POST—>BIOS—>Boot Sequence—>MBR(Bootloader)

在找到了这个Bootloader之后,那么接下来就该是我们启动过程的第二步了,然后我们就可以根据Bootloader来找到我们系统的内核。

第二步:根据bootloader来找到磁盘上的内核文件(vmlinuz)

我们知道内核在运行的时候,它需要能够识别我的底层的磁盘吧,即kernel使用磁盘、文件系统、硬件等都需要其相应的驱动。

假设我们有一个小的组件叫做bootloader,通过bootloader我们可以直接找得到我的磁盘上面的那个vmlinuz,而我们找到vmlinuz之后,会将这个vmlinuz给它加载到内存中,一旦我们内核进入到内存了,是不是就相当于内核获取了整个系统的控制权了,那么内核控制系统的时候,我们后面是不是要完成系统启动呀,你比如说系统上有一个程序,我需要给它运行起来,有些程序给它关掉,然后把一些相关的服务都给它运行起来,那么很多服务都应该是位于磁盘上的文件系统上的,而我们的内核它能不能识别我们的磁盘以及磁盘上的文件系统呢?

我们内核要想识别使用硬件,是需要硬件的驱动程序才可以,而内核它怎么知道下面是个什么样的硬件,它驱动在哪放的,是不是没有驱动啊,那么没有驱动它就无法使用各种硬件,也无法在硬件上来查找文件系统,没有硬件,也没有硬件的驱动,也没有文件系统的驱动,什么都没有,那这个时候它就无法使用文件系统,那么它想使用文件系统,该怎么办呢?

我们的kernel使用磁盘、文件系统、硬件等都需要其相应的驱动,那么内核当中默认可能没有,那么这个时候该怎么办呢,其中一个解决方式:
编译内核(10个小时左右)的时候,将相应的驱动程序给它编译到内核里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值