计算机概述系列目录
第一章 计算机概述(一)——计算机发展历程与基础表示
第二章 计算机概述(2)-构建CPU
第三章 计算机概述(3)-编程介绍
第四章 计算机概述(4)-计算机的快速发展
文章目录
- 计算机概述系列目录
- 前言
- 1.硬件性能的爆炸性增长
- (一)硬件开发过程
- (二)摩尔定律
- 二、操作系统
- (一)早期问题
- (二)操作系统
-
- 1. 加强程序加载-批处理(Batch Processing)。
- 2. 统管硬件-设备驱动程序
- 3. 多任务处理(Multitasking)
- 4. 分时操作系统(time-sharing)。
- 5. 简化操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-内核操作系统-(kernel)
- 三、存储器(Storage)的发展
- 四、文件系统
-
- (一)如何存储文件
- (二)常见文件格式
- (三)压缩
-
- 1. 无损压缩技术(GIF、PNG、PDF、ZIP)
- 2. 压缩技术损坏
- 五、人机交互
-
- (一)命令行界面
- (2)显示界面-屏幕和2D图形显示
- 3D图形显示
-
- (一)3D转2D图形——3D投影
- (二)3D图形渲染
前言
学习计算机概述,目前参考资料来源于计算机科学速成课(https://www.bilibili.com/video/BV1EW411u7th?p=3)以后逐步补充更新。 编程:使用计算机解决问题。 主要依靠内部程序运行CPU与内存,程序如何进入内存是本章的主要内容。 本章主要将程序如何进入计算机。
1.硬件性能的爆炸性增长
(一)硬件开发过程
- 1940~1960年代中期,计算机由独立部件组成(分立元件)discrete components,只有一个电路元件组件),用线连接不同组件。 缺点:为了提高性能,需要增加更多的部件,使更多的电线和更复杂的连接。
- 1950年代中期:晶体管开始商业化,用于计算机。 优点:比电子管小、快、可靠,但仍是分立元件。 缺点:分立元件仍存在问题。 解决方案:引入新抽象,包装复杂
- 1959年集成电路(IC,Integrated Circuits)诞生。将多个独立组件组成新的独立组件。
- 早期IC因此,印刷电路板仍印刷电路板(PCB Printed Circuit Boards)诞生了。为了创造更大更复杂的电路,避免电线混乱和接线,创新印刷电路板:可以大规模生产,无需焊接或使用大量电线,通过蚀刻金属线连接零件。由此代替了IC中电线的功能大大降低了独立组件和电线,实现了相同的功能,更小、更便宜、更可靠。
- 早期一个IC为了扩大,只能安装几个晶体管IC光刻发明了容量(Photolithography)技术:将复杂的图案印在材料上,如半导体硅(硅的特性,有时导电,有时不导电,人工控制导电机会,晶体管的优良材料)。 光刻原理简介:在硅片中(称为晶圆) wafer)依次覆盖氧化膜(掺杂时保护覆盖部分晶圆)、光刻胶(光照时可溶)、光掩膜(可保护覆盖部分光刻胶,与光刻胶结合,可在材料上印刷光掩膜上的镂空图案)。然后用光和化学物质去除未被光覆盖的部分,露出晶圆,然后用混合物改变晶圆的导电性,最后用金属化(如铝、铜)连接不同部分的导电晶圆。
(二)摩尔定律
- 摩尔定律的概念:每两年,IC同样大小的空间可以插入两倍数量的晶体管。(说明晶体管较小,移动电荷越少,切换状态越快,功耗越少;电路更紧凑,信号延迟更低,时钟更快) 1980年 一个IC可装3万晶体管 1990年 一个IC可安装100万晶体管 2000年 一个IC可安装3000万晶体管 2010年 一个IC可安装10亿个晶体管 光刻机的分辨率为1万纳米(头发直径的十分之一) 14纳米(比红细胞小400倍)
- 摩尔定律的结束:随着技术的瓶颈,硬件开发面临两个大问题: (1)用光掩模将图案放在晶圆上,目前光的波长和精度已达到极限-方法:开发波长较短的光源。 (2)当晶体管很小时,电极之间可能只有几个原子,电子会跳过间隙,称为量子隧道贯穿,可能导致原本不导电的晶体管导电(漏电)。
二、操作系统
(一)早期问题
早期:1940~1950年,计算机每次只能运行一个程序(在打孔纸上编写程序,操作员将程序放入计算机(需要等待计算机空闲时间) 缺点: 1、手动将程序放入计算机效率低,随着计算机运行速度越来越快,手动放程序的时间比程序运行时间还长。 计算机每次只能运行一个程序。 解决方案:操作系统
(二)操作系统
操作系统是一个程序,但具有操作硬件的特殊权限,可以操作和管理其他程序。它通常是第一个启动程序,所有其他程序都由操作系统启动。
操作系统进化史:
1. 加强程序加载-批处理(Batch Processing)。
对问题:手动放入程序效率低。 方法:将多个程序更改为一次。计算机运行一个程序后,下一个程序将自动运行(因为程序通常按顺序执行)。
2. 统管硬件-设备驱动程序
针对问题:共享软件时,外部设备配置不一致算机的外部设备配置不一致。 方法:操作系统充当软硬件API抽象硬件。程序员通过标准化机制输入输出硬件(I/O)交互。
3. 多任务处理(Multitasking)
针对问题:计算机速度加快,处理器经常闲置,因为需要等待外部设备运行。 为了最大限度地利用计算机,在单个计算机中CPU通过调度运行多个程序。如果正在运行的程序在等待I/O设备一个程序之前,设备可以将程序放置在休眠状态,以操作其他程序I/O设备返回完成信号。 1>问题:当处理多个任务时,每个程序都会占用一些内存,当切换到另一个程序时,不能丢失数据——将独家内存块分配给每个程序。 2>问题:当程序要求更多内存时,如何处理操作系统。 方法:一是构建虚拟内存。操作系统将程序分配到非连续地址中,但程序员很难跟踪。——假设内存总是从地址0开始,方便程序员处理,实际物理位置被操作系统隐藏和抽象。二是动态内存分配(Dynamic Memory Allocation),在虚拟内存小在虚拟内存框架下灵活增减,操作系统自动处理虚拟内存地址增减后的映射。 好处: (1)简化地址,为操作系统同时运行多个程序提供服务极大的灵活性; (2)给程序分配专用的内存范围,隔离了内存——内存保护(Memory Protection)。这样一个程序出错不会影响到其他程序,对于防止恶意软件也有用.
4. 分时操作系统(time-sharing)。
计算机能让多用户同时访问,用户通过终端来访问计算机,终端只是键盘+屏幕,连到主计算机,终端本身没有处理能力。 针对问题:多用户同时访问时,某一用户独占计算机资源。 为了不让某一用户独占计算机的资源, 开发了分时操作系统(time-sharing),每个用户只能用一小部分内存和处理器。
5. 简化操作系统——内核(kernel)
针对问题:早期,操作系统将许多功能全部集中于自身,导致操作系统庞大,特别是早期内存较小的时候。 像Unix一样,将操作系统分为两个部分,一是内存管理,多任务和输出/输出处理 称为内核 ;二是一堆有用的工具,但不是内核的一部分(比如程序和运行库)。这样的设计,使得操作系统能够在更便宜更多的硬件上运行。但紧凑的内核意味着功能没那么全面——一旦发生错误,就让内核“恐慌”,机器崩溃,重启电脑。
三、存储器(Storage)的发展
存储器与内存的区别: 一般内存是非永久性的,用于暂时存储计算机运行数据,的具有“易失性”。 存储器是非易失性的,断电也不会丢失,用于存放计算机程序、数据。 早期易失性的速度快,非易失性的速度慢,但随着快速发展,两者间的差异越来越小。
存储器的发展历程: 存储器根据存取方式分为顺序存储器或循环存储器(需要找到前一个数据才能找到该数据)、随机存储器(可直接查询到该数据)两类。 一般为了快速查询并存取数据,现代计算机一般用随机存储器。(追求速度快、容量大、存取、变更数据灵活)
(一)顺序存储器(Sequential Memory)/循环存储器(Cyclic-access Memory)
1. 打孔纸卡/打孔纸带——5MB
优点:不用电、便宜耐用。 缺点:读取慢、只能写入一次;对于存储临时变量不灵活(打掉的孔只能用胶布手动补)。 1958年,用62500个纸卡表示一个主程序,大小5MB左右。
2. 延迟线存储器(Delay Line Memory)——5.5KB
1944年,为了加快打孔纸卡的读取速度、增强灵活性,出现了延迟线存储器。 基本原理:延迟线存储器由一个管道(内部装满液体,如水银)、一个扬声器、一个麦克风、放大器组成。写入数据后,利用扬声器产生压力波(产生压力波表示1,未产生表示0),当压力波传至麦克风后,麦克风将压力波转换成电信号,经过放大器发大信号后输出,并且用一个导线连回输入端,使之不丢失数据。 1949年,以此发明的计算机EDVAC,128条延迟线,每条能存352位,共能存45000位,即5.5KB。 缺点:每个时刻只能读一位,而延迟线存储器又是顺序存储器,以致于想访问一个数据,必须等到存储器运行到该数据时。
3. 磁带(Magnetic Tape)——1.8MB
基本原理:一条柔性长条磁性带子卷在轴上,可在“磁带驱动器”(Tape Drive)内前后移动。磁带驱动器中通过“写头”改变磁带上一小部分的磁性(电流方向决定极性,代表1和0),再通过“读头”非极性地检测出极性。 优点:磁带便宜又小。 缺点:磁带驱动器很贵,访问速度慢(顺序存储器的通病),因磁带连续,需要倒带或快进到达特定位置。 1951年,UNIVAC计算机,用了半英寸宽,8条并行磁带,磁带每英寸可存128位数据,每卷1200英尺长,即可存1500万位左右,约1.8MB。
4. 磁鼓存储器(Magnetic Drum Memory)——10KB
基本原理:用一个金属圆筒,盖满磁性材料记录数据,圆筒旋转,用多个读头数据。(圆筒每分钟上千转) 1953年,可买到存80000位的“磁鼓存储器”,约10KB。
(二)随机存取存储器(Random Access Memory)
1. 磁芯存储器(Magnetic Core Memory)
基本原理:由磁芯和电线组成,利用电流的磁效应,将磁芯磁化。正反通电,磁芯的极性不同,由此表示1和0。(右手定则判断N极,磁场方向是由N极到S极) 一个圆环表示一位,为了随时能取出想要的数据,将圆环网格排列,有电线负责选行和列。 1953年,16个32*32列的磁芯,可存16384位,为2KB。
2. 硬盘(Hard Disk Drives)——1TB
基本原理:与磁鼓存储器相似,只是用盘代替圆筒。 优点:薄,并且可以叠在一起,以提供更多表面积来存数据。 RAMAC 305计算机,50张24英寸直径的磁盘,总共能存5MB左右,访问任意数据,平均只要六分之一秒左右(称为寻道时间Seek Time)。 现代常见硬盘已能容纳1TB数据,平均寻道时间低于1/100秒。
3. 软盘(Floppy Disk)
除了磁盘是软的,其他的基本一样。 优点:便于携带。 流行于1970~1990年,但很快就被淘汰了,因为寿命短、读取速度慢等原因。
4. 光学存储器
基本原理:与硬盘、软盘一样,都是存数据。主要是通过光盘表面的小坑造成光的不同反射,光学传感器会捕捉这些反射,并解码为1和0。 出现于1972年,后面发展成光盘(Compact Disk,CD)
5. 固态硬盘(Solid State Drive)
现代朝着没有机械运动的部件——固态(Solid State)进军,如硬盘 U盘。机械硬盘逐渐被固态硬盘代替(SSD )。 基本原理:将磁存储改为集成电路存储。 访问时间低于1/1000秒,但还是比RAM慢很多倍,所以现代计算机仍然使用存储层次结构。
四、文件系统
文件:一整块有关系的数据。在计算机底层中都是一长串的二进制数。 文件的基本结构是元数据+所要存储的实际数据。 文件系统:对文件进行管理,使得我们不用关心文件具体的存储位置,整理和访问文件更加方便。
元数据(meta data),其实就是该文件的基本信息,存在文件开头,在实际数据前面,因此也叫文件头(Header)。
(一)如何存文件
- 平面文件系统 (1)早期,存储器容量不大、文件不多,数据一般是顺序存储在存储器中,通过目录文件(Directory FIle)分辨各个文件,称为平面文件系统。 缺点:如果需要增加某一文件大小,会覆盖其他文件的部分数据。 (2)改良 对存储器容量进行分块,每一个分块对应一个文件,每一个块都预留有空间,便于文件进行删增改查操作,如果文件大小大于一个块的大小,则会再给改文件分配一个块,然后在目录文件中记录该文件所含块数。
Tips: 1、目录文件,主要是为了在众多文件中搜寻到某一文件,因此所含信息主要是位置信息等。 如果要添加文件、删除文件、更改文件名等,就必须更新目录文件。 2、 想要删除文件,并不需要将该文件在内存中的所有数据删去,只需要在目录文件中删除记录即可,这意味着计算机认为该空间已经变成可用空间了,可以被新数据覆盖。 好处:(1)便于操作;(2)文件实际数据未删除,有恢复数据的可能。 3、正是因为分块会预留空间,因此文件的占用空间始终要大于文件大小。 4、文件的碎片化(Fragmentation):因为分层文件系统,文件经常处于多个分块中,相互隔开,顺序随机。碎片是增删改文件导致的,无法避免。 缺点:对于顺序存储器来说,碎片会加重查找文件的困难度,降低访问速度。 解决办法:碎片整理(Defragmentation),即计算机将数据来回移动,使得同一个文件的数据按照正确顺序排列。
- 分层文件系统 随着存储器容量变大、文件数量增多,所有文件都像平面文件系统那样处在同一层不便于管理,因此采用了分层文件系统,即文件夹模式。 原理:目录文件添加文件是否是目录的信息,文件最顶层的文件夹为根目录,其下的每一个子文件夹都含有一个与根目录格式一样的目录文件。
tips:
(二)常见文件格式
常见文件格式:
-
文本文件,又称TXT文件(.TXT),本质是—长串二进制数,通过ASCII解码。
-
波形(Wave)文件(.WAV),存音频数据。原理是声音幅度数字化后,存储该数字。
-
位图(Bitmap)(.bmp),存图片。图片由像素组成,位图文件存储的就是每一个像素RGB值。
(三)压缩
压缩:将数据占用空间压得更小。 作用:存储文件更多,传输速度更快。 压缩方法:一是减少重复信息;二是用更紧凑的表示方法。 压缩种类:无损压缩技术(压缩不丢失任何数据)和有损压缩技术(压缩会丢失部分数据)
1. 无损压缩技术(GIF、PNG、PDF、ZIP)
-
游程编码(Run-length Encoding) 适用范围:连续相同数据较多的文件 基本原理:将连续的相同数据压缩成数据数量和单体数据内容构成。eg:7个白色像素点共21字节,经过游程编码后,压缩为一个数量字节7和一个白色像素点,即4个字节。
-
字典编码 适用范围:相同数据较多、分布相对分散的文件。 基本原理:建立一个字典,将重复的数据用字典中的代码表示。如6个字节的“皮大侠”,改由一个字节的“A”来表示。 详细实现:霍夫曼树(Huffman Tree)构造字典。以图像为例,不再将图像看成一个个像素,而是将图像看做一块块,即将多个像素当做一个块。 (1)分块:将两个像素当做一个块(6个字节),这样只有四对数据,白黄(WY)、黑黄(BY)、黄黄(YY)、白白(WW),并统计出现频率(2WY、1BY、4YY、1WW)。 (2)构建霍夫曼树:每轮将两个频率最低的块组成一个树,直至树上包含所有数据。 (3)按照霍夫曼树最顶端到最低端以二进制的形式编号,以此组成字典。这样频率最高数据的二进制代号最短,频率最低的二进制代号最长,极大地压缩了文件。 (4)根据字典代号压缩文件。
2. 有损压缩技术
压缩掉人类看不出区别的数据。
-
感知编码(Perceptual Coding) 基本原理:用不同编码处理不同种类的数据。eg:对声音信号进行压缩,可以删除人听不到的那部分声音,如超声波等,而人能听到的部分不进行处理。 典型代表(MP3、JPEG)
-
时间冗余(Temporal Redundancy) 基本原理:(1)视频中,不用每一帧都存放所有的像素,还是只存放发生改变了的像素。(2)找出帧与帧之间相似的块,然后通过位置变换得到下一帧(比如平移、旋转、缩小、变暗)
五、人机交互
(一)命令行界面
- 早期 最开始用齿轮、旋钮和开关等机械结构来输入,一般输出到纸上。 1950年代,用打孔纸卡和磁带输入,输出到纸上以及指示灯实时反馈。 早期计算机对于输入不会给予交互式的回应,程序开始运行后会一直运行,直到结束。
- 现代 随着计算机越来越便宜、运算速度越来越快,人与计算机实时交流成为可能。 输入设备——键盘 基本原理:取自电传打字机(Teletype Machine)。电传打字机输入的文件可以电报线远程传输到另外一台电传打字机上,并输出在纸上。随着科技的进步,计算机的输出逐渐用屏幕(类似于无限长的纸卡,早期的屏幕标准都采用的是电传打字机的协议标准)代替。
(二)显示界面——屏幕与2D图形显示
屏幕显示图形主要分为两步:一是从内存中读取图形数据;二是根据图形数据在屏幕上显示图形。
- 从内存中读取图形数据 从内存中读取数据依靠与外部设备——显卡。显卡中存储着将内存中的数据转化后的图像。当从内存中专门保留图形数据的区域——屏幕缓冲区取得数据后,显卡将其转化为屏幕可显示的图形用于屏幕显示。发展历史如下: (1)字符生成器(Character Generator)——第一代显卡 基本原理:内部有一小块ROM,存着每个字符的图形(点阵图形Dot Matrix Pattern)。若字符生成器从内存读来的数据通过ASCII解码后发现是K,则会在屏幕上显示由点构成的K图形。 缺点:由于只存储字符,很多任意形状都无法显示 (2)为了绘制任意形状,同时又不使用所有内存——矢量模式 基本原理:用线条表示所有图形。任何图形都可以用很短的直线构成,只需通过电子束的移动指令即可完成。这些指令存储在内存中,通过矢量图形卡读取并显示在屏幕上,类似于数控机床。(通过不断更新内存中的线条指令,就可以在屏幕上显示动画) (3)位图显示(Bitmapped Displays) 内存中的存储位置——帧缓冲区(Frame Buffer) 将屏幕用像素点来表示,每一个像素点都可以代表一定的位数(黑白为1字节,彩色为3字节以上) (图形数据早期存在内存中,后来存在高速视频内存中VRAM,VRAM在显卡上)
- 屏幕显示技术 (1)阴极射线管(Cathode Ray Tubes,CRT) 基本原理:把电子发射到有磷光体涂层的屏幕上,当电子撞击屏幕时,撞击点会发出只存在十几分之一秒的亮光。 由于电子是带电粒子,其路径是可以通过磁场控制的,因此存在两种扫描模式 一是矢量扫描(Vector Scanning):通过偏转板,引导电子束运动出想要的图形; 二是光栅扫描(Raster Scanning):逐行扫描,遇到图形点则打开电子束。 (2)液晶显示器(Liquid Crystal Displays,LCD)——像素法 基本原理:将屏幕用一个个像素(pixel)来表示,用光栅扫描的方式,每次更新每个小像素点中的RGB值。 (由于像素法占据内存较多,早期暂时无法使用;早期存储的是符号)
3D图形显示
计算机屏幕始终是2D平面,如何显示3D图形?
(一)3D转2D图形——3D投影
3D投影:将3D点(X,Y,Z)显示到2D屏幕上的算法。 投影方式:正交投影(Orthographic Projection)、透视投影(Perspective Projection) (线框渲染(Wireframe Rendering):用2D线段连接3D点)
(二)3D图形渲染
简单的3D图形可以用线段来表示,复杂的图形最好用多个三角形来构建(因为3点能够确定一个平面,2点只能确定线段,4个及以上点不能唯一确定一个平面) 一堆多边形的集合成为网格(mesh),网格约密、表面越光滑、细节越多、计算量越大。 扫描填充——抗锯齿——明暗处理——纹理处理
- 扫描填充 经典算法——扫描线渲染(Scanline Rendering) (1)读取三角形的三个顶点,确定三角形Y值最大和最小的点。在这两点之间进行扫描。 (2)逐行扫描。逐行扫描得到与三角形边线相交的像素点。 (3)用颜色填满两个相交点之间的像素点。
如何处理有遮挡(occlusion)关系(远近关系) (1)画家算法(Painter’s Algorithm):将物体按照远近关系进行排序,用扫描填充先处理最远的物体,最后处理最近的物体。缺点:所有图形都要进行填充,浪费内存。 (2)深度缓冲(Z-Buffering):不进行排序,速度快。记录物体中每一个像素点距离摄像机的最小位置,并将其存放在一个数字举证中。重叠的像素点只记录最近的位置,如此可直接判断出物体是否可见,然后按照扫描填充即可(不可见部分不填充)。缺点:当A、B两物体重合点与相机距离都相等时,可能会出现穿模的现象。(主要是因为距离是用浮点数来表示的,而浮点数有舍入误差,导致该点会在A、B之间跳动)
-
抗锯齿(Antialiasing) 由于像素点是正方形的,填充后物体边缘会呈现锯齿状的填充图案。 解决办法:根据多边形切过像素点的成都,将处于边缘位置的像素点颜色渐变。
-
明暗处理(Lingting or Shading) 为了让图形显得更加立体,会对图形进行明暗处理。利用三角形平面的法线,判断与光源、相机的明暗关系,根据明暗关系调整亮度。 算法:平面着色(Flat Shading)、高洛德着色(Gouraud Shadig)、冯氏着色(Phong Shading)
-
纹理(textures)处理 纹理指的图形的外观。 基本算法——纹理映射(Texture Mapping) 首先将多边形坐标与纹理坐标对应起来,同一坐标点像素颜色由纹理坐标相应区域取平均颜色,填充多边形。
-
一些优化操作 (1)背面剔除(Back-Face Culling)。只对三角形正面进行扫描填充等一系列处理,而背面不做任何处理,以节省内存。 (2)加速渲染的方法:做专门的硬件加速特定运算(Graphics Processing Unit GPU,图形处理单元);将3D场景分解成多个小部分,并行渲染。