linux内核及系统启动流程

Linux内核

内核概述

GUN/Linux操作系统的基本体系结构

如图,最上面是用户空间(User Space),是用户程序执行的地方;用户空间之下是内核空间(Kernel Space),内核位于此。基于此,GUN C Library(glibc)提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制,因为内核空间和用户空间的应用程序使用的是不同的保护地址空间。用户空间的进程使用的是自己的虚拟地址空间,而内核则占用单独的地址空间。

内核的核心功能:

  • 系统调用接口(System call interface)

  • 程序管理(Process control)

  • 内存管理(Memory management)

  • 文件系统管理(Filesystem management)

  • 设备的驱动(Device drivers)

linux内核及系统启动流程

Linux内核的特点

  • 支持模块化

  • 支持模块的动态装载和卸载

linux内核的设计原则

单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。

内核的组成部分

核心文件:

/boot/vmlinuz-VERSION-release
ramdisk:
    CentOS 5:/boot/initrd-VERSION-release.img
    CentOS 6:/boot/initramfs-VERSION-release.img

模块文件:/lib/modules/VERSION-release/


CentOS 系统启动流程

POST(Power On Self Test):

检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。

加载BIOS(Basic Input and Output System):

根据在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器(硬盘、光盘、U盘等)。在平时的启动过程中,大多为硬盘启动,基于此,BIOS会读取硬盘的第0磁道的第1扇区(MBR)的内容来引导启动。

BOOT Sequence:

按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备

MBR(Master Boot Record):

linux内核及系统启动流程

三部分组成,分别是主引导程序(Bootloader)、硬盘分区表DPT(Disk Partition Table)和magic number。

Bootloader:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核。

在Linux中常用的主引导程序有LILO(LInux LOader)和GRUB(GRand Uniform Bootloader),此处以GRUB引导为例。

启动引导程序GRUB:

stage1:stage1的代码直接存在于MBR,是后续引导的入口,无识别文件系统的能力。
stage1.5: MBR之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统,具有识别文件系统的能力。
stage2:加载磁盘分区(/boot/grub/)

启动内核:

当stage2被载入内存执行时,首先会解析grub的配置文件/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核。而内核会立即作自身初始化。
  • 探测可识别的所有硬件设备

  • 加载硬件驱动程序(可能会借助于ramdisk加载驱动)

  • 以只读方式挂载rootfs

  • 运行用户空间的第一个应用程序:/sbin/init

运行init程序

  • CentOS 5:SysV

  • CentOS 6:Upstart

  • CentOS 7:Systemd

设置默认运行级别

  • CentOS 5:/etc/inittab

  • CentOS 6:/etc/inittab,/etc/init/*.conf

  • CentOS 7:default.target–>/usr/lib/systemd/system/*.target

运行系统初始脚本,完成系统初始化

/etc/rc.d/rc.sysinit

启动内核模块

/etc/modules.conf /etc/modules.d/*

关闭对应级别下应关闭的服务,启动需要启动的服务

/etc/rc.d/rc#.d/*

执行自定义引导程序

/etc/rc.d/rc.local

设置登陆终端

/sbin/mingetty

原创文章,作者:Jeason,如若转载,请注明出处:http://www.178linux.com/30369

(0)
JeasonJeason
上一篇 2016-08-08 16:15
下一篇 2016-08-08 16:15

相关推荐

  • shell脚本1

    shell脚本基础 shell脚本: 包含一些命令或声明,并符合一定格式的文本文件 格式要求:首行shebang机制 #!/bin/bash #!/usr/bin/python #!/usr/bin/perl shell脚本的用途有: 自动化常用命令 执行系统管理和故障排除 创建简单的应用程序 处理文本或文件 创建shell脚本 第一步:使用文本编辑器来创建…

    2017-08-05
  • 第一周-2:Linux部分常用命令使用示例、查看命令行工具使用手册以及LinuxFHS部分目录简介

    一、部分命令使用示例: 1、ifconfg 在命令行界面下或系统配置脚本中用于配置、控制及查询TCP/IP网络接口的系统管理工具 [netartisan@localhost 桌面]$ ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 &n…

    Linux干货 2016-11-07
  • 描述器

    Edit 描述器 |[Descriptors] 描述器的表现 用到3个魔术方法:__get__()、__set__()、__delete__() 方法用法: object.__get__(self,instance,owner) object.__set__(self,instance,value) object.__delete__(self,instan…

    Linux干货 2017-11-29
  • 基于pxe部署系统

    一、前言 在生产环境中,我们经常遇到需要部署部署多台服务器。如果我们每部署一台服务器都要拿着系统盘到机房部署,守在服务器面前,那么我们的效率是十分低下的。况且有时候机房并不在我们身边。那么我们可以通过让机房值班人员为每台服务器配置好远程管理卡,运维人员通过远程管理卡,远程登入服务器进行操作。 二、pxe原理 pxe原理是通过服务器上网卡中支持的pxe启动,通…

    Linux干货 2015-09-14
  • 正则表达式及文本处理

    正则表达式及文本处理 通俗点说,正则表达式就是处理字符串的方法,更加快速简洁的代表各个要求参数,一般用于描述字符排列和匹配模式的一种语法规则,通过正则表达式一些特殊符号的辅助,让用户轻易的查找、删除、替换一些字符串的处理程序。( ps:正则表达式和通配符不一样,通配符代表的是bash接口的一个功能,但正则表达式是一种字符串处理的表达方式,两者一定要分清楚。)…

    2017-06-11