计算机科学概论_第1章_数据储存

1 数据储存

1.1 位和位储存

  • 在如今的计算机中,信息是以0和1的模式编码的,这些数字称为位(bit)

1.1.1布尔运算

  • 为了更好理解,我们假定1为真true,0为假false
  • 那么,处理这些真假值的运算被称为布尔运算,基本的有3个与(AND) 或(OR) 异或(XOR)
  • 与,或,异或在离散数学里面可对应为三个运算符,即合取,析取,异或

合取

PQ真值
111
100
010
000

析取

PQ真值
111
101
011
000

析取

PQ真值
110
101
011
000
  • 其实还有一个基本的布尔运算非(NOT),只有一个输入,输出与输入相反

1.1.2 门和触发器

  • 门gate是一种进行布尔运算的设备,其中的0,1用电压电平表示。
  • 触发器是计算机存储器的基本部件,它是一个可以产生0或1输出值的电路,而且一直不变,除非另一个电路的临时脉冲改变它的值。通过这种特殊电路就可以起到存储信息的作用。
  • 众所周知的超大规模集成将数百万个电子元件集成在一个芯片上,这些芯片被用作构造计算机系统的抽象工具(绪论有说)

1.1.3 十六进制计数法

  • 我们在考虑计算机的内部活动时,必须考虑位模式(也叫位串)的处理问题,一些长位串我们称之为流(flow)
  • 然而由于位串过长,为了简化表示方法,我们使用十六进制计数法
位模式十六进制表示十进制表示
000000
000111
1010A10
1111F15

1.2 主存储器

  • 在计算机中有大量的电路用来储存数据,每一个电路存储一个位,如前面说的触发器。这种存储器称为计算机的主存储器

1.2.1 存储器结构

  • 计算机中的主存储器是由存储单元组成的。一个典型的存储单元是8位(8 bit),我们将一个八位的串称为一个字节byte,因此一个典型存储单元的容量就是一个字节。

  • 我们一般认为存储单元的位是排成一行的,这一行的左端我们称之为高位端,右端就是低位端。最左端就叫最高有效位,最右端就叫最低有效位

  • 我们把每一个存储单元赋予一个唯一的名称,称为地址

  • 地址使用数字表示,是有序的,从0开始编址
    地址示意图

  • 因为是有序的,所以两个连续的存储单元就能存储16位的串。显然这能存储的位模式比单个存储单元长。

  • 主存储器结合其他电路使得可以从存储器中得到指定地址的内容(读操作),或者通过请求把某个位置的位模式放到指定地址的存储单元(写操作)

  • 计算机的主存储器由独立可编址的存储单元组成,因此可以实现随机访问随机访问即以独立的方式访问某一地址,因此计算机的主存储器常被称为随机存取存储器(RAM),也就是我们常说的内存

  • 触发器是存储二进制位的一种,然而现代的计算机中RAM都是用一些更加复杂的技术制造。有一些将为存储为可快速消散的电荷,我们将这种存储器叫做动态存储器(DRAM)

1.2.2 存储容器的度量

  • 早期存储器的大小通常以1024(210)个存储单元为单位来度量。
  • 千位字节(KB),兆位字节(MB),吉位字节(GB),太位字节(TB),都来表示1024的幂

1.3 海量存储器

  • 由于主存储器的不稳定性,大多数计算机都有海量存储系统的附加存储设备。

