linux启动过程剖析,分析Linux系统的启动过程

导读

一直使用linux系统,却对系统启动过程及系统初始化和各种服务的启动不太清楚。今天终于搞明白整个是怎么一回事了。本来想自己写篇文章,刚好在网上看到一篇不错的介绍,很详细,就直接拿来了。

Linux系统的启动过程:

BIOS自检 —> grub引导程序 —> 加载内核 —> 执行init —> 启动shell —> login登陆系统

系统启动各个阶段的详细介绍:

一.BIOS自检

计算机在接通电源之后首先由BIOS进行POST自检,然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入引导块。Linux系统是人BIOS中的地址oxFFFF0处开始引导的。BIOS的第1个步骤是加电POST自检。POST的工作是对硬件进行检测。BIOS的第2个步骤是进行本地设备的枚举和初始化。BIOS由两部分组成:POST代码和运行时的服务。当POST完成之后,它被从内存中清理出来,但是BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务。

BIOS运行时会按照CMOS的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备甚至是USB闪存。通常,Linux系统都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区(0道0柱面1扇区)。当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。

如果要查看MBR的内容,用户需要以root用户的身份运行如下命令:

#dd if=http://www.3lian.com/dev/had of=mbr.bin bs=512 count=1

读入了1+0个块

输出了1+0个块

#od –xa mbr.bin

… …

它从/dev/had(第一个IDE盘)上读取前512个字节的内容,并将其写入mbr.bin文件中。od命令会以十六进制和ASCII码格式打印这个二进制文件的内容。

二.启动GRUB/LILO

GRUB和LILO都是引导加载程序。引导加载程序用于引导操作系统启动。当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(主引导记录)。在单一的MBR中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题,需要更灵活的引导加载程序。

所有引导加载程序都以类似的方式工作,满足共同的目的,但LILO和GRUB之间也有很多不同之处:

LILO没有交互式命令界面,而GRUB拥有;

LILO不支持网络引导,而GRUB支持;

LILO将可以引导操作系统的信息存储在MBR中。

如果修改了LILO配置文件,必须将LILO第一阶段引导加载程序重写到MBR。相对于GRUB,这是一个更为危险的选择,因为错误配置的MBR可能会让系统无法引导。使用GRUB时,如果配置文件配置错误,则只是默认转到GRUB命令行界面。

三.加载内核

接下来的步骤就是加载内核映像到内存中,内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个zImage(压缩映像,小于512KB)或是一个bzImage(较大的压缩映像,大于512KB),它是提前使用zlib压缩过的。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压缩,然后将其放入高端内存中。如果有初始RAM磁盘映像,系统就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。

四.执行init进程

init进程是系统所有进程的起点,内核在完成核内引导以后,即在本进程空间内加载init程序,它的进程呈是1。Init进程是所有进程的发起者和控制者。因为在任何基于Linux的系统中,它都是第一个运行的进程,所以init进程的编号(PID)永远是1。

init进程有以下两个作用。

init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。

init的第二个作用是在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。

五.通过/etc/inittab文件进行初始化

Init的工作是根据/etc/inittab来执行相应的脚本,进行系统初始化,如设置键盘、字体、装载模块,设置网络等。

1./etc/rc.d/rc.sysinit

在init的配置文件中有如下一行:

si::sysinit:/etc/rc.d/rc.sysinit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩展立方体 The Scale Cube

转自: https://akfpartners.com/growth-blog/scale-cube/ 比例立方体 2018年4月25日| 发布者:Robin McGlothin Scale Cube是用于定义微服务和扩展技术产品的模型。AKF Partners于2007年发明了Scale Cube,最初于2007年在我们的博客上在线发…

人脑动态功能网络连接模式能够鉴别个体并预测其认知功能

来源:神经科技概要:近二十年来,基于静息态功能磁共振影像的人脑连接组学快速发展,为无创研究活体人脑的功能组织规律和网络运作机制提供了重要手段,大大促进了研究者对脑认知、脑发育和脑疾病神经机制的理解。近日&…

linux中dhcp如何配置两个子网,linux – 配置DHCP服务器以在同一VLAN上为多个子网提供服务...

我有一个由多个子网组成的VLAN,我想使用DHCP集中IP地址指定.DHCP服务器(100.100.25.88)是子网100.100.25.64/27上的Debian计算机.我想为子网100.100.68.0/24中的计算机分配IP地址.最终目标是在100.100.68.0/24子网中的所有计算机上启用PXE引导.下面是我的dhcpd.conf文件,# DHCP…

JMS之企业消息传送

企业消息传送:消息是通过网络从一个系统异步传送给其他系统的。 客户端:使用消息传送API 的一个业务应用程序或组件(如:JMS) 集中式体系结构 分散式体系结构

linux看系统硬件,Linux 查看系统硬件信息(实例详解)

cpulscpu命令,查看的是cpu的统计信息.blueblue-pc:~$lscpuArchitecture:i686#cpu架构CPUop-mode(s):32-bit,64-bitByteOrder:LittleEndian#小尾序CPU(s):4#总共cpulscpu命令,,查看的是cpu的统计信息.blueblue-pc:~$ lscpuArchitecture:i686#c…

