前言:

在这个补给站,我稍微简单介绍一下处理器中的一些架构(设计上的一些小trick),顺便再来讲讲保护模式到底保护了哪些东西


一,处理器微架构

①,流水线

流水线大家肯定经常听说过,富士康工厂经常就做这种事情,比如一个工人要砸钉子这一操作,我们可以把他看作流水线工作。


我们先将其分为两步:取钉子和砸钉子,执行每一步操作需要1s。如果按顺序工作

那么每砸一个钉子就是2s的时间。


  • 流水线与并行

但是我们把整个流程的两步分给不同的人去做,比如师傅A做砸钉子,师傅B负责取钉子,那么便会有下面的结果:

我们可以看到,在4s内砸了三颗钉子,比之前的顺序执行整整多了一颗,而且在后续也是平均1s钟产生一颗钉子。 

问:

哪有人可能就会说,为什么不用并行呢,并行的吞吐量甚至还大于流水线的吞吐量

  • 吞吐量:

并行2s生成2个,4s就是4个
流水线2s生成1个,后面每s1个,第4s就是3个

可以看出流水线的生成是要有产量损耗的

  • 时间频率:

并行生成第3颗钉子需要等到4s

流水线生成第3颗钉子只需要等到3s

并行的吞吐量是大于流水线的吞吐量的,但是流水线的执行频率以及指令处理时间是要优于并行的


上述论证,对于CPU来说是很重要的,因为指令最重要的是执行那一步,如果将一个指令执行的全过程分为很多很多步(在cpu中称为分级),那么在流水线形成后,一个指令就可以以很快的频率执行!


 流水线清空

#执行如下指令
jmp 某个函数地址
mov ax,4
add bx,ax

在jmp指令进行到执行的一步时,由于流水线的特性,第二条和第三条指令已经被装入流水线,但是jmp的跳转是跳转到一个与后续指令毫不相关的地方,所以这个时候2,3指令已经没用了,执行完jmp 就会清空流水线,重新载入

②,乱序处理

乱序执行即,当两行代码毫无联系时,就会颠倒执行顺序,以加快指令执行

mov eax,[0x1234]
add ecx,ebx

第一条指令需要去内存取值,这一步是很耗时间的,且eax,ecx,ebx之间无联系,便会将第二条指令和第一条指令倒转顺序。(学过java volatile应该会十分熟悉)


  • 指令集与乱序

有两种指令集,CISC(复杂指令集计算机),RISC(精简指令集计算机)。

CISC:有多个微指令集合成一个指令

RISC:遵循二八定律,存放了微指令,即不可再细分的指令

现在大多数都是采用RISC的内核,再编译CISC的指令时会将其分为RISC指令,由于指令与指令间微不可分,独立无关联,非常适合乱序执行。

③,缓存

缓存这个我们在之前聊过很多了,对于CPU这种高速设备来说内存的速度已经无法满足他了,他需要一个速度更快的存储器,那就是缓存。也便诞生了L1缓存,L2缓存,L3缓存,他们都是SRAM,和寄存器都是触发电路所以速度都十分的快,至于谁更快没有具体了解,总之都是纳秒激别。


  • 什么时候缓存?

1,根据局部性原理来判断

空间局部性:靠近当前内存空间的内存地址,将来一段时间也会被访问

时间局部性:最近访问过的指令和数据,将来也会被访问

④,分支预测

分支就是我们平常看到的if和else,我们执行到分支需要再加载分支代码到流水线的时候不可能同时加载两边的分支,因为最终只会用到一个分支,这个时候就要采取分支预测算法。


  • 预测算法:

2位预测法(最简单的现在基本上以这个位基层):用2 bit 计数器记录跳转次数,这个分支每跳转一次就+1否则-1,>3&<0就不+ -了,当遇到跳转指令时,会检查计数器,如果计数器>0就不跳转了。


  • CPU的实现:

CPU采用了BTB分支目标缓冲器,CPU遇到分支时便用分支指令的地址在BTB中查找,找到则送到流水线上面并且更新BTB的,没找到就进入静态预测器

 静态预测器即存放人们总结出来的写死的特征规律

如:循环跳转

当发现转移地址低于当前地址,那么会认为是循环回路。


  • 预测错了咋办?

很简单清空流水线即可,反正指令没有执行,不用担心


二,保护模式对内存段的保护

有人看完day 5保护模式的介绍后,可能会想,保护模式到底保护了谁呢?保安虽然保护不了任何人,但是保护模式还是可以保护一些东西的。


① 对段寄存器加载选择子的保护

当段寄存器加载某个选择子时会进行如下检查:

  • 选择子T1的值,来拉取GDT或者LDT
  • 根据GDT或者LDT的界限,来对照选择子高13位是否超界限
  • 对于GDT来说索引值不能为0
  • 找到对应的段描述符,检查type(太多了,我直接贴图,不一定要记下来,开发的时候看看)

  •  查看P确认内存段是否存在,如果存在就会将选择子放入段寄存器中

② 对代码段和数据段的保护

