首页 > 系统相关 >每个程序员都应该了解的内存知识(一): 南桥&北桥&内存

每个程序员都应该了解的内存知识(一): 南桥&北桥&内存

时间:2024-03-29 20:00:35浏览次数:29  
标签:北桥 每个 南桥 程序员 内存 DRAM 电容器

南桥&北桥&内存

结构

每个程序员都应该了解的内存知识.pdf - p5 - 每个程序员都应该了解的内存知识-P5-20240327103419

功能

每个程序员都应该了解的内存知识.pdf - p5 - 每个程序员都应该了解的内存知识-P5-20240327104347

北桥

主要是连接CPU以及RAM以及南桥, 作为连接通路

南桥

连接其他系统设备, 也叫做I/O桥, 比如 PCIE / SATA / USB总线....

问题

  1. 所有的访问都需要经过北桥, 导致北桥需要一个非常巨大的带宽
  2. 内存访问的延迟问题

集成内存控制器

每个程序员都应该了解的内存知识.pdf - p7 - 每个程序员都应该了解的内存知识-P7-20240328111248

RAM

静态RAM (SRAM)

每个程序员都应该了解的内存知识.pdf - p8 - 每个程序员都应该了解的内存知识-P8-20240328111544

优劣

  1. 一个单元需要六个晶体管
  2. 需要恒定的电源
  3. 状态稳定, 不需要刷新

动态RAM (DRAM)

每个程序员都应该了解的内存知识.pdf - p9 - 每个程序员都应该了解的内存知识-P9-20240328111804

动态随机存取内存(DRAM)的基本原理是使用一个电容器和一个晶体管来存储每一位(bit)信息。在DRAM单元中,电容器负责存储电荷,而晶体管则作为一个开关,来控制电容器的充电和放电。这里是DRAM的工作原理的详细介绍:

  1. 存储数据:在DRAM中,一个逻辑"1"是通过电容器充电来表示的,而逻辑"0"则是通过电容器放电来表示的。当写入数据时,控制电路会使晶体管导通,从而允许电流充入或从电容器排出,根据需要存储"1"或"0"。
  2. 读取数据:要读取存储的信息,控制电路会再次使晶体管导通。这时,电容器中的电荷会被转移到一个感应电路上。感应电路检测电荷的存在与否,并将其转换为数字信号,即"1"或"0"。
  3. 刷新操作:电容器会因为自身的漏电现象以及周围环境的干扰而逐渐失去电荷。为了维持数据的准确性,DRAM需要定期进行刷新操作。DRAM的刷新是通过重新充电存储"1"的每个电容器来实现的。这通常是通过一种称为"自动刷新"的过程来完成的,其中DRAM芯片会自动循环遍历所有的存储单元,并重新充电。
  4. 寻址:DRAM芯片包含了大量的存储单元,它们被组织成一个二维数组。每个存储单元的位置由行地址和列地址共同确定。当CPU或其他设备请求访问特定的存储单元时,控制电路会先激活对应的行(称为行选通或RAS),然后激活对应的列(称为列选通或CAS),以选中特定的存储单元进行读取或写入操作。

两种RAM的比较

  1. SRAM的速度更快, 但是价格高, 容量低
  2. DRAM访问速度慢, 但是实现简单, 容量高

标签:北桥,每个,南桥,程序员,内存,DRAM,电容器
From: https://www.cnblogs.com/pDJJq/p/18104509/southern-bridge-zvnaeq

相关文章

  • 每个程序员都应该了解的内存知识(二): CPU Cache
    CPUCache架构每个程序员都应该了解的内存知识.pdf-p22-每个程序员都应该了解的内存知识-P22-20240328112647​​每个程序员都应该了解的内存知识.pdf-p23-每个程序员都应该了解的内存知识-P23-20240328112807​​每个程序员都应该了解的内存知识.pdf-p23-每个......
  • Lec3 Lec4: 虚拟内存和RISC-V寄存器
    虚拟内存使用虚拟内存主要为了实现隔离内存隔离,所有程序指令存放在一个物理内存上,如果一个指令的操作位刚好是另一个指令的地址,那么会造成指令的丢失为了解决这个问题使用地址空间地址空间为每一个指令程序分配自己的地址空间,每个指令程序只能在自己的地址空间上操作。我们需......
  • 使用Andorid Studio解决app内存泄漏问题方法与实践
    某项目的app运行一段时间(切换页面、触发交互事件等)后就开始严重卡顿,使用top查看内存的使用情况,发现每次操作过后内存都有小幅增长,且永远不下降,存在内存泄露问题。目录1AndoridStudio内存泄露检测工具使用方法2内存泄露实例分析2.1页面切换后未主动释放​编辑2.2回调......
  • 如何在Java中读取超过内存大小的文件
    读取文件内容,然后进行处理,在Java中我们通常利用Files类中的方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大。此时,我们则需要采用另一种策略:部分读取它,并具有其他结构来仅编译所需的数据。接下来,我们就来......
  • 内存屏障
    编译器屏障Compilerbarrier/*The"volatile"isduetogccbugs*/#definebarrier()__asm____volatile__("":::"memory") 阻止编译器重排,保证编译程序时在优化屏障之前的指令不会在优化屏障之后执行。 CPU屏障CPUbarrierCPU级别内存屏障其作用有两个:防止指令之间的......
  • 在C语言中,可以通过指针来修改它所指向的内存位置的内容
    在C语言中,可以通过指针来修改它所指向的内存位置的内容。下面是一个例子:#include<stdio.h>intmain(){inta=10;//定义一个变量a,并初始化为10int*p=&a;//定义一个指针p,让它指向a的地址*p=20;//通过指针p修改它所指向的内存位置(即变量......
  • jvm内存模型
    1栈局部变量表存放局部变量局部变量表中的对象是指向堆中对象的地址操作数栈方法内的数据计算程序计数器程序一行代码运行后存放下一行代码的地址本地方法栈方法用native修饰动态链接符号引用转化为直接引用直接引用为方法区的具体地址方法出口2堆新生代伊甸......
  • cesium内存泄漏问题优化
    在vue开发SPA实际项目中,不止涉及到使用cesium可视化的大屏一个界面,在切换页面或者关闭该功能、弹框后,cesium加载的模型,图层,实体等等信息会缓存到电脑的显存中,但是切回cesium界面的时候,又会重新进入页面的挂载周期,进行新的cesium实例的渲染,显存占用会越来越大,达到临界值后,页面会......
  • 动态内存管理
    目录1.为什么要有动态内存分配2.malloc和free2.1malloc2.2free3.calloc和realloc 3.1calloc3.2realloc 4.常⻅的动态内存的错误4.1对NULL指针的解引⽤操作4.2对动态开辟空间的越界访问4.3对⾮动态开辟内存使⽤free释放4.4使⽤free释放⼀块动态开辟......
  • JVM(六)——内存模型与高效并发
    内存模型与高效并发一、java内存模型【java内存模型】是JavaMemoryModel(JMM)简单的说,JMM定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障1)原子性原子性在学习线程时讲过,下面来个例子简单回顾一下:问题提出,两个线......