一步步编写操作系统 10 cpu的实模式

cpu的实模式

由于mbr在实模式下工作……什么?什么是实模式?这时候有同学打断了我。我心想,这下好办了……哈哈,没有啦,开个玩笑而已。我们这里所说的实模式其实就是8086 cpu的工作环境、工作方式、工作状态,这是一整套的内容,并不是单指某一方面的设置。

实模式是指8086 cpu的寻址方式,寄存器大小,指令用法等,是用来反应cpu在该环境下如何工作的概念。所以想了解实模式这种抽象的概念,主要就是了解在实模式下cpu能做什么。

大家都学过汇编语言吧,里面有讲实模式、保护模式之类的,但鉴于太过久远,为了让后面的工作顺利进行,我觉得还是有必要给大家介绍下cpu的工作模式。

cpu的工作原理

在介绍cpu的各种模式之前 ,先占用大家几分钟的时间 ,说点在两种模式下公共的内容,和大家聊聊cpu的工作原理。当然这里所说工作原理可不像微机接口技术里那么细致,精确到逻辑门等电子电路。第一我也不会,想讲也讲不出来,吼吼^0^。第二我觉得没必要懂到那么细致,如果懂的太细了,会为之所累,您想,每次执行一条指令时,您的大脑总是联想到各种元件的工作流程,本来一瞬间完成的工作您可能要给放大一千倍,非得强迫症似的要求掌握每个步骤的细节,万一在哪个点上想不通了这就会让人感到很沮丧,影响心情,甚至质疑上层的编译器,哈哈,我知道说的有点严重了,不夸张一点的话不容易表述问题,好了,下面在宏观上介绍下cpu工作原理。

大家都知道,cpu的唯一的任务就是执行指令,在它眼里,指令就是一串010101…,那它执行每条指令的流程是怎样的呢。cpu大体上可以划分为3个部分,它们是控制单元、运算单元、存储单元。控制单元是cpu的控制中心,cpu需要经过它的帮忙才知道自己下一步要做什么。而控制单元大致是由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)、操作控制器OC(Operation Controller)组成。程序被加载到内存后,也就是指令这时都在内存中了,指令指针寄存器IP指向内存中下一条待执行指令的地址,控制单元根据IP寄存器的指向,将位于内存中的指令逐个装载到指令寄存器中,但它还是不知道这些指令是什么,在它眼里的0101串此时还没有实际意义。然后指令译码器将位于指令寄存器中的指令按照指令格式来解码,分析出操作码是什么,操作数在哪里之类的。下面给出了一般的指令格式:

 前缀 操作码 寻址方式、操作数类型 立即数 偏移量

看上去还是蛮复杂的,复杂的原因是必须用一种统一的格式去归纳所有形式的指令,因为cpu只能识别一种格式,万物的源头必须是最简单的,cpu也一样。这就好比要求用一句话表达出宇宙苍生,似乎看上去不可能?能,一定能,只要这句话足够长就行^_^。就像等待女朋友化妆一样,她怕你等烦了,于是就安慰你一句:“还有一首歌的时间就好了”,其实你明白,这首歌是《黄河大合唱》,一共8个乐章且唱呢……^5^。

由于cpu支持的指令数量较多,一些指令还可以搭配一些辅助的东东,所以就需要在前缀部分记录这些,如rep(用于重复执行,汇编中经常用)、段超越前缀。操作码就是大家平时用的mov、jmp等等。寻址方式又有好多,如基址寻址、变址寻址等等,操作数类型中记录的是用哪些寄存器之类的。如果在指令中用到了立即数,就要将其记录到指令格式中立即数部分,如果寻址方式中有到了偏移量,就要将此偏移量记录到指令格式中的偏移量部分。

既然指令是存放在指令寄存器中,那指令中用到的数据存放到哪里呢,下面介绍存储单元。

存储单元是指cpu内部的L1、L2缓存及寄存器,待处理的数据就存放在这些存储单元中,这里的数据是说指令中的操作数。为什么数据已经在内存中了还非得在cpu内部再整这么个存储单元干吗?原因是缓存基本上都是采用SRAM (Static RAM)存储器,从名字上看就知道它是一种具有静态存取功能的存储器。这么一说,似乎还有动态存储功能的存储器?是啊,其实我们插在主板上的物理内存就是DRAM(Dynamic Random Access Memory), DRAM内存需要每隔一段时间就去刷新电路,刷新就是指给DRAM充电,否则存储的数据就会丢失。而SRAM不需要刷新电路即能保存它内部存储的数据,这就是静态的含义,因此SRAM性能较强劲。但SRAM也不是完美无缺的,它的集成度较低,相同容量之下,SRAM的体积比DRAM要大很多。所以二级缓存都不大,目前来说顶多4兆左右,所以现代cpu用二级缓存的数量取胜,如L1、L2、L3共三级。寄存器可分为两大类,程序员可以使用的寄存器称为程序可见寄存器,如通用寄存器,段寄存器。程序不可见寄存器是指程序员不可使用,也无法访问到它们,系统运行期间可能要用到的寄存器,如ALU算术逻辑单元在求和时,会将结果先送到数据暂存寄存器。操作码有了,操作数有了,就差执行指令了,随后“操作控制器”给相关部件发信号,会给哪些部件发信号呢?如下面要介绍的运算单元。

