【OS学习笔记】三 计算机的启动过程

学习交流加

  • 个人qq:
    1126137994
  • 个人微信:
    liu1126137994
  • 学习交流资源分享qq群:
    962535112

上一篇文章迈进了汇编的大门,点击链接查看上一篇文章:汇编语言和汇编软件

上一篇文章大概学会以下内容:

  • 了解汇编语言的作用
  • 下载NASM编译器,并学会使用它来编译汇编语言源程序

至于更深层次的汇编原理,需要在以后的文章中逐步展现。

今天这篇文章主要记录以下学习内容:

  • 了解计算机的开机启动。只有这样,才能知道我们应该把编译好的程序放到哪里,才会被CPU执行。
  • 了解硬盘的构造和作用(简单了解)

文章目录

  • 1、计算机的启动过程
    • 1.1、如何将编译好的程序直接交给处理器执行
    • 1.2、计算机的加电复位
    • 1.3、BIOS-基本输入输出系统
    • 1.4、硬盘及其工作原理
    • 1.5、一切从主引导扇区开始
  • 总结

1、计算机的启动过程

1.1、如何将编译好的程序直接交给处理器执行

我们这一系列文章是学习X86汇编-从实模式到保护模式。目前我们还没有写过汇编程序。如果我们写好了一个汇编程序,使用特定的汇编编译软件来将汇编程序编译好,然后再使用特定的平台来运行这个程序即可。但是我们的目的不是这么简单。

我们的目的是学习操作系统与计算机系统之间的关系。那么我们如何执行我们写好的汇编代码呢?

每种编译器都有能力针对不同的操作系统将你的源程序编译为不同的(支持该操作系统平台的)二进制文件。然后运行这个二进制文件。然后不同的操作系统开发的软件也不一样,写的程序也不一样(在这里我们特指汇编语言),这样开发起来就很麻烦。

换个角度想一下,操作系统也是一个软件,它也是需要处理器对它取指令和执行指令的软件。只不过它比一般的软件更加复杂而已。如果我们能够绕过操作系统,让我们写的程序直接被处理器执行,而不需要操作系统的干预的话,或者让电脑一开机就执行我们自己写的程序,而不是加载你的操作系统的话,那么就可以实现让CPU直接过来执行我们的代码,这样看来更简单!!!

这个主意完全可行!!!但是我们还需要了解一些知识。比如计算机是如何启动后加载操作系统的。

1.2、计算机的加电复位

在众多处理器的引脚中有一个RESET引脚,用于接收复位信号。每当处理器加电或者复位,处理器都会执行一个硬件初始化,以及一个内部自测程序(BIST),然后将内部所有的寄存器的值初始化到一个预置的状态。

比如,针对8086处理器来说,复位将使代码段寄存器(CS)的内容初始化到0xFFFF,其他所有寄存器初始化为0x0000.

处理器天生的职责就是取指令与执行指令。当你加电或者复位后,处理器就兴奋了,马上就想去取指令。但是有一个问题,现在内存中,可是什么都没有呢。无法取指令啊。至于内存中为什么没有东西,这个大家应该很了解了,因为内存是掉电丢失的,关闭电源后内存中所有的运行的程序包括操作系统程序都会丢失。

那么既然内存什么都没有,处理器如何取指令和执行指令。

BIOS就此登场!!!

1.3、BIOS-基本输入输出系统

注意,我们现在还是停留在8086,如果有一些知识与你所知道的不一样,那肯定是因为你所知道的不是8086的,有可能是以后出现的IA-32等。

8086,具有20根地址线(可以阅读文章查看为什么是20根地址线:处理器、内存、指令),它的寻址范围是0x00000-0xFFFFF,可以寻址1M的内存空间。我们之前学过,我们的内存条(物理内存)就是映射到这1M的寻址空间,CPU才能在这1M的寻址空间中对内存进行寻址。

实际上,这20根地址线并没有全部用于内存寻址,只不过是大部分地址线用于内存,还有一部分地址线用于只读存储器ROM和外围设备
在这里插入图片描述

上图中上面的是ROM,下面的是内存条。外设的话放到以后讲解。

ROM是什么?ROM是只读存储器,它不管是在有电的是时候还是没电的时候,它存储的内容不会消失。它存储的内容是预先写好的,一般无法改变。这个特点很有用,比如,可以在上面预先写好一些程序指令。当处理器上电后,然后处理器先去这个ROM中取指令执行。这样就不会让处理器上电后在那干等着。

在8086中,ROM占据着处理器1M寻址空间的最顶端的64KB。物理地址的范围是0xF0000-0xFFFFF。这一段空间固化了开机时要执行的指令。

物理内存占据着处理器1M寻址空间的较低端的640KB。地址范围是0x00000-0x9FFFF。中间还有一部分地址空间是用于外围设备的。

由上一节的内容知,处理器加电或者复位后,CS寄存器被赋予初值0xFFFF,IP寄存器赋予初值0x0000。所以此时需要访问的物理地址为0xFFFF0。它正好位于ROM中。

