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

相关推荐

  • mitaka版本openstack网络之open vSwitch

    作者:【吴业亮】 博客:http://blog.csdn.net/wylfengyujiancheng 一、硬件配置及服务拓扑1. controller节点:一块网卡2. 网络节点:四块网卡。3. 计算节点:三块网卡 controller节点1. 运行 neutron数据库2. 运行消息队列服务3. 运行认证。4. 运行OpenStack计算nova相关网络…

    2018-01-22
  • 强大的查找工具之find命令

    一、Linux中的文件查找工具     在文件系统上常常需要根据文件的各种属性去查找符合条件的文件,此前讲到的grep、egrep属于文本过滤、文本搜索工具;而文本查找工具有两个,local和find 二、Linux中的查找工具简介 locate 命令 find 命令 简介:locate属于非实时查找,依赖于事先构建的索引;索引的创建是在…

    Linux干货 2016-08-16
  • Linux的SOCKET编程详解

    1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal) UNIX system V有:消息(message)、共享存储区…

    Linux干货 2015-04-10
  • ntp时间服务器

    前言   ntp(Network Time protocol)是网络时间协议,是用来使网络中的各个计算机时间同步的一种协议。 ntp配置  1)ntp是由ntp软件提供,如果没有可以使用yum进行安装  2)ntp配置文件介绍:/etc/ntp.conf   利用restrict来管理权限控制;语法格式:restric…

    Linux干货 2015-06-24
  • MySQL与nfs的实验

    (1) 创建一个共享mydata,路径为/mysql/data,客户端1挂载至/mydata;而后客户端1主机安装mysql或mariadb,将数据目录设定为/mydata,要确保mysql服务能正常 运行,但数据目录位于samba server上; (2) 客户端2主机使用类似客户端1主机的方式挂载mydata共享至本地的/mydata目录,而后,直接安装…

    Linux干货 2016-10-30
  • 优质代码的十诫

    1.- DRY: Don’t repeat yourself. DRY 是一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让…

    Linux干货 2015-04-01