当前位置: 首页 > 编程日记 > 正文

按下开机键,计算机背后的故事

计算机是如何启动的?

=================================

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。

我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...……

 

零、boot的含义

问:"启动"用英语怎么说?

答:boot。boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:

  "pull oneself up by one's bootstraps"

字面意思是"拽着鞋带把自己拉起来",这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!

早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做"拉鞋带",久而久之就简称为boot了。

 

计算机的整个启动过程分成四个阶段。

一、第一阶段:BIOS

上个世纪70年代初,"只读内存"(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。

这块芯片里的程序叫做"基本輸出輸入系統"(Basic Input/Output System),简称为BIOS。

1.1 硬件自检

BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST。

如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。

1.2 启动顺序

硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。

这时,BIOS需要知道,"下一阶段的启动程序"具体存放在哪一个设备。也就是说,BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做"启动顺序"(Boot Sequence)。

打开BIOS的操作界面,里面有一项就是"设定启动顺序"。

 

二、第二阶段:主引导记录

BIOS按照"启动顺序",把控制权转交给排在第一位的储存设备。

这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。

这最前面的512个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。

2.1 主引导记录的结构

"主引导记录"只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。

主引导记录由三个部分组成:

  (1) 第1-446字节:调用操作系统的机器码。

  (2) 第447-510字节:分区表(Partition table)。

  (3) 第511-512字节:主引导记录签名(0x55和0xAA)。

其中,第二部分"分区表"的作用,是将硬盘分成若干个区。

2.2 分区表

硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,"主引导记录"因此必须知道将控制权转交给哪个区。

分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做"主分区"。

每个主分区的16个字节,由6个部分组成:

  (1) 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。

  (2) 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。

  (3) 第5个字节:主分区类型。

  (4) 第6-8个字节:主分区最后一个扇区的物理位置。

  (5) 第9-12字节:该主分区第一个扇区的逻辑地址。

  (6) 第13-16字节:主分区的扇区总数。

最后的四个字节("主分区的扇区总数"),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。

如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB。如果想使用更大的硬盘,只有2个方法:一是提高每个扇区的字节数,二是增加扇区总数。

 

三、第三阶段:硬盘启动

这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况。

3.1 情况A:卷引导记录

四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做"卷引导记录"(Volume boot record,缩写为VBR)。

"卷引导记录"的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。

3.2 情况B:扩展分区和逻辑分区

随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成"扩展分区"(Extended partition)。

所谓"扩展分区",就是指这个区里面又分成多个区。这种分区里面的分区,就叫做"逻辑分区"(logical partition)。

计算机先读取扩展分区的第一个扇区,叫做"扩展引导记录"(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。

计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。

但是,似乎很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种方式启动。

3.3 情况C:启动管理器

在这种情况下,计算机读取"主引导记录"前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器"(boot loader),由用户选择启动哪一个操作系统。

Linux环境中,目前最流行的启动管理器是Grub。

 

四、第四阶段:操作系统

控制权转交给操作系统后,操作系统的内核首先被载入内存。

以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。

然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。

 

……至此,全部启动过程完成。

 

转载于:https://www.cnblogs.com/geaozhang/p/6632127.html

相关文章:

android 图片缓存

一、Picasso https://github.com/square/picasso Picasso是Square公司开源的一个Android平台上的图片加载框架,简单易用,一句话搞定项目中的图片加载,好用到令人发指。 使用一句话:Picasso.with(this).load("url").plac…

linux shell cgi post,linux下shell处理cgi的方法--post get

web server获取网页上HTML的DOM对象信息发送来的信息,主要有get和post方法。介绍原理的文章很多,但介绍实际应用到linux的shell中的文章很少。1、get方法①表单源码如下,有几个HTML对象作为传值对象。CGI TestText fieldRadio button123②cgi…

福建工程学院计算机科学类投档线,2019年福建工程学院美术类本科专业投档分数线...

福建工程学院2019年美术类本科专业录取情况省份科类专业计划最高分最低分平均分江苏艺术综合环境设计5247.2241.2244.6视觉传达设计3244.2240241.8数字媒体艺术3247.2244.2246产品设计3243.8238.6241.1安徽艺术综合环境设计5728.7724.9726.9视觉传达设计4729726.5727.3数字媒体…

如何对正在运行的进程,进行heap profile

简单来说, 就是先preload上tcmalloc, 日常用用没啥问题, 当感觉出现问题时, gdb attach 上, 然后执行 call HeapProfilerStart("xxx") , 过一段时间, 再执行call HeapProfilerStop, 产出相应的profile文件, 然后detach出进程 以下为一些未整理的 link https://gperft…

linux 命令窗口美化,美化你的命令行终端Terminal

yuezhang.su 于 2009-05-13 18:20:47发表:太好了yuezhang.su 于 2009-05-13 18:20:47发表:太好了yuezhang.su 于 2009-05-13 18:20:47发表:太好了yuezhang.su 于 2009-05-13 18:20:46发表:太好了yuezhang.su 于 2009-05-13 18:20:46发表:太好了yuezhang.su 于 2009-05-13 18:20…

mac 显示隐藏文件

打开终端,输入:defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件defaults write com.apple.finder AppleShowAllFiles -bool false 此命令关闭显示隐藏文件命令运行之后需要重新加载Finder:快捷…

Android修改包名

1.直接Refactor ---> rename 2.修改build.gradle ---> applicationId 为新包名 3.修改后要注意XML中自定义控件的全名是否也改变了 参考:android studio 改包名转载于:https://www.cnblogs.com/jarvisyin/p/6634392.html

学计算机的好处处300字,学计算机的心得体会300字

学计算机的心得体会300字我们从一些事情上得到感悟后,可以寻思将其写进心得体会中,这么做可以让我们不断思考不断进步。那么好的心得体会都具备一些什么特点呢?以下是小编精心整理的学计算机的心得体会300字,欢迎大家分享。学计算…

洛谷 3519 bzoj 2213 Difference

联考考试考到了这个题,随机化40分,现在来秒掉它吧。 题意: 给一个字符串,求其中的一段,使得出现次数最多的字符与出现次数最少的字符的出现次数之差最大。 输入输出样例 输入样例#1: 复制 10 aabbaaabab 输…

linux 文件管理 教程,Linux文件管理

Linux文件管理本文介绍如何在Linux上创建文件、删除文件、复制文件、移动文件使用touch命令在linux上创建文件使用rm命令在linux上删除文件使用cp命令在linux上复制拷贝文件mv命令在linux上移动或重命名文件##文件简介Linux中文件可以分为普通文件、目录文件、链接文件、设备文…

ios cocopods 安装使用及高级教程

CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm。随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的名字叫做:CocoaPods。http://co…

单片微型计算机概念及组成,中国民用航空飞行学院2014年微机原理与接口考研复习大纲...

中国民用航空飞行学院硕士研究生入学考试801《微机原理与接口》复习大纲第一部分 考试说明一、 考试性质《微机原理与接口》是中国民用航空飞行学院硕士生入学考试科目之一。它的评价标准是高等学校、科研院所的优秀本科毕业生能达到及格以上水平,以保证被录取者具…

【转】Jmeter常见问题

收集工作中JMeter遇到的各种问题1. JMeter的工作原理是什么?向服务器提交请求;从服务器取回请求返回的结果。2. JMeter的作用?JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ft…

linux的tar中ztvf,linux中的tar命令(2)

实例4:只将 /tar 内的 部分文件解压出来命令:tar -zxvf /opt/soft/test/log30.tar.gz log2013.log输出:[rootlocalhost test]# tar -zcvf log30.tar.gz log2012.log log2013.loglog2012.loglog2013.log[rootlocalhost test]# ls -al log30.ta…

xcode 消除警告

项目中引用大量的第三方代码时,这些代码很复杂,不要轻易去改动它,如果编译产生很多警告,该如何消除呢? 1. 最直接、最一劳永逸、最安全的方式,直接找到警告的那段代码,改为不警告。这个方式最安…

RoadMap

转载于:https://www.cnblogs.com/taogao3364/p/9616020.html

罗格斯大学电气与计算机工程专业怎么样,美国电子工程排名 - 电子计算机工程的研究生教育,特别是偏向电路设计方向,请问是美国罗格斯大学新布朗斯维克校区好还是清华...

美国电子工程排名 - 电子计算机工程的研究生教育,特别是偏向电路设计方向,请问是美国罗格斯大学新布朗斯维克校区好还是清华,1. 电子计算机工程的研究生教育,特别是偏向电路设计方向,请问是美国罗格斯大学新布朗斯维克…

Win10系列:VC++调用自定义组件1

通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应用中调用这个WinRT组件。 (1)JavaScript调用WinRT组件 在解决…

windows常用命令有哪些(整理)

windows常用命令有哪些(整理) 一、总结 一句话总结:其实这个好学,只要先弄懂主干,清除主干,那么枝叶的添加逻辑就很清除了 这种多内容的,散乱的,弄清除主干效率就高了 1、windows命令…

c语言定义字符类型变量的关键字,C语言数据类型

C语言关键字:也称保留字,是C语言预先定义的、具有特殊意义的单词。数据类型关键字(12个):(1)char:声明字符型变量或函数(2)double:声明双精度变量或函数(3)enum:声明枚举类型(4)float:声明浮点型…

mac tomcat https

一、HTTPS的基本工作原理: HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,…

计算机应用基础电子演示文稿系统行考作业,最新电大计算机应用基础形考PowerPoint答案...

.;.. 计算机应用基础/ ? 课程考核/ ? 模块4 PowerPoint 2010 电子演示文稿系统——客观题一.单项选择题1. 在PoewrPoint 中,“视图”这个名词表示( D )。A. 一张正在修改的幻灯片B. 一种图形C. 编辑演示文稿的方式D. 显示幻灯片的方式2. 在下列PowerPo…

数据结构(三) 用java实现七种排序算法。

很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现&a…

Codeforces ECR50 div2题解

A&#xff1a;签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long ll read() {ll x0,f1;char cgetchar();while (c<0||…

开发ios的语言

iOS发展这么多年了&#xff0c;很多第三方语言都向开发一种自己的iOS&#xff0c;于是多种跨平台诞生了&#xff01; Object-c、swift&#xff1a; 当然是开发iOS的首先&#xff0c;毕竟是苹果自己的东西&#xff0c;也是最流行、最适合开发ios的&#xff0c;无论是UI库、性能、…

c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

原标题&#xff1a;单片机C语言编程定时器的几种表达方式吴鉴鹰单片机开发板地址店铺&#xff1a;【吴鉴鹰的小铺】地址&#xff1a;【https://item.taobao.com/item.htm?_uukgdp5a7629&id524088004171】单片机C语言编程中&#xff0c;定时器的初值对于初学者真的是比较不…

上交2017计算机专业就业,上海交通大学计算机科学与工程系(CSE)

经过多轮的意向调整&#xff0c;最终确定的生产实习去向结果公示(请见附件)。原则上&#xff0c;经公示后结果不做调整。生产实习执行时间从7月24日到8月27日&#xff0c;请目前尚未就课题开展明细跟导师联系的同学在7月24日之前务必联系导师。一、实习报告要求1、从教务网站&a…

树上倍增求lca

嗯~ o(*&#xffe3;▽&#xffe3;*)o lca是树上两点的最近公共祖先。如果在同一个分支上就是更靠近根的那个点&#xff0c;否则就是大家一起向上走&#xff0c;第一次能都经过的那个点。 根据这两个性质&#xff0c;我们对于每次询问可以把一个向上走到根节点&#xff0c;标记…

ios app内嵌入http服务器

1.采用CocoaHTTPServer https://github.com/robbiehanson/CocoaHTTPServer 2.采用MongooseDaemon https://github.com/face/MongooseDaemon

编程模拟洗牌和发牌过程c语言,洗牌发牌模拟系统课程设计报告.doc

集美大学诚毅学院《高级语言程序设计》课程设计实验报告题目&#xff1a;洗牌和发牌模拟专业&#xff1a;计算机科学与技术班级&#xff1a;姓名&#xff1a;成绩&#xff1a;指导教师&#xff1a;完成日期&#xff1a;2008 年 6月 26 日一、目的C语言进行程设计的能力&#xf…