2024-05-12 08:30:06 +08:00
# 内存
在选购电脑的时候,有一项信息是一定要知道的,就是内存有多大?
## 内存的作用
为什么内存这么重要呢?其实,电脑真正工作的场所是在内存上面,包括所有系统的驱动程序、操作系统、工作数据、成品/半成品等等, 都必须先加载到内存上面才能给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</ br >
= `307200` bit</ br >
= `38400` byte</ br >
= `37.5` KB</ br >
= `0.036621` MB
您看只需要很少的显存就够了。然而, 用的如果是彩色显卡的话, 如果要显示简单的16色, 每个点就需要4bit($2^{4}=16$)来显示了,那么就需要
`640x480x4` bit</ br >
= `228800` bit</ br >
= `153600` byte</ br >
= `150` KB</ br >
= `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-< / br > 768KB | 768-< / br > 832KB | 832-< / br > 896KB | 896KB-< / br > 1MB | 1MB-< / br > 16MB/4G |
| ------- | --------- |---------- | ---------- | ----------- | ---------- |
|       基本内存      | 显存< / br > 预留 | 适配器< / br > 内存 | EMS< / br > Window | 主板BIOS< / br > 内存 |                 扩展内存                |
离开了内存, 电脑一点东西都做不到, 但如果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配置的功能, 只是已经不能清除密码了。
---
2024-05-12 08:37:09 +08:00
> 原文: [netman](http://www.study-area.org/compu/compu_mem.htm)</br>
2024-05-12 08:30:06 +08:00
> 翻译: cxykevin</br>
> study-area-cn