“第六十五天”

news2024/9/21 0:27:44

        固态硬盘:SSD

原理:基于闪存技术Flash Memory ,属于电可擦除ROM,即EEPROM;

由闪存翻译层和存储介质组成;闪存翻译层负责翻译逻辑块号,找到对应页,存储介质是由多个闪存芯片构成的,每一个芯片包含多个块,每个块包含多个页

(固态硬盘的读取和写入是以“页”为单位的,在固态硬盘的内部结构中,数据存储在被称为“页”的小单元中。一般情况下,一个页的大小是4 KB或8 KB。这里也在提一下,外存由固态硬盘和机械硬盘,固态硬盘的读写单位是 “ 页 ” ,而机械硬盘的是 “ 扇区 ” ,主存的就是内存,是RAM(实际上是RAM和小部分ROM的结合),读取单位一般是 “字节”)

读写性能特性:以“ 页 ”为单位读写,相当于磁盘的“ 扇区 ” ,以块为单位“ 擦除 ”,擦干净的块,其中的每页都可以写一次,读无限次。 支持随机访问(机械硬盘是随机访问和顺序访问的结合),系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址。(这里擦除前把块里面的其他页复制到一个新的块的过程中,数据的物理地址是发生改变的(有一个块到另一个块),但系统会自动地把这个新的物理地址映射到原来的逻辑地址)             固态硬盘 读快,写慢,因为要写的页如果有数据的话,需要先将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页。

        与机械硬盘相比:SSD的读写速度快,随机访问性能高,用电路控制访问位置,而机械硬盘则是通过移动磁臂旋转控制访问位置,有寻道时间和旋转延迟。          SSD安静无噪音,耐摔抗震,能耗低,造假更贵。            SSD的一个 块 被擦除次数过多的话可能会坏掉(重复写同一个快),而机械硬盘的扇区不会因为写入次数太多而坏掉。(因为机械硬盘中,磁盘的扇区是通过改变磁性颗粒的磁化方向来存储数据的。SSD的闪存技术是这样的)

        磨损均衡技术:思想:将“ 擦除 ” 平均分布在各个块上,以提升使用寿命  ;  对此有两种方式,动态磨损均衡,静态磨损均衡。前者是写入数据的时候,优先选择累计擦除次数少的新闪存块,后者是SSD监测并自动进行数据分配、迁移,让老旧的闪存快承担以读为主的储存任务,让较新的闪存块承担更多的写任务。

        Cache的基本原理和基本概念

        我们的程序或者软件的数据都是存在辅存上的,当我们启动一个程序或者软件的时候,那么系统就会将对应的数据拷贝到内存上。然后CPU就从内存一条条的取指令处理数据,但内存的读写速度相对于CPU很慢,会导致速度矛盾。而我们在真正使用软件的时候,一段时间内我们通常使用的是其中的某个功能,而不是全部功能。比如我们再打视频电话的时候,CPU大概率需要的指令代码都是和"视频聊天相关的",于是我们便在内存和之间加入了一个Cache,Cache里面存储的就是内存中我们当前经常使用所需要的那部分代码,由于Cache的速度比内存快很多,那么CPU和内存之间的速度矛盾便得到了一定的缓解。(实际上,Cache是被集成在CPU内部的,通过SRAM实现,速度快,成本高 )

        局部性原理

        空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的。如:数组元素,顺序执行的指令代码。

        时间局限性:在最近的未来要用到的信息,很可能是现在正在使用的信息。如:循环结构的指令代码。

如果基于局部性原理的话,就可以把CPU目前访问的地址 “ 周围 ” 的部分数据放到Cache中。

基于上面,我们还需要界定什么是 “ 周围 ” ,对此我们将主存的存储空间 “ 分块 ” (主存地址进一步拆分为 主存块号 和 块内地址),主存和Cache之间以 “ 块 ”为单位进行数据交换 ,在操作系统中,通常将主存中的“一个块”也称为“ 一个 页/页面/页框”,Cache中的 “ 块 ”也称为 “ 行 ”。而每次被访问的主存块,一定会被立即调入Cache。

对于Cache的性能分析关于Cache的命中率和缺失率,访问方式也有两种,一种是先访问Cache,发现未命中再访问主存,另一种是同时访问Cache和主存,若Cache命中的话则停止访问主存。

        Cache——主存的映射方式;

全相联映射:主存块可以放在Cache的任意位置;

直接映射:每个主存块只能放到一个特定的位置,Cache块号 = 主存块号 % Cache总块数

组相联映射:Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置,

组号 = 主存块号 % 分组数

这里还是要提模求余这个东西看样子主要应用还真不是求余。

