关于组成原理:海明码的原理

海明码根本思维是分组偶校验,由信息位(n)和校验位(k)组成,海明码的校验位计算公式:2^k >= n+k+1 2^k 示意:k 个校验位对应 2^k 种状态n + k + 1 示意:n + k 代表任何一位都可能出错,1 代表一种正确的状态原理假如数据位 D8~D1 = 10101011,求海明码? 首先算出校验位,代入公式 2^k >= n + k + 1 n = 8 -> k = 4校验位算出是 4 位,记为:P1~P4 海明码位数由信息位和校验位组成:8 + 4 = 13,记为 H1~H12 校验位所在的地位是 2^(k-1),P1~P4 对应 H1、H2、H4、H8,P5 是偶测验,在最后面 H13;信息位填入剩下的空位: H12H11H10H9H8H7H6H5H4H3H2H1D8D7D6D5P4D4D3D2P3D1P2P11010 101 1 D1~D8 曾经填入相应的地位,当初须要计算残余的 P1~P4 的值。 求校验位须要先晓得信息位所在位置的二进制(k 位,对应校验位) 信息位所在位置:H3/H5/H6/H7/H9/H10/H11/H12信息位的最初一位为 P1,最初第二位为 P2,以此类推 P4P3P2P1H30011H50101H60110H70111H91001H101010H111011H121100校验位对应各信息位二进制数为 1 的组合: P1 对应的信息位 H3/H5/H7/H9/H11P2 对应的信息位 H3/H6/H7/H10/H11P3 对应的信息位 H5/H6/H7/H12P4 对应的信息位 H9/H10/H11/H12将各信息位的值进行异或运算,求得校验位的值: ...

July 27, 2022 · 2 min · jiezi

关于组成原理:独家详解Intel主板下的『LockStep』内存模式以及为何开启它能让-ECC-内存比可靠更可靠

笔者有一台退役多年的 X79 芯片组台式机,装备了 E5-2680 处理器,因为最近须要降级更大容量的 ECC 内存,便为其刷入了新的 BIOS。在配置 BIOS 的过程中,忽然发现 BIOS 设置里多了一项内存模式,即题目中的 LockStep 模式,好奇心驱使下,笔者在搜索引擎中搜素 LockStep,却所获不多。本文将为读者分享我在摸索这一模式过程中的发现,以及解释该模式为什么能让 ECC 内存比牢靠更牢靠。本文原载于未命名小站,由作者自己同步至SegmentFault,转载请注明原作者博客地址或本链接,谢谢!0x01 景象首先介绍一下笔者的电脑配置: CPU:Intel E5-2680芯片组:X79内存:4*8GB DDR3 ECC 1333MHz 如序言所述,笔者在 BIOS 的设置中找到了一个名为内存模式(Memory Mode)的选项,其中蕴含四项: 独立(Independent)镜像(Mirroring)锁步(Lock Step)热备(Sparing) 独立、镜像、热备都十分直观,能够类比为磁盘阵列中的 JBOD 、RAID10 和RAID 热备,但『锁步』是什么意思呢? 笔者抱着好奇心关上了 Lock Step 模式,重启后发现零碎一切正常,仍旧可能辨认 32GB 的内存,但存在两处奇怪的景象: Windows 辨认的内存插槽从 4*8GB 变成了 2*16GB ,和物理内存不统一: 应用 AIDA64 对内存读写速度进行基准测试,读写速度均从 40GB/s 升高到了 20GB/s 以上景象仿佛表明,开启了 Lock Step 之后,相邻的内存被合并了,并且通道数也从 4 通道变成了 2 通道。 但这个模式到底有什么意义呢?为什么它会在不影响容量的状况下导致通道数降落,进而影响性能呢?它损失了性能,换取了什么呢? 0x02 摸索1. 寻找思路带着泛滥疑难,笔者关上了搜索引擎,尝试搜寻 Lock Step in Computer(因为 Lock Step 作为一个单词,其实和电脑没有关系,指的是军事上军人紧贴着同步前行的步调),却搜到了大量和内存无关的内容: ...

December 15, 2021 · 3 min · jiezi

关于组成原理:备战软考数据的表示

