计算机科学速成课笔记(三):从集成电路到操作系统
作者:互联网
计算机科学速成课(Crash Course Computer Science)
一、集成电路和摩尔定律
1950 年代中期,晶体管开始商业化开始用在计算机里。晶体管比电子管 更小更快更可靠,但晶体管依然是分立元件
1959年,IBM 把 709 计算机从原本的电子管全部换成晶体管,虽然更快更小。 但晶体管的出现还是没有解决"数字暴政"的问题,有几十万个独立元件的计算机不但难设计而且难生产.
与其把多个独立部件用电线连起来,拼装出计算机,不如把多个组件包在一起,变成一个新的独立组件,这就是集成电路(IC)
光刻
用光把复杂图案印到材料上,比如半导体。用晶圆做基础把复杂金属电路放上面,集成所有东西(集成电路)
1.在硅片顶部加一层薄薄的氧化层, 作为保护层
2.然后加一层 “光刻胶” ,光刻胶被光照射后 会变得可溶,可以用一种特殊化学药剂洗掉
3.把光掩膜盖到晶圆上,用强光照射挡住光的地方,光刻胶不会变化;光照到的地方,光刻胶会发生化学变化洗掉它之后,暴露出氧化层
4.通常用一种酸可以洗掉"氧化层"露出的部分, 蚀刻到硅层,而氧化层被光刻胶保护住了。为了清理光刻胶,我们用另一种化学药品洗掉它,光刻法用很多化学品,每种都有特定用途。
5.修改硅露出来的区域 让它导电性更好。所以用一种化学过程来改变它,叫 "掺杂"
“掺杂” 通常用高温气体来做,比如磷 \N 渗透进暴露出的硅,改变电学性质
6.还需要几轮光刻法 来做晶体管。过程基本一样,先盖氧化层,再盖光刻胶
7.然后用新的光掩膜,这次图案不同在掺杂区域上方开一个缺口,洗掉光刻胶
8.然后用另一种气体掺杂把一部分硅转成另一种形式
9.最后一步,在氧化层上做通道,这样可以用细小金属导线,连接不同晶体管
10.再次用光刻胶和光掩膜 蚀刻出小通道
11.使用类似的步骤:用光刻胶+光掩膜,然后溶掉暴露的光刻胶,暴露的金属
每个区域的掺杂方式不同,这叫双极型晶体管
现实中光刻法一次会做上百万个细节,芯片导线上下交错,连接各个元件,把光掩膜聚焦到极小的区域,制作出非常精细的细节。一片晶圆可以做很多 IC整块都做完后,可以切割然后包进微型芯片。微型芯片就是在电子设备中那些小长方体,芯片的核心都是一小片 IC
摩尔定律
随着光刻技术发展,晶体管变小,密度变高
1965年,戈登·摩尔看到了趋势:每两年左右,得益于材料和制造技术的发展同样大小的空间,能塞进两倍数量的晶体管,称为摩尔定律
晶体管越小,要移动的电荷量就越少能更快切换状态 耗电更少。电路更紧凑 还意味着信号延迟更低,导致时钟速度更快
1968年,罗伯特·诺伊斯 和 戈登·摩尔联手成立了一家公司,结合 Intergrated(集成) 和Electronics(电子) 两个词,取名 Intel
Intel 4004 CPU,是个重要里程碑,发布于1971年,是第一个用 IC 做的处理器(微型处理器)
1970年代开始,超大规模集成(VLSI)软件来自动生成芯片设计,软件会自动生成电路,做到尽可能高效
摩尔定律如今遇到的瓶颈:
- 用光掩膜把图案弄到晶圆上因为光的波长,精度已达极限
- 当晶体管非常小,电极之间可能只距离几个原子 \N 电子会跳过间隙,这叫:量子隧道贯穿
二、操作系统
早期的程序
1940,1950 年代的电脑,每次只能运行一个程序:程序员在打孔纸卡上写程序,然后拿到一个计算机房间, 交给操作员,等计算机空下来了,操作员会把程序放入,然后运行,输出结果,停机。运行一个程序通常要几小时,几天甚至几周,很快,放程序的时间 比程序运行时间还长
操作系统
操作系统,简称 OS,其实也是程序。但它有操作硬件的特殊权限,可以运行和管理其它程序。操作系统一般是开机第一个启动的程序,其他所有程序 都由操作系统启动
操作系统开始于 1950 年代,第一个操作系统加强了程序加载方式,之前只能一次给一个程序,现在可以一次多个:当计算机运行完一个程序,会自动运行下一个程序(批处理)
操作系统提供 API 来抽象硬件,叫 “设备驱动程序”,可以用标准化机制和输入输出硬件(I/O)交互
使多个程序可以同时运行,在单个 CPU 上共享时间,操作系统的这种能力叫 "多任务处理"
虚拟内存
每个程序都会占一些内存,当切换到另一个程序时,我们不能丢失数据,解决办法是给每个程序分配专属内存块
分配专属内存块会带来一个奇怪的后果:程序 A 可能会分配到非连续的内存块, 为了隐藏这种复杂性,操作系统会把内存地址进行 “虚拟化”,这叫 “虚拟内存”。
程序可以假定内存总是从地址0开始,操作系统会自动处理虚拟内存和物理内存之间的映射
通过分配"动态内存分配"机制使程序的内存大小可以灵活增,对程序来说,内存看起来是连续的.
如果一个程序出错,它不会影响到其它程序,这叫 “内存保护”
Unix
计算机不仅能同时运行多个程序,还能让多用户能同时访问,多个用户用"终端"来访问计算机。"终端"只是键盘+屏幕,连到主计算机 \N 终端本身没有处理能力
操作系统不但要处理多个程序,还要处理多个用户,为了确保其中一个人 不会占满计算机资源,开发了分时操作系统(每个用户只能用一小部分处理器,内存等)
Dennis 和另一个 Multics 研究员Ken Thompson 联手打造新的操作系统叫 Unix
内核恐慌(kernel panic): 内核如果崩溃,没有办法恢复,所以调用一个叫"恐慌"(panic)的函数
三、内存和存储介质
一般来说,电脑内存是 “非永久性”,如果电源线不小心拔掉了,内存里所有数据都会丢失,所以内存叫"易失性"存储器
存储器(Storage)和内存(Memory)有点不同,任何写入"存储器"的数据会一直存着,直到被覆盖或删除,断电也不会丢失,是"非易失性"的
延迟线存储器
J. Presper Eckert 在 1944 年建造 ENIAC 时发明了一种方法,叫"延迟线存储器"(Delay Line Memory)原理如下:
1.拿一个管子装满液体,如水银
2.管子一端放扬声器,另一端放麦克风
3.扬声器发出脉冲时 会产生压力波,压力波需要时间 传播到另一端的麦克风
4.麦克风将压力波转换回电信号,可以用压力波的传播延迟 来存储数据
5.假设有压力波代表 1,没有代表 0,扬声器可以输出 1010 0111
6.压力波沿管子传播,过了一会儿,撞上麦克风,将信号转换回 1 和 0
7.如果加一个电路,连接麦克风和扬声器,再加一个放大器(Amplifier)来弥补信号衰弱
8.就能做一个存储数据的循环,信号沿电线传播几乎是瞬时的
任何时间点只显示 1 bit 数据,但管子中可以存储多个位(bit)
"延迟线存储器"的一大缺点是,每一个时刻只能读一位 (bit) 数据,如果想访问一个特定的 bit,得等待它从循环中出现,所以又叫 "顺序存储器"或"循环存储器"
磁致伸缩延迟存储器
如果增加内存密度,把压力波变得更紧密 意味着更容易混在一起,所以出现了 "磁致伸缩延迟存储器"
用金属线的振动来代表数据,通过把线卷成线圈,1英尺×1英尺的面积能存储大概 1000位(bit)
随后出现的 “磁芯存储器”,用了小型磁圈,如果给磁芯绕上电线,并施加电流,可以将磁化在一个方向,如果关掉电流,磁芯保持磁化
如果沿相反方向施加电流,磁化的方向(极性)会翻转,这样就可以存 1 和 0,有电线负责选行和列,也有电线贯穿每个磁芯, 用于读写一位(bit)
磁带
磁带是纤薄柔软的一长条磁性带子 卷在轴上,可以在"磁带驱动器"内前后移动
里面有一个"写头"绕了电线,电流通过产生磁场,导致磁带的一小部分被磁化,电流方向决定了极性,代表 1 和 0。还有一个"读头",可以非破坏性地检测极性
虽然磁带驱动器很贵,但磁带又便宜又小,因此磁带至今仍用于存档,但是磁带是连续的,必须倒带或快进到达特定位置就显得很慢
磁鼓和硬盘
1950,60年代,有个类似技术是 "磁鼓存储器"
磁鼓有金属圆筒,盖满了磁性材料以记录数据,滚筒会持续旋转,周围有数十个读写头,等滚筒转到正确的位置\N 读写头会读或写 1 位(bit) 数据。为了尽可能缩短延迟, 鼓轮每分钟上千转!
磁鼓导致了硬盘的发展,不过硬盘用的是盘,不像磁鼓用圆柱体。原理是一样的,磁盘表面有磁性,写入头和读取头 可以处理上面的 1 和 0,硬盘的好处是薄,可以叠在一起,提供更多表面积来存数据
四、文件系统
文件系统
文件在底层全是一样的,是一长串二进制
文本文件只是一长串二进制数,解码数据的关键是 ASCII 编码
关于数据的数据,叫"元数据"(meta data),元数据存在文件开头,在实际数据前面,因此也叫文件头(Header)
位图
位图(Bitmap),后缀 .bmp,计算机上,图片由很多个叫"像素"的方块组成
每个像素由三种颜色组成:红,绿,蓝,叫"加色三原色",混在一起可以创造其它颜色,BMP 文件开头是元数据,有图片宽度,图片高度,颜色深度
特殊文件
储存器没有文件的概念,只是存储大量位,所以为了存多个文件,需要一个特殊文件,记录其他文件的位置。特殊文件有很多名字,这里泛称 “目录文件”,这个文件经常存在最开头,方便找(位置 0)
扩展名帮助得知文件类型
目录文件还存文件的元数据,比如创建时间,最后修改时间,文件所有者是谁,是否能读/写或读写都行
目录文件有文件起始位置和长度,如果要添加文件,删除文件,更改文件名等,必须更新目录文件
目录文件,以及对目录文件的管理是一个非常简单的文件系统例子,文件系统专门负责管理文件。“平面文件系统” :文件都在同一个层次
数据恢复和碎片整理
如果给一个文件加一点数据 ,会覆盖掉后面的文件的一部分,把空间划分成一块块,导致有一些 “预留空间” 可以方便改动,同时也方便管理。 用这样的方案,目录文件要记录文件在哪些块里:拆分文件,存在多个块里
假设打开一个文件加了些内容但是文件太大存不进一块里,不想覆盖掉隔壁的块,所以文件系统会分配一个没使用的块,容纳额外的数据,目录文件会记录不止一个块,而是多个块只要分配块,文件可以轻松增大缩小
之后某个时候,那些块会被新数据覆盖但在此之前,数据还在原处,所以队可以 "恢复"数据
碎片整理: 碎片是增/删/改文件导致的,不可避免,大文件可能存在数百个块里,计算机会把数据来回移动,排列成正确的顺序。
相关文件放在同一个文件夹,然后文件夹套文件夹.这叫"分层文件系统", 最大的变化是 目录文件不仅要指向文件, 还要指向目录,需要额外元数据 来区分开文件和目录
这个目录文件在最顶层,因此叫根目录,所有其他文件和文件夹,都在根目录下。文件系统不必关心文件在磁带或磁盘的具体位置,整理和访问文件更加方便
五、压缩
格式虽然管用,但简单性意味着效率不高,解决方法是压缩,把数据占用的空间压得更小,用更少的位(bit)来表示数据
一种方法是减少重复信息,最简单的方法叫 游程编码(Run-Length Encoding) 适合经常出现相同值的文件
没有损失任何数据,可以轻易恢复到原来的数据,这叫 “无损压缩”,没有丢失任何数据,解压缩后,数据和压缩前完全一样。
霍夫曼树
1950年代 大卫·霍夫曼 发明了一种高效编码方式叫 “霍夫曼树”(Huffman Tree)
1.首先,列出所有块和出现频率,每轮选两个最低的频率
2.可以把它们组成一个树,现在完成了一轮算法
3.重复上述步骤
4.选频率最低的两个,放在一起,并记录总频率,把它们组合成一棵树就完成了
这棵树按频率排列,频率低的在下面,可以把每个分支用 0 和 1标注,它们绝对不会冲突,因为树的每条路径是唯一的,意味着代码是"无前缀"的,没有代码是以另一个代码开头的
“消除冗余"和"用更紧凑的表示方法”,这两种方法通常会组合使用,几乎所有无损压缩格式都用了它们,比如 GIF, PNG, PDF, ZIP
感知编码
以声音为例,如果录音乐,超声波数据都可以扔掉,因为人类听不到超声波。另一方面,人类对人声很敏感,所以应该尽可能保持原样。低音介于两者之间,人类听得到,但不怎么敏感。
有损音频压缩利用这一点,用不同精度编码不同频段,这种删掉人类无法感知的数据的方法,叫 "感知编码"
视频只是一长串连续图片,所以图片的很多方面也适用于视频,视频里不用每一帧都存这些像素,可以只存变了的部分(时间冗余),找出帧和帧之间相似的补丁,然后用简单效果实现,比如移动和旋转
标签:文件,操作系统,计算机科学,程序,速成,光刻胶,数据,内存 来源: https://blog.csdn.net/qq_45902224/article/details/120086466