Linux启动流程详解,从BIOS到运行级别

一、BIOS

BIOS(基本输入输出系统)是电脑的主要固件之一,内置于计算机的主板上,主要作用是在计算机加电时进行自检,并将系统控制权移交给操作系统。在Linux启动的过程中,BIOS是第一步。

当计算机开机时,BIOS会自动初始化硬件资源,包括CPU、内存、硬盘、光驱等。接下来,BIOS会加载自检程序,进行一系列硬件自检,如果发现错误,就会输出错误信息。如果自检通过,BIOS会搜索启动设备的引导扇区,并将控制权转交给引导扇区。在Linux启动过程中,引导扇区是非常重要的,因为它包含着操作系统的启动程序。

二、引导程序

引导程序是位于硬盘的引导扇区中的第一扇区,它是操作系统启动的第二步。在Linux系统中,引导程序通常是GRUB(GRand Unified Bootloader)。GRUB是一个多重引导程序,它可以识别主流操作系统,比如Windows、Linux、Mac等,用户可以在启动时选择任何一个操作系统。

#在Linux系统中,GRUB的配置位于以下文件中:/etc/grub.d/40_custom
#GRUB启动顺序可以在/etc/grub.d/00_header和40_custom中进行调整
menuentry 'Ubuntu 18.04' {
   set root='hd0,msdos2'
   linux /vmlinuz root=/dev/sda2 ro
   initrd /initrd.img
}

从GRUB开始,Linux系统才开始真正地被加载。在此过程中,GRUB会读取内核文件和其它必要的文件系统模块并将它们加载到内存中。

三、内核启动

内核是Linux系统的核心部分,也是运行与系统最底层,直接操作硬件资源的部分。内核启动是Linux启动的第三步。

在内核启动时,Linux会做如下操作:

1、设置系统日志

2、初始化CPU、内存、硬盘等硬件

3、挂载根文件系统

4、建立root用户的环境变量

5、启动init进程

内核会创建root文件系统并挂在,以便操作系统可以访问硬盘中的数据。接下来,内核会加载一些必要的模块,如文件系统模块、网络模块等。在文件系统准备好之后,内核会启动init进程。init是Linux系统的第一个用户级别进程,它是进程控制的直接祖先。在Linux中,init一直存在于运行级别中,负责启动和终止其它的用户级别进程。

四、用户级别

用户级别是操作系统运行时的可供用户选择的不同状态,也称为运行级别。在Linux中,有七个运行级别。不同的运行级别提供了不同的服务,如多用户服务、图形界面、只运行背景服务等。用户可以根据需求选择运行级别。

以下是运行级别的定义:

0:系统停机状态,也称关机

1:单用户工作状态,root用户的命令行模式

2:多用户状态,没有NFS支持

3:完整的多用户状态,有NFS支持且无图形界面

4:系统未使用,保留

5:多用户状态,带图形界面

6:系统正常关闭并重启

用户可以通过运行级别来控制Linux系统的状态。在Linux中,运行级别可以通过修改/etc/inittab文件来实现。例如,可以增加下面这行代码来在“init 5”的时候启动Nginx服务器。

#在/etc/inittab中设置运行级别,并添加如下两行代码
id:5:initdefault:
ng:5:respawn:/usr/local/nginx/sbin/nginx

总结

以上是Linux系统启动的完整过程,从BIOS开始,到引导程序,再到内核启动,最后到用户级别。操作系统的启动过程非常复杂,需要各种硬件和软件的协同作用。了解Linux的启动过程可以帮助我们更好地理解操作系统,并且在处理问题时可以更快地找到根本问题。在实际运维中,了解Linux系统的启动过程也非常重要。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/195771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-02 20:36
下一篇 2024-12-02 20:36

相关推荐

  • Python如何区分代码块的级别

    Python是一种动态语言,其程序在运行前需由解释器进行解析。在Python语言中,代码块的级别是非常重要的,对于代码块的排列顺序、执行顺序及错误检测都有着重要的影响。Python…

    编程 2025-04-29
  • 图像与信号处理期刊级别

    本文将从多个方面介绍图像与信号处理期刊级别的相关知识,包括图像压缩、人脸识别、关键点匹配等等。 一、图像压缩 图像在传输和存储中占据了大量的空间,因此图像压缩成为了很重要的技术。常…

    编程 2025-04-28
  • Python爬虫流程用法介绍

    本文将介绍Python爬虫的流程,包括数据采集、数据处理以及数据存储等方面。如果想要使用Python爬取网站数据,本文将为您提供详细的指导和实例。 一、数据采集 1、确定目标网站 …

    编程 2025-04-27
  • 如何在Linux中添加用户并修改配置文件

    本文将从多个方面详细介绍在Linux系统下如何添加新用户并修改配置文件 一、添加新用户 在Linux系统下创建新用户非常简单,只需使用adduser命令即可。使用以下命令添加新用户…

    编程 2025-04-27
  • 如何解决linux jar包 invalid or corrupt jarfile问题

    对于许多开发人员和系统管理员在Linux环境下使用Java开发过程中遇到的一个常见的问题是 invalid or corrupt jarfile(无效或损坏的jar文件)错误。当您…

    编程 2025-04-27
  • Java项目Git发布流程规范

    本文旨在介绍Java项目在使用Git进行发布时的流程规范。Git作为一个版本控制工具,其功能十分强大,但是对于Java项目进行发布时,需要我们根据标准化的流程规范来执行操作,以确保…

    编程 2025-04-27
  • 在Linux上安装JRE并配置环境变量

    本文将从以下几个方面为您详细阐述如何在Linux系统上,通过自己账户安装JRE,并且配置环境变量。 一、安装JRE 在进行安装前,我们需要下载JRE的安装包并解压,可以从官方网站下…

    编程 2025-04-27
  • xmake qt:构建Qt应用的全流程解决方案

    本文将会详细阐述xmake qt的使用方法以及其能够解决的问题。针对Qt应用开发中的各种困境,xmake提供了一整套的解决方案,包括自动构建、依赖管理、部署打包等,极大地提高了开发…

    编程 2025-04-27
  • GTKAM:Linux下的照片管理器

    GTKAM是用于Linux操作系统的一款照片管理器,它支持多种相机及存储设备,并提供了一系列强大的工具,让用户可以方便地浏览、管理、编辑和导出照片。本文将从多个方面对GTKAM进行…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25

发表回复

登录后才能评论