达沃斯群英纵论人工智能,核心观点汇总

来源:AI科技大本营概要:一年一度的世界经济论坛年会(达沃斯论坛)上,来自不同领域的精英纷纷发表了自己对于人工智能的看法。一年一度的世界经济论坛年会(达沃斯论坛)已经召开了3天,该…

Java消息服务思维导图笔记

https://www.processon.com/view/link/610b5f201efad40724bdfae2

window计算的chk在linux下可以读,Linux系统命令从入门到完全忘记(四)

系统安全相关命令chmod概要:用于改变文件或目录的访问权限,用它控制文件或目录的访问权限。语法格式:chmod [-cfvR] [–help] [–version] mode file参数:参数说明-c当发生改变时,报告处理信息-f错误信息不输出-R处理指…

如何设计一个安全对外的接口

来源:https://mp.weixin.qq.com/s/eDXsqyfIKDXii0DB6W0UcA

三大国有银行同时入股 AI 公司第四范式

来源:新华社概要:人工智能公司第四范式于1月26日宣布完成B+轮融资,并同时宣布获得来自中国工商银行、中国银行、中国建设银行三家国有银行及所属基金的联合战略投资。人工智能公司第四范式于1月26日宣布完成B+轮融资&a…

freedos能够编译c语言嘛,Freedos freedos核心源代码包含汇编和C语言代码 - 下载 - 搜珍网...

Freedos 内核源代码Freedos 内核源代码/KE2035AFreedos 内核源代码/KE2035A/BINFreedos 内核源代码/KE2035A/BIN/AUTOEXEC.BATFreedos 内核源代码/KE2035A/BIN/CONFIG.SYSFreedos 内核源代码/KE2035A/BIN/INSTALL.BATFreedos 内核源代码/KE2035A/BOOTFreedos 内核源代码/KE2035…

关于DataAccess Application block

这几天好好的看了一下MS的DataAccess Application block。也试着自己实现了一个。发现它在Parameter的缓存方面,储存过程确实做得不错,但是对于一般Sql语句(CommandType.Text)的查询来说,参数的缓存就显得比较麻烦。有…

Java中的时区转换

转载自 halfclear 原文:https://blog.csdn.net/halfclear/article/details/77573956 1.Date中保存的是什么 在java中,只要我们执行 Date date new Date(); 就可以得到当前时间。如: Date date new Date(); System.out.println(date);12 输…

从语言学到深度学习NLP,一文概述自然语言处理

来源:萤火虫沙龙2概要:自然语言处理(NLP)近来因为人类语言的计算表征和分析而获得越来越多的关注。自然语言处理(NLP)近来因为人类语言的计算表征和分析而获得越来越多的关注。它已经应用于许多如机器翻译、…

中国石油大学华东c语言答案全集,【2019年整理】中国石油大学华东C语言习题答案.pdf...

C 语言复习题【设计型】5.1 输出一行星号编写程序在一行中输出 N 个星号。输入&#xff1a; N 值输出&#xff1a; 一行中 N个星号#includeint main(){int a,i;scanf("%d",&a);for(i1;i<a;i)printf("*");printf("\n");return 0;}【设计型…

特老的文章:三层应该怎么划分。不知大家还有用否

可以用这样的思想&#xff1a; 最初的应用是单机&#xff0c;数据和功能都放在一台机器上。随着应用向工作组模式发展中&#xff0c;人们迫切需要 调用彼此的数据&#xff0c;也调用彼此的功能&#xff0c;这样人们就不用重复录入数据&#xff0c;程序员也不须重复写 功能。数据…

Guava RateLimiter限流原理解析

来源&#xff1a;https://zhuanlan.zhihu.com/p/60979444 限流是保护高并发系统的三把利器之一&#xff0c;另外两个是缓存和降级。限流在很多场景中用来限制并发和请求量&#xff0c;比如说秒杀抢购&#xff0c;保护自身系统和下游系统不被巨型流量冲垮等。 限流的目的是通过…

脑洞大开:未来二十年将兴起的88个微型产业

来源&#xff1a;资本实验室概要&#xff1a;目前&#xff0c;我们正在进入一个指数级技术变革的时代。这个时代既催生出前所未有的科技巨头&#xff0c;其实也催生了一个微型创新的新时代。目前&#xff0c;我们正在进入一个指数级技术变革的时代。这个时代既催生出前所未有的…

并查集算法c语言版,并查集及其C程序实现.doc

并查集及其C程序实现等价关系与等价类从数学上看&#xff0c;等价类是一个对象(或成员)的集合&#xff0c;在此集合中的所有对象应满足等价关系。若用符号"≡"表示集合上的等价关系&#xff0c;那么对于该集合中的任意对象x,y, z&#xff0c;下列性质成立&#xff1a…

Web 服务策略断言语言 (WS-PolicyAssertions)

原文&#xff1a;http://www.microsoft.com/china/msdn/library/webservices/webservices/WebServicesPolicyAssertionsLanguage(WS-PolicyAssertions).mspxWeb 服务策略断言语言 (WS-PolicyAssertions) 发布日期&#xff1a; 4/26/2004| 更新日期&#xff1a; 4/26/2004版本 1…