0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析计算机硬件的读写速度差异(下)

jf_78858299 来源:小牛呼噜噜 作者:小牛呼噜噜 2023-02-01 14:54 次阅读

压榨CPU性能带来的问题

由于CPU速度非常快,且价格非常昂贵,我们必须得 充分压榨CPU ,得像生产队的驴一样,让它不停地工作!

为了合理利用 CPU 的高性能,同时尽可能地节约成本,现代计算机将这些储存器充分的结合起来,由于这些硬件的数据存取速度差异导致了计算机系统编程中的各种问题:

有序性问题

为了充分压榨CPU的性能, CPU 会对指令乱序执行或者语言的编译器会指令重排 ,让CPU一直工作不停歇,但同时会导致有序性问题。

在CPU中为了能够让指令的执行尽可能地同时运行起来,采用了 指令流水线 。一个 CPU 指令的执行过程可以分成 4 个阶段:取指、译码、执行、写回。这 4 个阶段分别由 4 个独立物理执行单元来完成。

理想的情况是:指令之间无依赖,可以使流水线的并行度最大化。但是如果两条指令的前后存在依赖关系,比如数据依赖,控制依赖等,此时后一条语句就必需等到前一条指令完成后,才能开始。所以CPU为了提高流水线的运行效率,对无依赖的前后指令做 适当的乱序和调度

还有一种情况 编译器会指令重排 ,比如java语言,JVM 的编译器会对其指令进行重排序的优化( 指令重排 )。

所谓指令重排是指在不改变原语义的情况下,通过调整指令的执行顺序让程序运行的更快。JVM中并没有规定编译器优化相关的内容,也就是说JVM可以自由的进行指令重排序的优化。

无论是编译期的指令重排还是 CPU 的乱序执行 ,主要都是为了让 CPU 内部的指令流水线可以“填满”,提高指令执行的并行度,充分利用CPU的高性能。

可见性问题

为了平衡CPU的寄存器和内存的速度差异,计算机的CPU 增加了高速缓存,但同时导致了 可见性问题。我们知道当程序执行时,一般CPU会去从内存中读取数据,来进行计算。CPU计算完之后,需要把数据重新放回到内存中。

当CPU的多个核心参与一个程序的运行,从内存中读取一个共享变量的数据,当不同核心间进行了各自的计算,把计算后的值放入自己的缓存中而不选择立即写入内存中(CPU写入内存的时机是不确定的)。那么在CPU的缓存中,这个共享变量有可能存放着不同的数据,这就导致了缓存的可见性问题。即一个线程对数据的修改无法对其他线程可见。

原子性问题

为了平衡CPU 与 I/O 设备的速度差异,操作系统增加了进程、线程概念,以分时复用 CPU,但同时导致了原子性问题。

原子操作就是不可分割的操作,在计算机中,就是指不会因为线程调度被打断的操作。

当一个程序去I/O 设备读取数据, 由于I/O 设备数据存入读取速度,相比于CPU的执行速度来说度日如年,CPU这么牛逼这么昂贵的宝贝,怎么能让它歇着,得让它一直干活,去切换执行其他程序。也就是将CPU的时间进行分片,让各个程序在CPU上轮转执行。但被剥夺执行权的程序,等它从IO读取完数据后,还是得让CPU继续执行的,这时需要一个数据结构来保存,以便之后恢复继续执行,这个就是进程。

一开始进程中 只有一个"执行流",干活的人就一个。随着任务越来越多,发现进程不够用了,经常导致整个程序被阻塞,这时计算机让进程有多个执行流,干活的人变多了,那程序就不会再被阻塞了,"执行流" 就是线程。

如何解决这3个问题,就是并发、多线程需要处理的事,当然这是后话。


参考资料

《深入理解计算机系统》

《计算机组成原理》

《计算机组成原理》--唐朔飞

https://zhuanlan.zhihu.com/p/379947484

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10412

    浏览量

    206465
  • 计算机系统
    +关注

    关注

    0

    文章

    211

    浏览量

    23871
  • 运算器
    +关注

    关注

    1

    文章

    159

    浏览量

    16483
