欢迎来到天天文库
浏览记录
ID:41889074
大小:126.00 KB
页数:6页
时间:2019-09-04
《Linux系统启动的标准流程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、系统的启动是指从计算机加电到显示用户登陆提示的整个过程。我们将在这里对整个流程以及关系到的一些内容做讨论。过程主要可以分为两个阶段:载入内核和准备运行环境,我们分别进行讨论。木部分的讨论只基于i386硬件架构,但大部分内容是有共通性的。载入内核(将内核载入内存,并将控制权传递给它)计算机加电到BootLoader始工作,硬件含量远大于软件含量,所以这里暂不提及,如果实在有关心的朋友,请先别着急,我们将在下期里讨论它。这一阶段是BootLoader的主战场。它必须将可执行的内核映像和内核启动所需的额外数据信息从存储介质上载入内存,这并不是件简单的工
2、作,因为除了从硬盘载入,可能还会需要从网络引导服务器这样的外部介质上载入。各种纷繁芜杂的文件系统类型也给载入带来了巨大的挑战。BootLoader可能还需要改变CPU的运行特权级别,然后就可以让内核投入运行了。除此之外,BootLoader还要完成一些其它功能,比如从BIOS中获取系统信息,或者从启动时的命令行参数中提取信息等。有的BootLoader还要扮演引导选择工具的角色,方便用户选择不同的操作系统。BootLoader的职责:1判断到底要载入什么,这可以要求用户进行选择1载入内核和它可能需要用到的相关数据,比如initrd或者其它参数1为
3、内核准备好运行环境,比如,让CPU进入特权模式1让内核投入运行BootLoader的历史变迁:早期的Linux只支持软盘引导扇区和Shoelace两种BootLoadcroShoelace是从Minix继承下來的、文件系统相关的BootLoader。它只支持Minix文件系统。当时'Linux只使用Minix—种文件系统,所以这样做并没什么问题。可是,Minix文件系统存在不能保存创建、修改和访问时间信息;文件名长度限制在14个字节等问题。随着Linux的发展,这些与传统Unix文件系统大相径庭的缺陷越来越让人难以忍受,它已经不适合作为Linux
4、的主耍文件系统了。为了支持其它文件系统的实现,Linux引入了VFS(虚拟文件系统)。这个举措很快就引起了热烈的反响,一大批新的文件系统实现出现了。其中一个Minix文件系统的变体,扩展文件系统Xiafs(根据它的作者命名)突破了Minix文件系统的文件名长度限制,将此长度一举提高到全部30个字符。当时文件系统Z间的竞争着实激烈,很难看出谁会胜出,甚至搞不清楚会不会有一个最终的"赢家”。尽管不确定性很大,但是有一点却是清楚的:不管最后哪种文件系统会受到青睐,但是除了Minix作为根文件系统,谁也不能从硬盘上启动,因为Shoelace只支持Mini
5、x文件系统。LIL0应运而生了。由丁•支持多种文件系统(当时内核支持的主流文件系统已经有Minix,扩展文件系统ext,Xiafs。还有人在移植BSD的FFS,根本看不出来什么时候是个尽头)在实现和维护上难度太大,而BootLoader也不应该成为人们试验新的文件系统的绊脚石,所以LIL0采取了和文件系统无关的设计。这种设计经受住了吋间的考验,被证明是非常成功的。即使在今天,LILO仍旧可以从内核支持的绝大部分文件系统的硬盘上启动。但是,由于ext2历经了这么长的时间一直没有大的演变,成为了事实上的标准,所以跟文件系统相关的BootLoader又
6、渐渐流行了起来。尽管ext2已经能满足大部分人的口常需要,但是文件系统的设计者们还是在研制以日志机制为特征的新的文件系统,并且已经取得了相当大的进展。考虑到当前乂有可能出现多种文件系统的实现同时并存的情况,因此对与文件系统无关的BootLoader的需求可能会再次变得强劲。初始化基本的操作环境一旦内核开始运行,它会初始化内部的数据结构,检测硬件,并且激活相应的驱动程序,为应用软件的准备运行环境。期间包含一个重要操作一一应用软件的运行环境必须要有一个文件系统,所以内核必须首先装载root文件系统。由于我们的目的是介绍基本流程,所以相关的硬件初始化细
7、节就不再讨论,相关内容在下一期杂志中会有详细介绍。硬件初始化完成后,内核着手创建第一个进程一一初始进程。说是创建,其实也不尽然,该进程其实是整个硬件上电初始化过程的延续,只不过执行到这里,进程的逻辑已经完备,所以我们就按照进程的创建方式给它进行了“规格化”——我们把这个初始进程也叫做“硬件进程”,它会占据进程描述符表的第一个位置,所以可以用task[0][kl]或TNTT_TASK表示。该进程进而会再创建一个新进程去执行init()函数,其实,这个新进程才是系统第一个实际有用的进程,它会负责接着执行下一个阶段的初始化操作;而初始进程(INIT_T
8、ASK)自己则会开始执行idle循环,也就是说,内核初始化完成之后,初始进程唯一的任务就是在没有任何其它进程需要执行的时候,消耗空闲的C
此文档下载收益归作者所有