notebooks
  • notebooks
  • _planning
    • 2022 OKR
    • basketball
    • swimming
  • communication
    • Dubbo
    • Kafka
    • Messaging
    • RPC
    • Thrift
  • computation
    • map-reduce
  • cs-basic-knowledge
    • computer-architecture
    • data-structure-and-algorithms
    • networks
    • os
  • devops
    • Docker
    • Linux
    • Prometheus
    • operations
    • security
    • trouble-shooting
  • distributed-knowledge
    • Zookeeper_CMD
    • distributed-system
  • game-engine
    • Unity
  • others
    • appium使用
  • protocols
    • http(s)协议
    • 官方链接
    • sip
  • storage
    • Elasticsearch
    • GuavaCache
    • MySQL
    • MySQL_CMD
    • NoSQL
    • Redis
    • Redis_CMD
  • system-design
    • system-design
  • tools
    • Git
    • IDEA
    • Mac
    • VScode
    • Vim
  • _working
    • doc-template
      • backend-design-review
      • correction-of-error
      • service-review
    • process
      • domain-backup
      • oncall
  • blogs
    • history
      • 8088/8086微处理器
      • 8088/8086指令系统
      • CSS-DOM
      • CSS定位
      • CSS工作原理
      • CSS控制背景
      • CSS浮动布局
      • CSS盒模型
      • Chrome开发者工具使用方法
      • DOM
      • Django Model模型层学习
      • Django-REST-framework Serializers学习
      • Django-REST-framework Views和ViewSets学习
      • Django View视图层学习
      • Gvim下Emmet安装及使用教程
      • HTTP协议简介
      • HashMap原理初探
      • JavaScript简史
      • JavaScript语法
      • Java内存模型和GC机制
      • Java基础——Lambda学习
      • Java基础——方法引用
      • Java基础——枚举类型
      • Java类加载机制
      • KMP算法
      • Kafka学习
      • Linux下用命令行编译Java程序
      • MathJax简介和基本用法
      • Python实现常见数据结构
      • Python装饰器总结
      • TCP协议的三次握手和四次挥手
      • Thrift学习
      • asyncio学习
      • markdown的常用语法
      • 修改hosts文件实现翻墙
      • 充实文档的内容
      • 关系数据库
      • 关系数据库标准语言SQL(一)
      • 关系数据库标准语言SQL(二)
      • 关系数据理论
      • 关系查询处理和查询优化
      • 内联元素和块级元素
      • 剑指offer算法题练习
      • 动态创建标记
      • 图形化用户界面
      • 在Eclipse中使用Maven构建Java Web项目
      • 增加微博秀遇到的一些问题
      • 处理机调度
      • 如何用github和hexo搭建个人博客
      • 存储管理
      • 存储系统的层次结构
      • 学习模仿lionhit网站首页的过程总结
      • 实用的GitHub小技巧
      • 并发控制
      • 循环与分支程序设计
      • 指令系统的设计
      • 指令级并行及其开发——硬件方法
      • 搭建自己的VPN服务器
      • 操作系统用户界面
      • 数据库安全性
      • 数据库完整性
      • 数据库恢复技术
      • 数据库绪论
      • 数据库编程
      • 数据库设计
      • 数据抽象
      • 文件系统
      • 文法和语言
      • 最佳实践
      • 案例研究:JavaScript图片库
      • 案例研究:图片库改进版
      • 汇编语言程序格式
      • 汇编语言程序设计基础知识
      • 流水线技术
      • 深度优先搜索和广度优先搜索
      • 牛客网——网易2017秋招编程题集合
      • 用JavaScript实现动画效果
      • 第一篇博客
      • 经典排序算法总结(Java实现)
      • 经典查找算法总结(Java实现)
      • 综合示例
      • 编译原理引论
      • 背包、队列和栈
      • 虚拟机安装Linux系统及常用软件
      • 计算机操作系统绪论
      • 计算机系统结构的基础知识
      • 设备管理
      • 设计模式之代理模式
      • 设计模式之单例模式
      • 设计模式之工厂模式
      • 设计模式之策略模式
      • 设计模式之观察者模式
      • 词法分析
      • 进程管理
      • 闭包
      • 阻止Google自动跳转到香港服务器的方法
      • 项目部署过程
  • programming-language
    • C#
      • C#
    • C&C++
      • C
    • C&C++
      • C++
    • Java
      • GoogleGuice
    • Java
      • JVM
    • Java
      • Java
    • Java
      • Maven
    • Java
      • Mybatis
    • Java
      • Spring知识
    • Java
      • SpringBoot
    • Java
      • Tomcat
    • Python
      • Python
    • Shell
      • Shell
  • wheels
    • dcc
      • 产品调研
      • 方案设计
    • red-envelope
      • 方案设计
    • short-url
      • 短链接服务
    • sso
      • 方案设计
