设为首页 加入收藏

TOP

Linux 系统启动流程(一)
2019-09-03 00:08:18 】 浏览:42
Tags:Linux 系统 启动 流程

内核简介:
  kernel功能:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
  库:函数的集合,同时提供调用接口;不能作为程序的执行入口单独执行,只能被程序调用
  过程调用:procedure,无返回结果
  函数调用:function,有返回结果

  内核设计流派:
  单内核设计:把所有功能模块集成于同一个程序(Linux)
  微内核设计:每种功能模块使用一个单独子系统实现(Windows、Solaris)
  Linux内核特点:
  支持模块化:*.ko(内核模块文件)如:文件系统,硬件驱动,网络协议等
  支持模块的动态装载和卸载

  Linux内核组成部分:
  核心文件:/boot/vmlinuz-Version-Release
  ramdisk:辅助的伪根文件系统
    CentOS 5: /boot/initrd-Version-Release.img
    CentOS 6、7: /boot/initramfs-Version-Release.img
  模块文件:/lib/modules/Version-Release/

Linux启动流程:
  Centos5、6启动流程:POST—>Boot Sequence(BIOS)—>Boot Loader (MBR)—>Kernel(ramdisk)—> rootfs (readonly)—>switchroot—>/sbin/init—>(/etc/inittab, /etc/init/*.conf)—>设定默认运行级别—>系统初始化脚本—>关闭或启动对应级别下的服务—>启动终端—>登陆系统(登陆界面环境)—>启动shell(shell环境)。

  POST(Power OnSelf Test)加电自检
  POST它首先对每一个硬件设备进行检查。完成后会寻找存有引导记录的设备,找到之后读入操作系统引导记录,然后将系统控制权交给引导记录,并由引导记录来完成系统的顺利启动。

  Boot Sequence(BIOS)
  在系统启动之前不知道计算机的系统在哪里,所以在计算机的bios上定义了设备启动顺序,它会安照设备的启动顺序去查找引导加载器。

  Boot Loader(MBR)
  MBR:Master Boot Record 主引导记录在可引导设备的前512bytes中(硬盘的第一个扇区),前446bytes为bootloader,接下来的64bytes为分区表信息,最后2bytes标记为55AA(表示为可引导设备)
  Boot loader引导加载器,用来引导系统的启动,它把用户选定的内核加载到内存空间中,把控制权交给内核。
  Windows下引导加载器:ntloader
  Linux下引导加载器:
    LILO:LInux LOader
    GRUB:GRand Unified Bootloader
      GRUB Legacy?0.X?传统版本为0.X
      GRUB2????1.X?与传统版本完全不一样的1.X版本
????功能:提供一个菜单,允许用户选择要启动的系统或内核版本;把用户选定内核装载到RAM的特定空间中并解压展开,而后把系统控制权移交给内核;
????MBR所给予的空间毕竟太小,容不下较大的引导程序,因此grub程序被分为三段:"stage 1" 被装入磁盘的MBR中;特殊的"stage 1.5"被装入MBR随后的扇区,它能够识别内核和"stage 2"所在分区的文件系统格式并帮助引导"stage 2",它是"stage 1"和"stage 2"之间的纽带;"stage 2"位于文件系统上。stage 2程序和grub.conf可以与内核文件处于不同的分区上(但必须位于同一磁盘),只要"stage 1.5"能够驱动它们各自所在的分区。
????GRUB引导过程分为三段:
??????stage1:MBR(0柱面0磁道1扇区)
??????stage1_5:MBR随后的扇区
??????stage2:读取grub.conf配置文件,并实现引导功能的扩展

  Kernel:加载系统内核,执行系统初始化信息
  在GRUB中选定内核进入,内核会对自身初始化;探测可识别到的所有硬件设备,加载硬件驱动程序(有可能需要借助ramdisk加载驱动);以只读方式挂载根文件系统;运行用户空间的第一个应用程序:/sbin/init
?Centos5:initrd
  initrd文件生成工具程序:mkinitrd
  Centos6,7:initramfs(cpio格式)
  initramfs文件生成工具程序:dracut、mkinitrd

 ramdisk:Linux内核的特性之一,使用缓冲和缓存来加速对磁盘上的文件访问:
  为什么将initrd改为initramfs,前者把内存模拟成磁盘,后者直接把内存模拟成文件系统;如果模拟成磁盘,将磁盘加载到内存中,内核需将initrd再次缓存到内核的内存空间当中,相当于在内存中缓存两次;但是如果模拟成文件系统,内核可以直接访问文件系统所在的内存空间,这样效率更高性能更好
  initrd 、initramfs都属虚拟文件系统,在早期的linux系统中,一般只有硬盘或者软盘被用来作为Linux根文件系统的存储设备,因此也就很容易把这些设备的驱动程序集成到内核中。但是现在的Linux系统中可能将根文件系统保存到各种存储设备上,包括scsi、sata,usb-disk等等。如果把这些设备的驱动代码全部编译到内核中内核会很庞大。
  为了解决这一矛盾,于是出现了基于ramdisk的initrd( bootloader initialized RAM disk )。initrd是一个被压缩过的小型根目录,这个目录中包含了启动阶段中必须的驱动模块、可执行文件和启动脚本。当系统启动的时候bootloader会把initrd文件读到内存中,然后把initrd文件在内存中的起始地址和大小传递给内核。内核在启动初始化过程中会解压缩initrd文件,然后将解压后的initrd挂载为根目录,并执行根目录中的/linuxrc脚本(cpio格式的initramfs为/init,而image格式的initrd为/linuxrc),脚本会加载真实文件系统中存放的设备驱动程序,以及在/dev目录下创建必要的设备节点。这样就可以mount真正的根目录,并切换到这个根目录中。

  Linux 发行版在内核中只编译了基本的硬件驱动,在Linux系统安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的initrd,在内核引导过程中先加载initrd虚拟文件系统,然后由initrd挂载真正的文件系统,完成后initrd从RAM中退出,并不消耗内存,initrd只是一个暂时的文件系统。
  在Linux2.5内核中出现了initramfs,它的作用和initrd类似,只是和内核编译成一个文件(initramfs是经过gzip压缩后的cpio格式文件),

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于linux三种网络形式 下一篇Centos上Mysql5.6的安装

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目