为了区分Cache中存放的是哪个主存块,需要给每个Cache块增加一个“ 标记 ”,用来记录对应的主存块号,除了标记外,还要增加一个有效位,来表示当前的Cache块是否存有数据。

        全相联映射:随意放

        对于全相联映射,主存的主存块有多少,标记就需要多少位,比如如果某个计算机的主存地址空间大小是256MB(B表示字节,b表示比特),按字节编址,其数据Cache有8个Cache行,行长64B,256MB对于的是2^28bit,也就是主存的地址共28位,由于Cache的行长是64B,则主存可以划为256MB / 64B=2^22个块,所以主存地址有22位的主存块号和6位的块内地址。所以Cache的标志也应该是22位,还要再外加一位的有效位,表示当前块是否被占用。

        全相联映射,CPU访问主存地址的时候,先是把这个主存地址的前22位(以上面的例子为例,实际不一定)对比Cache中的所有块的标记,            如果标记匹配且有效位为 1 的话,则意味着Cache命中,便访问块内地址对应的单元 ,               如果未命中,或者有效位为 0 ,则正常访问主存。

优点在于Cache存储空间利用充分,命中率高,缺点在于查找标记最慢,有可能要对比所有行的标记。

        直接映射;只能放固定位置,主存块号%Cache总块数

        对于直接映射(同样的以上面例子为例),实际上Cache的总块数如果视为 2^n,那么主存块号中末尾的n位都直接反映在它在Cache中的位置,比如上面的这个Cache有8行,也就是 2^3 ,那么主存块号的末尾三位就可以通过在Cache中的位置推断出来,如块号为8(1000)的放在Cache的行0(0000)(8%8)(0~7),块11(1011)放在Cache的行3(011),也就是模求余之后相当于留下最后n位的二进制数,我们可以利用这个特性对Cache的标志进行优化,也就是省略后面的n位,将主存块号的其余位作为标记即可,这样上例原本标记的22位就可以变成 19位。(这样主存的地址中主存块号又可以进一步划分为标记和行号,上例的原本的22位主存块号可进一步划分为19位的标记和3位的行号)。

        CPU访问主存地址时,首先根据主存块号的后n位的行号确定Cache的行,       然后如果主存块号的前m位(m等于主存块号减去行号n,也就是标记的位数)与Cache标记匹配且有效位为1,那么Cache命中,访问对应的地址单元,            若未命中或者有效位为 0 ,则正常访问主存。

优点在于对于任意一个地址,只需要对比一个标记,查找标记最快,缺点在于Cache存储空间利用不充分,命中率低。

        组相联映射:可放到特定分组,所属分组=主存块号%分组数

这个和直接映        射时有点类似的,更像是前面两种的中和,把Cache的多个行分为若干个组,比如上面的8行分为四组,一组有两个块,这样同样的分组数如果是2^n,那么主存块号中末尾的后n位就表示组号,在第几组,这样的话标记位数可能不如直接映射那么少(比如这里四组是2^2,那么标记就是20位,而直接映射是19位),那也是映射更加灵活(直接映射的话,主存的第n块,只能映射到对应到Cache的一个块,而组相联映射的话,主存的第n块,映射到的是Cache对应的一个组,这个组里面的块只有没有被占,就都可以放)。(主存块号这里可以划分位标记和组号)

        CPU访问主存地址,首先根据主存块号的后n位(这里的n对应的是组号),确定所属分组号,然后和组里面的块挨个比较,如果主存块号中的标记和分组内的某个标记匹配且有效位为 1 ,那么命中,访问对应的单元,若没有命中或有效位为 0 ,则正常访问主存。

优点缺点实际上就是上面两种方式的折中,综合效果较好。

n路组相联映射——每n个Cache行为一组

 

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

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

相关文章

Windows中的Directory Junction和Directory symbolic link

这两者有几点显著的区别: 前者谁都可以创建,后者需要提升至管理员权限才可以创建 这两者创建的手时候都不需要Target存在

C++动态库

C动态库 动态库文件(Dynamic Link Library,DLL)是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。 1 环境介绍 VS版本:VS2017 编程语言:C 2 功能介绍 使用VS2017项目模板创建C动态库生成…

(论文阅读24/100)Visual Tracking with Fully Convolutional Networks

文献阅读笔记(sel - CNN) 简介 题目 Visual Tracking with Fully Convolutional Networks 作者 Lijun Wang, Wanli Ouyang, Xiaogang Wang, and Huchuan Lu 原文链接 http://202.118.75.4/lu/Paper/ICCV2015/iccv15_lijun.pdf 【DeepLearning】…

AMESim 2021安装教程

主要是AMESim的安装 写在前面,由于项目需要,需要自学AMESim,因此需要安装这个软件,目前仅仅安装使用,还不涉及到与MATLAB的联合仿真,老板说用 RT LAB半实物仿真平台,但是简单搜了一下&#xff0…

单链表(4)

看尾插函数 尾插函数跟头插函数唯一的不同就是找尾巴 尾插函数: 首先是动态申请一个新结点 把val放到新结点里面当新结点的data 然后在单链表里面找尾巴 比如说指针p找到尾巴了,现在将指针p指向新的结点,尾插就好了 这里的p类似于头插函…

AIX5.3安装weblogic10.3

