内存

CPU的数据都是来自主存储器(main memory),个人计算机的主寄存器主要组件是动态随机存取内存(Dynamic Random Access Memory,DRAM)

随机存储内存只有在通电时才能记录使用,断电后就消失了,因此也称这种内存为挥发性内存。

DRAM已经跟新了好几代,使用上较广泛的有SDRAM与DDR SDRAM两种,DDR SDRAM中又包含DDR1,DDR2,DDR3,DDR4,

表格中缺少了DDR4的介绍,可以搜到淘宝店中DDR4的频率最低频率2133MHz,最高4000MHz左右:

内存的多通道设计

传统的总线宽度大约为64位,为了加大宽度,芯片厂商将两个主存储器汇整到一起,

如果一个内存可以达到64位,那么两个内存就可以达到128位,也就是双通道的概念。

一般主板的内存插槽颜色分两种,1/3一种颜色,2/4一种颜色,是两对双通道,一般首选插在2/4插槽上,

使用双通道的两个内存最好是同一型号,更好兼容,不推荐放置三通道(即三个内存条),可能会使电压不稳。

DRAM 和 SRAM

除了主存储器,整部计算机中其实还有许多内存。

我们需要了解的是CPU内的第二层高速缓存,

缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。

我们知道CPU的数据都是由主存储器提供的,但CPU到主存储器之间还要通过内存控制器

但是如果某些很常用的程序可以放置到CPU内部,那么CPU的读取就不需要跑到主存储器重新读取了!

这对于效能会有更大的提升,所以有第二层快取(缓存)的设计概念,CPU、第二层缓存与主存储器关旭如图:

因为第二层缓存(L2 cache)整合到了CPU内部,所以这个L2内存的速度必须和CPU的频率相同,

使用动态随机存取内存(Dynamic Random Access Memory,DRAM)无法达到这个频率速度,

此时需要静态随机存储内存(Static Random Access Memory,SRAM)

SRAM在设计上使用的晶体管数量较多,价格高,不易做成大容量,但速度快,整合到CPU成为高速缓存加速数据的存取。

实际上除了第二层缓存,还有第一层缓存、第三层缓存,以下是概况,也可以了解更多详情:详情了解下各种高速缓存,走你!

一级缓存,是CPU的第一层高速缓存,主要分为数据缓存和指令缓存,这是对CPU性能影响最大的一层。

二级缓存,是CPU的第二层高速缓存,分内部和外部两种芯片,内部芯片速度基本上与CPU主频相同,而外部芯片只有主频的一半。

三级缓存,离CPU较远,读取速度没一级二级快,但一般三级缓存容量比前面两级大很多。

只读存储器(ROM)

考虑一个问题,主板上如果有网络卡或者显示适配器时,关于该功能是否启动以及该功能的各项参数,如何设置?

很多人设置过,也就是开机的时候按下Del,进入BIOS(Basic Input Output System)界面,BIOS是一套程序,

这套程序是写死在主板上的一个CMOS内存芯片中,这个芯片需要借助额外的电源发挥记录功能,所以你的主板上会有一颗电池!

这个CMOS内存芯片就是我们的主角:只读存储器(Read Only Memory,ROM)

ROM是一种非挥发性的内存,对于个人计算机很重要,是系统开机时首先读取的一个小程序!

引入一个新的概念韧体

韧体是一种软件,对于硬件内部而言非常重要,很多硬件上用ROM来写入韧体这个软件,用来控制开机时的各项硬件参数,例如BIOS就是CMOS芯片的一个韧体。

BIOS对于计算机系统是非常重要的,因为它掌握了系统硬件的详细信息和开机设备的选择等等,但随着计算机发展,BIOS程序代码也不是一成不变的,

在很多主板官网一直会更新BIOS的版本,而BIOS原本使用的是无法改写的ROM,因此无法修改BIOS的程序代码!

为此,我们现在用的BIOS通常是写入类似闪存(flash memory)或者EEPROM中的。

EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在即插即用。

快闪存储器(flash memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。这种科技主要用于一般性数据存储,以及在计算机与其他数字产品间交换传输数据,如储存卡与U盘。闪存是一种特殊的、以宏块抹写的EPROM。早期的闪存进行一次抹除,就会清除掉整颗芯片上的数据。

EPROM(Erasable Programmable Read-Only Memory)可擦可编程只读存储器。EPROM只能用紫外线擦除已有信息。

RAM、ROM以及硬盘的区别(转自百度)

ROM是只读存储器(Read-Only Memory),是计算机内部存储器中的一种,而硬盘是外部存储器,所以对于大学学子来说,考试时你如果把这两个混为一种东西绝对是错误的,当然,如果出选择题让你选,那么BIOS应该是用到ROM的那个。那么ROM究竟是干什么的,ROM和硬盘是否就没有任何关系呢?这就要从其发展历程说起,早期,乃至现在,我们的主要存储介质都是磁性存储,也就是磁盘,分成硬盘和软盘两种,硬盘不太适合做移动存储,因为我们知道硬盘磁头容易损失,不耐摔,而且体积较大,就算是缩小容量仍然很难缩小其体积,软盘容量过于小,不够用,而光盘虽然容量大但不易擦写,同时体积也不够小,这时就适合使用半导体存储介质——ROM和RAM,RAM断电丢失数据,但是读写速度快,多用作电脑手机内存,ROM用来嵌入电脑主板或者做移动存储介质就很合适了,其体积够小,提供的容量可以比光盘和软盘的大,速度也更优,但缺点是成本更高,而早期的ROM因为技术不成熟所以无法擦写,出厂后就只能读数据,所以叫只读存储器,后来随着技术的发展,在ROM的基础上出现了新的半导体存储介质EPROM和EEPROM,这两种可擦写,这就不符合ROM的命名,但是由于是在ROM的技术上衍变出来的,所以延用了一部分原来的叫法,此时非易失的半导体存储介质开始得以广泛应用,被大量用于电脑主板的bios和嵌入式存储,而后来在这两种技术的发展上又发展出了NAND FLASH闪存,这就是我们现在用的U盘中用到的技术,同样,因为其体积小,容量和速度均不错,现在手机存储中的emmc颗粒也是用的这种技术,所以有手机厂商就把手机的存储容量约定俗成为ROM,其继承了ROM断电不丢失数据的特性,而且有着更快的速度。

那么电脑硬盘和ROM有什么关系呢?由于ROM和硬盘都可以存储数据而且断电不会丢失,而有都广泛运用于电子产品中,所以有人就对两者产生了混淆。硬盘分为两种,一种是机械硬盘(即磁盘HDD),一种是固态硬盘(SSD),磁盘和ROM没什么关系,但是固态硬盘就不一样了,固态硬盘用到的颗粒也是基于NAND FLASH技术,和u盘以及手机存储有点相似,所以说硬盘和ROM还是有关系的,固态硬盘的储存颗粒是ROM技术发展的产物,但不能说ROM就是硬盘。

Chapter Zero 0.2.2 内存的更多相关文章

  1. netty源码解析(4.0)-27 ByteBuf内存池:PoolArena-PoolThreadCache

    前面两章分析的PoolChunk和PoolSubpage,从功能上来说已经可以直接拿来用了.但直接使用这个两个类管理内存在高频分配/释放内存场景下会有性能问题,PoolChunk分配内存时算法复杂度最 ...

  2. Android Studio 1.0.2 设置内存大小

    http://www.linuxidc.com/Linux/2015-04/116457.htm Android studio 1.0.2默认最大内存是750M,这样跑起来非常的卡,难以忍受,机器又不 ...

  3. .NET 4.0中使用内存映射文件实现进程通讯

    操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段.Win32 API中也包含有创建内存映射文件的函数,然而,这些函数都 ...

  4. malloc(0)分配多少内存?(译文)

    原文地址:http://prog21.dadgum.com/179.html 在大多的系统中,这个C的小程序将会吸收全部空闲的内存. ){ ); } 在我们聊malloc(0)之前,让我们看看mall ...

  5. 结合源码看nginx-1.4.0之nginx内存管理详解

    目录 0. 摘要 1. nginx内存结构设计 2. nginx内存数据结构 3. nginx内存管理原理 4. 一个简单的内存模型 5. 小结 6. 参考资料 0. 摘要 内存管理,是指软件运行时对 ...

  6. netty源码解解析(4.0)-23 ByteBuf内存管理:分配和释放

    ByteBuf内存分配和释放由具体实现负责,抽象类型只定义的内存分配和释放的时机. 内存分配分两个阶段: 第一阶段,初始化时分配内存.第二阶段: 内存不够用时分配新的内存.ByteBuf抽象层没有定义 ...

  7. netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk

    PoolArena实现了用于高效分配和释放内存,并尽可能减少内存碎片的内存池,这个内存管理实现使用PageRun/PoolSubpage算法.分析代码之前,先熟悉一些重要的概念: page: 页,一个 ...

  8. netty源码解析(4.0)-26 ByteBuf内存池:PoolArena-PoolSubpage

    PoolChunk用来分配大于或等于一个page的内存,如果需要小于一个page的内存,需要先从PoolChunk中分配一个page,然后再把一个page切割成多个子页-subpage,最后把内存以s ...

  9. netty源码解析(4.0)-28 ByteBuf内存池:PooledByteBufAllocator-把一切组装起来

    PooledByteBufAllocator负责初始化PoolArena(PA)和PoolThreadCache(PTC).它提供了一系列的接口,用来创建使用堆内存或直接内存的PooledByteBu ...

随机推荐

  1. VSCode运行时弹出powershell

    问题 安装好了vscode并且装上code runner插件后,运行代码时总是弹出powershell,而不是在vscode底部终端 显示运行结果. 解决方法 打开系统cmd ,在窗口顶部条右击打开属 ...

  2. Oracle Rac to Rac One Node

    =~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2020.01.14 20:05:12 =~=~=~=~=~=~=~=~=~=~=~= [oracle@rac01 ~]$ srvc ...

  3. 技术基础 | Apache Cassandra 4.0基准测试

    Apache Cassandra 4.0已经发布了Beta版,这是第一个支持JDK 11及更高JDK版本的Cassandra版本.   时延对于Apache Cassandra用户来说是个显而易见的关 ...

  4. Go 如何实现热重启

    https://mp.weixin.qq.com/s/UVZKFmv8p4ghm8ICdz85wQ Go 如何实现热重启 原创 zhijiezhang 腾讯技术工程 2020-09-09  

  5. spring 之7种重要设计模式

    Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实现方式: BeanFactory.Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获 ...

  6. asctime_s asctime

    asctime_s  asctime // rand随机数.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include "pch.h ...

  7. springboot项目-声明式事务失效

    1.项目背景 集成了shiro配置 2. 项目分析 由于ShiroFilterFactoryBean实现了FactoryBean接口,所以它会提前被初始化.又因为SecurityManager,Sec ...

  8. pikachu靶场XSS详解

    一.反射型XSS 1.get型 源码前后区别 前 <form method="get"> <input class="xssr_in" typ ...

  9. office提示“应用程序无法正常启动(0xc0000142)。请单击确认关闭应用程序”

    打开word文档,突然弹出如下提示框: 网上查询,说应用程序无法正常启动(0xc0000142)的原因可能是缺少组件导致的.控制面板 - 时钟和区域 - 更改日期.时间或数字格式 - 管理 - 更改系 ...

  10. Python 中 sorted 如何自定义比较逻辑

    在 Python 中对一个可迭代对象进行排序是很常见的一个操作,一般会用到 sorted() 函数 num_list = [4, 2, 8, -9, 1, -3] sorted_num_list = ...