在这个ROM中的这个位置,是一个跳转指令jmp。jmp指令通过修改CS与IP,使处理器从ROM的另一个位置开始取指令。

好了,此时处理器开始稳了,不再到处跳了,安安静静的从ROM的这个位置取指令执行指令。。。。。

那么这个ROM中存的是什么指令呢?为什么让CPU上来先执行这里的代码?

这个ROM中,主要进行硬件的检测,诊断和初始化。这里的检测和诊断很好理解。初始化的话,是让电脑出于一种可以显示屏幕,可以使用键盘等这样的基本功能。比如你重装系统的时候,会有界面供你选择如何一步步安装操作系统,甚至可以用鼠标键盘操作。这种基本的状态,就是由ROM中的代码初始化而来的。

正因为这种基本的状态,这个ROM芯片又叫做:BIOS(基本输入输出系统)ROM。我们这里不讲BIOS。

ROM-BIOS 的容量很小,它执行完后,就会让处理器去其他地方接着取指令执行。这个其他地方,就是主引导扇区,实际上这个主引导扇区,就是在硬盘的某一个位置。

那么现在问题就来了,在哪一个位置?处理器如何对它进行读写操作?

想要知道这个,就得先了解硬盘及其工作原理。

1.4、硬盘及其工作原理

如下图是一个拆开的硬盘:
在这里插入图片描述

为了搞清楚硬盘的构造,下图给出了一个更详细的图示:
在这里插入图片描述

硬盘可以有多个盘片或者一个盘片。他们串在一个轴上,由电机带着高速旋转。

每个盘片都有两个磁头,上面一个,下面一个。所以经常用磁头来指代盘面。磁头有编号,第一个盘片上,上面的磁头编号是0,下面的磁头编号是1;第二个盘片,上面的磁头编号是2,下面的磁头编号是3,以此类推。

磁头是由磁头臂固定在同一个支架上,由步进电机带着在盘片的中心和边缘移动。

可以想象,当盘片高速旋转时,磁头每步进一次,就会在盘面上形成一个圆,这个看不见的圆被称为磁道。磁道,是数据记录的轨迹。从上往下所有的磁道形成一个圆柱,称为柱面

磁道,或者柱面也要编号。编号是从最边缘的磁道开始编号,最边缘的是0号磁道,向里依次递增。

柱面是一个用来优化数据读写的概念。在硬盘上,数据的访问是以柱面来组织的。

实际上,磁道还可以进一步划分成扇区:磁道很窄,也看不见,单子啊想象中,它仍然呈带状,占有一定的宽度。将它划分许多段后,每一部分都呈扇形,这就是扇区的由来。其实扇区,才是最小的读写单位。

每个磁道能划分成几个扇区,取决于磁盘制造者,但通常为63个。每一个扇区也有一个编号,扇区的编号是从1号开始。

扇区与扇区之间是以间隙隔开。每个扇区以扇区头开始,然后是512字节的数据区。扇区头包含了每个扇区自己的信息,包括这个扇区所在的磁道号,磁头号,和扇区号。

1.5、一切从主引导扇区开始

讲了这么多硬盘的构造,实际上就是为了引出主引导扇区的概念

主引导扇区:硬盘的第一个扇区是0面0道1扇区,或者叫做0头0柱1扇区。这就是主引导扇区。也就是处理器执行完BIOS-ROM中的指令后,需要执行指令的地方。当然,是BIOS-ROM将主引导扇区的第一条指令加载到内存中,也就是内存地址:0x07C00(0x0000:0x7c00)。

实际上就是一条jmp指令:

jmp 0x0000:0x7c00

主引导扇区的功能是,继续从硬盘的其他地方读取更多的指令加以执行,比如最后肯定会加载操作系统!!!

现在终于可以回到最开始的问题。我们如果把我们写好的自己的汇编代码,放到主引导扇区的位置上,是不是就可以让处理器直接执行我们的代码了!!!

肯定是的!!!

但是有一个问题就是,我们不能在我们自己电脑上做实验,因为你将你的代码写到主引导扇区,那么以后你的电脑就瘫痪了,无法启动操作系统了!!!

不过,虚拟机是一个好家伙。我们可以在虚拟机上虚拟一个计算机出来,在上面做实验。下篇文章讲解虚拟机!!!

总结

今天学会一下内容:

  • 了解计算机的启动过程
  • 了解硬盘的构造与原理

今天就到这里,明天继续学习!

学习探讨加:
qq:1126137994
微信:liu1126137994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OS学习笔记】四 什么是虚拟机

虚拟机是软件 对于第一次听说虚拟机(Virtual Machine,VM)的人来说,可能以为还要再花钱买一台计算机,这恐怕是他们最担心的。所谓虚拟机,就是在你的计算机上再虚拟出另一台计算机来。这台虚拟出来的计算机&…

TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])

TCP的流量控制 1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 利用滑动窗口机制可以很方便地在TCP连接上实现…