目录 1安装IBM JDK 1.6 2图形化准备 3安装weblogic 准备 4图形化界面安装 1安装IBM JDK 1.6 1.1检查操作系统 # oslevel 5.3.0.0 # bootinfo -y (显示AIX机器硬件是64位) 64 # bootinfo -K (显示AIX系统内核是64位) 64 因此,系统需要安装64位的jdk,…

STM32C8T6实现微秒延时函数delay_us

/* USER CODE BEGIN 0 */ void delay_us(uint32_t ii) {uint32_t temp;SysTick->LOADii*8;SysTick->VAL0x00;SysTick->CTRL0x01;//2号位1使用内核时钟do{tempSysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16)));SysTick->CTRL0X00;SysTic…

【Unity插件】分享几个完全免费的2D角色动画生成器(推荐收藏)

文章目录 前言一、lpc-character-generator二、Universal-LPC-Spritesheet-Character-Generator三、UP主开发的2D人物换装系统四、Character Editor: Megapack完结 前言 你可能游戏开发能力很强&#xff0c;但是正愁于2D角色动画&#xff0c;那么这篇文章就是为你而准备的&…

深度学习之各种配置环境

如何使用python进行深度学习&#xff0c;我们需要配置相应的环境 第一步&#xff1a;先安装python python的官网地址&#xff1a;https://www.python.org/ 点进去&#xff0c;点击 Downloads&#xff0c;然后点击 Windows 等待下载完成&#xff0c;安装步骤请参考下文&#x…

超声波俱乐部分享:Enter AI native application

11月5日&#xff0c;2023年第十四期超声波俱乐部内部分享会在北京望京举行。本期的主题是&#xff1a;Enter AI native application。 到场的嘉宾有&#xff1a;超声波创始人杨子超&#xff0c;超声波联合创始人、和牛商业创始人刘思雨&#xff0c;蓝驰创投合伙人刘勇&#xf…

关于有源电力滤波器在地铁站低压配电系统中的应用分析

安科瑞 崔丽洁 摘要&#xff1a;作为国家提出的绿色电网、节能降耗已成为现代化企业努力的目标&#xff0c;也是企业急需解决的问题。作为地铁车站这类市政公共交通建筑的着重系统——配电系统。实现绿色电网实质上是解决电网中存在的各种电能问题&#xff0c;主要是涉及到谐波…

倍福CX9020 Windows CE6.0安装中文字库方法(附字库文件)

应用背景介绍 倍福的EPC产品有些是附带Windows CE系统的&#xff0c;例如CX9020&#xff0c;而且多数系统都是英文的&#xff0c;而且没有附带中文的字库&#xff0c;如果想要在PLC HMI中使用中文进行显示就无法实现&#xff0c;经常有工程师在电脑上编好程序和界面以后测试没…

10. GPIO中断

10. GPIO中断 回顾stm32中断系统STM32中断向量表中断向量偏移NVIC中断控制器 Cortex_A7 中断系统中断向量表GIC控制器中断IDGIC逻辑分块CP15协处理器c0寄存器c1寄存器c12寄存器c15寄存器 中断使能中断优先级设置优先级数配置 GICC_PMR抢占优先级和子优先级位数设置 GICC_BPR优先…

Linux---(五)三大工具yum、vim、gcc/g++

文章目录 一、yum工具1.Linux中安装软件的方法&#xff1a;2.什么是yum?3.yum源更新 二、Linux编辑器--vim1.IDE例子2.vim&#xff08;1&#xff09;vim的常用模式及切换模式&#xff08;2&#xff09;底层模式常用命令&#xff08;3&#xff09;插入模式常用命令&#xff08;…

C#操作注册表的方法

注册表是Microsoft Windows操作系统中的一个重要组成部分&#xff0c;用于存储和管理系统和应用程序的配置信息。它是一个层次结构的数据库&#xff0c;以树形结构组织&#xff0c;类似于文件系统中的文件夹和文件。 注册表存储了许多与操作系统和软件相关的信息&#…

分享Python的十大库,这你一定得知道!

文章目录 前言关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Python为我们提供了非常完善的基础库&#…

黑马程序员微服务SpringCloud实用篇02

SpringCloud实用篇02 0.学习目标 1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我…

力扣876:链表的中间结点

力扣876&#xff1a;链表的中间结点 题目描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5]…

计算机是如何进行工作的+进程和线程

一)计算机是如何工作的? 指令是如何执行的?CPU基本工作过程&#xff1f; 假设上面有一些指令表&#xff0c;假设CPU上面有两个寄存器A的编号是00&#xff0c;B的编号是01 1)第一个指令0010 1010&#xff0c;这个指令的意思就是说把1010地址上面的数据给他读取到A寄存器里面 2…

【C++】异常 智能指针

C异常 & 智能指针 1.C异常1.1.异常的抛出与捕获1.2.异常体系1.3.异常安全与规范1.4.异常优缺点 2.智能指针2.1.RAII2.2.智能指针的使用及原理2.2.1.auto_ptr2.2.2.unique_ptr2.2.3.shared_ptr2.2.4.shared_ptr的循环引用问题 & weak_ptr 2.3.定制删除器 1.C异常 C异常…