Linux操作系统的引导过程及初始化的必要操作详解

系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux操作系统的引导过程将完成一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。

一、引导过程预览

如图:

1.开机自检

服务器主机开机之后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交本机硬盘;

2.MBR引导

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB);

3.GRUB菜单

对于Linux操作系统来说,GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。需要注意的是,Centos 7 采用的是GRUB2启动引导器。

4.加载Linux内核

Linux内个是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将会完全掌握整个Linux操作系统的运行过程。在Centos 系统中,默认的内核文件是“/boot/vmlinuz-3.10.0-514.el7.x86_64”。

5.init进程初始化

为了进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行,init进程负责完成一系列的系统初始化过程,最后等待用户进行登录。

二、系统初始化进程及文件

1.init进程

Linux操作系统中的进程使用数字进行标记,每个进程的身份标记号为PID,在引导Linux操作系统的过程中。“/sbin/init”是内核第一个加载的程序,因此init进程对应的PID号总是为1。

init进程运行以后将会陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程。

init进程正是维持整个Linux操作系统运行的所有进程的“始祖”。因此,init进程是不允许被轻易终止的。

2.Systemd简介

Systemd是Linux操作系统的一种init软件,Centos 7 系统采用了全新的Systemd启动方式,取代了传统的SysVint。Systemd启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。Centos 7系统中“/sbin/init”是“/lib/systemd/systemd”的链接文件。

[[email protected] ~]# ll /sbin/init
lrwxrwxrwx. 1 root root 22 7月  14 18:54 /sbin/init -> ../lib/systemd/systemd

systemd守护进程负责Linux的系统和服务,systemctl用于控制Systemd管理的系统和服务状态。

Systemd将其管理的资源组织成各种类型的单元(Unit)。如图:

早期的Linux操作系统中的SysVint机制。默认包括七种不同的服务搭配方式,其中每一种搭配方式称为运行级别,类似于Windows系统中的正常启动、安全模式等。Linux系统中用数字来表示,如图:

三、优化启动过程

Linux操作系统中包含了大量的服务策划那个系,这些服务程序在切换运行级别是根据预设的状态进行启动或终止。

1.常见的系统服务


这些服务到底是选择开启还是关闭,应根据实际情况而定。

2.优化开机自动加载的服务

1)使用ntsysv工具

[[email protected] ~]# ntsysv

通过使用“--level”选项可以对指定运行级别中的服务进行管理。比如:

[[email protected] ~]# ntsysv --level 35
//针对运行3、5级别中的各种服务的默认状态进行调整

2)使用systemctl工具

常用的选项:
enable:开机自启动;
disable:开机自动关闭;
is-enable:查看开机启动状态;

[[email protected] ~]# systemctl list-units --type=service
//查看当前系统中所有已激活的系统服务

原文地址:https://blog.51cto.com/14157628/2435765

时间: 2024-10-09 06:36:54

Linux操作系统的引导过程及初始化的必要操作详解的相关文章

u-boot串口和stdio、console初始化及相关操作详解<三>

console是构建在stdio之上的,console的初始化是board_r中最后收尾的操作. console的初始化函数console_init_r在common/console.c中实现: int console_init_r(void) { char *stdinname, *stdoutname, *stderrname; struct stdio_dev *inputdev = NULL, *outputdev = NULL, *errdev = NULL; #ifdef CONFI

深入了解linux操作系统引导过程详解

Linux操作系统的引导过程:开机自检.mbr引导.grub菜单.加载linux内核.init进程初始化. 1.开机自检,检测硬件后根据启动顺序将控制权交给本机硬盘 2.mbr引导,根据硬盘的主引导记录,将控制权转交给引导分区或者启动菜单 3.grub菜单,启动菜单提供给用户选择进入不同的操作系统(例如windows)的界面.默认进入linux将系统控制权转交给内核. 4.加载linux内核,内核负责分配调度硬件资源与系统程序,内核接过系统控制权,开始管理整个Linux系统. 5.init进程初

关于Linux操作系统的开机过程详解

由 于操作系统正在变得越来越复杂,所以开机引导和关机下电的过程也越来越智能化.从简单的DOS系统转移到 Windows NT系统,人们已经亲身感受到了这些变化--这已不仅仅是核心操作系统的启动引导和关闭了,还包括必须要同时启动或者关闭相当数量的服务项目.类似于 Windows NT,Linux系统启动过程需要打开的服务项目也是数量极大的. 这里,我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Li

Linux IO模式及 select、poll、epoll详解

注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. 一 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进程的阻塞 - 文件描述符 - 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32

技巧:Linux 动态库与静态库制作及使用详解

技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 Linux 版本下不兼容的问题: 2)在 Linux 静态库的制作过程中发现有别于 Windows 下静态库的制作方法:3)在 Linux 应用程序链接第三方库或者其他静态库的时候发现链接顺序的烦人问题.本文就这三个问题针对 Linux 下标准库链接和如何巧妙构建 achrive(*.a) 展开相关介

Linux上命令的使用格式和基础命令详解

一.Linux上命令的使用格式 命令行提示符详解: 用户通过终端的命令行接口来控制操作系统,登陆后如下: [[email protected] ~]# root: 当前登录的用户 @:分隔符 localhost: 当前主机的主机名,非完整格式:此处的完整格式为:localhost.localdomain [[email protected] ~]# hostname localhost.localdomain ~:用户当前所在的目录(current directory),也称为工作目录(work

Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

?? 上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存

Linux Shell数组常用操作详解

Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) 1 declare -a array 2 array=(1 2 3 4 5) 数组用小括号括起,数组元素之间用空格分开 2显示数组长度: [@tc_132_227 dm_pid_day]$ echo ${#array[@]} 5 [@tc_132_227 dm_pid_day]$ echo ${#array[*]} 5 命令: ${#数组名[@或*]} 获取数组长度,若数组无

linux的引导过程和服务控制

引导过程和服务控制 要求: ? 设置Linux系统每次开机后自动进入字符模式界面. 步骤: 编辑/etc/inittab文件,将默认运行级别修改为3.如图所示: ? 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务:anacron.atd.avahi-daemon.Bluetooth.cups.firstboot.hidd.hplip.ip6tables.iptables.isdn.mcstrans.mdmonitor.nfslock.pcscd.portmap.re