3.布尔逻辑和逻辑门
not, and, or, xor(异或)等布尔逻辑操作都是由晶体管并联(串联)组成的。
4.二进制
32-bit/64-bit代表计算机一块块处理数据,每块是32位或64位。
浮点数的存储:
第1位表示正负,后面八位是指数,最后23位是有效数字:-0.231*1023
ASCII:二进制来表示字符
Unicode:ASCII的超集
GIF/MP3:用二进制编码图片和声音
5.算术逻辑单元(ALU)
算术单元:
通过逻辑门实现算术单元,像加法就是异或Xor和And组成
通过half-adder和full-adder进行二进制加法
减法、自增、自加、乘法(转化成加法)、除法(转化成减法)
逻辑单元:
做逻辑操作(and,or,xor),也能做数值检测(正数、负数、溢出、相等…)
6.寄存器 & 内存
Random access memory(随机存取储存器):只能在电脑有电的时候存储
Persistent memory(永久存取储存器)
寄存器(register):一组锁存器(通过逻辑门能够存储1bit),锁存器的个数就是寄存器的位宽,一个寄存器能存一个数
内存:用多路复用器将锁存器组合在一个矩阵里形成大一点的内存,比如256bit的,然后将更多的256bit的组合在一起形成更大的内存。
7.CPU
Central Processing Unit:负责执行程序
fetch -> decode -> execute ( phase)
控制单元从RAM中读取指令,然后解码,最后通过指令的不同调用不同的单元执行指令(CPU和RAM是分开的)。
CPU中有个时钟,在相同间隔内发送电信号,推进CPU进行上述操作。
8. Instructions & Programs
通过不同的指令来构造程序。
9. Advanced CPU Designs
- 如何提升CPU性能1:利用给CPU增加的cache(缓存)(一次从RAM里读取很多地址的数据),减少CPU从RAM读取数据的时间。
- 一般来说,CPU进行复杂运算的时候会将值暂时存储在cache中,会给需要写入RAM的数据增加一个dirty bit,以便当cache用完,CPU仍然需要缓存中的内存时,会将由dirty bit的数据写入RAM。
- 如何提升CPU性能2:指令流水线,CPU同时处理fetch/decode/execute(并行处理),但是要处理数据依赖性的问题。
- 以上,都是如何优化一条流水线的方式。但我们可以选择多核CPU(多个独立处理单元),同时有好几条流水线。
10.Early Programming
- 一开始的打孔纸板只可以用来汇总数据。
- 使用机器读取打孔纸板上的孔(程序),然后计算。
- 冯诺依曼架构:处理器由ALU, data register, instruction register,instruction address register, memory组成。
11.Programming Language
- 汇编可以理解为最靠近底层的编程语言,需要考虑CPU,RAM,register等等
12.Programming Basics
13. Intro to Algorithm
14. Data Structures
15. Alan Turing
- 可判定性问题:是否存在一种算法,输入正式逻辑语句输出准确的“是”或“否”答案?
- 图灵机:一台理论计算设备,是一种理论计算模型。图灵机并不能解决所有问题。
16. Software Engineering
- 面向对象编程(OOP):将函数抽象成一个集合。通过封装,隐藏复杂度,选择性的公布功能(public & private)(这也是oop的核心)。
- Beta版产品:将用户当成QA;Alpha版本:在beta之前,只在公司内部测试的版本。
17. Integrated Circuits & Moore’s law
18. OS
- OS提供API来抽象程序,device driver(设备驱动程序)。
- OS通过调度来进行多任务处理。
- 虚拟内存:程序可以假定内存总是从地址0开始,隐藏和抽象实际物理位置。(因为OS给程序分配的地址可能是不连续的,但是虚拟内存里就是连续的)OS会自动处理虚拟内存和物理内存之间的映射。
- 分时操作系统:OS给多个使用“终端”的用户分配一小部分处理器和内存。
- Unix将OS一分为二:一部分是内核:用来内存分配、多任务处理、IO等,另一部分是有用的工具(程序和运行库)
- 蓝屏:初期的windows缺乏内存保护,当程序崩溃时,最会带着OS崩溃。
19. Memory & Storage
- 任何写入存储器的数据都不会随着电源关闭而丢失,是“非易失性”的。
- 硬盘:寻道时间很短。通过在“写头”加电流而产生磁性,电流方向决定磁性,代表0/1,再加个“读头”检测磁性。
- CD/DVD:光盘表面有很多小坑,会被光学感应器捕捉到,解读为0/1。
- 机械硬盘逐渐被固态硬盘(SSD)替代。
- 任何存储设备都有访问时间(寻道时间),而RAM是可以随机访问的,所以RAM速度更快。
20. Files & Files Systems
- 文件:一整块有关系的数据。 文件格式
- 文件开头都是元数据,记录一些关于文件的属性。
- 电脑和手机对声音检测,记录振幅,而音频文件(wave)去记录这些振幅,一般来说每秒上千次振幅。播放音频文件时,扬声器会产生相同振幅。
- BMP:文件开头记录了图片宽度、高度、颜色深度。每个像素由红绿蓝堆叠而成,文件里(用一个byte)记录了每个颜色的深度。
- 文件底层都是一长串二进制,文件格式极为重要。
- 目录文件:记录其他文件的位置
- 文件系统:1.给文件预留空间 2.让文件存入不同的块
- 删除文件:只是在目录文件里删除该文件记录,这样以后可以让新数据覆盖这块储存区域。(别人以为他删除了,但是可以恢复)
- 碎片整理:由于删除和添加会带来碎片(同一个文件不储存在同一个连续的块中),所以系统会来回移动数据,排列成正确顺序。
- 分层文件系统:文件夹套文件夹,并且目录文件还需要保存目录,所以元数据里又多了一项来区分文件和目录。最顶层的叫“根目录文件”。这样也给移动文件带来了方便,我们不需要真的移动数据,而是修改两个目录文件里的记录即可。
21. Compression
- 压缩:用更少的bit去表示数据。
无损压缩(不丢失任何数据): - 压缩方式1–游程编码:减少重复数据,给相同值前面加上一个字节,用来表示相同的长度。
- 压缩方式2–DFTBA:运用赫夫曼编码树,用一种紧凑的方式给数据编码(字典),出现频率多的编码就长,最后将字典和编码保存起来。因为解码的时候还需要用到字典。
有损压缩(选择性地丢失一些人类很难感知的数据): - 感知编码:去掉人类无法感知的信息。例如:音乐文件中,超出人类所能听到的频率就不需要保存。
22. Keyboards & Command Line Interface
23. Screens & 2D Graphics
24. The cold war & consumerism
25. The Personal Computer Revolution
26. Graphical User Interfaces
27. 3D Graphics
28. Computer Networks
29. The Internet
TCP与UDP
30. The World Wide Web
31. Cybersecurity
- 通过身份验证和访问控制计算机要知道你是谁和你能访问什么。
- 身份验证:1.what you know -> password 2.what you have -> key(physcial password) 3.what you are -> 指针和面部识别
- 访问控制:read,mofidy,execute
- 隔离:当计算机被入侵之后,最大程度上减少入侵程度。os 沙盒程序,通过给每个程序分配不同的内存块来阻止某个程序恶意访问其他内存。虚拟机也是被放入沙盒程序中,这样虚拟机的崩溃不会造成原os的崩溃。