Linux是怎样启动的

今天早上在上操作系统课的时候,老师有提到计算机从按下开关键到最后由操作系统完全接管的整个过程。不过讲课毕竟是十分抽象的,因为之前自己也看过这方面的内容,但是老是记不住,所以今天晚上就花了点时间,把《鸟哥的Linux私房菜》的相关部分又看了一遍。下面就把核心流程给过一遍吧!

我们都知道,操作系统对计算机的管理起到了决定性的作用。可是,操作系统在关机状态下存在磁盘中的,而运行又是在内存中运行的。那么可以想象的是,在刚刚按下开机键时,内存中是不存在操作系统的。这时候一个非常自然的想法,就是要将硬盘中的操作系统加载到内存中。可此时又是谁来管理调度这一切的呢?

这里我们就不得不提到一个叫做BIOS(basic input output system)的东西了,翻译成中文就是基本输入输入系统。它其实是一段烧录到主板的ROM芯片上的一段程序。开机时首先读取的就是BIOS程序。然后BIOS程序还会加载一个叫CMOS的东西,用来取得主机的硬件配置。然后它还会进行自我检测。接下来就是最最关键的部分了。因为计算机最终肯定是由操作系统控制的,那么我们怎么找到操作系统呢?最后BIOS会找到第一个可启动的设备,一般是磁盘。然后读取该磁盘的第一个扇区中一个叫MBR(MasterBoot
Record)的东西,即主引导分区块。接下来我们就来谈谈这个MBR。

MBR其实就是硬盘的第一扇区上一个大小为446byte的磁盘空间。其中可以用来存放引导加载程序(Boot loader)。这里需要注意的是,我们都知道一块磁盘上面往往可以装多个操作系统,这时我们就要对磁盘进行分区,然后不同的分区里可以装不同的操作系统。而每个操作系统系统的Boot loader都是不一样的。所以通常在每个磁盘分区的开始也会有一个对应的引导扇区(Boot Sector)。因此为了满足多重引导的需求,MBR中的Boot loader往往提供如下三种功能:

1.提供菜单:让用户可以选择不同的开机选项

2.载入内核文件:即直接把该引导程序对应的操作系统内核加载

3.转交给其他loader:就是把控制权转交给其他分区的loader,然后加载相应的内核

到此为止,我们就能用boot loader来读取内核文件了。然后Linux就会将内核文件解压缩到内存中,然后利用内核的功能检测与测试周边设备。注意,虽然开始BIOS已经进行过一次硬件检测了,但是Linux内核不一定会使用。此时,内核才真正开始接管BIOS后的工作了。

最后,在内核进行完硬件检测和驱动的加载之后会主动调用/sbin/init生成传说中的1号进程  init 。而init通过一系列的配置文件对系统的主机名,网络设置,语系处理,文件系统格式以及其他的服务进行启动,最终完成对软件执行环境的构建。由于不同操作系统的配置文件差别较大,这里就不赘述了。总之,计算机从开机到由操作系统进行完全控制的过程基本上就是这样的啦。

参考书籍:《鸟哥的Linux私房菜》

时间: 2024-10-11 17:05:30

Linux是怎样启动的的相关文章

Linux系统的启动

Linux系统的启动:1.上电以后,BIOS(Basic Input Output System)加电自检,检测硬件设备,然后按照CMOS上的顺序依次搜索相关的可引导的硬件设备. 2.加载主引导程序:主引导程序主要是为了加载次引导程序到内存中运行. 3.加载次引导程序:加载次引导程序后,其在内存中跑起来,进而加载Linux的内核. 4.Linux内核映像:加载linux内核后,次引导程序便会依据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取linux内核映像

阿里云linux主机安装启动Jenkins

1.安装 网上查到的关于安装Jenkins的文章,都是需要先安装JDK和Tomcat,然后把war包丢进去运行.但是官方的介绍里面没有说要用Tomcat. 事实证明是不需要Tomcat的.而且Jenkins默认使用的也是8080端口,如果之前有启动默认配置的Tomcat,还需要先停掉. 我的服务器系统版本是CentOS 6.3,对应的说明是 Installing Jenkins on Red Hat Distributions 按照官方说明依次输入如下命令 #wget -O /etc/yum.r

跟踪分析Linux内核的启动过程

李亚健    <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验过程: 实验内容为使用gdb跟踪调试内核从start_kernel到init进程启动 1.根据实验指导按照过程,在实验楼环境下打开shell: cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 输入help指令: 2.使用gdb

(作业3)Linux内核的启动过程(从start_kernel到init进程启动)

作业题目: 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下: 题目自拟,内容围绕Linux内核的启动过程,即从start_kernel到init进程启动: 博客中需要使用实验截图 博客内容中需要仔细分析

linux&nbsp;下&nbsp;apache启动、停止、重启命令

原文:linux 下 apache启动.停止.重启命令 基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/usr/local/apache2/bin/apachectl start apaceh启动 apache停止命令 /usr/local/apache2/bin/apachectl stop   停止 apache重新启动命令: /usr/local/apache2/bin/apachectl res

Linux系统下启动MySQL报错:Neither host &#39;localhost.localdomain&#39; nor &#39;localhost&#39; could be looked up with

Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Linux系统下安装完MySQL,启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with... Linux系统下装完MySQL,然后重启动时报错: 解决方法:  查看cat /etc/h

Linux系统无法启动故障解决方案

Linux系统无法启动故障解决方案 2011-09-27 09:42 佚名 比特网 我要评论(0) 字号:T | T 不管你多么喜爱你的Linux系统机器,有时候你都必须恢复你的系统.是的,即使一台Linux系统机器也可能遭受系统崩溃:不管是由于视频配置错误.内核更新出错.或是由于init脚本配置错误,这种情况都是必然的. AD:2014WOT全球软件技术峰会北京站 课程视频发布 当你的心爱的linux系统出现故障的时候,你是如何来解决的呢?没有操作系统能够确保100%可靠.终有一天,即使Lin

Linux系统开机启动时的工作原理

Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了.在BIOS将系统的控制权交给硬盘第一个扇区之后,就开始由Linux来控制系统了. 启动第二步--读取MB

Linux内核分析之跟踪分析Linux内核的启动过程

一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 内核启动进入 menu 程序.下面是用 gbd 来跟踪内核的启动过程: gdb (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表 (gdb)target remote:1234 # 建立gdb和gdbserver之间的

Linux系统下启动MySQL报错:Neither host &amp;#39;localhost.localdomain&amp;#39; nor &amp;#39;localhost&amp;#39; could be looked up with

Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Linux系统下安装完MySQL,启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with... Linux系统下装完MySQL,然后重新启动动时报错: 解决方法:  查看cat /etc