学习操作系统原理最好的方法是自己写一个简单的操作系统。


按一下电脑上的电源按钮,电脑就启动了,不一会儿电脑屏幕上就出现了登录界面或直接进入了桌面。

这是一个很日常的场景,但有时候会有个疑问:电脑内部是如何启动的?本讲我们就简单的介绍一下。

因为本教程属于入门型,不考虑UEFI等比较新的技术。

电脑的启动过程在细节上是比较复杂的,但在大的过程上分为以下几个:

上电->BIOS->MBR(boot)->loader->kernel->交互界面(图形/命令行)

上面是一个比较经典的电脑启动过程,可以看到电脑启动过程类似接力赛,下面介绍一下接力赛的每一棒。

1. 上电

上电就是我们按了一下电脑上的电源按钮。上电后CPU会初始化,程序寄存器会指向一个固定的起始位置0xFFFF0。这个地址是BIOS程序的入口地址,CPU执行的第一条程序就从这里开始。

2. BIOS

Basic Input Output System 简称BIOS,中文译为基本输入输出系统。BIOS可以理解为一个微型操作系统,但它的功能很有限。它的主要作用是上电自检,然后加载并执行MBR里的程序。

BIOS程序存储在主板上的一块芯片里,CPU可以像访问内存条那样通过地址访问BIOS程序。但这块芯片在断电后不会丢失信息,对比内存断电后内存信息就全清零了。

BIOS上电自检主要是对电脑硬件进行检测和初始化,如果硬件有比较严重的问题,比如没发现内存条,BIOS会给出提示,并停止后续的操作。

BIOS自检完,如果硬件没有大的问题,就会去寻找启动项的MBR。这里说的启动项主要指硬盘、优盘、光盘、软盘等这些设备。安装过操作系统的朋友应该知道,在BIOS设置里有个启动项列表,可以调整启动项的顺序,在安装操作系统时我们可能会对这里进行设置。BIOS此时会根据这个启动项列表顺序读取第一个启动项的第一个扇区到内存地址0x7C00处。每个扇区有512个字节,BIOS程序会检查这512个字节中最后2个字节是否是0x55和0xAA。如果是说明这就是合法的MBR,并通过跳转指令跳转到0x7C00处执行程序。如果不是则读取下一个启动项的第一个扇区到内存地址0x7C00处,重复上面的过程。如果最后没有发现一个合法的MBR,BIOS会给出提示,并停止程序。

3. MBR

Master Boot Record 简称MBR,中文译为主引导记录,也就是启动项的第一个扇区。但并不是说启动项的第一个扇区就一定是MBR。只有启动项第一个扇区的最后2个字节是0x55和0xAA,该扇区才是MBR,该启动项才是合法的启动项。

需要注意的是一般硬盘的MBR中有分区表,而GrapeOS没有,因为GrapeOS使用的虚拟硬盘只有4MB,没必要分区。

BIOS中的程序一般在电脑出厂前就内置好了,从MBR开始及其之后的程序就该我们写了。

MBR里写的程序我们这里叫boot。因为MBR只有512个字节,boot功能有限,它主要就做一件事,就是加载并运行loader。

4. loader

loader的主要作用就是先做一些初始化工作,然后加载并运行kernel。

5. kernel

kernel是操作系统的内核,也是操作系统中最重要的部分。内核运行后会先做一些初始化工作,然后打开交互界面。

6. 交互界面

交互界面平时常见的是图形模式,但也有命令行模式,比如本教程开发环境中用的没有桌面的CentOS。

至此电脑启动完毕,用户可以用了。


如果需要可以观看本讲的视频版:https://www.bilibili.com/video/BV1UA411B7j3/

GrapeOS操作系统交流QQ群:643474045