运算单元是负责算术运算(加减乘除)和逻辑运算(比较、移位),它从控制单元那里接收命令(信号)并执行,它没有自主意识,只是个执行部件。它们之间的关系如图:

 

好啦,文字描述过了,图也看过了,总结下cpu的工作原理:控制单元要取下一条待运行的指令,该指令的地址是在程序计数器PC中,在x86cpu上,程序计数器就是cs:ip。于是读取ip寄存器后,将此地址送上地址总线,cpu根据此地址便得到了指令,并将其存入到指令寄存器IR中。这时候轮到指令译码器上场了,它根据指令格式检查指令寄存器中的指令,先确定操作码是什么,再检查操作数类型,若是在内存中,就将相应操作数从内存中取回放入自己的存储单元,若操作数是在寄存器中就直接用了,免了取操作数这一过程。操作码有了,操作数也齐了,操作控制器给运算单元下令,开工,于是运算单元便真正开始执行指令了。ip寄存器的值被加上当前指令的大小,于是ip又指向了下一条指令的地址。接着控制单元又要取下一条指令了,流程回到了本段开头,cpu便开始了日复一日的循环,由于cpu特别不容易坏,所以唯一它停下来的条件就是停电。

以上是cpu的工作原理,无论cpu在哪种模式下工作,这一核心原理是不变的。有了这一思想武装起来后再讲模式就简单多了,兄弟们加油,下一节,不见不散。

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

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

相关文章

Ubuntu系统中使用搜狗输入法

今天介绍如何在Ubuntu中使用搜狗输入法。(Ubuntu版本为16.04) 1)登陆搜狗官网选择对应系统的搜狗输入法:http://pinyin.sogou.com/linux。 2)打开下载目录,命令行输入以下命令: sudo dpkg -i …

2.1)深度学习笔记:深度学习的实践层面

目录 1)Train/Dev/Test sets 2)Bias/Variance 3)Regularization(重点) 4)Why regularization reduces overfitting(理解) 5)Dropout Regularization(重点…

一步步编写操作系统 12 代码段、数据段、栈和cpu寄存器的关系

先说下什么是寄存器。 寄存器是一种物理存储元件,只不过它是比一般的存储介质要快,能够跟上cpu的步伐,所以在cpu内部有好多这样的寄存器用来给cpu存取数据。 先简短说这一两句,暂时离开一下主题,咱们先看看相对熟悉一…

【2019牛客暑期多校训练营(第三场)- F】Planting Trees(单调队列,尺取)

题干: 链接:https://ac.nowcoder.com/acm/contest/883/F 来源:牛客网 The semester is finally over and the summer holiday is coming. However, as part of your universitys graduation requirement, you have to take part in some …

Apollo进阶课程⑯丨Apollo感知之旅——感知概貌

原文链接:进阶课程⑯丨Apollo感知之旅——感知概貌 上周阿波君为大家详细介绍了「进阶课程⑮| Apollo无人车自定位技术入门」。 我们人类天生就配备多种传感器,眼睛可以看到周围的环境,耳朵可以用来听,鼻子可以用来嗅,…

一步步编写操作系统 13 栈

栈到底是什么玩意 cpu中有栈段SS寄存器和栈指针SP寄存器,它们是用来指定当前使用的栈的物理地址。换句话说,要想让cpu运行,必须得有栈。栈是什么?干吗用的?本节将给大家一个交待。 还记得数据结构中的栈吗?那是逻辑…

【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)

题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNavacm 来源:牛客网 Given a maze with N rows and M columns, where bijb_{ij}bij​ represents the cell on the i-row, j-th column. If bi,j"1"b_{i, j} …

Apollo进阶课程⑰丨Apollo感知之旅——传感器选择和安装

