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

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

    转自:http://www.cnblogs.com/mytechblog/articles/1883961.html 1.Stop 所有服务 2.在控制面板中卸载所有与SQL Server 2005相 ...

  2. linux命令帮助

    Linux命令格式:command [options] [arguments]command:命令options: 参数 [] 表示是可选的;<> 表示是可变化的; x|y|z 表示只能选 ...

  3. 配置squid代理服务

    1. 简述一下squid的用途?squid可以做代理和缓存服务器,而做代理时,可以分为正向代理和反向代理.正向代理用在企业办公环境中,企业员工上网通过代理来上网,代理的缓存功能可以为企业节省宝贵的带宽 ...

  4. django: urlconfig

    django 的 url 配置主要在 urls.py 中进行 urlconfig 中对 url 的处理方式主要在: 一 视图处理方式 如 上文 例子所示: url(r'^blog/index/$', ...

  5. Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得

    http://www.crifan.com/intro_ios_simulator_in_xcode_and_usage_summary/

  6. C# winform DataTable 批量数据处理 增、删、改 .

    1.批量新增,采用高效的SqlBulkCopy SqlBulkCopy DTS = new System.Data.SqlClient.SqlBulkCopy(con); DTS.NotifyAfte ...

  7. SVN搭建本地版本控制仓库

    1.安装TortoiseSVN 2.新建一个文件夹,比如F:\SvnProjectsCfg 3.在F:\SvnProjectsCfg新建一个文件夹project1,右键该文件夹选择“create re ...

  8. uva 352 - The Seasonal War

    題意: 要確認畫面中有幾隻Eagles,每個pixel如果是'1'代表為一隻Eagles,但上下左右(包含斜角共8個方向)相連的'1'只能算是同一隻. 想法: 使用DFS找'1'有幾個區域. #inc ...

  9. mysql 5.7.9(GA) 安装

    mysql 5.7.9(GA) 终于发布了,感受一下. 一.下载 下载页面 http://dev.mysql.com/downloads/mysql/ 选择相应系统的版本下载. 本文OS为centos ...

  10. CSS实现三角形效果

    类似三角形的形状的元素在网页中可能会用到,我们可以用图片或者CSS元素达到我们想要的效果.这里讲一下是讲自己使用HTML+CSS实现三角形的方式. 为了能够熟悉的使用HTML+CSS构建三角形,我们首 ...