计算机科学: 寄存器&内存
参考:
【十分钟速成课:计算机科学】6.寄存器&内存
要想聊寄存器Latch,首先要聊内存。什么是内存?
Memory,就是储存信息的东西。
我们都玩过单机游戏,如果突然关机,游戏结束但是没有存档,那么下次就必须从新再玩。
这是因为游戏储存进度而使用的内存是RAM,类似于人的短期记忆。
那么问题来了,我们如何储存信息?
我们知道对于计算机来说,信息就是1或者0
因此,我们只要控制每一个位置的信息是1,或是0不变,就能把信息保存下来。
现在来聊点实际的:
如何储存信息1?
来看这个门:
这个门的输出永远是1,不论A的输入是什么。
同理,这个门的输出永远是0
我们可以结合这两个电路,得到 :
我们通过置1或者置0的电路输入信号,让他的输出永远是1或者0。
它记住了一个信息!!! That‘s what we call Memory~
这叫做锁存,因为它锁住了一个值。
再优化一下:
这个电路由两个信号控制,enable 和 Input 如果enable了,就允许数据读入,否则无法读入数据。
接下来,把他抽象成一个黑盒就好了。这个盒子能够储存一个bit
我们可以并排8个latches 这就是一个八位寄存器。其中八个成为位宽
然而一个寄存器有三条线,Input output enable ,对于一个128位宽的寄存器来说,
即使enable只用一根线来代替,那也是128*2+1 根线。
如何减少?
Matirx
我们把256个寄存器放入16 *16 的矩阵中:
其中,我们通过导通某行和某列交叉线的位置上寄存器的enable,而其他寄存器上的enable 关闭。
这可以通过与门实现。
然后让数据在电路里流过,但是只有enable 打开的寄存器才能读入数据。
这样只需要35条线。
那么如何指定交叉位置?
比如说我想指定第12行,第8列的位置。
首先地址最多有6行,那么只需要用四位二进制数表示就好了。
12=1100
8=1000
那么,我们把12行8列对应的地址就可以表达为:11001000(就是12的二进制表示和8的二进制表示连接起来)
我们现在知道了如何将地址存储为二进制数了,
那么如何解读成第几行第几列呢、
here comes mutilplexer
现在我们把一个128位的寄存器抽象一下:“
他需要你输入一个储存的地址,和read enable write enable 还有data
这样一个256位的 memory 也没啥用,我们需要更大的内存,所以把它叠起来。
计算机科学: 寄存器&内存的更多相关文章
- 汇编寄存器(内存访问)基础知识之三---mov指令
1 内存中字的存储 一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位. 注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址) (1 ...
- CPU/寄存器/内存
因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来. CPU,全名Central Processing Unit(中央处理器). ...
- 【reverse】逆向2 寄存器与内存
[reverse]逆向2 寄存器与内存 1.通用寄存器 主要用途其实没必要记下来,因为只是CPU建议你这么做. 寄存器需要按照顺序被下来 32位就是可以存32个0或1 所以存储范围就是0-0xFFFF ...
- 5. c++ 内存管理 C/C++ 内存机制
参考自:http://blog.csdn.net/wpf_ml/article/details/7759911 1. 内存,Cache,寄存器内存:通常计算机将数据存放在物理内存,cache及寄存器中 ...
- X86-64寄存器和栈帧
简介 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果.除此之外,它们还各自具有一些特殊功能.通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途, ...
- 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))
java虚拟机的内存区域分配 在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...
- JVM内存划分以及值传递和引用传递的区别
Day05_SHJavaTraing_4-8-2017 一.JVM对自己的内存划分为5个区域 1.方法栈:所有的方法运行的时候进入内存 2.堆:存储的是容器和对象 3.方法和数据共享 ...
- 【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )
[嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 ) 一. 内存 ...
- DirectX11 With Windows SDK--29 计算着色器:内存模型、线程同步;实现顺序无关透明度(OIT)
前言 由于透明混合在不同的绘制顺序下结果会不同,这就要求绘制前要对物体进行排序,然后再从后往前渲染.但即便是仅渲染一个物体(如上一章的水波),也会出现透明绘制顺序不对的情况,普通的绘制是无法避免的.如 ...
随机推荐
- 写了两年的一本.NET书现在终于在北京最大的新华书店上架了,然而我却很难找到工作了。
两年前,有几个出版社的编辑在QQ上跟我联系写书的事情,好奇为什么出版社会找到我这样一个很普通的.NET技术人员,其中一个编辑说他们分析了很多博客园博主的文章阅读量和写作质量,觉得我的博客还是不错的.尽 ...
- 前端面试题CSS-div宽度设置为100%,设置属性margin-left和margin-right时出现的问题
前端面试题CSS-div宽度设置为100%,设置属性margin-left和margin-right时出现的问题 div格式如下 <div class="a"> < ...
- Jmeter对数据库做压力测试
一.环境:apache-jmeter-5.0,Oracle11g.windows7.jdk1.8.ojdbc14-10.2.0.2.0.jar二.操作配置:2.1.启动Jmeter Jmeter初始化 ...
- Kubernetes【K8S】(一):Kubernetes组件
什么是Kubernetes Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化.Kubernetes拥有一个庞大且快速增长的生态系统. ...
- Spring Data JPA 整合Spring
1.1 Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的.hibernate是一套成熟的ORM框架,而且Hibernate实现 ...
- EF生成模型时Disigner中无信息
原博文 http://blog.sina.com.cn/s/blog_a1b63a730101ezs4.html 说明 DbContext是对ObjectContext的简化封装.原来的ObjectC ...
- 基于nginx负载均衡及frp的内网穿透实例3-多用户多网站共用80端口
原文地址:点击跳转 最近frp用户量有点多,而且很多用户都是想把部署于本地或者内网的web服务暴露至公网,之前提到过,暴露到公网之后如果一般都需要用域名:端口的方法来访问,但是没有人会喜欢用这种方式访 ...
- mysql 5.7 主从复制搭建及原理
1. 主从复制搭建 1.1 环境准备 OS: Ubuntu 18.04 master: 192.168.0.3 slave: 192.168.0.6 1.2 安装依赖包 # Ubuntu apt-ge ...
- git 清除本地git commit的内容
由于我经常git add . , 然后再git commit -m "文字说明",这样有时候代码嵌套再另一个项目里面,就会把外面的项目一起提交了,导致提交的代码不是我想要的.小菜鸟 ...
- 手把手教你用SonarQube+Jenkins搭建--前端项目--代码质量管理平台 (Window系统)
前言 网上教程大多介绍的是Linux系统下SonarQube+Jenkins如何使用,这是因为这两款软件一般都是部署在服务器上,而大多数服务器,采用的都是Linux系统.大多数服务器用Linux的原因 ...