1.3.1 磁系统

  • 很多年以来磁技术就是海量存储的主流技术,例如现在使用的磁盘或者硬盘驱动器(HDD)
  • 读/写磁头在磁盘的磁道上读写信息,这个过程中磁盘旋转运动,而磁头可以通过重定位读写不同的同心磁道。
  • 每当磁头重定位都可以访问一组新磁道,这组磁道称之为柱面
    磁盘存储系统
  • 每个磁道被划分为若干个扇区扇区示意图
  • 在最简单的磁盘存储系统中,每个磁道包含的扇区数目相同,这意味着,越靠近外层,扇区上的位的存储密度越低。而在大容量磁盘存储系统中,靠近外边缘的磁道包含的扇区更多。通过区位记录技术使相邻磁道(我们将这些相邻磁道称为区==扇区==),一个区的磁道拥有的扇区数目相同,靠外的区中每个磁道包含的扇区比靠内的更多。
  • 总而言之,磁盘存储系统包含很多独立的扇区,每个扇区都可以作为独立的位串进行存取。
  • 磁盘的性能评估:
  1. 寻道时间:即磁头从一个磁道到另个磁道所需时间
  2. 旋转延迟等待时间:即磁道到达磁道后等待盘片旋转使磁头位于目标扇区的平均时间
  3. 存取时间: 寻道时间和旋转延迟的和
  4. 传输速率:在磁盘上读写数据的速率
  • 磁带软盘驱动器都是磁存储技术的应用,由于磁存储的特性,使它适用于数据主要被线性读写的数据。

1.3.2 光系统

  • 我们的**光盘(CD)**就是典型的光技术存储系统。上面的信息通过在反射层创建偏差的方法来记录,通过激光检测CD快速旋转时反射层的不规则反射偏差来读取
  • CD最早用于记录音频,数字音频光盘(CD-DA),信息刻在一条磁道上面,螺旋缠绕排布在CD上
  • 信息按照统一的线密度排布。
  • 对于随机存取数据,磁盘存储器比CD要强
  • **数字多功能光碟(DVD)**由多个半透明的层面构成,精确聚焦的激光可以识别不同的层面,因此它能存储的信息就更多了
  • **蓝光光碟(BD)**激光更加精确聚焦,容量更大了

1.3.3 闪存驱动器

  • 闪存技术就不同于以上的系统,它直接于电子信号关联,通过二氧化硅晶格获取电子,因此更快。
  • 然而由于反复擦除数据,二氧化硅晶格会逐渐损坏,因此不适合应用于经常进行数据擦除的RAM,但它的确是海量存储技术便携式好应用。
  • 闪存设备被称为闪存驱动器,但是由于微小存储晶格的缺点,真正长期应用时,不如光学盘片可靠
  • 大的闪存驱动器叫做固态硬盘(SSD),专为替代磁硬盘设计的。它的速度更快,但它的寿命也受到闪存技术的限制。通过损耗均衡技术,将频繁改变的数据块重定位到驱动器中使用较少的位置,可以减少对寿命的影响
  • 闪存技术还有安全数字存储卡(SD卡)安全数字高容量存储卡(SDHC卡),**安全数字拓展容量存储卡(SDXC卡)**的应用,容量更大,体积更小。
    SDHC
    SDXC

1.4 用位模式表示信息

1.4.1 文本的表示

  • 文本信息由位模式表示,每个符号对应唯一的位模式,一个长的位串就能表示一个文本。
  • 早期符号对应的位模式并不唯一,后来**美国国家标准化学会(ANSI)采用了美国信息交换标准码(ASCII)**来标准地表示符号。
    ASCII
  • 早期的ASCII使用了长度为7的位模式表示一些符号,后来ASCII码通过在最高端添加一个0,拓展为8位位模式,这个技术让产生的代码的位模式于字节型存储单元匹配,更提供了128个附加位模式,可以表示更多的符号
  • **国际标准化组织(ISO)**开发了大量的ASCII拓展,每一种拓展都针对某一个语种设计
  • 然而ASCII额外的位模式并不足以容纳很多亚洲语言和东欧语言的字母表,另外一个文档只能使用一个选定标准中的符号。
  • Unicode采用唯一的21位模式来表示每一个符号。Unicode字符集与**Unicode转换格式8位(UTF-8)**编码标准结合在一起时,原来的的ASCII码依旧可以使用8位来表示,而其他的语言则可以使用16位来表示,除此之外,UTF-8的24位或32位模式还可以表示别的鲜为人知的Unicode符号,为未来的拓展留下空间
  • 由一长串ASCII或Unicode编码的符号组成常被称为文本文件
  • 文本编辑器的程序操作的简单文本文件,只包含了各个字符的编码
  • 字处理程序(如Microsoft Word,WPS Word)产生的较为复杂的文件,还包含了字体变化、对齐信息等其他代码

