• linux 系统启动过程


    关于对双系统启动的设置的理解:

                    开机,进入BIOS之后设置磁盘的启动顺序,就可以登录不同的操作系统。

    原因理解如下:

    1、BIOS:被刷入ROM中的开机程序,Basic Input/Output System。是一组固化到计算机系统主板上的一段程序,里面保存着计算机最重要的基本输入输出程序、系统基本设置。主要功能就是在计算机启动时进行硬件检测,在计算机启动初期尚未加载操作系统时控制计算机。

            在BIOS中的地址,有许多都是固定物理地址,任何BIOS的执行都是一样的。

            执行 BIOS 中的硬件系统检测初始化程序

    1. 硬件系统检测:检查 RAM,键盘,显示器,软硬磁盘(如果硬件坏了,可能需要重新更换硬件)
    2. 初始化程序:在内存物理地址 0 处建立 BIOS 所支持的中断向量,即将 BIOS 提供的中断例程的入口地址登记在中断向量表中。

            BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性。在自检完成之后,BIOS 将会调用 int 19h 进行操作系统的引导。int 19h 将要完成的内容是:将磁盘 0 面 0 磁道 1 扇区的内容读取到内存 0x7c00 处。

            init 19h 会根据BIOS中设置的设置启动顺序来读取设备信息,将第一启动顺序设备上的MBR内容读取到0X7c00处,

    2、MBR: 执行MBR 

            MBR : 是计算机开机以后访问硬盘时所必须要读取的第一个扇区,位于硬盘的第0柱面第0磁道第一扇区,大小为512字节。主引导记录(MBR,Master Boot Record)。MBR 存放分区表信息,告诉计算机操作系统所在的位置。 

    MBR 分为:

            1、BootLoader 占用446字节,存储有操作系统相关信息如操作系统名称、内核位置等,目的是加载内核到内存中运行。

            2、分区表(Partition Table)占用64字节,每个主分区占用16字节,所以最多能够有4个主分区。

            3、分区表有效性标记(结束标记)占用2字节,固定为55AA

    在加载MBR之后会运行Bootloader,其作用:

            1、初始化硬件设备

            2、建立内存空间的映射图,为最终调用操作系统内核做好一切准备。linux使用内存映射的方式管理。Boot Loader有Grub、Lilo和spfdisk等常见的Loader。

            3、加载内核

            根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作系统,将解压后的内核放置在内存之中,至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

            4、运行:

                     第一个程序: /sbin/init

            /sbin/init 首先读取/etc/inittab文件,并依据此文件来进行初始化工作,运行开机启动程序。

            /etc/inittab文件最主要的作用就是设定Linux的运行等级。

            设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。

            每个运行级别在/etc/目录下面,都有一个对应的子目录/etc/rc?.d,指定要加载的程序。

            ubuntu 没有inittab,运行等级可以在 /etc/init/rc-sysinit.conf 中设置和查看,也可以手动创建inittab 文件

    以下为转载内容

            5、 执行 rc.sysinit

                    设定运行等级后执行的第一个用户层文件

                    该脚本做的工作:

                            1. 设定 PATH

                            2.设定网络配置(/etc/sysconfig/network)

                            3.启动swap分区

                            4.设定/proc等等。

            6. 执行启动内核模块

                       具体是依据 /etc/modules.conf文件 或 /etc/modules.d 目录下的文件来装载内核模块。

            7. 执行不同运行级别的脚本程序

                    根据运行级别的不同,系统会运行rc0.d ~ rc6.d中相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

            8. 执行/etc/rc.d/rc.local

                    rc.local 是所有init初始化脚本执行完后,用户可以个性化设置的地方,你可以把你想设置和启动的东西放到这里。

            9. 执行/bin/login程序,进入登录状态 等待用户输入username和password

                    

     

            

            

  • 相关阅读:
    Spring Bean 的生命周期(看着图不迷路)
    第5章:性能优化《Nginx实战:从入门到精通》
    剑指offer---Day5
    银河麒麟服务器版v4安装程序缺少依赖包,改为利用手机联网在线安装
    Kafka - 3.x 文件存储不完全指北
    salesforce零基础学习(一百一十八)Restrict Rule
    C#调用Windows API实现自定义打印纸张大小
    Meta Reality Labs:理想的VR头显还需克服这10项技术挑战
    JTAG基本介绍
    NXP官方开发板uboot程序烧写到SD卡并启动
  • 原文地址:https://blog.csdn.net/qq_31319235/article/details/126469712