linux启动顺序讲解
Linux的启动过程及init进程
Linux的启动过程及init进程Linux下有三个特殊进程:idle进程(pid=0)idle进程其前⾝是系统创建的第⼀个进程,0号进程,也唯⼀⼀个没有通过fork()或者kernel_thread产⽣的进程,由系统⾃动创建,运⾏在内核态。
0号进程在创建了init进程后,演变成为idle进程。
主处理器上的idle进程是由原始进程(0号进程)演变⽽来,从处理器上的idle进程是由init进程fork得到的,pid也为0。
idle进程的优先级最低,不参与调度,只有在运⾏队列为空时才调度。
init进程(pid=1)init进程由0号进程创建,完成系统的初始化,是第⼀个⽤户进程,是其他所有⽤户进程的⽗进程。
kthreadd进程(pid=2)kthreadd进程由idle通过kernel_thread创建,始终运⾏在内核空间,负责内核进程的调度和管理。
init进程⼀开始是内核态,然后在运⾏了⼀个⽤户态的init程序之后,转成⽤户态,之后只能在⽤户态⼯作。
⽤户想要进⼊内核态只能通过调⽤API。
init进程要把⾃⼰转换成⽤户态,就需要运⾏⼀个⽤户态的应⽤程序(init程序),需要运⾏这个程序就需要找到这个程序,需要找到这个程序就需要挂载根⽂件系统,因为所有的应⽤程序都在⽂件系统中。
所以,需要先挂载根⽂件系统,并找到⽤户态下的init程序。
Linux中的所有进程都是由init进程创建并运⾏的。
⾸先Linux内核启动,然后在⽤户空间中启动init进程,再启动其他进程。
在系统启动完成后,init进程将变成守护进程监视系统的其他进程。
init启动了login进程(⽤户登录进程),命令⾏进程(提供命令⾏环境),shell进程(提供命令解释和执⾏)其中,shell进程是⽤户登录后运⾏的第⼀个程序。
运⾏级别:0 关机1 单⽤户2 多⽤户,会启动⽹络功能,但不会启动NFS,是维护模式3 多⽤户4 不使⽤,预留5 图形化界⾯6 重启emergency 急救模式直接使⽤init+运⾏级别在centos7中,init进程是systemed进程;在centos6中是upstart进程;在centos5中是init进程,在unbuntu中是init进程。
Linux命令高级技巧使用systemctl命令进行系统服务管理
Linux命令高级技巧使用systemctl命令进行系统服务管理在Linux操作系统中,systemctl是一个强大的命令工具,用于管理系统服务。
它提供了各种功能,包括启动、停止、重启、开机启动等。
本文将介绍systemctl命令的高级技巧以及如何使用它进行系统服务管理。
一、systemctl命令简介systemctl命令是用来管理systemd系统和服务管理器的。
它可以管理系统服务,如开启、关闭、重启服务,还可以查看服务的状态、启动顺序等。
systemctl命令在Linux中广泛应用于各种服务器环境和系统管理任务。
二、服务的状态管理1. 查看服务状态:要查看服务的状态,可以使用以下命令:```shellsystemctl status 服务名```这将显示服务的运行状态、所属进程号、最后一次活动时间以及任何错误信息。
2. 启动和停止服务:要启动一个服务,可以使用以下命令:```shellsystemctl start 服务名```要停止一个服务,可以使用以下命令:```shellsystemctl stop 服务名```3. 重启和重新加载服务:要重启一个服务,可以使用以下命令:```shellsystemctl restart 服务名```要重新加载一个服务的配置文件,可以使用以下命令:```shellsystemctl reload 服务名```三、服务的管理1. 开机启动设置:要设置一个服务在系统启动时自动启动,可以使用以下命令:```shellsystemctl enable 服务名```要取消一个服务在系统启动时自动启动,可以使用以下命令:```shellsystemctl disable 服务名```2. 查看服务的启动顺序:要查看服务的启动顺序,可以使用以下命令:```shellsystemctl list-dependencies 服务名```这将显示服务所依赖的其他服务以及启动的先后顺序。
嵌入式linux系统的启动流程
嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。
同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。
Linux 进程的启动方式
Linux 进程的启动方式程序或者命令的执行实际上是通过进程实现的。
通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。
系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。
启动进程的方式有两种,分别为前台启动方式和后台启动方式。
1.以前台方式启动进程在终端窗口的命令行上输入一个Linux命令并按Enter键,以前台方式启动了一个进程。
例如,在终端窗口上执行“find /-name myfile.txt”命令,就可以以前台的方式启动一个进程。
而在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起。
然后,可以使用ps命令查看该进程的有关信息,如图41所示。
图41 前台方式启动进程2.以后台方式启动进程在前台运行的进程是正在进行交互操作的进程,它可以从标准输入设备接收输入,并将输出结果送到标准输出设备,在同一时刻只能有一个进程在前台运行。
而在后台运行的进程一般不需要进行交互操作,不接收终端的输入。
通常情况下,可以让一些运行时间较长而且不接受终端输入的程序以后台方式运行,让操作系统调度它。
要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。
例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。
启动后,系统会显示如下所示的信息:[2] 3516这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。
然后,出现了shell提示符,这表示已返回到前台。
这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。
arm版本linux系统的启动流程
arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。
在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。
本文将详细介绍ARM版本Linux系统的启动流程。
一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。
在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。
引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。
二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。
内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。
内核需要设置异常向量表,以便正确处理异常。
2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。
3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。
init进程是系统中所有其他进程的父进程,负责系统的初始化工作。
三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。
在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。
设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。
它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。
四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。
启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。
2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
Linux系统服务启动顺序Shell脚本
Linux系统服务启动顺序Shell脚本在Linux操作系统中,有许多系统服务需要在启动时按照一定的顺序进行启动。
为了确保这些服务能够正确地依赖关系启动,我们可以使用Shell脚本来管理它们的启动顺序。
本文将介绍一种用Shell脚本来实现Linux系统服务启动顺序的方法。
一、背景介绍在Linux系统中,服务是一种在后台运行的程序,用于提供特定功能或服务。
在系统启动时,许多服务需要按照一定的顺序启动,以满足它们之间的依赖关系。
例如,数据库服务可能需要在网络服务启动之后才能正常工作。
通过Shell脚本管理服务启动顺序可以确保它们能够按照正确的依赖关系启动,避免冲突和错误。
二、Shell脚本的编写编写Shell脚本来管理服务的启动顺序需要遵循一定的规范。
下面是一种常用的方法:1. 定义服务启动顺序首先,我们需要定义每个服务的启动顺序。
可以将服务按照其依赖关系进行排序,确保依赖关系较低的服务先启动。
这样可以避免启动时的冲突和错误。
例如,假设我们有三个服务需要启动:A、B和C。
服务A不依赖于其他服务,服务B依赖于服务A,而服务C依赖于服务B。
因此,启动的顺序应为A、B、C。
2. 编写Shell脚本创建一个新的Shell脚本文件,例如`startup.sh`,并使用文本编辑器打开它。
在脚本中,先使用`#!/bin/bash`指定脚本使用的Shell解释器。
然后,按照定义的服务启动顺序,逐个启动每个服务。
下面是一个示例脚本,用于按照上述定义的服务启动顺序启动服务:```#!/bin/bash# 启动服务Aservice A start# 等待一段时间,确保服务A已经启动完成sleep 5# 启动服务Bservice B start# 等待一段时间,确保服务B已经启动完成sleep 5# 启动服务Cservice C start```在脚本中,使用`service`命令来启动每个服务。
在每个服务启动之后,可以使用`sleep`命令来等待一段时间,以确保服务已经完全启动。
第一次课项目1Linux系统安装与启动(共50张PPT)
工程问题1-Linux的版权问题
Linux是基于Copyleft〔无版权〕的软件模式进行发布的, Copyleft是与Copylright〔版权所有〕相对立的新名称,它是GNU
工程制定的通用公共许可证GPL〔General Public License〕。 GNU工程是由Richard Stallman于1984年提出 ,他建立了自由软件基金会
启动引导器程序,启动引导器再负责加载启动硬盘分区中的操作系统。
工程问题4 - G的RUSB hell。
按a键可以对高亮菜单项中的命令追加内核启动参数。 X Server:控制实际的显示与输入设备。
如完何本进 钱入工X程W需i要nKd解oow决sr的Sny问sSt题em:h执e行l根l:本配是置 对Bourne Shell的开展,在大局部情况下与 Bourne Shell兼容。 其后可以跟options选项将在内核载入时传给内核
1. 工程课题引入
2. Linux的根本知识 3. Linux的安装与根本配置
4. 现场安装演示案例 5. X Windows System 6. GRUB的安装与配置
7. 现场演示
课题引入-工程背景 1、网络操作系统在网络中的作用和地位是怎样的?
为网络中的用户提供了哪些效劳? 2、当前流行的网络操作系统有哪些?
工程问题1-Shell的版本
Bourne Shell:是贝尔实验室开发的版本。
统,它拥有如下一些特点:
R启e动d 引Ha导t E器n是te计rpBr算isAe机LS启in动Hux过简:程介中是运G行的N第U一的个真B正o的软u件rn,e通常A计g算a机in启动S时h在e通ll过,BIO是S自G检N后读U取操并运作行硬系盘统主引上导扇默区〔认MBR〕中的
linux操作系统的配置流程和步骤
Linux操作系统的配置流程和步骤如下:1. 打开终端,输入命令cd /opt,使用tar命令解压文件(tar -zxvf VMwareTools-10.0.0-2977863.tar.gz)。
2. 进入解压的目录(cd vmware-tools-distrib),安装vmware-install.pl文件(./vmware-install.pl)。
执行命令之后,一系列设置全部回车即可(安装需要一定的时间)。
3. 创建共享文件目录,比如在虚拟机中创建一个名为myshare 的文件夹。
右键虚拟机,点击设置:选择选项:点击添加:点击下一步,选择目标文件目录。
点击下一步:点击完成。
4. 在windows系统中的myshare目录下面创建文件hello.txt,并在文件里面输入hello。
5. 设置CPU和内存,CPU设置不能超过真机的一半,内存设置不要超过真机内存的一半1G-2G即可。
6. 设置网络类型,选择桥接。
7. 设置IO控制器和磁盘类型,选择默认推荐。
8. 创建虚拟机磁盘,设置磁盘大小,默认20G够用。
9. 点击CD/DVD,以ISO映像文件安装,点击浏览,选择系统镜像文件,点击确定。
10. 开启此虚拟机。
11. 点击第一行install,进行系统安装。
12. 选择语言,中文,完成后继续。
13. 软件选择带GUI的服务器。
14. KDUMP不启用。
15. 进入安装目标位置,下拉,选择我要配置分区,点击完成。
16. 进入磁盘分区界面,点击+号开始分区。
以上是Linux操作系统的配置流程和步骤,希望对解决您的问题有所帮助。
linux init六种模式简介
init 5——进入图形化登录的多用户模式 这是蓝点2.0安装后默认的启动模式。系统启动后或执行init 5命令后,悦目的蓝绿过渡色背景上就出现了漂亮的登录窗口。 所有帐号名都以图标的方式出现在窗口里等待选择,不必自己输入。不过系统管理员可能不高兴——这样系统里有多少用户岂不是让人一目了然?不过在KDE控制中心中修改就可以解决问题的,我就不多说啦。 如果系统出了问题,只要启动仍然能进入这个界面(说明X服务器没有问题),root帐号也可以从这里进入Linux的安全模式,就是在左下角的选择框把 模式从kde换为save failed就行了。当然进入的界面绝对没有美观可言,但用于修复X窗口管理器或应用程序的问题是必不可少的。
�
如果你了解/etc/inittab文件,就千万不要把0设为缺省登录模式,否则你的Linux的运行就只能两点一线了——开机←→停机,或者是开机←→重启的无限循环。 其他的4种模式实际上是由操作系统确定的。如果你愿意修改Linux的源代码,你也可以定义这4种(甚至6种)模式的实际功能。其实只要知道Linux发布厂商的约定就足够了,下面我们就以蓝点2.0为例,看看init的常用约定吧——
init 2——进入无网络服务的多用户模式 如果你的计算机根本没有连网,这个模式就跟普通模式一样了。否则的话别人就不能通过网络www、ftp或telnet登录你的计算机了,但对与ping 命令你的计算机还是会作出反应的。如果连ping你也拒绝访问,那么就不如直接把网线拔了! 如果你的计算机作为网络服务器,这一模式就挺有用了。譬如你要修整系统或更新网站内容,就可以把计算机调到这一模式,然后放心的进行你的工作,等工作完成 后再切换到模式3或5就行了。但注意如果原来已经有用户ftp或telnet进入了你的系统,用init 2 是不能中断他和你的连接的,小心让别人在这个时候黑你一把哦!——执行init 2前先用who命令检查一下吧。 这一模式下,在本机上的使用基本不变。你仍然可以访问网络,上Internet,ftp或telnet到网络中的任何一台服务器。只是你的计算机在网络中不给其他机器提供服务而已。计算机从第3运行级转入这一模式时你会看到一系列网络服务被停止。
1)reboot 重启(2)init 6 重启(3)logo
1)reboot 重启(2)init 6 重启(3)logo1.1一般在linux中,我们重启会用到这三个命令:1.2 reboot命令重启动系统时是删除所有的进程,而不是平稳地终止它们。
因此,使用reboot命令可以快速地关闭系统,但如果还有其它用户在该系统上工作时,就会引起数据的丢失。
所以使用reboot命令的场合主要是在单用户模式。
'reboot'并不执行这些过程,reboot更是一个kernel级别的命令,不对应用使用shutdown脚本。
1.3 init是所有进程的祖先他是Linux系统操作中不可缺少的程序之一。
它的进程号始终为1所以发送TERM信号给init 会终止所有的用户进程守护进程等。
shutdown 就是使用这种机制。
init定义了7个运行级别(runlevel)init 0为关机init 6为重启。
’init 6‘基于一系列/etc/inittab文件,并且每个应用都会有一个相应shutdown脚本。
'init 6' 调用一系列shutdown脚本(/etc/rc0.d/K*)来使系统正常关机;1.4 shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。
该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。
精确时间的格式是hh:mm,表示小时和分钟,时间段由+ 和分钟数表示。
系统执行该命令后会自动进行数据同步的工作。
该命令的一般格式: shutdown [选项] [时间] [警告信息]命令中各选项的含义为:- k 并不真正关机而只是发出警告信息给所有用户- r 关机后立即重新启动- h 关机后不重新启动- f 快速关机重启动时跳过fsck- n 快速关机不经过init 程序- c 取消一个已经运行的shutdown请注意,该命令只能由超级用户使用。
linux_mips启动流程_存储相关
Linux-mips启动流程-存储相关linux内核启动的第一个阶段是从/arch/mips/kernel/head.s文件开始的。
而此处正是内核入口函数kernel_entry(),该函数定义在/arch/mips/kernel/head.s文件里。
kernel_entry()函数是体系结构相关的汇编语言,它首先初始化内核堆栈段,来为创建系统中的第一个进程进行准备,接着用一段循环将内核映像的未初始化数据段(bss段在_edata和_end之间)清零,最后跳转到/arch/mips/kernel/setup.c 中的start_kernel()初始化硬件平台相关的代码。
下面讲述start_kernel() 函数。
在这个函数中跟内存初始化的函数是setup_arch()。
第一部分:以函数调用关系为线索下面是函数之间调用关系的框图:第一章:start_kenel()->setup_arch()setup_arch(&command_line);每种体系结构都有自己的setup_arch() 函数,这些是体系结构相关的。
【如何确定编译那个体系结构的setup_arch() 函数呢?主要由linux 源码树顶层Makefile 中ARCH 变量来决定的。
例如:MIPS 体系结构的。
SUBARCH := mipsARCH ?= $(SUBARCH)】。
void __init setup_arch(char **cmdline_p){cpu_probe();调用函数cpu_probe(),该函数通过MIPS CPU的PRID寄存器来确定CPU类型,从而确定使用的指令集和其他一些CPU参数,如TLB等prom_init();prom_init() 函数是和硬件相关的,做一些低层的初始化,接受引导装载程序传给内核的参数,确定mips_machgroup,mips_machtype 这两个变量,这两个变量分别对应着相应的芯片组合开发板;cpu_report();打印cpu_probe() 函数检测到的CPU 的Processor ID。
XP与Centos Linux双系统 默认启动顺序解决方案
XP与Centos 双系统默认启动顺序解决方案情况一:默认Centos启动,要改为XP启动1、进入Centos系统,寻找系统启动文件,然后使用vi 或gedit 等指令打开配置文件进行更改。
2、配置文件位置:/etc/grub。
conf 或/boot/grub/grub.conf3、配置文件内容##########################################################以下为配置文件内容########################################################## grub.conf generated by anaconda## Note that you do not have to rerun grub after making changes to this file#NOTICE: You do not have a /boot partition. This means that#all kernel and initrd paths are relative to /,eg。
#root (hd0,2)# kernel /boot/vmlinuz-version ro root=/dev/sda3#initrd /boot/initrd—version.img#boot=/dev/sdadefault=0 #默认启动的系统,默认启动第一个系统。
(更改其值,可改变启动顺序)timeout=5 #等待超时时间为5秒。
splashimage=(hd0,2)/boot/grub/splash。
xpm。
gz #开机图片地址。
Hiddenmenu #是否显示开机菜单。
title XP #第一个系统(更改其顺序,可改变启动顺序)rootnoverify (hd0,0)chainloader +1title CentOS (2。
Linux系统引导过程及排除启动故障
Linux系统引导过程及排除启动故障⼀、Linux操作系统引导过程⼆、系统初始化进程1、init进程2、Systemd3、Systemd单元类型三、排除启动类故障【1】、修复MBR扇区故障(含实验过程)【2】、修复GRUB引导故障●⽅法⼆:进⼊急救模式,恢复GRUB引导程序(与MBR 引导扇区类似)●⽅法三:引导界⾯进⼊急救模式,重建GRUB菜单配置⽂件⽅案三实验四、遗忘root⽤户的密码实验过程⼀、Linux操作系统引导过程1.开机⾃检服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进⾏初步检测,检测成功后根据预设的启动顺序移交系统控制权,⼤多时候会移交给本机硬盘。
总结:检测出第⼀个能够引导系统的设备,⽐如硬盘或者光驱2.MBR 引导当从本机硬盘中启动系统时,⾸先根据硬盘第⼀个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导⽂件的分区;或者直接根据MBR 记录中的引导信息调⽤启动菜单(如 GRUB)。
总结:运⾏放在MBR扇区⾥的启动GRUB引导程序3.GRUB 菜单对于Linux操作系统来说,GRUB(统⼀启动加载器)是使⽤最为⼴泛的多系统引导器程序。
系统控制权传递给GRUB以后,将会显⽰启动菜单给⽤户选择,并根据所选项(或采⽤默认值)加载Linux内核⽂件,然后将系统控制权转交给内核。
CentOS 7 采⽤的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置⽂件/boot/grub2/grub.cfg,来获取内核和镜像⽂件系统的设置和路径位置4.加载 Linux 内核Linux内核是⼀个预先编译好的特殊⼆进制⽂件,介于各种硬件资源与系统程序之间,负责资源分配与调度。
内核接过系统控制权以后,将完全掌控整个Linux操作系统的运⾏过程。
CentOS 7系统中,默认的内核⽂件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
linux启动顺序讲解
linux启动顺序讲解⼀、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑⼀打开电源时电脑就会进⼊BIOS(BIOS的⼯作主要是检测⼀些硬件设备);2、检测完后会进⼊MBR也就是boot loader(MBR位于硬盘的第⼀个扇区总共512bytes,其中前446bytes⾥⾯的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载⼊系统的Kernel(核⼼),在Kernel⾥主要是载⼊电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读⽅式来挂载根⽬录,也就是⼀开始只能读取到根⽬录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个⽬录必须同根⽬录在⼀个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第⼀个执⾏的程序;init这个程序会根据Run level来执⾏以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界⾯管理程序⼆、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电⾃检POST (Power on self test);2、BIOS会选择要由哪⼀个设备来开机,例如:软盘启动、光盘启动、⽹络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要⼯作1、Boot Loader可以安装在两个地⽅:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占⽤就可以将Boot Loader 安装在硬盘中的其中⼀个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第⼀阶段的程序码⾮常⼩,只有446bytes,可以存⼊在MBR或是某⼀个分区的引导扇区⾥,(2)Boot Loader第⼀阶段的程序码是从boot 分区来载⼊的,就是说Boot Loader 第⼆阶段程序码存放在/boot 这个分区中;3、下⾯来看三个Boot Loader 的开机流程范例,如在⼀块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载⼊MBR通过第⼀阶段程序码来载⼊第⼆阶段程序码,进⼊GRUB开机菜单这⾥选择哪个系统就会载⼊相应的核⼼;四、介绍GRUB和grub.conf 这个配置⽂件的内容其实从MBR载⼊Boot Loader开始,载⼊Kernel,载⼊init这些程序之间都是由GRUB这个多重开机管理程序所负责的。
计算机及Linux操作系统开机启动过程详解
计算机及Linux操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载BIOS并执⾏、从磁盘加载启动区并执⾏、从磁盘加载操作系统并执⾏三步,是依次递进的,详情参阅)加载BIOS:按下开机键,主板ROM的BIOS被(被谁?)加载到到内存0xffff0处,CPU 将 PC 寄存器的值强制初始化为 0xffff0(⼀跳)。
执⾏BIOS代码:阶段1(0xffff0 处的内容):该⼊⼝地址处存的是⼀个跳转指令,跳转的⽬的地是内存0xfe05b位置,该位置存了BIOS的真正内容。
执⾏该跳转(⼆跳)。
阶段2(0xfe05b 处的内容):执⾏硬件检测、硬件初始化、建⽴中断向量表等⼯作后,找到磁盘上的启动区(或称引导区)加载到内存0x7c00位置,并跳转到该位置(三跳)。
执⾏启动区代码(0x7c00 处的内容):从磁盘加载OS内核到内存,与上⾯不同这⾥内存位置不是固定的了,并跳转到OS内核代码处(四跳)。
执⾏OS内核代码:包括开启分段机制、进⼊保护模式、开启中断机制等,执⾏完后系统由OS接⼿管理。
具体过程见下⽂“操作系统启动过程”部分。
整体过程概要:补充:BIOS位于主板ROM,启动时被加载到内存;启动区、OS位于磁盘,被先后加载到内存。
BIOS、启动区在内存的位置是固定的(为啥是这三个值?早期定死的);⽽OS在内存位置不是固定的。
启动区:若⼀个磁盘上0盘0道1扇区的内容(512B)的末两个字节为0x55、0xaa,则这该扇区会被BIOS识别为启动区,该磁盘会被当做可启动盘。
往⼀个磁盘烧录OS后之所以可以当做启动盘就是因为往该位置写⼊了这些特殊数据。
若装了多系统,则启动时会列出并让⽤户选择要启动的系统,这些系统就是根据上述条件被识别得到。
可见,⼀个程序只要其虚拟内存以0x7c00作为段地址,且按上述条件烧录到磁盘,则就可以被BIOS识别为启动区加载到内存执⾏。
因此,如果该程序逻辑中不是去加载OS⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。
Linux操作系统启动流程图文详解
Linux操作系统启动流程图⽂详解理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进⽽解决问题。
上图为Linux操作系统启动流程1.加载BIOS计算机电源加电质检,⾸先加载基本输⼊输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即⽤(Plug-and-Play,PNP)特性等。
加载完BIOS信息,计算机将根据顺序进⾏启动。
2.读取MBR读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。
被复制到物理内存的内容是Boot Loader,然后进⾏引导。
3.GRUB引导GRUB启动引导器是计算机启动过程中运⾏的第⼀个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。
4.加载Kernel计算机读取内存映像,并进⾏解压缩操作,屏幕⼀般会输出“Uncompressing Linux”的提⽰,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。
5.设定Inittab运⾏等级内核加载完毕,会启动Linux操作系统第⼀个守护进程init,然后通过该进程读取/etc/inittab⽂件,/etc/inittab⽂件的作⽤是设定Linux的运⾏等级,Linux常见运⾏级别如下:•0:关机模式•1:单⽤户模式•2:⽆⽹络⽀持的多⽤户模式•3:字符界⾯多⽤户模式•4:保留,未使⽤模式•5:图像界⾯多⽤户模式•6:重新引导系统,重启模式6.加载rc.sysinit读取完运⾏级别,Linux系统执⾏的第⼀个⽤户层⽂件/etc/rc.d/rc.sysinit,该⽂件功能包括:设定PATH运⾏变量、设定⽹络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。
简要分析linux系统的启动过程
简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。
2)读取MBR,进⾏MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。
7)启动内核模块,执⾏不同级别的脚本程序。
8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。
linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。
下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。
[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。
CentOS系列--linux启动顺序
系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。
内核被加载到内存中之后,就开始执行了。
一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。
从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。
内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。
系统首先启动init进程,该进程先会执行/etc/rc.d/rc.sysinit,然后去读/etc/inittab文件决定运行模式,根据默认运行模式读取/etc/rc.d/rc $RUNLEVEL文件夹下的执行程序连接,这些文件以K或S开头,它们都是指向init.d/的一些软连接。
Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。
init进程上来首先做的事是去读取/etc/目录下inittab文件中initdefault id值,这个值称为运行级别(run-level)。
它决定了系统启动之后运行于什么级别。
运行级别决定了系统启动的绝大部分行为和目的。
这个级别从0到6 ,具有不同的功能。
不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有NFS# 3 - 完全多用户模式(标准的运行级)# 4 –系统保留的# 5 - X11 (x window)# 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启)rc.d的内容如下:init.d/ :各种服务器和程序的二进制文件存放目录。
rc $RUNLEVEL.d/: 各个启动级别的执行程序连接目录。
里头的东西都是指向init.d/的一些软连接。
具体的后边叙述。
还有三个脚本:rc.sysinit, rc, rc.local如图:redhat的启动方式和执行次序是:加载内核执行init程序/etc/rc.d/rc.sysinit # 由init执行的第一个脚本/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式/etc/rc.d/rc.local/sbin/mingetty # 等待用户登录在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:调入keymap以及系统字体启动swapping设置主机名设置NIS域名检查(fsck)并mount文件系统打开quota装载声卡模块设置系统时钟等等。
linux启动流程
centos6启动流程•硬件启动阶段o Power on打开电源o BIOS▪POST: power on self test开机自检•初始化硬件设备,检测系统外围主要设备:cpu,memory,硬盘、显卡等▪确定启动设备•启动设备:硬盘、网络、U盘、光盘•如果启动设备是硬盘,则读取硬盘第一个扇区MBR,512字节•控制权交给bootloadero MBR▪MBR512字节• 1.446字节bootloadero启动加载器bootloader▪windows: ntloader仅仅启动os▪GRUB: GRand Unified Bootloader,CentOS 6 GRUB 0.97: GRUBLegacy, CentOS 7 以后使用GRUB 2.02• 2.64字节分区信息o16字节x4 partitions• 3.55aa标志位表示分区是否有效•grub启动阶段o stage1▪ 1.446字节bootloader•这是二进制的0101,写在MBR扇区的前446字节。
o单纯为了找到1.5阶段生成的bootloader上o stage1.5▪第一阶段446字节的bootloader无法存放内核位置,/boot/grub/grub.config里面有内核位置,但是/boot的文件系统需要加载,即想办法识别/boot的文件系统来读取config文件加载内核。
MBRbootloader太小无法容下文件系统的驱动代码,而且文件系统的类型有很多种,比如ext2 xfsext4 fat32等,MBRbootloader无法容下这么多种文件系统的驱动,所以,只能提供一个中间的过度bootloader即stage1_5 bootloader▪ 1.5阶段是MBR后面的分区,grub-install 时候,会将/boot/grub所在文件系统类型对应的stage1_5硬编码到MBR扇区后第一个分区前15个扇区中,因此这段空间位于MBR分区后,第一个分区之前。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑一打开电源时电脑就会进入BIOS(BIOS的工作主要是检测一些硬件设备);2、检测完后会进入MBR也就是boot loader(MBR位于硬盘的第一个扇区总共512bytes,其中前446bytes里面的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载入系统的Kernel(核心),在Kernel里主要是载入电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读方式来挂载根目录,也就是一开始只能读取到根目录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个目录必须同根目录在一个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第一个执行的程序;init这个程序会根据Run level来执行以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界面管理程序二、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电自检POST (Power on self test);2、BIOS会选择要由哪一个设备来开机,例如:软盘启动、光盘启动、网络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要工作1、Boot Loader可以安装在两个地方:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占用就可以将Boot Loader 安装在硬盘中的其中一个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第一阶段的程序码非常小,只有446bytes,可以存入在MBR或是某一个分区的引导扇区里,(2)Boot Loader第一阶段的程序码是从boot 分区来载入的,就是说Boot Loader 第二阶段程序码存放在/boot 这个分区中;3、下面来看三个Boot Loader 的开机流程范例,如在一块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载入MBR通过第一阶段程序码来载入第二阶段程序码,进入GRUB开机菜单这里选择哪个系统就会载入相应的核心;四、介绍GRUB和grub.conf 这个配置文件的内容其实从MBR载入Boot Loader开始,载入Kernel,载入init这些程序之间都是由GRUB这个多重开机管理程序所负责的。
1、GRUB (GR and U nified B ootloader)拥有以下特性:· GRUB的开机管理程序可以在开机提示字元的界面下输入指令;例如在GRUB界面下可以按C键就会来到以grub> 开头的提示符来输入据指令;· GRUB的开机管理程序可以支持以下几种文件系统:ext2/ext3、ReiserFS、JFS、FAT、minix、FFS 等等;·支持MD5的密码来保护GRUB的配置文件;2、/boot/grub/grub.conf这个配置文件是GRUB 的配置文件,在做修改前推荐先做好备份下面来介绍这个配置文件的内容以及里面的语法:·以#开头的行为注解执行时不会使用;·可以以title开头的一行为准,分为上下两部分:(1)基本设定:(2)用于区分多个系统的设定,如果这台主机中还安装了其它系统并设定了多重启动,在这里还可以看到其它系统的设定;4、另外,如果硬盘上的MBR被清除掉了,可使用下面的指令来重新安装boot loader 到MBR中:/sbin/grub-install /dev/hda5、介绍进入GRUB的开机管理程式可以做哪些动作(开机前改Kernel的参数)(1)开机后在进入GRUB界面后,先选择要使用的系统(这里选择Linux)(2)按下a键,可以在开机修改Kernel的参数,也就是可以传一个参数给Kernel;这时可以看到下面这个界面(3)上图中root=LABEL=/ 这部分不可以动,将后面的都去掉后,先输入一个空格再输入一个1,如下图:这个1 就是附加的一个参数,表示要进入单用户模式,不需要输入root密码就可以以root身份登录;(4)当进入到#提示字元时,就可以设定root 密码了。
这时会发现一个问题任何人到主机前都可以通过这种方式修改ROOT密码是很不安全的。
6、为GRUB进入单用户模式设定密码及加密方法:在GRUB的设定档中设定密码,以防止非法者以单用户模式进入。
(1)编辑grub.conf配置文件,在基本设定的部分里,插入一行password 123456来设定密码,这里是将密码设定为123456 。
(2)当重新开机后,在GRUB的菜单中,需要输入P ,再输入密码才可以进行下一步,选择其它的模式。
(3)可以发现上面设定的密码是明文的,在GRUB中是可以对这个密码进行加密的,如下图:注:grub-md5-crypt这个指令在设定一个加密的密码的时候,就算每次输入的密码相同经加密后也是不同的,所以上面的几组密码都不一样,grub-md5-crypt >> /boot/grub/grub.conf 这行指令在执行后不会你上面那样会提示出输入两次密码,虽然没有提示但还是可以输入的,每输入一次密码按一次回车,等设定好密码后,再打开grub.conf文件时,就会发现经过加密的密码就追加到了grub.conf 文件中去了,将追加文件中的前二行去掉,第三行就是要使用的密码了,然后就像上图中那样进行设定,等上面的设定好后,一定要删除掉最后三行的内容,不然会出错的。
password –-md5 这里面的md5 表示后面使用的密码是经过md5加密的。
7、在进入系统前,按E键进入命令编辑模式,来修改引导配置文件在GRUB菜单选择时,按"e"键,就可以看到所对应系统的三行grub.conf中的配置参数,选择有错误的一行,再按"e"键,可修改这一行:如下图:选择了第二行,按E键,就可以修改这行内容了,这里只是未了举例子,将正常启动的一行改为了要使用单用户模式启动,修改完成后按回车,返回上一界面,再按"b"键,使用编辑后的设定开机。
五、介绍Kernel初始化时所做的工作Kernel在开机时,有以下四项工作:1、检测电脑上的硬件设备;2、将检测到的硬件驱动程序载入Kernel;3、如果必要的驱动载入后Kernel 将根目录以只读方式挂载进来;4、Kernel载入第一个程序init 这个程序;六、介绍init 这个程序在初始化时做了哪些工作init 程序读取的是/etc/inittab 这个配置文件来决定要做哪些操作1、决定预设要使用哪个Run Level 下面介绍几个常用的(Run Level 将在下节做详细介绍)Run Level 可以从0 到6 分为7种· run level 1 :单用户模式,主要用来维护系统,这在前面已经使用过了;· run level 3 :会启用完整的服务但登录后进入文字模式;· run level 5 :启用完整的服务登录后进入图形界面模式;注:在inittab 的配置文件里id:5:initdefault: 这项initdefault 的前面设定为5 表示预设会用run level 5,也就是默认启用完整服务并进入图形界面模式。
2、init 会执行初始作业系统的程序3、init会根据执行的run level 来执行run level 对应目录里面的程序,如果inittab 配置文件里预设的run level 是5,那么就会把5的参数传给/etc/rc.d/rc 这个程序执行,在/etc/rc.d目录下就可以看到rc0.d 至rc6.d 七个目录run level 所对应的目录,所以init 程序会根据执行的run level 来执行run level 对应目录里面的程序,来决定要启用哪些服务。
4、设某个组合键,如下图:定义快捷键,按这三个组合键3秒后重启系统6、在定义UPS不断电系统,当电源发生问题时,以及电源恢复时都要执行哪些程序。
6、产生六个virtual consoles (虚拟控制台)(tty1~tty6)7、如果启动的是run level 5 ,初始化工作就会启动X11(图形界面)七、iniit初始化流程图以下小节将依据上面的流程图为准逐一介绍八、介绍Run Level (init初始化流程第一步)其中在Run Level 里除了0~6这七种外,还有S 和emergency 这两种· 1 :执行init程序后,会接着执行/etc/rc.sysinit程序来初始化系统,再执行/etc/rc1.d/目录下的所有程序;· S:执行init程序后,只会执行/etc/rc.sysinit 程序来初始化系统;· emergency:执行init程序后,只会执行/etc/rc.sysinit 程序中某些必要的程序,并不会全部执行;1、介绍一些Run level 的特性Run level 是使用init 这个指令来定义要使用哪个run level。
2、下面有三种方式可以选择要使用哪个Run level(1)在开机时,预设run level会设定在/etc/inittab 这个文件中,例如:initdefault 前面的值;(2)可以从boot loader 传一个参数给kernel (例如:在GRUB的引导菜单按“a”键,在开机前可以给kernel传一个参数以单用户模式登录系统)(3)在开机进入Linux 系统后,可以使用init 指令,再输入要进入哪个run level ;(例如:init 5 进入run level 5)3、使用runlevel 指令执行后,就可以在下面显示当前在哪个级别下;/sbin/runlevel九、介绍/etc/rc.d/rc.sysinit 这个程序主要做哪些工作(init初始化流程第二步)rc.sysinit 这个文件是一个脚本文件,主要是一些判断程序,还有一些设定变数的程式;rc.sysinit 这个文件的工作如下:1、启动udev ,也就是启用热插拔的设备,例如:USB,并且也会启动SELinux;2、会把kernel的参数设定在/etc/sysctl.conf配置文件里;这个配置文件下下单元详细说明;3、设定系统时间;4、载入keymaps 设定,keymap设定是在定义键盘,这样电脑开机时才能找到相对应的键盘设定;5、启用swap这个虚拟内存的分区;6、设定主机名称,主机名称设定在/etc/sysconfig/network 配置文件中的HOSTNAME= 项下;7、检查根目录有没有问题,并且重新挂载成为可读可写的状态;8、启用RAID磁盘阵列,以及LVM的设备;9、启用磁盘配额的功能,就是限制使用者最多可以使用多少硬盘空间;10、检查其它的文件系统,并且把它们挂载进来;11、最后会清除被修改过的locks及PID files,其实就是清除一些开机时的缓存文件,以及一些没有用的信息及文件;十、介绍/etc/rc.d/rc 这个程式的作用1、这个步骤就是根据载入的Run Level 来执行Run Level 对应目当里面的程序来决定要启用哪些服务,例如,如果Run level 的值是5,就会去执行/etc/rc.d/rc5.d/* 这个目录下的所有程序,来停用或启动这个运行级别下应该有的服务,如下图:就用rc5.d这个目录来作说明,可以看到这个目录下都是一些链接文件,所有的链接文件都链接到了../init.d/*这个目录下的某个执行文件,其实init.d和rc5.d后面的d是代表Daemon(【unix】新进程;端口监督[控]程序)的意思。