访问内存要采取分段策略,不管是指令还是数据都是有长度的,根据分段的规定,不管是数据还是代码都不能骑在段边界上

代码段满足:EIP的偏移地址+指令长度-1 <= 实际段界限大小

数据段满足:偏移地址+数据长度-1 <= 实际段界限大小


③ 栈段的保护

这个我也没太看懂,所以就不误人子弟了,我发个图方便以后开发的时候对照对照。

知识补给站:处理器微架构相关推荐

  1. 科普:什么是处理器微架构?

    本次来分享一些芯片相关的小科普文.作为嵌入式开发工程师,我们对芯片都需要有一定的了解. 指令集 1.指令集的体现 指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合.而指令集的先进与否,也关 ...

  2. 一步步编写操作系统 27 处理器微架构之流水线简介

    了解处理器内部硬件架构,有助于理解软件运行原理,因为这两者本身相辅相成,相互依存.就像枪和狙击手,枪的操作和外形设计都是要根据人体工学,让人不仅操作容易,而且携带也要轻便,做到能随时射出子弹击中目标, ...

  3. 知识补给站20230419-20230421

    文章目录 1. FTP定价 2. BP 3. XGB中的SHAP 4. 其他格式转数据框 5. 树模型当中的增益是怎么计算的? 6. plt作图小结? 7. 解决样本不平衡问题? 8.缺失值填充 9. ...

  4. Pentium 4处理器架构/微架构/流水线 (3) - NetBurst微架构

    Pentium 4 Intel® NetBurst™ Micro-architecture Details Pentium 4处理器是Intel全新NetBurst微架构 的第一代处理器实现(其实也是 ...

  5. Pentium M处理器架构/微架构/流水线(1) - 流水线概述

    Intel® Pentium® M Processor 与Intel NetBurst微架构类似,Intel Pentium M处理器微架构 的流水线也包括3个主要部分: 有序发射前端 乱序超标量执行 ...

  6. 【直播预告】从A76到 A78——在变化中学习ARM微架构

    伴随智能手机高速发展,处理器架构设计开发ARM公司几乎每年都更新CPU的核心架构.从2018年至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76.Cortex-A77.Corte ...

  7. 一文搞懂 | ARM微架构的变化

    一.引言 伴随智能手机的高速发展,移动处理器架构设计厂商ARM公司几乎每年都更新CPU的核心架构.从2018至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76.Cortex-A7 ...

  8. 从A76到A78——在变化中学习ARM微架构

    一.引言 伴随智能手机的高速发展,移动处理器架构设计厂商ARM公司几乎每年都更新CPU的核心架构.从2018至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76.Cortex-A7 ...

  9. 一起学点ARM的微架构?

    最近在看内核工匠的一篇文章,写的很赞,一起来学一下. 原文链接:https://mp.weixin.qq.com/s/aELd2q_eP5RthpwWI1Huvw 大家可以关注一下这两个: ARM精选 ...

最新文章

  1. write_cfgmem 产生存储器配置文件?
  2. 【原理+实战+视频+源码】手撸SpringBoot缓存系统
  3. 数字图像处理:基于MATLAB的车牌识别项目
  4. lru页面置换算法_C|内存管理|从LRU王国到NRU王国
  5. 2018年计算机专业考研,2018年计算机专业考研大纲解析
  6. JVM学习笔记之-方法区,栈、堆、方法区的交互关系,方法区的理解,设置方法区大小与OOM,方法区的内部结构,方法区使用举例
  7. 斯特林反演[bzoj4671]异或图
  8. How is html text displayed in Assignment block
  9. mysql 更新索引_MySQL索引优化
  10. 前端学习(1162):箭头函数面试题
  11. 【Linux】使用ZStack私有云创建本地Linux服务器
  12. 【干货】2020十大消费新机遇.pdf(附下载链接)
  13. 重构Webpack系列之六 ---- 配置文件
  14. 12.逻辑运算符与、或、非、双感叹号、双问号
  15. 10分钟学会如何通过问卷调查赚钱
  16. Vmware打开服务器的时候提示“该虚拟机似乎正在使用中。”
  17. Mac批量恢复废纸篓文件
  18. 华为交换机密码遗失怎么办?华为交换机密码恢复方法
  19. systemverilog : constraint slove... before 详解
  20. Elasticsearch:sniffing 的最佳实践:What, when, why, how

热门文章

  1. Java连接远程的Access数据库
  2. 国密SM2的前端加密,后端解密(Java版本)及SM3 摘要加密
  3. mysql 导出到word
  4. 服务器硬盘型号表示,服务器硬盘尺寸规格
  5. miniui处理多重子表级联,一次性提交多表数据的ui要点
  6. python request microsoft graph_Python request.headers方法代码示例
  7. android面试视频百度云盘,BAT大牛面试之谈解密Android上(含百度云连接)
  8. 工作两年后感悟的《大话西游》
  9. Sql server登录 系统找不到指定文件
  10. SKIL/工作流程/与SKIL客户端一起工作