从零开始的自我提升计划:计算机科学(六)

本系列为作者学习记录
感谢Jack-Cui视频的启发
视频地址:【计算机科学速成课】[40集全/精校] - Crash Course Computer Science

系列文章目录

从零开始的自我提升计划:计算机科学(一)
从零开始的自我提升计划:计算机科学(二)
从零开始的自我提升计划:计算机科学(三)
从零开始的自我提升计划:计算机科学(四)
从零开始的自我提升计划:计算机科学(五)



前言

本文内容包括:

  1. 文件系统-File & File Systems
  2. 压缩-Compression
  3. 命令行界面-Keyboards & Command Line Interfaces
  4. 屏幕与2D图形显示-Screens & 2D Graphics

一、文件系统

文件系统
文件数据在存储时可以随意排列,但是按照格式来排列会更好,这就是“文件格式”,程序员可以发明自己的格式,但是最好使用现成的标准,例如JPEG、MP3等。
最简单的文件格式是文本文件,即TXT文件,里面存放文字,使用ASCII进行编码。
更复杂的一个格式是波形(Wave)文件,即WAV文件,用来存放音频数据,在读取数据前,先要了解“元数据”,例如码率、单声道还是立体声等信息,这些元数据存放在文件开头,因此也叫文件头。WAV文件的音频数据紧跟在元数据后面,是一长串数字,数字大小表示每秒多次采样的幅度。
位图(Bitmap)文件,后缀为.bmp,用来存放图片。BMP文件和WAV文件一样,开头也是一些元数据,包括图片宽度、高度、深度等信息,图片像素信息用RGB三通道的强度表示。
早起计算机存储文件时,整个存储器就是一整个文件,从头存到尾直到存满。随着计算能力和存储容量的提高,存储器可存储多个文件,最简单的方法是连续存储,但是存储器并不知道文件的开头和结尾在哪,因此需要一个特殊的文件来记录其他文件的位置,泛称为“目录文件”,通常存在最开头。目录文件和目录文件的管理是一个简单的文件管理系统,刚刚的例子又叫“平面文件系统”,因为所有文件都在同一个层次。但是如果连续存储的文件需要增加一些内容时,会影响到后面的文件,因此现代文件系统会把存储空间分块以给每个文件留一些“预留空间”方便改动。假如文件太大,存不进一个块内,就会把文件拆分存到不同的块内,这样文件就可以轻松增大缩小,这个思想与操作系统中的虚拟内存十分类似。在删除文件时,只是将目录文件删除,而并没有将原始数据覆盖,因此数据才可以被“恢复”。在增改删文件时,会导致文件存放在许多不同的块内,这叫作碎片,不可避免,如果块太多将会导致文件打开过慢,因此需要做碎片整理,将数据来回移动,排列为正确的顺序,方便读取。
随着文件数量的增长,把所有文件存在同一层变得不切实际,因此要把相关文件放在同一个文件夹内,然后文件夹套文件夹,这叫“分层文件系统”,与平面文件系统的主要差别是目录文件不仅指向文件,还要指向目录,还需要额外的元数据来区分文件和目录,目录文件存放在最顶层,因此也叫“根目录”,其他文件和文件夹都在根目录下。分层文件系统不仅可以实现无限深度的文件夹,移动文件也变得十分简单,只需要修改目录文件即可(硬盘同分区移动文件比较迅速的原因,特别注意是同分区)。

二、压缩

压缩
压缩可以使数据占用的空间更小,用更小的位来表示数据。
一种方法是减少重复信息,最简单的是游程编码,适合经常出现相同值的文件。这种编码并没有损失任何数据,可以恢复到原来的数据,这叫“无损压缩”,解压缩后的数据和压缩前的数据完全一样。另一种无损压缩的方法用更紧凑的方式表示数据块,需要一个字典来存储“代码”和“数据”之间对应关系,它将图片中的数据分为一个一个的块,然后对这些块进行编码。一个高效的编码方式即“霍夫曼编码”,每轮将出现概率最低的两个块合并为一个块,这个新的块的出现概率为之前两个块的概率之和,不断重复这个过程,直到无法合并为止。合成的过程可以用一个树状结构来表示,将树的每个分支用0和1标注,然后就可以生成这些块的编码。“消除冗余”和“用更紧凑的表示方法”这两种压缩方法通常会组合使用,几乎所有无损压缩格式都使用了,例如GIF、PNG、PDF、ZIP等。
有一些文件,丢掉一些数据没有什么关系,丢掉那些人类看不出差别的数据,大多数有损压缩都是这样做的。例如对于音乐文件,我们可以丢掉超声波部分,因为人类无法听到这部分的声音,而对于人声这类人类比较敏感的部分,则要尽可能的保留下来。有损音频压缩用不同精度编码不同的频段,不会明显影响体验。这种删除人类无法感知的数据方法,称为“感知编码(Perceptual Coding)”,依赖于人类的感知模型,是各种有损压缩的基础,例如JPEG,它把图像分为8×8的的像素块,然后删掉高频空间数据。许多图片压缩的方法也适用于视频,但是视频帧与帧之间有大量像素一样,这叫作“时间冗余”,很多视频编码格式只存储视频中变化的部分,利用了不同帧之间的相似性。MPEG-4是常见的标准,可以比原文件小20~200倍。

