划重点来了,计算机组成原理之计算机存储介绍与汉明码纠错

2024-05-30 01:52

本文主要是介绍划重点来了,计算机组成原理之计算机存储介绍与汉明码纠错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

存储器

98669661b134473ca1593b22f3d9fc1c.jpg

 

1. 分类

(1)按存储介质分类:

存储介质是能寄存”0“或"1"两种代码的物质或元器件。

包括半导体器件,磁性材料,光盘等。

半导体存储器:半导体器件组成的存储器。断电后数据会丢失,易失性存储器。

磁表面存储器:在金属或塑料基体的表面涂的一层磁性材料。按载磁体形状不同,分为磁盘磁带,磁鼓。

磁芯存储器:硬磁材料做成的环形器件 。

光盘存储器:激光在介质上读写。

(2)按存取方式分类:

33f3ad552aec4a4bb0d0b2188d7cf4a1.png

 

随机存储器:RAM(random access memory)

数据在存储单元随机存取。存取时间与存储单元位置无关。

只读存储器:ROM(read only memory)程序执行的时候,只能读出,不能写入。

半导体ROM器件分为MOS型和TTL型。

分为:

1700d1ed70cc455d9316a961f2c8ff6c.png

 

1)掩模型只读存储器MROM(masked ROM),

2)可编程只读存储器(programmable PROM):一次性编程,熔丝熔断原理。

3)可擦除可编程只读存储器(erasable programmable ROM ) EPPROM.

改写的两种方法:紫外线照射和电气方法擦除。

最近出现的FLASH具有EEPROM特点,速度比它更快。

顺序存储器:对存储单元读写时候,按存储单元的先后顺序寻找地址的存储器称为串行访问存储器。又叫顺序存储器,比如磁带,需要从头开始读取。

直接存储器:如磁盘,属于部分访问的存储器,先直接指出存储区域-磁道,然后顺序访问,直到找到,所以前半段是直接访问,后半段是串行访问。

1b33afe5daa2466b841480ecaba05fd8.jpg

 

(3按照计算机中的作用

主存储器:可以和CPU直接交信息。

辅助存储器:存放当前不用的数据和程序。

主存与辅存相比:主存容量小,速度快,每位价格高。

缓冲存储器:用在速度不同的存储器之间。

存储器的两个层次:

主存-缓存层次和主存-辅存层次;

主存-缓存层次:缓存比主存储器容量更小,解决CPU和主存速度不匹配的问题。

主存-辅存层次:解决存储系统容量问题,辅存比主存容量更大,存放大量未用到的信息。

51dd11b6e53445d1bf6038948ac127a1.png

存储的技术指标

(1)存储容量:

存放二进制代码的总位数。

存储容量=存储单元个数*存储字长;

地址寄存器MAR的位数反映了存储单元的个数。MAR为16位表示,有2^16个存储单元(即64K个存储字,1k=1024).即64k个存储字。

数据寄存器MDR的位数反映了存储字长。

(2)存储速度:

0ac695a4034c416c833122175b028fc3.png

 

存储速度由存取时间和存取周期表示。

存取时间:启动一次操作到完成该操作用时。

存取周期:存储器连续两次独立操作需要的最小间隔时间。

(3)存储器带宽:

表示单位时间存储器读取的信息量。zu

提高带宽的方法:

(1)缩短存取周期。

(2)增加存储字长。

(3)增加存储体。

剖析CPU与芯片的连接方式

设CPU有16根地址线,8根数据线,并用;

存储器的校验

64411a8802794d07967e08ac7070f487.jpg

 

汉明码校验:

汉明码:具有一位纠错能力,不仅能发现错误,还能找出错误位置并纠正。

纠错理论得:任何一种编码是否具有检测能力和纠错能力,由编码的最小距离有关;

编码的最小距离:在一种编码系统中,任意两组合法编码之间的最小二进制位数的差异。

L-1=D+C;且D>=C;

最小距离L越大,检测错误的位数D越大,纠正错误的位数C也越大,且纠错能力等于检错能力。

设要检测的二进制代码位n位,需要添加k位检测位,组成n+k位的代码。

2^k>=n+k+1;

064f5608bf564778ab68d974c1eb740f.jpg

 

我们只要知道要检测的二进制的代码位数,即可计算出检测位位数。

接下来确定这k位检测位位置以及取值。

设要检测的n为和k位检测码一共组成n+k位。

设k位检测位为ci(i=1,2,4,8...),安插在n+k位组合位上,检测位取值用来对不同小组奇偶检测;

c1:检测的小组包括1,2,4,8...位。

c2:检测的小组包括2,3,6,7,20,22,24,25...位。

c4:检测的小组包括4,5,6,7,12,13,14,15..位。

c8:检测的小组包括8,9,20,22,22,13,14,15,24,..位。

034babd13d7d409da6a83713d61a4093.png

如图,每个ci组,连续i个数字,间隔i+1位;

将纠错位ci加入;

例题:

给大家举个例子:这里假设发送abcd四位数据,即二进制位数n=4,k=3,要添加3位检测位,

位置为第1,2,4位(由之前所说可知)

6ae5618667aa4711b80c86ed2b535e6b.png

之后根据奇数校验还是偶数校验,根据各自小组中1的位数(去除本身,即每个ci所处位)给每组ci取值1或者0达到奇数校验或者偶数校验的目的,(奇数校验,如果小组成员的1的个数为奇数,那么校验位ci取值0,否则为1,使1的个数为奇数个,偶数校验与此类似)。

这里采用偶校验,

令二进制数abcd=0101;

c1:第1,3,5,7位,1的个数为2,c1为0;

c2:第3,6,7位,1的个数为1,c2为1;

c4:第5,6,7位,1的个数为2,c4为0;

即汉明码0100101;

汉明码纠错过程:

e15a80892a904086a994c96f823fdcf0.jpg

 

将收到的每个小组整体成员进行检测(包括ci检测位),

p1:汉明码第1,3,5,7位,1的个数2,p1为0;

p2:汉明码第2,3,6,7位,1的个数为2,p2为0;

p4:汉明码第4,5,6,7位,1的个数为2,p4为0;

如果都为0,说明传输正确;

假设传输错误,0100101传输为0100111,那么再次计算:

使用偶校验,因为发送时检验使用的是偶校验,与其保持一致。

e:汉明码第4,5,6,7位,1的个数为3,e为1;

f:汉明码第2,3,6,7位,1的个数为3,f为1;

g:汉明码第1,3,5,7位,1的个数2,g为0;

可见e,f值为1,出现错误;

只要对比校验值为1中相同的位数,但该位数不能与别的检验值的位数重合,进一步确定出错位数;e,f中第6,7位相同,那么进一步查看,第7位与别的检验值g的第7位重合,所以第六位出错。

有趣的是efg值组成的二进制数110,为6,正是出错位数。

发现出错位数直接纠错即可,因为二进制每位只有0或者1两种可能。直接出错位取反即可。

 

这篇关于划重点来了,计算机组成原理之计算机存储介绍与汉明码纠错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015246

相关文章

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操