英语词源记忆法

英语词源记忆法后续持续更新中

【OS学习笔记】五 VirtualBox的下载、安装和配置

上一篇文章学习了:计算机的启动过程(点击链接查看上一篇文章) 今天来接着上一篇文章,解决我们学习中的实验环境问题。 参考:X86汇编语言-从实模式到保护模式。作者李忠。纯学习笔记。如有侵权请联系我删除 1、下载O…

spring体系思维导图

spring体系思维导图1. spring 思维导图2. springboot 思维导图3. springcloud 思维导图之前整理的,后续持续更新中1. spring 思维导图 2. springboot 思维导图 3. springcloud 思维导图

idea模板

idea模板1.类注解模板2.方法注解模板3.自定义代码生成模板每次下载新版本的idea 或者换笔记本都需要重新,配置注解,而且从网上找了很多都或多或少有问题,每次要花费一些时间配置,这里整理一下。自定义代码生成模版,设置…

【OS学习笔记】六 实模式:编写主引导扇区代码

上一篇文章学习了:计算机的启动过程(点击链接查看上一篇文章) 这篇文章学习记录为:编写主引导扇区代码。 参考:《X86汇编语言-从实模式到保护模式》-李忠。纯学习笔记,更详细内容请阅读正版书籍。如有侵权…

【OS学习笔记】七 Bochs的下载、安装和配置

参考:《X86汇编语言-从实模式到保护模式》-李忠。纯学习笔记,更详细内容请阅读正版书籍。 1 开源的BOCHS虚拟机软件 Bochs是开源软件。它用软件来模拟处理器取指令和执行指令的过程,以及整个计算机硬件。当它开始运行时,就直接模…

【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章,我们用比较原始的方法编写了主引导扇区的代码。点击链接查看上一篇文章:编写主引导扇区代码 本片文章将学习以下内…

【OS学习笔记】九 实模式:从汇编的角度理解栈结构

上一篇文章以一种更加高效的方法编写了主引导扇区的代码。主要是引入了循环和跳转指令。点击链接查看上一篇文章:编写主引导扇区代码-另一种更高效的写法 本篇文章,继续上一篇文章的学习。同样还是编写汇编代码加载到主引导扇区让CPU直接执行。但是我们…

【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行

上一篇文章学习了以下内容: 用一种不同的分段方法,从另一个不同的的角度理解处理器的分段内存访问机制使用循环和条件转移指令来优化主引导扇区代码 点击链接查看上一篇文章:点击链接查看 对于主引导扇区部分。大概前几篇文章已经学的差不…

【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理

上一篇文章我们模拟操作系统的加载器程序,使用汇编语言实现了一个程序加载器:点击链接查看上一篇文章:程序加载器的实现原理 本篇文章,是实模式学习的结尾。在经过了那么多坎坷,终于学完了8086的实模式!&a…

配置节处理程序时出错,未能加载文件或程序集

安装sql server2008时,出现下面的错误: 按照上面的提示,查看那个路径下的文件,根据文件名判断可能是临时文件,于是首先将上面的文件剪切出来,然后安装,成功。 转载于:https://www.cnblogs.com/x…

【软件开发底层知识修炼】六 Binutils辅助工具之- addr2line与strip工具

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章我们学习了gcc编译器的相关内容。点击查看上一篇文章:gcc编译器。本篇文章接着上一篇文章,学习GNU为GCC提供的辅助开…

Eboot 中给nandflash分区实现

提到分区就不得不提到MBR,不得不提到分区表。 什么是MBR 硬盘的0柱面、0磁头、1扇区称为主引导扇区,NANDFLASH由BLOCK和Sector组成,所以NANDFLASH的第0 BLOCK,第1 Sector为主引导扇区,FDISK程序写到该扇区的内容称为主…

kmp匹配算法

kmp匹配算法1.第一种方式是暴利匹配方式2.第二种方式采用kmp 方式进行匹配3. 相应的代码1.第一种方式是暴利匹配方式 暴利匹配规则 模型: str1 位源字符串下标为i,str2位匹配字符串,下标为j 。 假设 str1 匹配到i , str2 匹配到j 则有 (1)当 …

【软件开发底层知识修炼】七 Binutils辅助工具之- ar工具与nm工具

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章学习addr2line与strip工具。点击链接查看上一篇文章:点击查看 本篇文章学习两个工具:ar与nm工具。 文章目录1、ar工…

【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具

上一篇文章学习了ar工具与nm工具,点击链接查看上一篇文章:点击链接 本片文章学习记录以下三个工具: objdumpsizestrings 1、objdump工具 用法: 反汇编目标文件,查看汇编到源码的映射(后面代码案例分析看具体区别&a…

【C++深度剖析教程39】实现C++数组类模板

上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析 本篇文章学习记录: 数值型模板参数实现C数组类模板 1、模板中的数值型参数 模板参数可以是数值型参数。也就是非类型参数。如下图所示&#xff1…