learn-computer-basic/src/memory.md

82 lines
8.8 KiB
Markdown
Raw Normal View History

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 |
| ------- | --------- |---------- | ---------- | ----------- | ---------- |
| &ensp;&ensp;&ensp;基本内存&ensp;&ensp;&ensp; | 显存</br>预留 | 适配器</br>内存 | EMS</br>Window | 主板BIOS</br>内存 | &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;扩展内存&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp; |
离开了内存电脑一点东西都做不到但如果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有一共同特性就是有电才能维持记忆如果电源关掉了所有的记忆都会回复到全部为正或负。如果打开台式机的机器盖子去看看主板的话上面应该都有颗钮扣电池它就是用来维持主板时钟和CMOSComplementary Metal-Oxide Semiconductor用来储存和维护一些机器的基本设定数据的工作的。一旦机器很久没用重启的时候或许会显示警告或者开不起来可能就是CMOS的电池用完了以前的设定也就消失掉此时只能再进入BIOSBasic Input Output System在厂家预设的基础上进行修改后才能让机器回复工作。有时候如果忘记了BIOS的密码也可以通过取出电池或通过跳针将原有的设定清除掉再重新设定。不过现在的CMOS大部分已经采用了非易失性存储器断电不会丢失数据。所以主板上的电池只剩下了维持时钟工作的功能。不过为了保留传统大部分厂商的主板也保留了扣下电池清除BIOS配置的功能只是已经不能清除密码了。
---
> 原文: [netman](http://www.study-area.org/compu/compufr1.htm)</br>
> 翻译: cxykevin</br>
> study-area-cn