计算机知识杂谈


文章目录

  • 前言
  • 一、起源
  • 二、元件
    • 基础元件的发展
    • 硬件性能的爆炸性增长
  • 三、进制
    • 数制转换
  • 四、ALU
  • 五、存储
    • 存储元件的发展
    • 存储介质的发展
  • 六、CPU
  • 七、程序
    • 数据结构的基本内容
  • 八、系统
    • 操作系统OS 的发展
    • 文件系统的发展
    • 压缩
  • 九、界面
    • 命令行界面
    • 图形界面2D
    • 3D图形
  • 十、网络
    • 物理层
    • 数据链路层
    • 网络层
    • 运输层
    • 万维网
  • 总结
    • **抽象**二字是重点,从人的脑力到计算机,从机器码到高级语言,从简单程序到人工智能,这都是一层层抽象包装的成果。 [计算机科学速成课](https://b23.tv/6UBRTZZ)


前言

本文章是关于计算机知识的一些杂谈。


一、起源

发展历程:

  1. 早期”computer“指负责计算的

  2. 算盘:手动计算器,加减数字,十进制(“逢十进一,借一当十”)。

  3. 步进计算器:机械结构齿轮,前转加-后转减-有进位退位,可以实现乘除(乘除,实际上是多次加减法)。

  4. 预先算好的计算表,例如二战中广泛使用的射程表。

  5. 差分机:计算多项式(多项式,几个变量之间的关系),只是假想。

  6. 分析机:通用计算机,概念提出。

  7. 打孔卡片制表机:记录信息的打孔卡片(如答题卡),打孔代表有否则无,输入有则加一,其后出现IBM。

  8. 电子计算机


二、元件

基础元件的发展

  1. 继电器:用电控制的机械开关,使用电磁感应控制线路,通电机械臂闭合即开关闭合。
    ——速度慢,易磨损,数量增加则故障概率增加,巨大、黑色、温暖的机器会吸引虫子(虫子,bug)。

  2. 三级真空管即电子管:通过控制线路控制电子流动,没有会动的组件。
    ——速度快,脆弱易碎,易烧毁,主要军用。

  3. 晶体管:使用半导体控制线路。
    ——速度更快,固态,体积远远小于真空管,便宜,开始民用。

硬件性能的爆炸性增长

  1. 一开始分立元件(计算机由独立部件组成),存在数字暴政(加强性能需要更多部件,导致更多线路,更复杂难做)。
  2. 集成电路(IC,电路的所有组件都集成在一起),印刷电路板 PCB(相当于集成的电线)。
  3. 其后光刻技术(用光把复杂图案印到材料上如半导体)产生,有摩尔定律:每两年左右,得益于材料和制造技术的发展,同样大小的空间,能塞进两倍数量的晶体管。

摩尔定律的终结,进一步小型化碰到的问题:

  • 光的波长不足以制作更精细的设计。
  • 量子隧穿效应,晶体管漏电。

三、进制

二进制与布尔逻辑
开/关——1/0——true/false
布尔代数:NOT、AND、OR、XOR(异或)。

数制转换

十进制 21D (桥梁)二进制 10101B 八进制 25O 十六进制 15H ..8 4 2 1 二进制数从右向左 *421* 3个变一个 二进制数从右向左 *8421* 3个变一个 十进制 21D (桥梁)二进制 10101B 八进制 25O 十六进制 15H

机器码
正数:原码 = 反码 = 补码
负数

原码 1011 反码 1100 补码 1101 除符号位不变,其他取反 符号位不变,尾位加1,注意溢出 取补 原码 1011 反码 1100 补码 1101

运算

方法-
加法直接
减法[N1 - N2] = [N1] + [N2]

浮点数

  • 科学计数法存储 (IEEE 754标准)
    32位浮点数 = 1位符号 S + 8位指数 e + 23位有效数字 M。
    例如:
    4136 0000 H = 0100 0001 0011 0110 0000 0000 0000 0000 B =
    0|100 0001 0|011 0110 0000 0000 0000 0000。
    解:
  • S = 0,
  • e = 阶码 - 127 =1000 0010 - 0111 1111 = 0000 0011 = 3 D,
  • M = 011 0110 0000 0000 0000 0000。
  • 答:4136 0000 H = (-1)S * 1.M * 2e = + (1.011011) * 23 = 11.375 D。

ASCII 字符编码标准,可以编码字母、数字、特殊符号等。
Unicode 统一编码方案,解决不同国家不同标准的问题,例如UTF-8。

拓展:最优的进制e进制,与其更接近的三进制昙花一现。

补充

  • 210 = 1024。
  • 1 TB 太字节 = 1024 GB 千兆字节 = 1024 * 1024 MB 兆字节。
  • 1 MB = 1024 KB 千字节= 1024 * 1024 B 字节。
  • 1 B 字节 Byte = 8 b 位 bit。

四、ALU

ALU即Arithmetic & Logic Unit 算数逻辑单元,由算数单元和逻辑单元组成,抽象成一个大“V”符号。

AU:算数单元,进行数字操作,使用逻辑门。

  1. 半加器 HALF ADDER:两个1位输入,两个1位输出“总和和进位”。
A
HALF ADDER
B
CARRY
SUM
  1. 全加器 FULL ADDER:三个1位输入,两个1位输出“总和和进位”,由两个半加器和一个OR门构成。
A
HALF ADDER
B
HALF ADDER
OR
C
CRARRY
SUM
  1. 8位行波进位加法器 8-BIT RIPPLE CARRY ADDER:两个8位输入,两个输出(其中一个为8位SUM,一个为1位CARRY,注意有进位则溢出),由一个半加器和七个全加器构成。

  2. 超前进位加法器 CRAAY-LOOK-AHEAD ADDER:现代计算机使用的。

  3. 不由加法器模拟乘法器,独立的乘法器等。

LU:执行逻辑操作,例如NOT、AND、OR。


五、存储

使用技术及衍生:内存RAM,外存ROM。

空间存储
CPU内寄存器、cache
主板内memory:内存、cache
主板外storage:外存、硬盘(机械硬盘、固态硬盘)
在线网络存储
离线U盘、光盘、软盘、磁带

存储元件的发展

  1. 锁存器 latch:“锁存”了1个值即1bit。两个输入,“设置 set”输入1,输出为1;“复位 reset”输入1,输出为0。

  2. 寄存器 register:位宽为可存储的位数,由锁存器并排放置组成。

  3. 锁存器矩阵:16 * 16门锁矩阵,多路复用器解码8位地址(4位行,4位列,24 = 16)定位到每个锁存器,扩大打包出RAM

  4. RAM random access memory:随机存取存储器,是计算机内部存储器中的一种,在通电的情况下存储信息,断电会丢失数据,计算机和手机中一般把其叫做(运行)内存

  • SRAM static…:存储元为一个触发器,具有两个稳定的状态,存取速度快,容量小。
  • DRAM dynamic…:存储元为一个MOS晶体管和电容器组成的记忆电路,需要刷新,容量极大,通常作为计算机的主存储器
  1. cache:高速缓冲存储器,简称缓存,由高速的SRAM组成,作用于CPU和主存之间。基于时间局部性和空间局部性原理,用一块更小更快的存储设备来作为更大更慢的存储设备的缓冲区,从而提高数据访问速度。

  2. ROM Read-Only Memory:只读存储器,也是计算机内部存储器中的一种,可以存储数据而且断电不会丢失,早期的ROM因为技术不成熟所以无法擦写,出厂后就只能读数据,所以叫只读存储器。后来随着技术的发展,在ROM的基础上出现了新的半导体存储介质EPROMEEPROM这两种可擦写,其后发展出了NAND FLASH闪存,就是我们现在用的U盘中用到的技术。

  3. 硬盘:硬盘分为两种,一种是机械硬盘(即磁盘HDD),一种是固态硬盘(SSD),磁盘和ROM没什么关系,但是固态硬盘就不一样了,固态硬盘用到的颗粒也是基于NAND FLASH技术,和u盘以及手机存储有点相似,所以硬盘和ROM还是有关系的,固态硬盘的存储颗粒是ROM技术发展的产物,但不能说ROM就是硬盘。

存储介质的发展

  1. 打孔纸卡、打孔纸带:读取慢,只能写一次。
  2. 延长线存储器:存储的位在介质中循环,但每一个时刻只能读一位数据,要读特定位只能等循环到位置时,因此又叫顺序存储器、循环存储器。
  3. 磁芯存储器:通过电流磁化磁芯改变其磁性即0/1,一个磁芯代表一位,能随时访问任何一位。
  4. 磁带:一长条的磁性带子卷在轴上,通过磁带驱动器前后移动,要读特定位置只能倒带或快进。类似技术磁鼓,推动了磁盘的发展。
  5. 磁盘:表面有磁性,可以叠在一起,通过磁臂移动读/写磁头处理其上的0和1,要考虑寻道时间
  6. 软盘:机械硬盘 HHD的亲戚,除了磁盘是软的,其他基本一样,便携。
  7. 光盘 CD:光学存储器,表面的小坑造成光的不同折射,光学传感器捕捉解码为0/1。
  8. 固态硬盘 SSD:没有机械活动部件,使用ROM发展来的技术。

六、CPU

CPU = CHIP芯片(ALU + CU + 时钟 + 通用寄存器) + RAM

CPU Central Processing Unit:中央处理器,负责执行程序。
CU control unit:控制单元 = 控制线路 + 指令地址寄存器 + 指令寄存器。
时钟 :管理cpu节奏,以精准的间隔触发电信号。cpu“取指令–>解码–>执行”的速度叫“时钟速度”。超频提升性能,降频省电。
RAM :cpu外的独立组件,存储指令集,用“地址线”“数据线”和“允许读/写线”即总线与cpu通信。

高级cpu设计

  • 单核:
  1. 早期加快晶体管切换速度,来提升cpu速度。
  2. 使用专用化的电路,除法电路等,考虑复杂度 vs 速度。
  3. cache缓存(连通RAM检查脏位),提高数据存取速度。
  4. 流水线设计,并行处理,吞吐量上升,先要弄清数据依赖性,再动态排序乱序执行(电路非常复杂)。
  5. JUMP后推测执行,进一步发展出来分支预测。
  6. 多个ALU。
  7. 超标量处理器,一个时钟周期完成多个指令。
  • 多核:
  1. 多个core,共享一些资源。
  2. 多个独立的cpu。
  3. 超级计算机。

七、程序

程序 = 数据结构 + 算法

程序:一组计算机能识别和执行的指令
指令:一般由操作码字段OP和地址码字段A组成。

早期编程方式(在硬件上):

  1. 打孔纸带:只汇总数据,操作固定。
  2. 插线板:控制面板,运行不同程序需要重新插线,一个插线板一个程序。
  3. 存储程序计算机:程序存在内存中,内存足够甚至可以存储数据以及运行产生的新数据。穿孔纸卡读取机输入程序和数据。
  4. 面板编程:面板拨开关。

补充:

  • 冯诺依曼结构:程序和数据存在一个地方。

  • 冯诺依曼计算机标志:一个处理器(有算数逻辑单元) + 数据寄存器 + 指令寄存器 + 指令地址寄存器 + 内存(负责存数据和指令)。

编程语言发展(在软件上,小部分运行速度换大部分编程速度):

  1. 二进制:机器语言,伪代码–>“操作码表”–>二进制机器码,cpu可以直接执行机器码。
  2. 助记符:汇编语言,使用汇编器,一般一条汇编指令对应一条机器指令,需要考虑底层细节。
  3. 高级编程语言:使用编译器,专门把高级语言转成低级语言,脱离底层细节大众化。

编程基础(语句和函数)的基本:

  1. 变量,赋值语句。
  2. 条件语句:if判断分支,while条件循环,for特定次数循环。
  3. 函数 function:代码打包成方法,隐藏复杂度,也叫“方法”、“子程序”,函数集合——库。

数据结构的基本内容

不同的数据结构适用于不同的场景。

  • 固定大小:
  1. 数组 array(一维列表、向量):同类型值连续存储,a={1,2,3},a[index]调用下标为index的值,下标从0开始。
  2. 字符串 string:字母、数字、符号等组成的数组,a=“abstraction”,字符串结尾二进制"\0"表示字符"null"。
  3. 矩阵 matrix:数组的数组,任何维度。
  4. 结构体 struct:多个不同类型变量打包在一起。
  5. 指针 pointer:特殊变量,指向一个地址
  6. 节点 node:存变量和至少一个指针。
  • 可变大小(节点组成):
  1. 链表 list:每个节点指向下一个节点。
  2. 队列 queue:先进先出(FIFO),入队(enqueue)出队(dequeue)。
  3. stack:后进先出(LIFO),入栈(push)出栈(pop)。
  4. tree:节点包含多个指针,最高的节点叫“根节点”(root),以下节点叫“子节点”(children),没有子节点的叫“叶节点”(leaf),根到叶是单向的。
  5. 二叉树 binary tree:节点最多有两个子节点。
  6. graph:节点随意连接。
  7. 红黑树、堆……

算法(解决问题的步骤,考虑时间复杂度和空间复杂度)入门:

  1. 选择排序:一个for套另一个for,时间复杂度O(n2)。
  2. 归并排序:先二分到1再合并,O(n*log2n),n比较+合并的次数,log2(n)合并步骤的次数。
  3. Dijkstra最短路径算法:图搜索,选最小边,O(nlogn+I),n为结点数,I为线数。……

软件工程的基本内容:

  1. public、private:设置权限对象。
  2. object:相关代码打包,可以嵌套。
  3. 面向对象编程 OOP:把变量和函数打包成对象,核心是隐藏复杂度,选择性的公布功能。
  4. 程序编程接口 API:控制哪些函数和数据让外部访问,哪些仅供内部。
  5. 集成开发环境 IDE:集成当中功能的工具。
  6. 调试 debug。
  7. 文档和注释 readme、comment。
  8. 版本控制 version control:源代码管理。
  9. 质量控制 QA quality assurance testing:测试。
  10. 软件的beta版即公测版本、alpha版即内部版本。

八、系统

操作系统OS 的发展

Operating system:让机器自行运作,有操作硬件的特殊权限(软件和硬件之间的媒介,提供API来抽象硬件,写程序可以忽略底层细节),可以运行和管理其他程序。开机第一个启动的程序,其他程序由操作系统启动。

  1. 批处理:之前只能一次给一个程序,现在可以一次加载多个程序,当计算机运行完一个程序,会自动运行下一个程序。
  2. 多任务处理:cpu快I/O慢,程序阻塞在I/O上导致cpu空闲,于是使用调度算法在cpu上同时运行多个程序。
  3. 多用户分时操作系统:多用户用终端访问计算机,终端本身没有计算能力,每个用户只能占据一部分资源(cpu、内存等)。
  4. 实时操作系统:最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
  5. 虚拟内存:假定内存总是从地址0开始,实际的物理位置被操作系统隐藏和抽象,存在一个虚拟内存和物理位置的映射表。这种机制使程序的内存大小可以灵活的增减即动态内存分配内存保护:给程序分配专用的内存范围。
  6. 使用设备驱动程序来调用外部设备。

文件系统的发展

文件格式:可以随便存文件,但按格式存会更方便。

  • TXT 文本文件:使用ASCII字符编码标准。
  • WAV 音频文件:存储的数据是每秒上千次的音频采样数字,格式为:元数据(关于数据的说明,文件头) + 音频数据。
  • BMP 图片文件:图片由像素组成,所以存储像素的红蓝绿(加色三原色) RGB 值,开头也是元数据。
  1. 早期文件系统:整个存储器就是一个文件,数据从头存到尾,直到占满。后来计算能力和存储容量的提高,多文件很有必要。

目录文件:特殊文件,用来解决划分多文件的问题,存其他文件的信息,比如名字、位置等。更新文件时也必须更新目录文件。删除文件,就是删除文件的记录,没有实际擦除数据,恢复数据就是恢复这些。

  1. 平面文件系统:文件都在一个层次内,只有十几个文件。

文件不会一个个紧密地前后排序在一起,因为文件系统会:把空间划分成几个,文件拆分到块里,有一些预留空间方便改动。

文件的增删改查会不可避免地造成文件散落到各个块里,所以做碎片整理,就是把数据来回移动,排列成正确顺序。

  1. 分层文件系统:有不同的文件夹,文件夹可以层层嵌套。需要额外的元数据,来区分文件和目录。目录文件不仅指向文件,还要指向目录。剪切文件,就是更改目录里的记录。

压缩

压缩的好处是能存更多文件,传输也更快。

  • 无损压缩:没有丢失任何数据。
    1.游程编码:适合经常出现相同值的文件,有时数据反而会变多。格式:“长度” + “重复值”。
    2.字典编码:使用哈夫曼编码树,按频率排序成树,频率低的在下面。左0右1,按树编码成字典。格式:“字典” + “编码序列”。
    “消除冗余”和“用更紧凑的表示方法”,这两种方法通常会组合使用。

  • 有损压缩:丢掉那些人类看不出区别的数据。
    感知编码:删除掉人类无法感知的数据,依赖于人类的感知模型。
    时间冗余:视频里不用每一帧存所有像素,可以只存变了的部分,利用了帧与帧之间的相似性。MPEG-4 视频编码:用补丁的移动和旋转来更新画面。


九、界面

命令行界面

  1. 早期,计算机昂贵,不能等人慢慢输入,所以用纸卡/纸带一次性把程序和数据输入,输出打印到纸上,中间没有人类操作。尽可能迁就机器,对人类好不好用是其次。

  2. 后来,计算机足够便宜+快,人机交互变得可行,通过键盘输入。电传打字机是专门用来发电报,使用电报线发送和接收文本,可以用于用户和计算机“对话”,输入命令,计算机会输出回来,即命令行界面

  3. 最后,屏幕成本足够低,代替电传打字机,仍使用“电传打字机协议”,纸和屏幕对计算机一样。

图形界面2D

  1. PDP-1 计算机,键盘和显示器分开,屏幕只显示临时值,结果打印到纸上。
  2. 阴极射线管(CRT)有两种绘图方式:
  • 矢量扫描:引导电子束描绘出形状。
  • 光栅扫描:按照固定路径,一行行来,从左到右,从上到下,不断重复,只在特定的点打开电子束绘制图形。
  1. 液晶显示器(LCD):可以显示“像素”,使用光栅扫描,每秒更新多次。

  2. 字符生成器:第一代显卡,从内存读取字符,转换成光栅图形,才能显示到屏幕上。

  3. 屏幕缓冲区:特殊区域,专为图形保留,要显示图形,只要修改这个区域里的值。

  4. 矢量命令画图:为了绘制任何形状,同时不吃掉所有内存。所以东西都由线组成,通过矢量绘制。

  5. Sketchpad:交互式图形界面,使用光笔输入,用途是计算机辅助设计,人机交互的关键转折点。

  6. 使用绘图函数画图。

  7. 图形用户界面 GUI 产生。

3D图形

  1. 线框渲染:所有的点3D转成2D后,用画2D线段的函数,来连接这些点。

  2. 3D投影:用图形算法把3D坐标“拍平”显示到2D屏幕上。

  • 正交投影:立方体的各个边,在投影中相互平行。
  • 透视投影:在真实3D世界中,平行线段在远处收敛于一点。
  1. 网格:一堆多边形的集合。网格越密,表面越光滑,细节越多,但意味着更多的计算量。
    三角形更常用来组成网格,因为它能定义唯一平面,且简单。

  2. 扫描线渲染:填充图形的经典算法。扫描线与三角形相交出2点,算法会填满2点之间的像素。
    抗锯齿:多边形边缘像素颜色浅一些,边缘羽化。

  3. 处理“遮挡”:

  • 画家算法:用排序算法从远到近排列,再从远到近渲染,画家也是先画远景再画近景。
  • 深度缓冲:记录场景中每个像素和摄像机的距离,表示为一个距离矩阵。
  1. 背面剔除:为了节省处理时间,忽略多边形的背面。

  2. 明暗处理:考虑灯光照明对明暗的影响。
    表面法线:多边形面向的方向。
    平面着色:最基本的照明算法,根据灯光和表面法线着色。

  3. 纹理处理:外观,查询纹理从相应区域取平均颜色来填充多边形。

  4. 图形处理单元GPU:专门处理图形的硬件,在显卡上,有专用的RAM。3D场景分成多个小部分并行渲染


十、网络

物理层

比特流。尽可能屏蔽传输媒体和通信手段的差异。

通信方式:单向通信(单工通信),双向交替通信(半双工通信),双向同时通信(全双工通信)。

对来自信源的基带信号进行调制
基带调制:编码,仅对波形进行变换,把数字信号转换成另一种形式的数字信号。
带通调制:使用载波进行调制,提高基带信号的频率,并转换为模拟信号,包括调幅A、调频w、调相B——“Asin(wx+B)”。

信道的极限信息传输速率 C:C = W * log2(1 + S/N)
W为信道的宽带(以Hz为单位),S为信号的功率,N为噪声的功率。

传输媒体:
导引型:双绞线、同轴电缆、光纤。
非导引型:地面微波接力通信、卫星通信。

信道复用技术:
频分复用、时分复用和统计时分复用,波分复用,码分复用。

数据链路层

帧。实现封装成帧、透明传输、差错检验,不要求“可靠传输”。

局域网 LAN:其中以太网很成功。

媒体访问控制地址 MAC地址:硬件地址,每台计算机唯一,在适配器的ROM中。

CSMA/CD协议 载波监听多点接入/碰撞检测:实现边监听边发送。
检测信道:发送前,为了获得发送权;发送中,为了及时发现碰撞。
指数退避:发生碰撞后指数级增长等待时间。
冲突域:使用一个信道的站组成的领域。
交换机:在多个冲突域之间,只在必要时交换数据,划分了冲突域。

交换方式:
电路交换:用专用电线直接连接到目的站。
报文交换:像邮政系统一样,消息经过好几个站/路由到目的站。
分组交换:报文分组成一个个数据包,使用TCP/IP协议解决乱序问题。

网络层

IP数据报。向上只提供简单灵活、无连接的、尽最大努力交付的数据报服务。

互联网:巨型分布式网络,会把数据拆分成一个个数据包来传输,是传输数据的管道。

IP协议:非常底层的协议,数据包的头部即元数据部分要求目标地址。
IP地址:软件地址,在计算机的存储器中。

运输层

用户数据报协议UDP和传输控制协议TCP,给访问网络的程序提供“端口号”和“检校和”。

协议用户数据报协议UDP传输控制协议TCP
数据UDP用户数据报TCP报文段
有无连接无连接有连接
是否可靠不提供可靠提供可靠
资源使用

可靠传输:发送端发送什么,在接受端就收到什么。

应用层

域名系统 DNS:专为互联网的电话簿,负责把域名和IP地址一一对应。域名存成树状结构。一般DNS服务器由互联网供应商提供。

广域网 WAN:WAN的路由器一般属于“互联网服务提供商 ISP”。

万维网

传输最多数据的程序是万维网,分布在全球的网页服务器上,可以用“浏览器”来访问万维网。最基本单位是单个页面,页面有内容,也有去往其他页面的链接(超链接,文字超链接即超文本)。

统一资源定位器 URL:每个网页唯一的地址,方便网页相互连接。

超文本传输协议 HTTP:关于客户端和服务器的页面传输的协议。

超文本标记语言 HTML:因为“超文本”的存储和发送都是以普通文本形式,只有纯文本无法区分链接,因此开发的一种标记语言。

搜索引擎:查找网页。3个部分:爬虫(跟着链接到处跑,记录新链接) + 不断扩张的索引(记录网页的特征)+ 查询索引的搜索算法(根据要求查询索引)。


总结

抽象二字是重点,从人的脑力到计算机,从机器码到高级语言,从简单程序到人工智能,这都是一层层抽象包装的成果。
计算机科学速成课

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值