1.4.2 数值的表示

  • 如果我们要记录的信息只有数值时,使用字符编码的形式存储信息效率就会很低,因此我们使用二进制计数法来表示数值,例如16个二进制位可以表示0~65535范围内的任意整数,而16位字符编码只能存储到99
  • 我们一般使用二进制补码计数法来存储整数
    二进制补码
  • 而4 1 3 \frac{1}{3} 31这种带分数的则采用 浮点计数法来表示

1.4.3 图像的表示

1.4.3.1 位图
  • 将图像解释为一组点,每个点称为一个像素,然后对每个像素进行编码。像素的集合就叫做位图,这种方法很常用,更便于格式化显示。
  • 位图的缺点就是不能调整到任意大小,唯一放大的途径就是放大像素,就会使图像模糊
  1. 对于简单和黑白图像,每个像素由一个位表示,只是用来决定该像素的白或黑。
  2. 对于更加精致的黑白图片,每个像素由一组位(一般是8个)表示,这让很多灰色阴影也能被表示出来。
  3. 对于彩色图像,我们有两种方法,一种是RGB编码,每个像素由3个颜色成分组成,即一个像素需要3个字节存储空间;另一种是使用一个“亮度”成分和两种颜色成分之和来表示
1.4.3.2 矢图
  • 将图片描述成集合结构的集合,可以由解析几何技术来编码,最终的呈现效果由显示图像的设备来决定。
  • 这种表示方法在**计算机辅助设计(CAD)**中很常见

1.4.4 声音的表示

1.4.4.1 声波振幅采样
  • 对音频信息常用的方法是,按照有规律的时间间隔对声波的振幅采样,并记录所得到的数值序列。
  • 常见的有每秒8000次的采样频率,这种采样频率在语音电话中使用了很多年
  • 对于要求高保真的音乐录制,我们需要每秒44100次的采样频率,每次采样的数据要用16位的形式表示。
1.4.4.2 MIDI
  • **乐器数字化接口(MIDI)**是在合成器上编码产生音乐的指令,并不对音频本身进行编码,类似于矢量图之于图像。
  • 我们可以将MIDI看作是乐谱的编码,而不是演奏的编码。
  • 所以和矢量图类似,MIDI的播放效果与合成器有关,不同的合成器上的演奏声音可能不一样。

1.5 二进制系统

  • 我们知道二进制记数法是表示数字值的一种方法