Powered by GitBook
On this page
  • 存储系统的层次结构概述
  • 存储系统的性能参数
  • 三级存储系统
  • 映像规则
  • 查找方法
  • 替换算法
  • 写策略
  1. blogs
  2. history

存储系统的层次结构

存储系统的层次结构概述

存储系统的性能直接影响到整个计算机系统的性能。如何以合理的价格,设计容量和速度都满足计算机系统要求的存储器系统,始终是计算机系统结构设计中的关键问题之一。

人们对这三个指标的要求:容量大、速度快、价格低。

三个要求是相互矛盾的

  • 速度越快,每位价格就越高;

  • 容量越大,每位价格就越低;

  • 容量越大,速度越慢。

解决方法:采用多种存储器技术,构成多级存储层次结构。

  • 程序访问的局部性原理:对于绝大多数程序来说,程序所访问的指令和数据在地址上不是均匀分布的,而是相对簇聚的。

  • 程序访问的局部性包含两个方面

    • 时间局部性:程序马上将要用到的信息很可能就是现在正在使用的信息。

    • 空间局部性:程序马上将要用到的信息很可能与现在正在使用的信息在存储空间上是相邻的。

存储系统的性能参数

下面仅考虑由M1和M2构成的两级存储层次:

  • M1的参数:S1,T1,C1

  • M2的参数:S2,T2,C2

存储容量S 一般来说,整个存储系统的容量即是第二级存储器M2的容量,即S=S2。

命中率H

    • N1 ── 访问M1的次数

    • N2 ── 访问M2的次数

  • 不命中率 :F=1-H

平均访问时间TA 分两种情况来考虑CPU的一次访存:

  • 当命中时,访问时间即为T1(命中时间)

  • 当不命中时,情况比较复杂。 不命中时的访问时间为:$T_2+T_B+T_1=T_1+T_M$ 其中$T_M=T_2+T_B$

    • 不命中开销TM:从向M2发出访问请求到把整个数据块调入M1中所需的时间。

    • 传送一个信息块所需的时间为TB。

三级存储系统

三级存储系统

  • Cache(高速缓冲存储器)

  • 主存储器

  • 磁盘存储器(辅存)

可以看成是由“Cache—主存”层次和“主存—辅存”层次构成的系统。 从主存的角度来看

  • “Cache-主存”层次:弥补主存速度的不足

  • “主存-辅存”层次: 弥补主存容量的不足

“Cache-主存”和“主存-辅存”层次的区别

比较项目
“Cache-主存”层次
“主存-辅存”层次

目的

为了弥补主存速度的不足

为了弥补主存容量的不足

存储管理的实现

全部由专用硬件实现

主要由软件实现

访问速度的比值(第一级比第二级)

几比一

几万比一

典型的块(页)大小

几十个到几百个字节

几千个以上字节

CPU对第二级的访问方式

可直接访问

均通过第一级

不命中时CPU是否切换

不切换

切换到其他进程

# Cache的基本知识

## 基本结构和原理

Cache和主存分块

  • Cache是按块进行管理的。Cache和主存均被分割成大小相同的块。信息以块为单位调入Cache。相应地,CPU的访存地址被分割成两部分:块地址和块内位移。

    • 主存块地址(块号)用于查找该块在Cache中的位置。

    • 块内位移用于确定所访问的数据在该块中的位置。

映像规则

