当前位置:网站首页>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
边栏推荐
- Have you ever thought about why the transaction and refund have to be split into different tables
- 23 pictures, take you to the recommended system
- AQS 都看完了,Condition 原理可不能少!
- VIM Introduction Manual, (vs Code)
- Copy on write collection -- copyonwritearraylist
- 数据库设计:范式与反范式
- A few lines of code can easily transfer traceid across systems, so you don't have to worry about losing the log!
- API部分的知识点复习
- 平台商业化能力的另一种表现形式SAAS
- AQS 都看完了,Condition 原理可不能少!
猜你喜欢
Leetcode-15: sum of three numbers
Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
Leetcode-11: container with the most water
C++之异常捕获和处理
Have you ever thought about why the transaction and refund have to be split into different tables
简单介绍c#通过代码开启或关闭防火墙示例
RabbitMQ快速入门详解
如何让脚本同时兼容Python2和Python3?
B. protocal has 7000eth assets in one week!
VIM 入门手册, (VS Code)
随机推荐
Combine theory with practice to understand CORS thoroughly
What are the basic requirements for big data posts?
当我们聊数据质量的时候,我们在聊些什么?
Linked blocking queue based on linked list
Pipedrive如何在每天部署50+次的情况下支持质量发布?
STC转STM32第一次开发
C++邻接矩阵
How to get started with rabbitmq
Execution of SQL statement
Get the first cover image of video through canvas
Share API on the web
服务器性能监控神器nmon使用介绍
教你如何 分析 Android ANR 问题
非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue
Octave basic syntax
文件拷贝的实现
When we talk about data quality, what are we talking about?
表连接
如何通过Sidecar自定义资源减少Istio代理资源消耗
Five phases of API life cycle