目录 1.激光雷达 2.相机 3.Radar毫米波 4.安装传感器 原文链接:进阶课程⑰丨Apollo感知之旅——传感器选择和安装 上周阿波君为大家详细介绍了「进阶课程⑯ Apollo感知之旅——感知概况」。 传感器是一种检测装置,能感受到被测量的信息,…

2.2)深度学习笔记:优化算法

目录 1)Mini-batch gradient descent(重点) 2)Understanding mini-batch gradient descent 3)Exponentially weighted averages 4)Understanding exponetially weighted averages 5)Bias c…

Apollo进阶课程⑱丨Apollo感知之旅——传感器标定

目录 传感器标定 标定的目的 传感器标定算法 标定案例解析 3D标定间制作 Cmaera-to-Camera外参标定 Lidar-to-Camera外参标定 Lidar-to-Lidar外参标定 Lidar内参标定 Lidar-to-GPS外参标定 自然场景的Lidar-to-Camera外参标定 自然场景的Bifocal Camera外参标定 C…

一步步编写操作系统 15 CPU与外设通信——IO接口,下

既然都说到IO接口了,不知道各位有没有疑问,cpu是怎样访问到IO接口呢?肯定得有个链路吧?什么?有隐约听到有同学开玩笑说:cpu用无线访问其它设备。哈哈,不知道各位听说过没有,无线的终…

Telnet端口连接Linux服务器失败

在ubuntu写了个服务器端口号是666 ,ip地址是192.168.96.129 在windows用telnet无法连接上 首先检查windows telnet服务是否打开 Windows 10操作系统上使用telnet命令(图文)_时间-CSDN博客_windows使用telnet命令 测试网络是否通:…

重磅 | 完备的 AI 学习路线,最详细的资源整理!

本文转自微信公众号:Datawhale(强烈推荐) 原创: AIUnion Datawhale 今天 【导读】 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献…

Windows/Linux 下使用telnet发送消息

Windows下使用telnet 1.首先打开cmd命令行连接上服务器端口 连不上可以参考这篇 Telnet端口连接Linux服务器失败_m0_46480482的博客-CSDN博客 telnnt <ip地址> <端口号> 2. 连接成功后&#xff0c;会发现是一片黑的 按住 ctrl ] 可以招出提示 输入 &#x…

Apollo进阶课程⑲丨Apollo感知之旅——感知算法

目录 点云感知 启发式方法&#xff1a;NCut 深度学习方法&#xff1a;CNNSeg 视觉感知 CNN检测 CNN分割 后处理 红绿灯感知 基于深度学习的红绿灯感知模块 Radar感知 超声波感知 原文链接&#xff1a;进阶课程⑲丨Apollo感知之旅——感知算法 感知是自动驾驶的第一环…

动手学PaddlePaddle(0):新版本PaddlePaddle安装

目录 0.引言 1.环境 2.Windows下安装 安装Python 安装PaddlePaddle 0.引言 今天介绍如何安装新版本的PaddlePaddle&#xff0c;现在最新版的PaddlePaddle是指Fluid版&#xff0c;Fluid可以让用户像Pytorch和TensorFlow Eager Execution一样执行程序&#xff0c;也就是说P…

一步步编写操作系统 18 操作显卡,显存,显示器 下

接上回&#xff0c;大家看下显卡各种模式的内存分布。 各外部设备都是通过软件指令的形式与上层接口通信的&#xff0c;显卡&#xff08;显示适配器&#xff09;也不例外&#xff0c;所以它也有自己的bios。位置是0xC0000到0xC7FFF。显卡支持三种模式&#xff0c;文本模式、黑白…

VMware 安装VMware Tools

想要在linux和windows之间复制粘贴&#xff0c;把之前一直没有下的vmwaretools的下载过程记录一下。 1.左上角菜单 ->虚拟机 ->安装 vmware tools (我已经点过了所以是取消安装) 2.桌面多了一个VMware tools &#xff0c;点进去看一下位置&#xff0c;复制一下tar.gz的文…

Apollo进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来

目录 1机器学习 可解释性是否需要 其它算法 2感知的未来 Sensor迭代 深度学习仿真数据AI芯片 智能交通设施 3思考 原文链接&#xff1a;进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来 自动驾驶感知中的机器学习最大问题在于系统对模块的要求与普通的机器学习不同…

一步步编写操作系统 19 改进MBR,直接操作显卡

到目前为止&#xff0c;说了一部分有关显存的内容&#xff0c;这对于一般的输出来说已经足够了&#xff0c;下面咱们可以尝试写显存啦。我们将之前MBR改造一下&#xff0c;保留滚屏的操作&#xff0c;只修改有关输出的部分。即把通过bios的输出改为通过显存&#xff0c;你会发现…