前言最近在备战软考,温习到数据表示方面相干的常识,所以在这里做一下记录,也不便大家参考。 什么是 R 进制对于 R 机制,如果要实现与十进制的转换,则应用 按权开展法,其具体操作为: 将 R 进制数的每一位数值用 $R^k$ 的模式示意,即幂底数为 R,指数为 k,k 与该位和小数点间的间距无关。当该位位于小数点右边时,k 则是该位和小数点之间数码的个数;而当该位维语小数点左边时,则 k 是负值,其绝对值为该位和小数点之间数码的个数加 1。比方二进制和十进制之间的转换: $10111.01 = 1* 2^4+1*2^2+1*2^1+1*2^0+1*2^{-2}$。 再比方七进制和十进制之间的转换:$403.02 =4*7^2+3*7^0+2*7^{-2}$。 进制之间的转换十进制转 R 进制应用 短除法,比方咱们要将 $100$ 转换为二进制数,则有如下过程,最终的后果为 $1100100B$。 二进制转八/十六进制假如咱们有一个二进制数 $100010010011$,如果咱们要将其转换为八进制数,一个八进制数须要 8 个基数来示意,所以须要 3 位二进制来示意。那么转换过程如下,即对应的八进制数为 $4223O$。 而如果咱们将要将其转换为十六进制数,一个十六进制数须要 16 个基数来示意,所以须要 4 位二进制来示意。则对应的转换过程如下,即对应的十六进制数为 $893H$。 码制计算机中,无论咱们要存储任何数据,它都会转换为二进制码进行存储。当初的计算机中,如果咱们要进行加法运算操作,那么咱们很容易实现,因为当初的计算机体系大多采纳冯诺依曼所提出的经典计算机体系结构,其中就蕴含了加法运算器。但如果咱们要进行减法运算,那么此时就犯难了。没有减法运算器,咱们要如何实现减法运算呢?而针对这一问题,原码、反码、补码就产生了。咱们罕用这三种码来示意一个机器数,从而解决计算机做减法的问题。上面是几个数的实例,上面就别离来看看几种不同表示法的具体常识。 1-1+0-0原码$0000 0001$$10000001$$00000000$$10000000$反码$00000001$$11111110$$00000000$$11111111$补码$00000001$$11111111$$00000000$$00000000$符号位正式理解不同码制之前,咱们先来看看符号位的定义。所谓符号位,是在内存中寄存的最右边的一位,如果该位为 $0$,那么阐明这个数示意的是负数;而如果该位为 $1$,那么就阐明这个数示意的是正数。 原码是一种最简略的机器数表示法,咱们常用最高位来示意符号位,而用余下的其余位来寄存该数二进制的绝对值。也即除开符号位之外,原码的数据位就是一个数的二进制绝对值示意。 在下面的示例中,咱们发现,尽管 $0$ 和 $-0$ 的原码不统一,然而次要还是符号位的不同,咱们再用下面的示例来进行运算: $$0001 + 0010=0011,1 + 2 = 3$$ $$0000 + 1000= 1000,0 + (-0)=-0$$ ...

September 25, 2021 · 1 min · jiezi

关于组成原理:寻址方式数据寻址

