diff --git a/src/memory.md b/src/memory.md new file mode 100644 index 0000000..a868329 --- /dev/null +++ b/src/memory.md @@ -0,0 +1,81 @@ +# 内存 + +在选购电脑的时候,有一项信息是一定要知道的,就是内存有多大? + +## 内存的作用 + +为什么内存这么重要呢?其实,电脑真正工作的场所是在内存上面,包括所有系统的驱动程序、操作系统、工作数据、成品/半成品等等,都必须先加载到内存上面才能给CPU读取。尤其对Windows或比较大型的程序,要求的内存也越多。而且,内存永远也不会嫌多的,就像钱对于我来说 ^_^ + +## 如何计算内存的容量? + +内存的最小单位是位(bit),每个位可以代表1或0(开或关),而8个bit则组成1字节(byte)。byte可以说是电脑最基本的计算单位了,再往后则每乘以1024来增加单位。也就是说: +> |||| +> | -------------: | :-: | :------- | +> | 1KB(Kilo Byte) | = | 1024Byte | +> | 1MB(Mage Byte) | = | 1024KB | +> | 1GB(Giga Byte) | = | 1024MB | +> | 以此类推…… | | | + +很早就和大家说过了:电脑只认识0和1,任何程序语言要交由电脑运算,最终的还要换成0和1才能够让电脑读得懂。我们在键盘上敲进一个字母 `A`,真正传给电脑的是`01000001`这个byte(8bit),我们称这种字母对应方法为ASCII(America Standard Code for Information Interchange,美国标准信息交换码)。通常我们以纯文字(英文)所处理的文章,就是使用ASCII字母的了。 + +究竟内存的需求量是怎样计算出来的呢?如果以纯文字来算,一页A4纸大约能有5000多字节(包括标点和空白),即5KB,那么1MB就有超过二百页了。但如果要做出更漂亮的文字,每个字还需要更多的内存来储存其字形字体、特殊效果、行段格式等等,那么1MB也只能储存数十页,有时更少。总之,越漂亮越复杂的文件,所需的内存也越多。 + +下面再拿一个比较实际的例子来算算内存的使用量﹕ + +我们在选购显卡(Video Adapter)的时候,常常听说某卡有多少多少显存,究竟多少才够用呢﹖ + +先拿一个古老的单色显卡来说,假设它的分辨率是640x480,也就是说屏幕上横有640个显示点,竖则有480个点,而每个点只有两种变化:亮(白/黄/绿等单色)或不亮,这可用1个bit($2^{1}$)的开关来表示。那么 + +`640x480x1` bit
+ = `307200` bit
+ = `38400` byte
+ = `37.5` KB
+ = `0.036621` MB + +您看只需要很少的显存就够了。然而,用的如果是彩色显卡的话,如果要显示简单的16色,每个点就需要4bit($2^{4}=16$)来显示了,那么就需要 + +`640x480x4` bit
+ = `228800` bit
+ = `153600` byte
+ = `150` KB
+ = `0.15` MB + +如果要显示 256(8bit) 色,则需要 `840x480x8` bit = `0.29` MB 了。 + +假如您的显卡可以显示 1024x768 的分辨率和 32bit 颜色(目前市面上的最低水准)的话,您最少需要`1024x768x32` bit = `3` MB 的RAM。而现在市面上的显卡还有自己的程序处理功能(如3D加速,AI计算加速),那么则需要更多的显存了。 + +不过,请您要分清楚的是:这里以显存为例子,并不是电脑系统上面的内存,而是显卡本身的(虽然某些核心或板载显卡会共享电脑的内存)。同时,这里虽然只作为一个计算例子而已,不过也适合计算一个 BMP 图像文件的大小 +> 注:bmp 图像和 png 等图像不同,没有经过压缩,文件大小就是实际的分辨率大小,而 png 图像通常小于同分辨率的 bmp。 + +## 内存的管理 + +不同的操作系统,对内存的管理也不相同,下面以传统的DOS来看看内存的分配情形。由于传统设计的限制和向后兼容的考虑,DOS主要运用的是内存的前1MB。而且,真正工作的区域也只是前面的640K(然而哪怕早期的Windows也已经打破了这个限制了)。 + +| 0-640KB | 640-
768KB | 768-
832KB | 832-
896KB | 896KB-
1MB | 1MB-
16MB/4G | +| ------- | --------- |---------- | ---------- | ----------- | ---------- | +|    基本内存    | 显存
预留 | 适配器
内存 | EMS
Window | 主板BIOS
内存 |         扩展内存         | + +离开了内存,电脑一点东西都做不到,但如果RAM给扰乱了或是超出了范围,电脑也会不工作,通常电脑的宕机或蓝屏(out of memory)就是这样形成的。 + +一般来说,当一个程序被启动的时候,所有其必须运用的数据都会先加载到内存上面,当程序被关闭的时候,也将所占用的空间腾空出来好给其它程序使用。但有些被称为“驻留程序(后台程序)”的程序,即使是“关闭”了依然还会存留在RAM里面。不过,这种程序为数不多,且都是些经常要用到的一些程序(大部分系统程序)。另外,有些电脑病毒也是这样躲在RAM里面而将继续开启的文件感染。 + +好的操作系统有较完善的内存管理,能避免因内存错误而当机的能力也比较好。通常我们在Windows(尤其是Windows95一类的较老的操作系统)上面看到什么 `'Illegal operation'`(非法指令,emm,学习C++的可能会遇到过)之类的信息,就多是因为内存错误而引起的。幸运的话,用 Ctrl+Alt+Del 打开任务管理器将受影响的程序结束掉,还可以继续工作;然而有时除了关机就别无它途,更糟糕的是连错误信息都没有就不动了。但相同的情形,如果在一个Unix(或Linux)系统上面,它们对内存的管理非常棒。就算本机的键盘不能操作,您还可以从另外的机器使用telnet或ssh进去然后将问题程序结束(kill)掉也还可以继续工作,未必一定要关机的。不过,现在的Windows也做到了这一点。 + +## 内存的分类 + +凡是能利用电子性能来作记录的元件都可以称为内存(Memory),也分为只读存储器即ROM(Read Only Memory)和随机储存内存(这也就是上面大多数所提到的的内存):RAM(Random Access Memory)。 + +其实几乎所有的主板和扩展卡(包括显卡等)及其它设备都有它们的ROM,主要是记录一些控制程序和协议等,也有各自的RAM来储存数据。 + +而我们通常说到的电脑内存就多指系统的RAM,早期的RAM都是直接焊接在主板上面的,而现在RAM已经模块化成为内存条,便于更换。不过,某些设备,例如某些型号的笔记本电脑和所有手机,内存还集成在主板上甚至CPU内部。假如您翻看前面CPU的叙述,不同年代的CPU其最大内存地址也是不同的。x86的CPU的最大内存地址是大约4GB,但x86-64架构的CPU的最大内存地址是大约64TB($2^{46}$Byte)。 + +RAM的速度是以ns(纳秒,nanoseconds,`1000000ns = 1ms`)做单位,以数据的储存速度为标准,数值越低越快。以前的SIMM有些是70ns,十分古老的DIMM最快都可以到10ns了。而现在主流的DDR4 的RAM,速度就更快了(没有找到确切的数据,但传输速度达到了 17-25GB/s)。同时,为配合CPU的外频速度,也需要不同外频速度的RAM才能发挥性能。 + +ROM虽然说是只读的,但现在的主板甚至显卡的ROM多数是可以重复刷写的,也就是通过程序可以对里面的内容进行更新。不过,如果自己升级固件就要非常小心了,尤其是在升级过程的一半断电的话可就难堪了。比如很久以前的CIH病毒,就可以进入到ROM里面去改写数据,以致机器打不开。如果拿去修理,有些奸商会趁机叫您将主板换掉,其实只要有适当设备,将数据重新写进ROM就可以救回的了,再不然,买一个新的ROM换掉也可以。 + +然而,RAM有一共同特性,就是有电才能维持记忆,如果电源关掉了,所有的记忆都会回复到全部为正或负。如果打开台式机的机器盖子去看看主板的话,上面应该都有颗钮扣电池,它就是用来维持主板时钟和CMOS(Complementary Metal-Oxide Semiconductor,用来储存和维护一些机器的基本设定数据)的工作的。一旦机器很久没用,重启的时候或许会显示警告或者开不起来,可能就是CMOS的电池用完了,以前的设定也就消失掉,此时只能再进入BIOS(Basic Input Output System)在厂家预设的基础上进行修改后才能让机器回复工作。有时候如果忘记了BIOS的密码,也可以通过取出电池或通过跳针将原有的设定清除掉,再重新设定。不过现在的CMOS大部分已经采用了非易失性存储器,断电不会丢失数据。所以主板上的电池只剩下了维持时钟工作的功能。不过为了保留传统,大部分厂商的主板也保留了扣下电池清除BIOS配置的功能,只是已经不能清除密码了。 + +--- +> 原文: [netman](http://www.study-area.org/compu/compufr1.htm)
+> 翻译: cxykevin
+> study-area-cn