收藏 人收藏

    评论

    相关推荐

    咦!?怎么没有专门的计算机硬件设计的板块和cpu设计的板块?

    我对计算机硬件和编程很有兴趣,但是没有发现有关设计cpu和计算机硬件的板块。
    发表于 02-21 12:24

    什么是计算机系统、计算机硬件计算机软件?

    第一章 计算机系统概论1. 什么是计算机系统、计算机硬件计算机软件?硬件和软件哪个更重要?解:P3计算
    发表于 07-22 09:06

    用简单的语言描述计算机硬件系统构成 精选资料分享

    一.计算机硬件系统概述所谓计算机硬件系统,就是指构成计算机看得见的,摸得着的实际物理设备。常见的计算机硬件组成主要由下图各部件组成:现代计算机
    发表于 07-29 08:51

    一种计算机硬件开发用检测工作台

    本实用新型涉及工作台技术领域,具体为一种计算机硬件开发用检测工作台。背景技术:计算机硬件(Computer hardware)是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。这些
    发表于 09-03 07:00

    计算机硬件各种故障及诊断方法

    摘要:经济的发展和科技的进步使得计算机得以普及。计算机的已经成为工业、经济、管理等众多方面的重要运行手段,甚至已经成为了普通居民工作、生活、娱乐的一部分。关键词:计算机硬件;识别方法;解决措施中图
    发表于 09-08 07:47

    关于计算机硬件维护的浅析

    现今科技的进步日新月异,计算机作为信息时代主要的特征载体,已经遍布我们社会生活的方方面面,而计算机作为软件硬件的统一体,人们在关心软件系统的同时,往往忽视了对计算机硬件的维护。下面是Y
    发表于 09-08 08:07

    计算机硬件,第2篇 计算机硬件系统.pdf 精选资料分享

    第第2 章章 计算机硬件系统计算机硬件系统第第 章章 计算机硬件系统计算机硬件系统在本章中,首先我们将讨论组成计算机
    发表于 09-13 06:37

    计算机硬件系统的组成及其性能维护分析

    计算机硬件系统的组成及其性能维护分析1、前言随着信息技术的飞速发展, 计算机技术被广泛地应用于人们的生活与工作中, 计算机系统的安全稳定运行直接关系到整个经济社会的进步, 为了确保计算机
    发表于 09-13 07:31

    计算机硬件维护的方法

    1先检查电源及其他静态故障在进行其他部件的检测有调查可知,当前我国计算机硬件故障在维护过程中,因为电源故障而导致的故障问题非常常见,所以要对电源部件出现的故障问题引起足够的重视。在对计算机硬件进行
    发表于 09-17 07:15

    了解计算机硬件体系结构

    模块一知识点1.了解计算机硬件体系结构2.掌握常见的计算机硬件设备3.了解计算机软件体系结构4.掌握主板结构的组成5.了解CPU、内存、硬盘的发展历程6.掌握CPU、内存、硬盘的结构、性能指标及相关
    发表于 09-17 09:03

    计算机硬件的基本组成

    嵌入式系统设计师学习笔记③:计算机的基本组成计算机硬件的基本组成:输入/输出设备(I/O设备)、存储器(主存储器、辅助存储器)、CPU(中央处理器)等。CPU中包含运算器和控制两大组成部分和寄存器组
    发表于 12-23 06:00

    计算机硬件知识大全

    计算机硬件知识大全
    发表于 05-15 09:50 0次下载
    <b class='flag-5'>计算机硬件</b>知识大全

    计算机硬件知识试题

    计算机硬件知识一、微机基本工作原理1、计算机系统的组成微型计算机硬件系统和软件系统组成。硬件系统:指构成
    发表于 07-01 17:21 76次下载

    计算机硬件接口大全图解

    计算机硬件接口大全图解 点击看大图
    发表于 03-26 10:15 1999次阅读

    浅析计算机硬件读写速度差异(上)

    计算机系统 现代计算机系统与冯·诺依曼计算机差别不大,最大的区别冯·诺依曼计算机 是 以**运算器**为中心的,而现代计算机 以**
    的头像 发表于 02-01 14:54 934次阅读
    <b class='flag-5'>浅析</b><b class='flag-5'>计算机硬件</b>的<b class='flag-5'>读写</b><b class='flag-5'>速度</b><b class='flag-5'>差异</b>(上)