数据寻址指令分为操作码和地址码,依据地址码寻找指令或者操作数有很多种形式。依据地址码找指令的叫做指令寻址,被寻找的指令为吓一跳欲执行的指令。依据地址码找操作数的叫数据寻址。明天着重讲一下数据寻址的几种形式。寻址形式对于对于编译原理很重要。 寻址特色指令有10种寻数据寻址形式,那机器拿到一条指令后如何晓得用什么寻址形式呢?咱们在地址后面退出4个01数代表不同的寻址形式,咱们称为寻址特色。 对于多地址指令,在每一个地址前退出寻址特色,代表他别离是什么寻址形式。 间接寻址前面的地址代表咱们想要寻找的数的地址。只须要两次次访问内存,简称两次访存(取指令也算一次)。内存读写绝对于cpu来说很慢,因而访存次数是一个很重要的指标。 间接寻址指令的地址不是操作数的真正地址,而是操作数无效地址所在的存储单元的地址,也就是操作数地址的地址。访存次数取指令访存一次取操作数访存两次一共三次。咱们上述都是找的地址的地址,称为一次间接寻址,还有屡次间接寻址。如两次寻址,原理相似,就是嵌套次数不同。这样减少了访存次数。为什么要有间接寻址呢?1.扩充寻址范畴,如果地址A的位数小于无效地址EA的位数,所以EA能够扩充寻址范畴,能够找到更多的数。2.如果一个操作数的地址会产生变换,间接寻址不须要批改指令。多级间接寻址相比一级间接寻址有利于程序的多级调用,这里不再讲述。 寄存器寻址寄存器寻址是指地址代表操作数所在的寄存器编号(寄存器地址),寄存器存在于cpu中,相较于内存能够很快的拜访。并且寄存器数量较少(读写速度越快,造价越低廉,数量越少),所以须要的地址位数更少。取指令访存一次,取操作数不访存,一共访存一次。 寄存器间接寻址类比于间接寻址,寄存器间接寻址的地址是一个寄存器地址,此寄存器寄存操作数所在主存单元的地址。取指令访存一次,取操作数访存一次,一共访存两次。长处是比间接寻址更快。 隐含寻址并没有给出具体的地址,而是指令中隐含操作数的地址如图,给出一个操作数的地址,另一个操作数隐含在ACC,实现算数运算。有点有利于缩短指令字长。 立刻数寻址立刻数寻址的地址不是一个地址,而是操作数自身,又称作立刻数。取指令访存一次,总共访存一次。 堆栈寻址操作数寄存在堆栈中,隐含应用堆栈指针作为操作数地址。堆栈分为硬堆栈与软堆栈,硬堆栈的数据寄存在寄存器中,软堆栈的数据寄存在主存中。退出一个指令是执行家法指令,会顺次POP出栈顶的两个寄存器中的数,进行相加操作后再PUSH回栈顶。

September 11, 2021 · 1 min · jiezi

关于组成原理:主存储器的构成

前言上次咱们介绍了在执行一段程序中CPU如何与主存交互,以及CPU与主存的根本形成。主存次要由MAR,MDR,主存储体形成,而主存储体只有存储的是01数据。读数据的时候,咱们向MAR传入想要获取的数据的地址,就能够从MDR获取想要的数据,写数据的时候,CPU将想要把数据想要写入的地址放入MAR中,并把想要写入的数据放入MDR中,主存就会往存储体写入地址。 存储体里的数据是一串一串数据存储,每一串数据领有一个地址,咱们取数据时也是一串一串的存取。咱们称这个串的长度为存储单元。上面让咱们看看主存是如何实现数据存储的性能的。 存储单元一个存储元存储一个0或者1数据,次要为存储在电容上,MOS管管制输出或输入。如果电容上极板为5v,给MOS管1信号时,存储元接通,输入5v信号,也就代表输入1,输入0同理。当写入数据时,也要给MOS管1信号,同时给进口一个5v电压,电容下级板就会放弃5v。咱们将多个存储元串联,形成一个存储单元,存储单元贮存一串二进制数据。咱们给上边的红线一个高电平,代表读取上边的存储单元数据,上边的存储单元里每一个存储元存储的数据就会通过绿线输入进去。实现一次数据的读取。读个存储单元形成一个存储体。咱们将管制每一个存储单元的线接通到译码器上,译码器输出存储单元序号(地址),通过译码器变为某根输入为1,使得数据读出,这就实现了依据地址读数据。为了管制主存读还是写,咱们在加上读控制线与写控制线,同时退出片选线,代表这块芯片被选入。咱们将方才的电路封装,就是这个样子。一个内存条领有很多个芯片,如上图一个内存条由8个芯片形成,咱们想要的数据只存储在某一块芯片上,所以咱们须要通过一个信号使得某个芯片工作,而其余芯片不工作,这就是片选线的作用。 减少主存的存储字长-—位扩大 减少主存的存储字数--字扩大如果我有8片8k1位的存储芯片,想组成一块8k8位的主存,就须要用到位扩大。如果我有两片8k8位的存储芯片,想组成一块16K8位的主存,就须要用到字扩大。抉择哪片芯片的线路叫做译码器。如果咱们须要接4片芯片,就须要一个2—4译码器。 字位扩大将二者组合

August 28, 2021 · 1 min · jiezi