映像规则有以下三种:

  1. 全相联映象

  • 全相联:主存中的任一块可以被放置到Cache中的任意一个位置。        

  • 对比:阅览室位置 ── 随便坐

  1. 直接映象

  • 直接映象:主存中的每一块只能被放置到Cache中唯一的一个位置。(循环分配)

  • 对比:阅览室位置 ── 只有一个位置可以坐

  • 特点:空间利用率最低,冲突概率最高,实现最简单。

  • 对于主存的第i 块,若它映象到Cache的第j 块,则:j=i mod (M ) (M为Cache的块数)

  1. 组相联映象

  • 组相联:主存中的每一块可以被放置到Cache中唯一的一个组中的任何一个位置。

  • 组的选择常采用位选择算法

    • 若主存第i 块映象到第k 组,则: k=i mod(G) (G为Cache的组数)

    • 设$G=2^g$,则当表示为二进制数时,k 实际上就是i 的低 g 位

    • 低g位以及直接映象中的低m位通常称为索引。

  • n路组相联:每组中有n个块(n=M/G )。   n 称为相联度。   相联度越高,Cache空间的利用率就越高,块冲突概率就越低,不命中率也就越低。

查找方法

  1. 通过查找目录表来实现

  • 目录表的结构

    • 主存块的块地址的高位部分,称为标识 。

    • 每个主存块能唯一地由其标识来确定

  • 只需查找候选位置所对应的目录表项

  1. 并行查找与顺序查找 提高性能的重要思想:主候选位置(MRU块)(前瞻执行)

替换算法

直接映像Cache中的替换很简单,因为只有一个块,别无选择。而在组相联和全相联Cache中,则有多个块供选择。 主要的替换算法有以下三种:

  • 随机法 优点:实现简单

  • 先进先出法

  • 最近最少使用法

    • 选择近期最少被访问的块作为被替换的块。(实现比较困难)

    • 实际上:选择最久没有被访问过的块作为被替换的块。

    • 优点:命中率较高

写策略

“写”操作必须在确认是命中后才可进行 “写”访问有可能导致Cache和主存内容的不一致

两种写策略 写策略是区分不同Cache设计方案的一个重要标志。

  • 写直达法(也称为存直达法) 执行“写”操作时,不仅写入Cache,而且也写入下一级存储器。

  • 写回法(也称为拷回法) 执行“写”操作时,只写入Cache。仅当Cache中相应的块被替换时,才写回主存。 (设置“修改位”)

两种写策略的比较

  • 写回法的优点:速度快,所使用的存储器带宽较低。

  • 写直达法的优点:易于实现,一致性好。

“写”操作时的调块

  • 按写分配(写时取) 写不命中时,先把所写单元所在的块调入Cache,再行写入。

  • 不按写分配(绕写法) 写不命中时,直接写入下一级存储器而不调块。

写策略与调块

  • 写回法 ── 按写分配

  • 写直达法 ── 不按写分配

《计算机系统结构教程(第2版)》张晨曦 王志英 等 著

Previous存储管理Next学习模仿lionhit网站首页的过程总结

Last updated 3 years ago

每位价格C C=C_1S_1+C_2S_2S_1+S_2C=\frac{C\_1S\_1+C\_2S\_2}{S\_1+S\_2}C=S_1+S_2C_1S_1+C_2S_2​ 当$S_1<<S_2$时,$C\approx C_2$。

命中率:CPU访问存储系统时,在M1中找到所需信息的概率。 H=N_1N_1+N_2H=\frac{N\_1}{N\_1+N\_2}H=N_1+N_2N_1​

考虑到命中和不命中的概率分别为H和1-H,故该存储系统的平均访存时间为 T_A=HT_1+(1−H)(T_1+T_M)=T_1+(1−H)T_MT\_A=HT\_1+(1-H)(T\_1+T\_M)=T\_1+(1-H)T\_MT_A=HT_1+(1−H)(T_1+T_M)=T_1+(1−H)T_M 或 T_A=T_1+FT_MT\_A=T\_1+FT\_MT_A=T_1+FT_M

Cache的基本工作原理示意图

特点:空间利用率最高,冲突概率最低,实现最复杂。

设M=2m,则当表示为二进制数时,j实际上就是i的低m位

组相联是直接映象和全相联的一种折衷

Cache的容量与索引、相联度、块大小之间的关系为 Cache的容量=2index×相联度×块大小Cache的容量=2^{index}\times 相联度 \times 块大小Cache的容量=2index×相联度×块大小

存储系统3
存储系统4
存储系统1
存储系统2