三、命令行界面

命令行界面
早期的机械计算设备使用齿轮、旋钮和开关等机械结构来输入输出,这就是交互界面。那时人类总是迁就计算机的,因为计算机很昂贵,不能等人类慢慢输入指令和数据,程序一开始运行就直接到结束,人类的感受是次要的,大量的工作都花费在将指令转化为计算机可以理解的格式。
1950年代晚期,计算机变得便宜并且速度更快,能同时支持多个程序和用户,使得交互式操作变得可行。借用键盘来录入数据,直到现在,我们仍在用“QWERTY”布局的键盘,之后“十指盲打”开始流行,大大加快了打字的速度。早期的计算机改造了当时用来发电报的电传打字机,电传打字机可以通过电报线发送和接收文本,使得两人可以长距离沟通,将电传打字机的电子接口稍作修改就可用于计算机。电传交互界面在1960~1970年很常见,输入一个命令后按回车,计算机会执行打印输出结果,用户和计算机来回交互,这就是“命令行界面”。
由于针对普通消费者的电视开始量产,处理器和内存的发展也十分迅速,使得1970年代,屏幕开始逐渐替代电传打字机。屏幕比电传打印机使用的纸有诸多好处,到1970年代末期,已经成为了标配。后来基于此,开发了许多文字冒险游戏供玩家游玩,玩家在命令行输入指令来进行操作。

四、屏幕与2D图形显示

屏幕与2D图形显示
早期的屏幕是无法显示清晰的文字的,一般需要打印在纸上,屏幕的用途在于跟踪程序运行的情况。这几十年间出现了很多显示技术,最早最有影响力的是阴极射线管(CRT),通过把电子发射到有磷光体涂层的屏幕上成像。通过磁场控制电子的路径来绘制图形,这种绘制图形有两种方法,一是引导电子束描绘出形状,这叫做“矢量扫描”;二是按固定路径一行一行来,这叫“光栅扫描”。
液晶显示器,简称LCD也使用光栅扫描,每秒更新多次像素内红绿蓝的颜色。早期计算机因为内存大小限制的原因,不存放大量的像素值,而是存放符号。为此,计算机需要额外的硬件来从内存读取字符,转换成光栅图形显示在屏幕上,这个硬件称为“字符生成器”,它的内部有一小块ROM存放每个字符的图形,叫“点阵图案”,为了显示,字符生成器会访问内存中一块特殊区域,这块区域专为图形保留,叫屏幕缓冲区,程序想要显示文字时,只需要修改这块区域内的值即可。
但是字符生成器的缺点也很明显,无法绘制任意形状。因此计算机科学家用CRT上的“矢量模式”来绘制图形,所有图形都由线构成。1962年,Sketchpad诞生,一个交互式的图形界面,它使用了当时发明不久的输入设备——光笔,是一个连接屏幕的触控笔。Sketchpad可以让线条完美平行、长度相同、垂直甚至动态缩放,用户还可以保存设计结果并且可以与他人分享。
1960年代末,出现了使用像素的计算机和显示器,内存中的位对应屏幕的像素,这叫作“位图显示”,这样我们可以绘制任形状的图形了。计算机把像素数据存放在内存中的特殊区域——“帧缓冲区”,早期这些数据存放在RAM里,后来存放在高速视频内存(VRAM)中,现在仍然是这样做的,VRAM在显卡上。


总结

本文介绍了文件系统、压缩、命令行界面以及屏幕与2D图形显示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值