这文章记录一些关于计算机的知识,我觉得程序员应该可以看看,大部分都是抽象,我们在写代码或者在做程序的时候,不用在乎底层知识,我们只需要写,编译器会帮我们处理成想要的样子,我觉得硬件底层是很复杂的一个东西,它不仅仅是编程的逻辑判断,还有物理知识,电的知识,这篇文章是一个个抽象来理解计算机,所以我们不用关心底层什么 ALU,或者 计算等等。
这篇文章不只是记录,也写包括我的理解,可能不是很对,有错误请给提 issues。
感谢CrashCourse 字幕组 以及 Crash Course 你们很棒.
这台 1960 年的 PDP-1 是一个早期图形计算机的好例子,
左边是柜子大小的电脑,中间是电传打字机,右边是一个圆形的屏幕,注意它们是分开的。
因为当时文本任务和图形任务是分开的,事实上,早期的屏幕无法显示清晰的文字,而打印到纸上 有更高的对比度和分辨率,早期屏幕的典型用途 是跟踪程序的运行情况。
比如寄存器的值,如果用打印机一遍又一遍打印出来没有意义,不仅费纸而且慢,另一方面,屏幕更新得很,对临时值简直完美。
但屏幕很少用于输出计算结果,结果一遍都打印到纸上,或其他更永久的东西上。
几十年间出现了很多显示技术,但最早最有影响力的是 阴极射线管(CRT)
原理是把电子发射到 有磷光体涂层的屏幕上,当电子撞击到涂层时,会发光几分之一秒,由于电子是带电粒子,路径可以用磁场控制。
屏幕内用板子或线圈 把电子引导到想要的位置,上下左右都行,既然可以这样控制,有 2 种方法绘制图形
- 引导电子束描述出形状
这叫 “矢量扫描” ,因为发光只持续一小会儿,如果重复得足够快,可以得到清晰的图像
- 按固定路径,一行行来,从上向下,从左到右,不断重复,只在特定的点打开电子束,以此绘制图性。
这叫 ‘光栅扫描“ 用这种方法,可以用很多小线段绘制形状,甚至文字。最后,因为显示技术的发展。我们可以终于可以在屏幕上显示清晰的点,叫 ”像素“ 液晶显示器
简称 LCD ,和以前的技术相当不同,但 LCD 也用光栅扫描,每秒更新多次 像素里红绿蓝的颜色。
有趣的是,很多早期计算机不用像素,不是技术做不到,而是因为像素占用太多内存。
200像素 x 200像素的图像,有 40,000 个像素。
哪怕每个像素只用一个 bit 表示代表黑色或白色,连灰度都没有!会占 40,000 bit 内存。比 PDP-1 全部内存的一半还多。
所以计算机科学家和工程师,得想一些技巧来渲染图形等内存发展到足够用。
所以早期计算机不存大量像素值,而是存符号,80 x 25 个符号最典型。总共 2000 个字符。如果每个字符用 8 位表示,比如用 ASCII 总共才 16000 位,这种大小更合理。
为此,计算机需要额外硬件,来从内存读取字符,转换成光栅图形,这样才能显示到屏幕上。
这个硬件叫 “字符生成器”,基本算是第一代显卡
它内部有一小块只读存储器,简称 ROM。存着每个字符的图形,叫 “点阵图案”。如果图形卡看到一个 8 位二进制,发现是字母 k,那么会把字母 k 的点阵图案,光栅扫描显示到屏幕的适当位置。为了显示,“字符生成器”会访问内存中一块特殊区域,这块区域专为图形保留,叫 屏幕缓冲区
程序想显示文字时,修改这块区域里的值就行,这个方案用的内存少得多,但也意味着 只能画字符到屏幕上。即使有这样限制,人们用 ASCII 艺术发挥了很多创意!
也有人用字符模仿图形界面,用下划线和加号来画盒子,线,和其他简单形状,但字符集实在太小,做不了什么复制的事。
因此对 ASCII 进行了各种扩展,加新字符。
IBM CP437 字符集,用于 DOS。(磁盘操作系统)
某些系统上,可以用额外的 bit 定义字体颜色和背景颜色
做出这样的 DOS 界面,这界面只用了刚刚提到的字符集。
字符生成器 是一种省内存的技巧,但没办法绘制任意形状
绘制任意形状很重要,因为电路设计,建筑平面图,地图,好多东西都不是文字!为了绘制任意形状,同时不吃掉所有内存。
计算机科学家用 CRT 上的 “矢量模式”,概念非常简单:所有东西都由线组成,没有文字这回事,如果要显示文字,就用线条画出来,只有线条,没有别的。
Vectrex,一个早期矢量显示系统
就像之前的 “字符生成器” 把内存里的字符转成图形一样,这些矢量指令也存在内存中,通过矢量图形卡画到屏幕上。
数百个命令可以按序存在屏幕缓冲器…画出复杂图形,全是线段组成的!
由于这些矢量都在内存中,程序可以更新这些值,让图形随时间变化 - 动画!
游戏,街机游戏:天空大战。
CAD
1962 年是一个大里程碑,Sketchpad 诞生,一个交互式图形界面,用途是计算机辅助设计(CAD),它被广泛认为是第一个完整的图形程序,因此获得图灵奖。
为了于图形界面交互,用了当时发明不久的输入设备 光笔,就是一个有线连着电脑的触控笔,笔尖用光线传感器,可以检测到显示器刷新,通过判断刷新时间,电脑可以知道笔的位置,有了光笔和各种按钮,用户可以画线和其他简单形状。
Sketchpad 可以让线条完美平行,长度相同完美垂直90度,甚至动态缩放,这些在纸上很费力,在计算机上非常简单,用户还可以保存设计效果,方便以后再次使用和其他人分享,你可以有一整个库,里面有电子元件和家具之类的,可以直接拖进来用,在如今的角度来看,好像很普通,但在 1962年 计算机还是吃纸带的大怪兽,有柜子般大小,Sketchpad 和光笔让人大开眼界,它们代表了人机交互方式的关键转折点电脑不再是关在门后,负责算数的机器了,可以当助手 帮人类做事
最早用真正像素的计算机和显示器,出现于 1960 年代末,内内中的位(Bit)对应屏幕上的像素 这叫位图显示 现在我们可以绘制任意图形了,您可以把图形想成一个巨大像素值矩阵
计算机把像素数据存在内存中一个特殊区域叫 “帧缓冲区”
早期时,这些数据存在内存里,后来存在高速视频内存里,简称 VRAM ,VRAM 在显卡上,这样访问更快,如今就是这样做的,在 9 位灰度屏幕上,我们可用的颜色范围是 0 强度(黑色)到 255 强度(白色),其实更像绿色或橙色,因为许多早期显示器不能显示白色,我们假设这个视频在低分辨率的位图屏幕上。
**程序可以操纵 “帧缓冲区” 中的像素数据,实现交互式图形