当前位置:网站首页>3.你知道计算机是如何启动的吗?
3.你知道计算机是如何启动的吗?
2020-11-09 01:10:00 【哈扣hakou】
上一期介绍的是计算机硬件,这期看一下将这些硬件组装在一起后它是如何启动的。
先来个引子:当我们按下电源键到屏幕显示出操作界面的过程中究竟发生了什么呢? 很多人可能会说这不就是启动了操作系统嘛。呵,这不是完整的过程。 如果不能大概描述它的启动过程,我觉得这篇文章是为你准备的。
在我们按下机箱上的电源键后,电源向主板进行供电,主板上的部件都处于 power on 的状态。接着初始化 BIOS 系统。BIOS 系统是一个位于主板的程序,它可以控制硬件以及硬件设置(例如是否开启虚拟化、磁盘设备启动顺序等)。
BIOS 系统一般会烧录在一个不会因为掉电而丢失数据的 ROM 里面,一般来说主板出厂自带 BIOS。
上图就是比较常见的 BIOS 界面,现在比较好的主板已经不是这种风格。我现在用的这台机子的 BIOS 系统类似于如下这种:
这种 BIOS 也被称为 UEFI BIOS,它与之前的 BIOS 最大区别是支持鼠标操作,画面比较友好。UEFI BIOS 是古老 BIOS 的继承与延伸,它们的关系类似于 Windows XP 与 Windows 7。古老的 BIOS 常见于笔记本以及年代比较久远的 PC。
BIOS 初始化后,CPU 即读取 BIOS 中的内容。在 X86 类型的 CPU 加电后,CPU 即会读取物理地址 0xFFFF0,而这个地址即对应着 BIOS 的区域。
BIOS 的工作相当简单,主要的工作就是执行主机自检(POST),然后查找操作系统存在在哪个磁盘上,将操作系统载入。BIOS 在查找各磁盘 的操作系统时,主要是查找磁盘上的第一个扇区(0面0磁道1扇区),每个扇区是 512 字节,如果这是一个引导扇区,那么就将它载入0x7C00 的内存地址上,然后跳转到此地址上执行。如果此不是一个引导扇区,就继续查找下一个磁盘,看其上面是否存在引导扇区。如果所有的磁盘上都不存在引导扇区,则在屏幕上 打印出一条出错信息。
引导扇区只有一扇区即 512 字节大,因此它的主要目的是把操作系统的内核读进内存,然后跳转到操作系统内核处开始执行。从编写操作系统角度来说,前面的 CPU 上电及 BIOS 的工作都不是操作系统能控制的,而从引导扇区开始,就完完全全可由操作系统来控制了,因此,编写引导扇区也是编写操作系统 必要的工作之一。从 BIOS 跳入引导扇区后,计算机系统引导工作就算完成,而怎样把操作系统内核读进内存然后再安排一条跳转指令跳到内核处执行就是操作系统开发人员的工作了。
所以,计算机的启动过程是:
- 按下电源键
- 主板加电,启动 BIOS
- BIOS 启动自检,并查找各个磁盘上的引导信息
- 执行引导扇区程序,启动操作系统
- 操作系统从 BIOS 接管计算机并启动
- 操作系统启动完成,计算机启动完成
ps.欢迎关注官方公众号"哈扣"。
版权声明
本文为[哈扣hakou]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4732490/blog/4708449
边栏推荐
- SaaS: another manifestation of platform commercialization capability
- 基于链表的有界阻塞队列 —— LinkedBlockingQueue
- 深度优先搜索和广度优先搜索
- Linked list
- 23 pictures, take you to the recommended system
- The vowels in the inverted string of leetcode
- Fiddler无法正常抓取谷歌等浏览器的请求_解决方案
- APP 莫名崩溃,开始以为是 Header 中 name 大小写的锅,最后发现原来是容器的错!
- 常见特征金字塔网络FPN及变体
- 如何将 PyTorch Lightning 模型部署到生产中
猜你喜欢
Dynamic relu: Microsoft's refreshing device may be the best relu improvement | ECCV 2020
android开发中提示:requires permission android.permission write_settings解决方法
Fiddler无法正常抓取谷歌等浏览器的请求_解决方案
教你如何 分析 Android ANR 问题
Tips in Android Development: requires permission android.permission write_ Settings solution
C/C++编程笔记:指针篇!从内存理解指针,让你完全搞懂指针
几行代码轻松实现跨系统传递 traceId,再也不用担心对不上日志了!
小议缓冲区溢出
C++之异常捕获和处理
Teacher Liang's small class
随机推荐
leetcode之反转字符串中的元音字母
Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
Combine theory with practice to understand CORS thoroughly
你有没有想过为什么交易和退款要拆开不同的表
简单介绍c#通过代码开启或关闭防火墙示例
Concurrent linked queue: a non blocking unbounded thread safe queue
Five phases of API life cycle
Factory pattern pattern pattern (simple factory, factory method, abstract factory pattern)
华为HCIA笔记
Python的特性与搭建环境
When iperf is installed under centos7, the solution of make: * no targets specified and no makefile found. Stop
SAP S/4HANA 2020安装实录
VIM Introduction Manual, (vs Code)
Bifrost 之 文件队列(一)
C + + adjacency matrix
AQS 都看完了,Condition 原理可不能少!
计算机网络 应用层
salesforce零基础学习(九十八)Salesforce Connect & External Object
服务器性能监控神器nmon使用介绍
Execution of SQL statement