今天早上在上操作系统课的时候,老师有提到计算机从按下开关键到最后由操作系统全然接管的整个过程。

只是讲课毕竟是十分抽象的,由于之前自己也看过这方面的内容,可是老是记不住,所以今天晚上就花了点时间,把《鸟哥的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私房菜》

Linux是如何启动的的更多相关文章

  1. 探索 Linux 系统的启动过程

    引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...

  2. windows下制作linux U盘启动盘或者安装优盘(转)

    windows下制作linux U盘启动盘或者安装优盘(转) Linux发行版排行榜:http://iso.linuxquestions.org/ [方案一]:UltraISO(不推荐,在Window ...

  3. 腾讯云Linux系统中启动自己安装的tomcat

    腾讯云Linux系统中启动自己安装的tomcat 首先通过工具查看一下安装的tomcat的位置 进入命令行之后输入以下指令: 此时,tomcat已经启动了.

  4. [转] 浅谈Linux系统的启动流程

    原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...

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

    一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-/arch/x86/boot/bzImage -initrd rootfs.img ...

  6. 详解linux系统的启动过程及系统初始化

    一.linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: POST加电自检 -->BIOS(Boot Sequence)-->加载对应引导上的MBR(boot ...

  7. linux下如何启动/停止/重启mysql:

    一.启动方式1.使用linux命令service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start3.使用 safe_ ...

  8. 走进Linux之systemd启动过程

    Linux系统的启动方式有点复杂,而且总是有需要优化的地方.传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问 ...

  9. Linux系统快速启动方案

    =========================        基本常识       ========================= Linux系统基本启动流程: 1. CPU从ROM(如果有的 ...

  10. CentOS(四)--Linux系统的启动级别

    对于绝大多数Linux程序员来说,进入Linux系统后一般看到的是黑乎乎的界面(开发模式),因为系统如果启动选择开发模式,会减少启动时间,优化内存等.但是通常我们刚安装完Linux系统,然后进去以后是 ...

随机推荐

  1. HttpClient get返回String类型 JAVA

    public static String httpGet(String url) { // get请求返回结果 String strResult = ""; try { Defau ...

  2. Web应用程序项目XXXX已配置为使用IIS。无法访问IIS元数据库。您没有足够的特权访问计算机上的IIS网站

    问题:Windows8下直接使用VS打开项目,出现问题:XXXX已配置为使用IIS.无法访问IIS元数据库.您没有足够的特权访问计算机上的IIS网站.解决:1.以“管理员权限”运行VS,在VS菜单打开 ...

  3. (转)回车 执行button点击

    功能说明:当我们注册或者执行搜索时,输入内容后,不用单击按钮来执行按钮单击事件,而直接通过回车来执行按钮单击事件.只要在text框中onkeydown事件中加入执行按钮的onclick事件就OK了 代 ...

  4. Multipatch对象

    Multipatch对象是 TriangleStrip 和TriangleFan, Trangle,Ring对象的集合 TriangleStrip TriangleFan Trangle

  5. 关于看似简单的eclipse中tomcat小猫图标消失的问题解决

    首先,这个问题出现在我新安装的虚拟机中,自己准备重新搭一套开发环境用于学习. 所以,出于好奇,自己从官网上把eclipse的最新版neo下下来尝尝鲜,刚安装好后发现与之前用的旧版基本相同,于是把相应的 ...

  6. C#Dictionary 实例

    Dictionary<int, string> dc = new Dictionary<int, string>(); dc.Add(, "看了"); dc ...

  7. Oracle字符串分割函数

    今天在创建视图的时候,碰到一个问题,问题如下: 将字符格式为“XXX,YYY”分割出来,并且分割后作为两个字段放入视图中. 考虑使用字符分割函数,但是查找资料Oracle没有字符分割的函数(我对Ora ...

  8. 兼容IE的渐变

    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=, startColorstr=#1471da, endColorstr ...

  9. HTML5面试题-备

    万不可投机取巧.只求当时过关,非长久之计也!(感谢大神分享) 面试有几点需要注意: 面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑. 题目类型: 技术视野.项目细节.理论知 ...

  10. poj1704

    题目大意:n个石子,每次可以取一个石子向左移动,左边有边界限制,每个位置最多同时放一个石子,求先手必胜还是必败. 首先,我们将石子两两配对,每一对,若是先手可以将左边的向左移动一格,则可以用后手将右边 ...