Crash Course Computer Science


计算机的历史

算盘-时钟计时-步进器(机械齿轮结构)-电子计算机

电子计算机里面使用电磁铁控制电路联通(继电器),计算器数量很多就导致了很容易出现故障,虫子喜欢去温暖的地方,一个故障维修员修理的时候曾经拔出一只虫子(bug),之后程序除了故障就说其中有 虫子,bug的来源

机械继电器-二极管-晶体管,逐步走向电子计算机时代

晶体管只有导通和不导通两种状态,只能表达 ture or false 但是有一门 boole`s 布尔代数可以用1和0进行逻辑变换,得到与门、或门、非门、异或门(使用一个非门、一个与门实现)

非门

img

或门

img

异或门

img

ASCll,the American Standard Code for Information Interchange.

但是这只是针对英语的标准,在1992年出现了Unicode实现了所有语言的字符对应表

ALU

ALU 计算逻辑单元就是将多个逻辑门放到一起,乘法无非就是对一些逻辑门,更复杂一些,一些简单的家电微波炉里面可能就没有乘法计算单元,因为使用加减法单元就可以实现

内存

8-bit 计算底层是8个全加器的组合,全加器又是由半加器抽象成一个模块而成

AND-OR 锁存器,可以实现”记忆“一个 bit 而一组锁存器的单元就是寄存器,可以存储多少 bit 位,即 withd 位宽,就是8位寄存器,16位寄存器,32位寄存器…64-bits wide register

操作64位寄存器需要64跟输入线,一根串联的写入控制线,64跟输出线,就需要129跟线,解决办法是使用矩阵

矩阵可以控制指定位置的锁存器是否开启,16+16+3根线

同时需要多路复用器 multiplexer 用于选路,需要输入地址位,就可以做出 RAM

CPU

CPU “取指-解码-执行”的速度叫做“时钟速度” clock speed (单位 Hertz 赫兹)

超频就是调高时钟频率,芯片制造商经常的给 CPU 留一些余地,可以接受一点超频,但是超频太多会让 CPU 过热,产生乱码,因为辛哈跟不上时钟,同时降频可以节省很多电源,现在处理器都可以“动态调整频率”

影响 CPU 的指定速度的较大的原因是 取址 时间,内存的速度还不够快,需要在CPU里加一个单独的单元 cache 缓存,还可以通过总线 bus 一批一批的从内存中读取数据,CPU就不用空等了如果 CPU 直接从缓存中读取到了值,就叫缓存命中,如果没有读取到就叫 cache miss

流水线技术也可以提高 CPU 的运行速度,但是会出现数据依赖,现在有些可以通过乱序处理解决

还可以一次性处理多条指令,四核、八核,多核心数是指一个 CPU 芯片中有多个独立处理单元

早期内存都需要打孔纸由计算机读取写入内存(这让我联想到了我们的答题卡,80年代的机器使用物理读取打孔纸,和现在我们使用拍照答题卡识别是一个道理),后来发展成为了面板控制,面板上有很多开关但是也必须要有硬件基础的、了解寄存器原理、操作码人才能编程,后续才演化为了编程语言

1940~1950是需要手动将伪代码转换为操作码进行输入计算机进行编程,但是对我们来说是很不友好、很不好记的,于是诞生了汇编器,通过汇编器将文字语言编译成机器码(或者说汇编代码、操作码)进行发送给计算机进行编程

汇编器可以实现自动识别 JUMP (跳转)的地址位置,当添加一条新的代码后面地址都会被改变,汇编器可以自动的识别地址位置,隐藏了不必要的细节来做更复杂的工作,导致了现在的程序员“能力空心化”(例如懒人包被投毒事件,我们在了解细节、原理的情况下为了节省时间可以使用懒人包,但是当不了解原理就去使用往往隐藏着巨大的风险和隐患,包括以后遇到一些 bug 都不会应对)

面向对象的核心是:隐藏复杂度,选择性的公布功能

为了去除原有的超多电线,出现了集成电路板 IC 主要作用是把小部件里的电路集成在一起,有创新出了印刷电路板 PCB ,把 PCB 和 IC 组合使用可以大幅减少独立组件和电线

早期存储从打孔纸演化为磁芯存储器,使用电流缠绕磁铁改变磁极

磁带是同样的道理,但是最大的问题是访问速度,磁带是连续的,必须倒带或者快进到特定位置,后来有了磁鼓存储器,导致了硬盘的发展

软盘除了盘片是软的其他的和硬盘一样,主要为了编写

文件存储内部是无序的,就需要“目录文件”来存储文件的一些信息,比如文件名,大小,权限,所有者,所在内存地址(某个 block ),文件如果被删除就会删除目录文件里对应的条目,对应的 block 也会被释放,可以重新写入内容,但是在没有写入内容时,文件内容在内存中并没有被擦除,这样存储会导致很多内存碎片没有被利用,“碎片整理”技术可以将同一内容的 block 整合到一起,增加文件之后查看就不用花费时间查找新的增加片段

为了便于管理“分层文件系统”诞生,有文件夹嵌套,文件目录里需要多记录一条文件信息是是否是文件夹,如果有文件移动可以修改目录文件,而文件在内存中的位置不变

“无损压缩”没有丢失任何数据

“霍夫曼树”列出所有块和出现频率,每轮选择最低的频率,将他们组合成一棵树,循环直到组成一棵树,把每个分支用1和0标注,按照树的索引方式,就可以将每个块生成一个唯一的编码

电传打印机 - 图形界面显示的显示技术,阴极射线管( CRT ):引导电子描绘图形- 光栅扫描:一行一行的在特定的点打开电子束 - 后可以用像素显示,液晶显示器( LCD ),也用光栅扫描

冷战结束,美国半导体公司迎来寒冬,市场被日本手持计算器占据,又进一步的降低了集成电路的成本,后催生了游戏机的诞生又进一步的降低了成本,使得家用计算机开始普及,1975年期间家用电脑开始出现

画面填充1.画家算法,先填充距离远的,再填充距离近的 2.深度缓冲 z-buffering,会默认背景的距离是无限远,因为不需要对目标进行排序因此比画家算法更加快速,

背景剔除,一个3D的三角是有两面的,3D游戏中地图,和玩家的头都是只能看到外面,所里可以不需要关注里面,就节省了一半的三角图形计算

网络

LAN 局域网

载波侦听多路访问 CSMA :多台电脑共享一个传播媒介

许多计算机同时监听载体,成为“侦听”和“多路访问”

以太网的载体是铜线,WiFi的载体是传播无线电波的空气,而载体传输数据的速度叫“带宽”

随着网络流量的上升,两台计算机同时写入数据的概率也会上升

为了避免网络冲突 collision ,等待重新发送的时间随指数增加叫“指数退避”,以太网和WiFi都用这种方法,很多协议也用

为了减少冲突、提升效率,需要减少同一载体中的设备的数量,载体和其中的设备总称为“冲突域”,就需要用交换机链接不同的局域网

相距很远的两地之间有专门的线路联通,成为“电路交换”

”报文交换“:路由可以知道自己下一跳的地址

路由转跳次数为跳数,记录跳数可以找到路由问题

“跳数限制”,如果超过这个限制就代表路由出了问题

报文交换缺点:报文比较大,会堵塞网络,解决办法是将报文分成小块,称为”数据包“ packets

路由会平衡与其他路由之间的负载,确保传输可靠快速,称为”阻塞控制“

同一个报文不同部分的数据包可能通过了不同的路由转发,到达目标应用的顺序不一样,TCP/IP协议可以解决乱序问题

”分组交换“:将数据拆分为小数据包,通过灵活的路由转发

带宽的概念:单位时间内数据的传输量

数据包:MAC地址+IP包+TCP/UDP+数据内容

TCP会一次发送多个数据包,依次接收ACK,ACK的确认率和来回时间可以推测网络的拥堵程度,TCP会根据这个信息调整发包的数量,解决拥堵问题,TCP可以处理乱序和丢包问题,丢包就重发,还可以根据拥堵情况自动调整传输速率

数据链路层:负责控制“物理层”,媒体访问控制地址(MAC),碰撞检测,指数退避,以及一些其他底层协议

网络层:报文交换,路由协议 ,ARP:IP转换为MAC地址,通过发送ARP广播

传输层:TCP、UDP

万维网

最基本单位是单个页面

网络安全的权限中公共、公开的、机密的、绝密的,公共不能读取机密信息,绝密层面不能写入机密、公开信息,为了防止绝密被泄密,“不能向上读,不能向下写”


文章作者: Nico
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Nico !
  目录