存储系统 - Cache 的基本原理
Cache 存储器,电脑中为高速缓冲存储器,是位于 CPU 与内存间的一种容量较小但速度很快的存储器。CPU 的速度远高于内存,当 CPU 直接从内存中存取数据时要等待一定时间周期,而 Cache 则可以保存 CPU 刚用过或循环使用的一部分数据,如果 CPU 需要再次使用该部分数据时可从 Cache 中直接调用,这样就避免了重复存取数据,减少了 CPU 的等待时间,因而提高了系统的效率。
一、Cache 的数据交换过程Cache 和主存之间以块为单位进行数据交换。
Cache 和 CPU 之间以字为单位进行数据交换。
二、Cache 的结构Cache 被分成若干行,每行的大小与主存块相同。Cache 每行包含三部分,是 Cache 要保存的信息。tag 从 CPU 访问主存的地址中剥离得到、Block 是与主存交换的数据块、valid 表示 Cache 中的数据是否有效。
Cache 的基本参数如下:
参数
描述
S
组数
E
每组行数
B
块大小(单位:字节)
M
主存大小(单位:字节)
导出的基本参数如下:
Cache 的整体结构如下:
...
Spring Boot 实现文件上传
在实际项目中,文件上传是很多项目必不可少的一个功能。那么在 Spring Boot 项目中又是如何来实现文件上传功能的呢?一般来说,上传的文件可以保存到项目根目录下的某一文件夹中,但这样做显然是不太合适的。因此我们选择将文件上传到专门的文件服务器中。很多云计算厂商都提供文件存储服务。这里我选择的是阿里云的对象存储(OSS)。
一、配置OSS1. 导入SDK首先,你需要注册阿里云的账号并开通对象存储服务。在准备工作完成之后,需要导入 JAVA 版本的 SDK,这里使用 maven 进行导入
123456<!-- 阿里云OSS对象存储 --><dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version></dependency>
2. 修改配置文件导入完成后在 application.properties 配置文件中添加以下 ...
数据校验 - 4.海明校验
合理地增大校验位、增大码距,能够提高校验码发现错误的能力。因此如果在奇偶校验的基础上增加校验位的位数,构成多组奇偶校验,就能够发现更多位的错误并可自动纠正错误。这就是海明校验码(Hamming Code)的实质所在。
一、基本原理海明编码的实现原理是:在数据编码中加入几个校验位,并把数据的每一个二进制位分配在几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验组的值发生变化,这样不但可以发现出错,还能指出是哪一位出错。
如果出错代码的位置能够确定,将出错位的内容取反,就能够自动纠正错误,因此满足式(2-14)的海明校验码能够检测出一位错误并且能自动纠正一位错误。
二、编码方式
下面将举一个例子:
三、校验方式海明编码的检错需要根据“指错字”的结果进行判断:若“指错字”全为0,则表示信息无误;若“指错字”不全为0,则表示接收到的信息出错,并且“指错字”对应的十进制数就是出错位的位号。
接着举上面的例子:
注意!指错字能够正确指示出错位所在位置的前提是代码中只能有一个错误。如果代码中存在多个错误,就可能查不出来。所以海明校验码只有在代码中只存在一个错误的前提下,才能实现纠错。
...
数据校验 - 3.CRC校验
目前在磁介质存储器与主机之间的信息传输、计算机之间的通信以及网络通信等采用串行传送方式的领域中,广泛采用循环冗余校验码(Cyclic Redundancy Check, CRC)。循环冗余校验码是在 n 位有效信息位后拼接 k 位校验位构成的,它通过除法运算来建立有效信息和校验位之间的约定关系,是一种具有很强检错纠错能力的校验码。
一、基本原理
在传送过程中,发送方可以把M(x) - R(x)作为编好的校验码进行传送,接收方接收到编码后仍用原约定的多项式G(x)去除,如果能够整除,即余数为 0,则表示该校验码传送正确;如果不能够整除,即余数不为 0,则表示该校验码传送有误。
二、模2运算根据式(2-16)可知,M(x) - R(x)是减法操作,可能需要涉及借位运算,难以用简单的拼装方法实现编码。为了回避借位,CRC码采用了模2运算。
所谓模2运算是指以按位模2加为基础的二进制四则运算。模2运算不考虑进位和借位。
1. 加减运算加减运算本质上是异或运算,加不进位,减不退位。
2. 乘法运算模2乘法就是在做乘法时按模2加的规则求部分积之和,计算时不进位。
3. 除法运算模2除就是在做除 ...
数据校验 - 2.奇偶校验码
奇偶校验码是一种最简单、最常用的校验码。奇偶校验码广泛用于主存的读写校验或ASCII码字符传送过程中的检查。
一、编码方法组成奇偶校验码的基本方法是:在n位有效信息位上增加一个二进制位作为校验位P,构成n+1位的奇偶校验码。
奇偶校验码可分为奇校验和偶校验。
奇校验(Odd):使n+1位的奇偶校验码中1的个数为奇数。
偶校验(Even):使n+1位的奇偶校验码中1的个数为偶数。
二、校验方法采用奇偶校验的编码在传输过程中需要进行奇偶校验,以判断信息传输是否出错。
如果接收方接收到一奇校验码中1的个数为偶数,或接收到一偶校验码中1的个数为奇数,则表示接收到的编码中有一位出错。
三、检错能力奇偶校验码的码距为2,所以可以检出1位错或奇数位错,无纠错能力。
四、改进的奇偶校验
数据校验 - 1.数据校验的基本原理
数据在计算机系统内形成、存取和传送过程中,可能会因为某种原因而产生错误。为减少和避免这类错误,一方面需要从电路、电源、布线等硬件方面采取措施,提高计算机硬件本身的抗干扰能力和可靠性;另一方面可以在数据编码上采取检错纠错的措施,即采用某种编码方法,使得机器能够发现、定位乃至纠正错误。
一、 数据校验的基本原理
数据校验的基本原理是在正常编码中加入一些冗余位,即在正常编码组中加入一些非法编码,当合法数据编码出现某些错误时,就成为非法编码,因此就可以通过检测编码是否合法来达到自动发现、定位乃至改正错误的目的。
二、码距
通常把一组编码中任何两个编码之间代码不同的位数称为这两个编码的距离。而码距是指在一组编码中任何两个编码之间最小的距离。
总结:
三 、码距与检错纠错能力的关系一般来说,合理地增加校验位、增大码距,就能提高校验码发现错误的能力。
用汇编语言输出“Hello World!
众所周知,首先从输出“Hello World!”开始学习一门编程语言已经是惯例了,汇编语言也不例外,下面我们将从输出“Hello World!”开始学习汇编语言。
一、编写源程序首先我们尝试用C语言来实现该功能:
123456#include <stdio.h>int main() { printf("Hello World!"); // 输出“Hello World!” return 0;}
可以看到,仅仅用了一行代码就实现了该功能。那么用汇编语言又该如何去实现呢?
123456789101112131415data segment ;数据段 string db 'Hello,World!$'data endscode segment ;代码段assume cs:code,ds:datastart: mov ax,data ;获取段基址 mov ds,ax ;将段基址送入寄存器 mov dx,offset string mov ah,9 int 21h mov ah,4ch int 21hcode en ...