自己动手从零写桌面操作系统GrapeOS系列教程——6.电脑启动过程介绍的更多相关文章

  1. 我是如何学习写一个操作系统(二):操作系统的启动之Bootloader

    前言 今天本来的任务看书和把之前写的FragileOS整理一下,但是到现在还在摸鱼,书也只看一点.后来整理了一下写这个系列的思路,原本的目的是对操作系统原理性的学习和对之前写的一个玩具型操作系统的回顾 ...

  2. 树莓派开发系列教程2--树莓派3B介绍及系统烧写、基本配置

    注意:树莓派系列的3篇文章里面的图片因为博客转移过程丢失了,非常抱歉 前言 树莓派系列里涉及到需要额外电脑来协助处理的部分(如烧写系统,远程访问等等),统一在运行着Ubuntu15系统的mac air ...

  3. 别人写的一个Bootstrap系列教程

    http://www.cnblogs.com/lansy/category/659061.html

  4. 一个人写的操作系统 - Sparrow OS

    一个人写的操作系统 - Sparrow OS 自己写一个操作系统,这是在过去的几年里我一直为之努力的目标,现在终于完成了. 缘起 自己动手写操作系统的动机最初来自于学习Linux遇到的困难. 我是一个 ...

  5. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

  6. 【操作系统】关于Linux桌面操作系统

    以前是Win+Ubuntu+黑苹果,周末想体验一下deepin,于是简单安装了一下,安装过程很简单,这里不再描述.安装之后,第一次打开系统,确实很惊艳,赏心悦目的操作系统. 之前用Ubuntu时候,C ...

  7. 盘点|2021年最受欢迎Linux桌面操作系统前十名

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 阿里云开源镜像站利用云服务上的优势,提供快速.稳定的镜像分发服务.和免费的CDN加速服务.更新频率高,基本上一天一更新,对于Centos/Ubun ...

  8. 手把手教你从零写一个简单的 VUE

    本系列是一个教程,下面贴下目录~1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 今天给大家带来的是实现一个简单的类似 VUE 一样的前端框架,VUE 框架现在应 ...

  9. 《一步一步写嵌入式操作系统》读书笔记1—Skyeye介绍、安装和HelloWorld

    2013-11-14 最近在看<一步一步写嵌入式操作系统>,感觉此书甚好,许多地方讲得很清楚.可操作性强,计划边读边实践边写笔记,希望能够逐步熟悉嵌入式操作系统底层的东西,最终剪裁出一套实 ...

  10. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)

    我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...

随机推荐

  1. 链接脚本中 AT> 的作用

    缘由 这两天在梳理芯片的启动流程, 研究到了链接脚本(样本为stm32cube ide 中的 stm32f407 的 flash 链接脚本). 产生了一个疑问AT>是什么? 答案 AT>就 ...

  2. 三步快速搭建Typora图床(SM.MS+PicGo)

    三步快速搭建Typora图床(基于SM.MS+PicGo) 前言 在有些同学使用Typora的过程中,会发现Typora不像Word一样,在文档脱离本机后依然正常显示图片,自己的tyopora文件在发 ...

  3. 一次SQL调优 聊一聊 SQLSERVER 数据页

    一:背景 1.讲故事 最近给一位朋友做 SQL 慢语句 优化,花了些时间调优,遗憾的是 SQLSERVER 非源码公开,玩起来不是那么顺利,不过从这次经历中我觉得明年的一个重大任务就是好好研究一下它, ...

  4. [Untiy]贪吃蛇大作战(二)——规则界面

    游戏规则界面: 从界面上可以看出,一共有三个按钮,两个切换按钮和一个退出按钮. 一共三张规则图片Sprite,我们通过设置其是否为Active来控制显示,其控制脚本代码如下: using System ...

  5. STM32 的学习方法

    前言 学习知识要掌握有效的学习方法,学习技术也是一样,本篇分享关于我学习 STM32 后总结的学习方法. 推荐的学习方法 系统学习 在网上购买一款开发板,使用开发板+开发板配套视频教程+开发板配套源码 ...

  6. 音频编辑服务UI SDK接入指导及常见问题

    华为 HMS Core 音频编辑服务(Audio Editor Kit)是华为帮助全球开发者快速构建各类应用音频能力的服务,汇聚了华为在音乐.语音等相关音频领域的先进技术.音频编辑服务为开发者们提供音 ...

  7. win32com操作word API精讲 第十集 Paragraphs & Paragraph接口 (一)

    本课程<win32com操作word API精讲&项目实战>以视频为主,文字为辅,公众号ID:一灯编程 在word编程中,Range和Paragraph(s)接口无愧于劳模接口的称 ...

  8. 重写Object类的equals方法-Objects类的equals方法

    重写Object类的equals方法 Object类的equals方法默认比较的是两个对象的地址值,没有意义所以我们学要重写equals方法,比较两个对象的属性值(name,age) 对象的属性值一样 ...

  9. GF_CLR初始用 - 正式版

    参照:DeerGF_Wolong框架使用教程 与tackor老哥的踩坑日记所编写,第二次尝试,总结第一次经验重新来. 点击链接加入群聊[Gf_Wolong热更集合] 一. 部署 HybridCLR(W ...

  10. VS针对Linux远程调试步骤

    VS2019下对于远程Linux下C++代码的调试 VS2017后新增了对跨平台代码的编写,编译和调试的功能,2019后更是新增了多种插件,以下是针对C++版本的linux环境代码调试 准备工作 安装 ...