深入理解计算机系统(1.2)------存储设备

  上一章我们讲解了hello world 程序在计算机系统中是如何运行的。 hello 程序的机器指令最初是存放在磁盘上的,当程序加载时,他们被复制到主存;当处理器运行程序的时候,指令又从主存复制到处理器。相似的,数据串"Hello World" 初始时在磁盘上,然后复制到主存,最后从主存上复制到显示设备。

  从程序员的角度来看,上面的复制就是开销,减缓了程序的真正工作。因此如何将这些复制操作尽快完成则是系统设计者的一个主要目标。

1、从磁盘加载可执行文件到主存

 2、将输出字符串从内存写到显示器

3、高速缓存存储器

  那么如何减少这种由数据复制所引起的开销呢?

  根据机械原理,较大的存储设备比 较小的存储设备运行的慢,而快速设备的造价远高于同类的低速设备。类似的,一个典型的寄存器文件只存储几百字节的信息,而主存里可以存放几十亿字节。然而处理器从寄存器文件中读数据的速度要比从主存中读取几乎快100倍。而且随着半导体技术的进步,这两者差距还在加大。因此加快处理器的运行速度比加快主存的运行速度要容易和便宜的多。针对这种处理器和主存之间的差异,系统设计者采用了更小、更快的存储设备,也就是高速缓存存储器(简称高速缓存),作为暂时的集结区域,用来存放处理器近期可能会需要的信息,类似于Java Web 框架的缓存机制。如下图:

4、存储设备的金字塔结构 

   在处理器和一个又大又慢的设备(比如主存)之间插入一个更小更快的存储设备(例如高速缓存)的想法已经是一个普遍的观念。实际上,每个计算机系统中的存储设备都被组织成了一个存储器层次结构。如下图所示:

   存储器层次结构的主要思想是一层上的存储器作为低一层存储器的高速缓存,因此,寄存器文件就是L1的高速缓存,L1是L2的高速缓存,L3是主存的高速缓存,而主存又是磁盘的高速缓存。

  正如可以运用不同的高速缓存的知识来提高程序性能一样,程序员同样可以利用对整个存储器层次结构的理解来提高程序性能。这个后面我们会详细讲解。

 5、本章总结

   本章主要介绍了高速缓存的产生的原理以及存储器设备的层次结构,如何理解整个存储器的层次结构,对于提高程序性能有很大的帮助。下一章将讲解操作系统的抽象概念。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ken的杂谈

Netflix Hystrix断路器简介与工作原理

Netflix Hystrix是SOA/微服务架构中提供服务隔离、熔断、降级机制的工具/框架。Netflix Hystrix是断路器的一种实现,用于高微服务架构...

1692
来自专栏Java Edge

Java并发编程实战系列16之Java内存模型(JMM)

前面几章介绍的安全发布、同步策略的规范还有一致性,这些安全性都来自于JMM。 16.1 什么是内存模型,为什么需要它? 假设 a=3 内存模型要解决的问题是:...

4046
来自专栏芋道源码1024

注册中心 Eureka 源码解析 —— 任务批处理

本文主要分享 任务批处理。Eureka-Server 集群通过任务批处理同步应用实例注册实例,所以本文也是为 Eureka-Server 集群同步的分享做铺垫。

920
来自专栏H2Cloud

C++ 多线程编程总结

C++ 多线程编程总结          在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率: l ...

3086
来自专栏Kirito的技术分享

Motan中使用异步RPC接口

这周六参加了一个美团点评的技术沙龙,其中一位老师在介绍他们自研的 RPC 框架时提到一点:RPC 请求分为 sync,future,callback,onewa...

3218
来自专栏Java架构师学习

成为顶尖程序员不得不经历的面试题

一、数据结构与算法基础 · 说一下几种常见的排序算法和分别的复杂度。 · 用Java写一个冒泡排序算法 · 描述一下链式存储结构。 · 如何遍历一棵二叉树? ·...

39811
来自专栏微服务生态

Akka简单的性能测试

这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理。

791
来自专栏开发与安全

linux系统编程之基础必备(一):计算机体系结构一点基础知识

下面这张图来自《深入理解计算机系统》: IO桥部分一般还分为北桥和南桥,北桥当然是靠上的了。 ? •CPU –主频:  CPU的时钟频率,内核工作的时钟频...

1845
来自专栏王亚昌的专栏

实战设计模式系列-Strategy(策略)

    项目最近需要写一个逻辑srv,srv的业务逻辑比较简单,收包、解包、根据命令字进行业务处理、回包。 考虑每一次请求都是一项任务,而逻辑srv是一个任务管...

821
来自专栏JAVA高级架构开发

成为Java顶尖程序员,先过了下面问题!

ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?

1370

扫码关注云+社区