1.5.1 二进制记数法

  • 二进制与十进制转换:例如[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mysapaZX-1651646517808)(https://bkimg.cdn.bcebos.com/formula/bd7128fde6c57755be75aa5dd04eee1d.svg)]
  • 十转二与上同

1.5.2 二进制运算:

二进制运算

1.5.3 二进制小数

  • 小数部分使用**“乘 2 取整法”**,即用十进制的小数乘以 2 并取走结果的整数(必是 0 或 1),然后再用剩下的小数重复刚才的步骤,直到剩余的小数为 0 时停止。
    十进制小数转二进制小数
  • 二进制小数加法与整数一样

1.6 整数存储

  • 我们研究两种记数法:二进制补码记数法余码记数法

1.6.1 二进制补码计数法

  • 如今计算机最流行的是二进制补码计数法,每一个数值用一个32位的模式表示。
  • 以长度为3的位模式举例:
    位模式|所表示的值
    —|—
    011|3
    010|2
    001|1
    011|0
    111|-1
    110|-2
    101|-3
    100|-4
    要取得负值的话,正数取反加一。
  • 符号位就是位模式的最左位。二进制补码系统中,符号位位1代表负数,符号位为0代表非负值。
  • 在二进制补码系统中,要得到一个位模式的补码,就要把所有二进制1转变为0,二进制0转变为1。
1.6.1.1 二进制补码记数法中的加法
  • 在二进制补码记数法中加法最后一个进位导致导致答案左边产生附加位时,附加位会被截断
  • 0111 + 1011 = 10010,被截断为0010 。
  • 二进制补码记数法一个优点:任何有符号数的组合加法都可以同相同的算法来计算,即可以使用相同的电路来实现。
1.6.1.2 溢出问题
  • 以长度为4的位模式举例,它最大可表示正整数7,无法表示数值9,那么计算得出的数值超过了位模式可表示的数值范围,这种现象就叫做溢出

1.6.2 余码记数法

  • 给定位模式长度,建立余码系统就是最高位为1,其余为设为0,此时这个模式就为0,其前的模式就是-1,-2,-3,···,其后的模式是1,2,3,···
    位模式|所表示的值
    —|—
    111|3
    110|2
    101|1
    100|0
    011|-1
    010|-2
    001|-3
    000|-4
  • 我们发现余码系统和二进制补码系统的区别就是符号位取反

1.7 小数的存储

  • 我们有一种基于科学记数法的存储小数的方法浮点记数法

1.7.1 浮点记数法

  • 我们简单研究一字节的例子,8位格式中,最高位都为符号位,之后的三位为指数域,最后四位为尾数域
  • 指数域的内容我们用3位余码方法解释,而尾数域的内容按照正常二进制方法解释。
  • 二进制转换十进制:
    例子:01101011
  1. 我们先对尾数域解码,并在左侧放一个小数点。即 .1011
  2. 使用余码方法解码指数域。即110=2 。
  3. 对1结果应用2结果 。即10.11
  4. 小数点左边按照正常读法,10 = 2,小数点右边则按照1结果的位置转换.11即 3 4 \frac{3}{4} 43
  5. 加起来2 3 4 \frac{3}{4} 43
  • 填充尾数域时有一个小细节,规则是从最左边的1开始,从左到右复制以为进制表示的位模式。这个叫规范化形式

1.7.2 截断误差

  • 我们使用1字节浮点记数法存储2 5 8 \frac{5}{8} 85,使用二进制改写的10.101,当我们把这个放进尾数域时,发现用尽了空间,最后的1因此丢失。位模式将变为01101010 。这个现象叫做截断误差或者舍入误差
  • 在浮点记数法中,加法的顺序很重要,如果是一个大数字加上一个小数字小数字可能会被截断。因此多个数值相加一般先加小数字。

1.8 数据与程序设计

  • 程序设计语言是人类创造的一个计算机系统,通过它人们使用更高层的抽象向计算机表达算法

1.8.1 Python入门

  • Python是一种解释型语言,所以可以将Python指令键入交互提示符中,也可以将Python指令存储在一个叫做“脚本”的纯文件中运行。

1.8.2 Hello,Python

print('hello,world!')

1.8.3 变量

  • Python允许用户给值命名以便日后使用,这些命名的储存位置就被称为变量。
message = 'hello,world!'
print(message)
  • Python是动态类型语言,这意味不需要在建立脚本时提前建好一个名为message的变量,只需要即声明即用
  • Python是大小写敏感的,即区分大小写,Message变量与message变量不一样。
  • 变量命名规则还是老一套经典一套:开头必须是字母,不能以关键字命名变量。
  • #后面的表示注释
  • Python也支持Unicode和ASCII,使用’\u‘前缀和4个十六进制数字来指定Unicode字符。例如:
print('\u6211\u7231\u4f60\u4e2d\u56fd')

1.8.4 运算符和表达式

  • Python内置了我们熟悉的运算符,+、-、*、/等

  • 比较特殊的比如
    运算符|意思
    —|—
    //|整除
    %|取模
    ^|按位布尔运算

  • 还有一些运算符除了我们常见的意思还有别的意思
    运算符|意思
    —|—
    +|拼接
    *|复制某些字符串值

1.8.5 货币转换

  • 下面给出一个完整Python脚本
  • 反转了,没有代码,差不多得了
  • 其实这一部分不是很重要,偏向语法了,有点偏离主题,就不写代码了。

1.8.6 调试

  • 软件中的bug大致可以分为3大类:语法错误(syntax error)语义错误(semantic error)运行时错误(runtime error)

    语法错误语义错误运行时错误
    就是键入时的符号错误程序含义的错误(算法错误等)程序运行时发生的错误
  • 所以我们一定要多多测试,多多debug,才能在磨练中增长自己的技术

1.9 数据压缩

  • 为了存储和传输信息,缩小数据的大小的过程叫做数据压缩技术。

1.9.1 通用的数据压缩技术

  • 压缩技术分为:无损压缩有损压缩
  • 行程长度编码的压缩技术,就是将一长串相同数值组成的数据成分替换成一个编码,减少重复的成分在序列中出现的次数。
  • 频率相关编码:表示数据项的位模式的长度与这个项使用频率反相关——变长编码技术。称为赫夫曼编码,比如使用频率高的字母使用短位模式编码,而长位模式用于编码使用频率低的字母。
  • 如果每一个数据单元与前一个数据单元的相差不打,那就可以使用相对编码也叫差分编码。这个技术记录了两个连续数据单元之间的区别。
  • 字典编码技术的压缩系统。这里的字典指的是一组用于构造压缩信息的构造块,信息本身被编码成字典的一系列参照符。我们一般认为字典编码系统就是无损编码系统。而在图像压缩时,字典条目仅仅是正确数据成分的近似值,这就是有损压缩系统。
  • 字典编码的另一个变体:自适应字典编码也叫动态字典编码,在自适应字典编码系统中,字典可以改变。如LZW编码,可以在编码的过程中根据信息扩大字典参照符。

1.9.2 图像压缩

  • GIF即图像交换格式,这就是一个字典编码系统。将一个像素的颜色减少的256个,每一种颜色使用3个字节编码,而这256个编码被存储在一个调色板的表格(字典)中,因此每个像素就可以用一个字节来表示。这是一个有损压缩系统。
  • 通过LZW技术进一步压缩图像。
  • 另一种流行的图像压缩系统就是JPEG,由ISO的联合图像专家组研制开发的标准。
  • JEPG包含多种图像压缩方法。而JEPG基线标准是最为常用的。
  1. 将2x2的像素方块的色度信息以平均值代替,色度信息可减小为 1 4 \frac{1}{4} 41
  2. 将图像划分为8x8的数据块,将每一个块作为一个单元来压缩。这个块中的条目秒速了原始像素块中的联系关系。
  3. 再通过行程长度编码、相对编码以及变长编码技术进一步压缩。
  • 另一个数据压缩系统是TIFF,即标记图像文件格式。它最主要的应用其实是在存储照片及其相关的信息,如日期时间以及相机设备。

1.9.3 音频和视频压缩

  • 音频视频压缩常用的标准是ISO的运动图像专家组研制开发的MPEG标准
  • MP3MPEG layer 3就是最著名的音频压缩系统
  • MP3有一个特性叫暂时模糊,一次巨大声响后人耳察觉不到本可以听到的轻柔声音
  • 另一个特性叫频率模糊,某一频率的声音可能掩盖相近频率的轻柔声音。

1.10 通信差错

  • 在数据传输与存储的过程中会由于各种原因产生数据的损耗,为了解决这些问题人们开发了一些技术。

1.10.1 奇偶校验位

  • 我们在原有8位模式的最左端添加一个称为奇偶检验位的附加位。根据不同的情况给这个附加位赋值1或0 。让这个系统拥有奇数个1或偶数个1。
  • 如果在传输数据的过程中发现1的奇数偶数与原来不同就可以发现有错误。
  • 事实上奇偶校验位并不能检测到偶数个错误。
  • 对于长位模式,模式都有一组奇偶校验位构成的校验字节,校验字节中的每一个位都是一个奇偶校验位,与散布整个模式中的一组特殊位像联系。而这个概念也衍生出了校验和循环冗余的差错检测方案

1.10.2 纠错码

  • 纠错码即能检测出差错还能纠正差错。
  • 汉明距离,指的是两个位模式中不相同位的个数。
  • 纠错码就是通过检测收到的模式与原编码距离最小来断定它的值,从而纠正数据。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friendfan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值