文档库 最新最全的文档下载
当前位置:文档库 › 关于内存地址的个人理解和操作原理

关于内存地址的个人理解和操作原理

关于内存地址的个人理解和操作原理
关于内存地址的个人理解和操作原理

最近看见太多人询问内存地址的作用和使用方法,我来做个大概的解释吧

内存地址,其实电脑的每个操作都会在内存中先存储,然后经CPU处理后返回内存最终显现出来,而内存里有个内存地址,是为了区分各种不同数据的,而每个地址则相对应一个数据。

网络游戏中,数据也会先存放到内存中,然后进行处理,包括坐标、血量、MANA等,其实所有信息都是在内存中一一存放并等待处理。处理完毕后结果将会返回原来的地址中(当然也有返回到其他的)。

通过以上的解释,大家可以明白一个道理,其实任何数据都是会下载到本地电脑上然后经过处理后再返回的(至于返回到网络和返回到本地就看数据的重要性了)包括网页的浏览等,任何在你电脑上可以看见的东西必定先存放到本地内存中或硬盘中等待处理后才会显现出来的。

内存和外挂:

说到这里当然要给大家举个例子了,就拿网络游戏来说吧。以前的网络游戏很多数据都是在本地电脑上进行处理和比对的,例如曾经的精灵,它的游戏币是在本地电脑上进行处理的,处理后的结果再返回服务器,这样就导致了当时的刷钱外挂,因为大家可以修改本地电脑上的内存地址中的数值,然后再返回给服务器。从以上可以知道单机游戏锁血锁蓝是多么简单的事了吧。因为所有的数据操作都是在本地运行计算的。当然,还有的外挂是通过改变封包数据来达到效果的。例如魔兽世界加速外挂,比如我现在人物的坐标是0 0然后按照正常速度走的话下一秒坐标是1 1。因为魔兽世界是在本地对人物坐标进行处理,如果只是单一的改变本地游戏坐标的位置,或许你在自己电脑上会看见自己一下跑到 3 3的位置了,但实际游戏服务器上的人物还在1 1这个位置,那就毫无意义。我们可以截取发送坐标的封包,修改我们下一秒跨度的数值,向服务器发送我下一秒会在3 3的位置,这时服务器处理后你的人物就在3 3的位置了。当然,整个过程只是改变封包内的数据值,并没有向服务器多发送封包,所以有的人说是加速外挂给游戏带来了压力的说法是错误的。当然,运营商也可以通过检查你的日常数据来判断你是否使用外挂,所以是没有查不出的外挂,只有不愿意查的外挂。

而现在的网络游戏血、经验、等级、金钱等重要数据都是由服务器计算然后返回给客户端(就是我们),而且每次存放血、蓝等信息的内存地址在每次游戏的启动都会变化,在现在来说,修改其数值已经没有任何意义了,因为那只能让你在本地读取的数值不同而已,而真正的数据被存储在了服务器上,你无法修改。但是我们可以通过读取内存地址中的数值来精确我们脚本的计算。

脚本与读取内存地址:

例如我要做一个脚本,需要在血或蓝少于一个具体的值的时候加血加蓝,这时候我们就可以采用内存地址的读取,因为这种做法可以让脚本以最精确的方式去加血加蓝,而不是去看血条蓝条(其实血条蓝条这时候已经根本不重要)。在按键精灵里

有这么一个脚本。

VBSCall ReadMemory(内存地址:整数(16进制),类型:0-字节 1-整数 2-长整数,输出值-所读取的内容:长整型变量)

实际应用(中间的内存地址为假设):

VBSCall ReadMemory( &H400000,2,xue)

这句脚本的意思为,&H400000为读取内存地址400000中数值;2为读取类型,为长整数;xue则把读取出来的数值保存到xue这个变量中去。

如果这个400000的地址是用来储存血量的。那我们就可以对xue这个变量来进行判断计算。实际应用如下

If xue<500

//放入加血的脚本

EndIf

也就是当血量少于500的时候我们开始加血。这个500你可以随意改变

实际应用2挂机打怪,然后人物回到挂机点(中间的内存地址为假设):

vbs dim x,y,a,b

//申明变量(其实在按键精灵里不用这么做)

VBSCall ReadMemory( &H400000,2,x)

//读取地址中的纵坐标保存到x

VBSCall ReadMemory( &H800000,2,y)

//读取地址中的横坐标保存到y

vbs a=100

vbs b=100

//也就是原始坐标或者是你想定点的坐标

if x>a and y>b

moveto 300 500

//以上坐标为虚拟,根据游戏不同自己更改,以下放入这个游戏里移动的移动方式的脚本

endif

//如果两个坐标都大于我们希望保存的地方,我们就开始向另一个方向移动

由此我们可以生成

if x

if x>a and y

if xb

if x=a and y=b

一共5种不同的处理方法,这样让人物回到原来的点继续开始打怪就可以轻松制作原点挂机的脚本

说了那么多,一定会产生一个很大的问题,如何查找游戏内的内存地址。

内存地址的查找

我一般用金山游侠例如我要找红,先在自己满血的时候输入上限,然后搜索,这时候会搜索出很多地址,一些是代表你当前的红,和你的上限,还有一些正好是搜索时碰巧一样的。

OK,在结果里再搜索一次,会去掉一些,这样搜索3次基本上结果已经很少了,但还不准确。

现在,你要做的是就是让自己死了,不同游戏可能不同,死的时候血是0,那就去自杀吧(如果掉经验用小号)。

在结果里用0搜索一次。

别以为这样就结束了,这次要让自己不死,那就让自己少点血,我一般采用脱掉加血上限的装备,让自己的血减少。

依照以上方法反复尝试,最后确定一个地址。

地址出现以后别高兴太早,现在很多游戏内存地址是变动的(至少每次开游戏时就变动),所以可能这次管用,到下次还要重新搜索。

以上这些都是我个人的经验之谈,可能有不精确之处,但我想基本上可以解决大部分问题,如果还有不懂的下面跟贴。

PS:这里的人看贴不回的习惯太不好了

以下发文观点皆以 "您已经会使用金山游侠、FPE2000、GameMaster等辅助软体来找寻资料"

相信不少玩家都经歷过那段记忆体只有 1M 时代,常常為為了挤那1,2k出来跟OS争的你死我,再看看现在的电脑规格...,科技真一日千里 XD~

切入我们的主题,找到某游戏的内存位址数值后该怎麼用。

第一先从按精提供的函数来看

VBSCall ReadMemory(v1,v2,v3)

v1:内存地址:整数(16进制)

v2:类型:0-字节 1-整数 2-长整数

v3:输出值-所读取的内容:长整型变量

我想很多人一开始就算你找到了数值,却卡在这边不知道要输入什麼,包括我第一次使用也

遇到这个问题,所以我觉得有必要就这个部份说明一下。

VBSCall ReadMemory(&HFAC8EA,1,HP)

上面这行您一定常用

&HFAC8EA 是内存地址 , 1 是读取一个整数然再后再存进 HP 变量裡面

不管您用过几次,下面这三个参数说明您一定要看完。

-------------------------------------------------------------------------------------------

ReadMemory()第一个参数内存地址:整数(16进制)

-------------------------------------------------------------------------------------------

&HFAC8EA 是什麼东西,為什麼可以代表一个内存地址?

来测试一下,在按精脚本输入

[Copy to clipboard]

CODE:

VBSCall MessageBox(a)

VBSCall MessageBox(typename(a))

结果:

第一次显示 16435434

第二次显示 Long

没错,&HFAC8EA 是一个长整数,&H就是用来将一个10进制的数字转成16进制的表示法,

他的反函数是HEX(),按精测试 VBSCall MessageBox(HEX(16435434))会显示FAC8EA。

*因為我没有 ReadMemory() 这个函数的原形,所以我并不知道為什麼说明文件上面写整数(16进位)

也许是很早之前的按精版本确实只能使用整数,只是说明文件没改,也许是他确实是传入一个整数

,只是我误会他的意思,有时间我会把函数dump出来看看再上来加註,或是总版老大来龙去脉可以

说明一下。

不过他是什麼型态无所谓,至少用到现在没有出错过(不过还是有必要瞭解一下),我们只要确定一点

a = &HFAC8EA,变量 a 的型态确实是一个长整数!! 就算你把他强制转形,他还是一个长整数。且看

以下。

[Copy to clipboard]

CODE:

VBSCall MessageBox(typename(a))

//强制转形為整数

a = CINT(a)

VBSCall MessageBox(typename(a))

嗯,二次都是显示 Long,这是因為VBS的特性会根据变量内容来决定他是什麼型态如同以下程式

[Copy to clipboard]

CODE:

b = 3

VBSCall MessageBox(a + b)

得到 8,因為VBS变数宣告的不定型特性,相对VBS也调整了一些运算子的自动转换,这样是好还是不好,

好处就是乱乱写也通,坏处就是在脚本裡做判断时很容易出错,因為你不知道他什麼时候偷偷帮你转形,

或是你以為他有帮你转形,事实上并没有,下就这段就不能执行了。

[Copy to clipboard]

CODE:

b = 3

VBSCall MessageBox(a + b)

这种情况其实常常发生从文字档裡读出使用者界面参数做判断时,有时应该要HP=30自动吃补药,但是没吃,

不是按精有问题,而是你的判断式不正确,避免这种情况发生,读取文字档裡的变数出来后一律强制转形一

次(一个被变数型态搞到失眠的人留),微软出了一个VBS不知道该说造大眾还是害死一堆入门设计师。

偏主题有点久了,这部份详细请参考拙作(其实是写给我自已看的)。

按键精灵与VBscrīpt 的基础观念(一)https://www.wendangku.net/doc/8d2485000.html,/viewth ...

(二)https://www.wendangku.net/doc/8d2485000.html,/viewth ... &extra=page%3D2

-------------------------------------------------------------------------------------------

ReadMemory()第二个参数类型:0-字节 1-整数 2-长整数

-------------------------------------------------------------------------------------------

為什麼我这麼在意变量是整数还是长整数,原因就在这,第二个参数型态直接就影响到输出的结果,

字节跟整数跟长整数有什麼不同,最大就差别就在范围值

字节 = 1 Byte (-127 ~ 128) 或不带正负号 (0 ~ 255) = 256

整数 = 2 Byte (-32,768 ~ 32,767) 或 (0 ~ 65535) = 65536(256 ^ 2)

长整数 = 4 Byte (-2,147,483,648 ~ 2,147,483,647) 或 (0 ~ 4294967296) = 256 ^ 4

上面的范围很重要在,超过原本型态的范围就会產生溢位(overflow)的错误。

整数一定是 2Byte ? 不一定,要看你用的是哪一套程式语言,像 .NET Framework 中的整数就是

4个 Byte,Long 是 8 个 Byte,有一种叫短整数才是 2 Byte。那你怎麼知

道按精是什麼语言开

发的,对!我不知道...,那你怎麼知道上面字节要用1 Byte 整数要用 2 Byte,对!我猜的 =.=

呵呵,好啦,不要玩文字游戏了,没有特别的情况下一定是上面那种范围,我实测过的确第二个参数

是这个范围值没错,只是按精应该在指令说明上应该註明一下范围(ps.我的印像中好像

按精有一个地方有特别註明这个参数佔的Byte数,因為我看了5.9x简体版的说明文件还有繁体版的说明

文件还有官网上的按精宝典,都没有特别说明,我一时也想不起来在哪看过的,还是哪位高人po的帖子

有提及过,有版友可以提供我官方文件说明文件连结我就会回来编帖註解一下。

)

这个跟我游戏中血量是285 昇级经验值是 20000 有什麼关係?

所以重点就是如果你的血量是在 0~255内,你就要设 1(字节),0~65535就要设2(整数)

有时你现在的血量是124第二个参数你设1(字节),但可能你会昇级血量会超过255(字节的范围),读出来

的值最大就到255而己,所以你要先确定游戏中血量到底佔了几个Byte。

-------------------------------------------------------------------------------------------

ReadMemory()第三个参数输出值-所读取的内容:长整型变量

-------------------------------------------------------------------------------------------

我们来看一张图

图片附件: Memory1.gif (2006-8-18 07:32 AM, 7.97 K)

红框的部份就是从&H000EA99A读取1个byte放进HP变量

VBSCall ReadMemory(&H000EA99A,0,HP)

//绿框的部份就是从&H000EA9BA读取2个byte放进HP变量

VBSCall ReadMemory(&H000EA9BA,1,HP)

//蓝框的部份就是从&H000EA9DA读取4个byte放进HP变量

VBSCall ReadMemory(&H000EA9DA,2,HP)

如果要连续取12个 4 Byte要怎麼做? 好问题,什麼情况会连续读取内存,读中文和图形档! 稍后介绍

内存偏移设定:从一个位置就知道其它位置,动态计算位址。

-------------------------------------------------------------------------------------------

对於记忆体实际系统运作,不在本篇叙述内,我们只要知道在按精如何灵活运即

可。

内存位址的偏移(加加减减)观念上与按精中的阵列(数组)运作方式是一样的,且看以下

[Copy to clipboard]

CODE:

VBS Dim Memory(3)

//Assign Value

Memory(0) = &H6B

Memory(1) = &H00

Memory(2) = &H4B

Memory(3) = &H00

类似上面的阵列用法您一定常用

您可以把内存位址(如:&HFAC8EA) ,当做是阵列中的索引值(Memory(0)、Memory(1)

阵列中的数值 Memory(0) = &H6B、Memory(1) = &H00当做是内存位址实际储存的数值,也就是您实际读取到的HP、MP值。

看一下这张图你就一目了然了。

图片附件: Memory2.gif (2006-8-18 09:40 PM, 6.28 K)

以上举例说明只是让您更瞭解内储位址的意义,只要知道一般我们在按精裡使用的变数、阵列是10进制,而内存不管

是索引还是存放的数字都是以16进制来表示。

假设我们用金山游侠之类的软体找到了游戏中的数值

目前血量值(HP):1575

目前魔法值(MP):1604

最大血量(TOP_HP):17414

最大魔法(TOP_MP):9990

图片附件: Memory3.gif (2006-8-18 09:40 PM, 12.47 K)

那麼按精中你会这样写

[Copy to clipboard]

CODE:

VBSCall ReadMemory(&H001E3242,1,MP)

VBSCall ReadMemory(&H001E31B9,1,TOP_HP)

VBSCall ReadMemory(&H001E31BB,1,TOP_MP)

//转成百分比

My_HP = Round(HP / TOP_HP , 2)*100

My_MP = Round(MP / TOP_MP , 2)*100

//HP低於60%吃HP补药

If My_HP <= 60

Gosub 吃HP补药

End If

//MP低於30%吃MP补药

If My_MP <= 30

Gosub 吃MP补药

End If

注意一个地方!!

由上图 TOP_HP (&H001E31B9)内存位址(最上面那个红色框)得知

第1个 Byte 06

第2个 Byte 44

如果你在按精测试 VBSCall MessageBox(&H0644) 得到结果会是 1604 ,而不是我上面写的 17414

怎麼会这样? 不要担心,因為记忆体高低位元排列的关係,要测试的值要倒过来打,

VBSCall MessageBox(&H4406) ,才能显示你抓到的数值 17414。

这部份原理我就不赘述,因為按精ReadMemory函数已经帮你处理掉,输出长整数变数一定跟记忆体中存的数值没错,

用ReadMemory读出来也是10进位,而不是16进位,你的目的只是要读取内存资讯而己,所以不要想太多

上面这个范例是按精中典形的用法,但是如果如果你需要使用大量的内存位址,万一游戏改版或其它因素导致内存位址改变了

那啟不是又要重头全部找一次?

所以有经验的玩家会使用相对位址来储存,只记录内存位址偏移(偏了几个Byte)。

通常有3,4个内存位址,我们会挑位址最前面(位址索引值最低)那个来储存当做是计算偏移起点,以上例来说就是 &H001E31B9(TOP_HP)。

&H001E31B9 (TOP_HP) <&H001E31BB (TOP_MP) <&H001E3240 (HP) <&H001E3242 (MP)

再来就是执行小算盘->检视->切换成工程型,用来计算偏移位址 (你要用手算也可以啦 ~_~)

图片附件: Memory4.gif (2006-8-18 09:40 PM, 16.34 K)

求各个内存位址到 &H001E31B9(TOP_HP) 的偏移(距离)

HP - TOP_HP (目前血量 HP 的内存偏移)

小算盘输入(前置0不用打) 1E3240 - 1E31B9 = 87

MP - TOP_HP (目前魔法 MP 的内存偏移)

小算盘输入(前置0不用打) 1E3242 - 1E31B9 = 89

TOP_MP - TOP_HP (最大魔法值 TOP_MP 的内存偏移)

小算盘输入(前置0不用打) 1E31BB - 1E31B9 = 2

注意! 红色数字的偏移量是16进位

按精中实际脚本语法

[Copy to clipboard]

CODE:

//目前血量内存位址

HP_Addr = TOP_HP_Addr + &H87

//目前魔法内存位址

MP_Addr = TOP_HP_Addr + &H89

//最大魔法内存位址

TOP_MP_Addr = TOP_HP_Addr + &H2

//将内存位址以变数传入

VBSCall ReadMemory(HP_Addr,1,HP)

VBSCall ReadMemory(MP_Addr,1,MP)

VBSCall ReadMemory(TOP_HP_Addr,1,TOP_HP)

VBSCall ReadMemory(TOP_MP_Addr,1,TOP_MP)

注意一个地方,如果您使用档案存取方式将起始偏移量储存起来,那麼要用 CLng 强制转形一次

因為预设读出来的值都是字串(字串和数值相加会错误,第一篇有提到这个问题)。

"&H001E31B9"

TOP_HP_Addr = CLng(TOP_HP_Addr)

或者是您只存了 "1E31B9"

TOP_HP_Addr = "1E31B9"

TOP_HP_Addr = CLng("&H" & TOP_HP_Addr)

*结论:

用这种只存起始位址和记录偏移量的好处就是,就算游戏改版改变起始位址,也只要找一次,不用每个都重找内存位址。

当然,碰上游戏大改版,在多了一些栏位(譬如多了什麼精神力、威望值等等),有可能重新排列过记忆体位址,就要重

新全部找一次了。(总不可能游戏天天在改版吧 / _ \)

记忆偏移设定教学就到这边。

内存中找中文这篇我延了一段时间才补上来,不是我偷懒,而是我在想该怎麼詮释

中文字在内存的值,我试著写了一些解释(word档二页),写到后面实在有点无力,

(没看没事,看完连我自己都开始疑问一大堆),於是我往现成网路资料找,也找到

一些相当不错的网站,请版友慢慢享用。

谈谈Unicode编码

https://www.wendangku.net/doc/8d2485000.html,/text6.html

Unicode

https://www.wendangku.net/doc/8d2485000.html,/w/index. ... e&variant=zh-cn

Big5

https://www.wendangku.net/doc/8d2485000.html,/w/index. ... C&variant=zh-tw

GB 2312

https://www.wendangku.net/doc/8d2485000.html,/w/index. ... 2&variant=zh-cn

GB 18030

https://www.wendangku.net/doc/8d2485000.html,/w/index. ... 0&variant=zh-cn

https://www.wendangku.net/doc/8d2485000.html,/w/index.php?title=ASCII&variant=zh-cn

是的,中文在内存中的值取决於他是什麼编码类型,上面列表是比较常用的。

原则上,一个英文字 1 个 Byte ,一个中文字 2 个 Byte(台湾以前还有一个中文字3个Byte

的编码方式),Unicode 编码也很重要,详细请看上表,在以下教学中避免误导,不介绍此

编码方式。

我们先从比较没问题的英文字在内存看起,英文字编码是属於ASCII,建议您把上表中连

结开啟对照。(按精中有个指令叫 ASC 您应该有用过,就是ASCII的缩写,下例会用到)

假如某位玩家对您说LOVE,经由辅助软体Game Master我们找

到 "LOVE" 在内存的位址 = &H001C19D8

图片附件: Memory5.gif (2006-8-20 06:58 PM, 3.46 K)

按精中读取LOVE字串内存的方法

//Love字串内存起始位址

LoveAddr = &H001C19D8

//读取 4 Byte(一个英文字一个Byte,这边我不用Len("Love")或是设定為变数计算的方式,稍后说明。) iByte = 4

//从第 1 Byte读取

i = 1

//读取内存值存放变数

ReadString = ""

iStr = "" //fix iString rename iStr (0821)

//连续读取 4 个Byte内存资料(还记得上篇教的位址偏移量的使用吗)

一定要先看完前二篇哦,不然看到这会很吃力

while i <= iByte

VBSCall ReadMemory(LoveAddr + CLng("&H" & i-1) , 0 , iStr)

iStr = CHR(iStr)

ReadString = ReadString & iStr

i = i + 1 //fix 0823

//男/女朋友密你,自动回话给他

If ReadString = "LOVE"

SayString "baby~ i love you too"

EndIf

说明:

* LOVE 跟 love 大小写不同内码值也不同,上面这个例子是用 ASC 的反函数CHR自动转换读取到

Ascii码所对应的字元。

*不用 Len("Love") 或是 s = "Love" : Len(s) 这样的方式是因為Len是VBS函数,VBS属於作业系统一部份,Len会随著

作业系统的不同而有不同的值(Windows XP/2000作业系统本身就是Unicode系统),得到的值

是字串的字元长度,而不是字串的Byte数,(你又开始在抽像了...),

作个实验就知道,在按精输入 VBSCall MessageBox(Len("abc中文")),得到的答案是 5 ,

怎会这样? 你不是说一个英文1个byte,一个中文二个byte,Len("abc中文") 不是应该要 3+2+2 = 7 吗? 答案就是从这段*号地方开始再看一次! 事实上 "abc中文" 在XP裡面是10个Byte(5x2),

VBS 另外有一个计算字元的Byte数的函数,在按精输入VBSCall MessageBox(Len B("abc中文")) ,显示10 。

写到这边我都还没正式介绍内存读取中文哦,所以读取英文的情况下照我上面的范例不会错。

再说也许可能是要读取不同男/女朋友的英文名字,再判断是第几号情人再回话,万一回错了就好笑了,所以还是照这样用。

不过话又说回来,我不敢保证游戏中一定是用1个byte在存一个英文字,有的游戏设计有考虑到发行

到不语言的国家,很有可能会使用2个byte来存英文字,现我在测试的游戏英文是以1个Byte储存,实际上使用,您

还是要多观察内存值的变化,再正确的设定ReadMemory参数,这就是我為什麼要写了二页的word档之后又砍掉的原因了,

既然要使用内存来读取游戏数值,就要细心一点。

接下来继续介绍中文内存读取,原理跟英文字串差不多略作修改,假如我们要对应游戏中某张地图名称叫 "火山湖"

也找到内存位址起点。

图片附件: Memory7.gif (2006-8-20 06:58 PM, 4.58 K)

脚本命名:FindStrInMemory.txt

//要找的字串

FindStr = "火山湖"

//这个字串的内存起始位址

FindStr_Addr = &H00169380

//转换实际内存中字串佔的Byte数 (中文=2个Byte,英文字1个Byte) VBSCall FindStrByte = StrLength(FindStr)@

//从第1个Byte开始读取

i = 1

//内存中字串的16进制码

MemoryHexStr = ""

//迴圈开始读取

While i <= FindStrByte

VBSCall ReadMemory(FindStr_Addr + CLng("&H" & i - 1) , 0 , bWord) MemoryHexStr = MemoryHexStr & hex(bWord)

i=i+1

EndWhile

//将您要找的中文字串转成跟内存一样的格式

VBSCall returnStr = Str2Hex(FindStr)@

//这裡写找到内存中文字串之后值判断式

If returnStr = MemoryHexStr

GoSub 地图区域处理副程式

EndIf

VBS自订函数档命名: StanleyUtl.vbs (跟上面这个脚本放同一目录)

Function Str2Hex(varstr)

Str2Hex=""

For i=1 To Len(varstr)

varchar=Mid(varstr,i,1)

varasc = Asc(varchar)

If varasc<0 Then

varasc = varasc + 65535

End If

If varasc>255 Then

varlow = Left(Hex(Asc(varchar)),2)

varhigh = right(Hex(Asc(varchar)),2)

Str2Hex = Str2Hex & varlow & varhigh

Else

Str2Hex = Str2Hex & Hex(ASC(varchar))

End If

Next

End Function

'计算byte(中文 2 Byte,英文 1byte)

Function StrLength(S)

n = 0

For i = 1 To Len(S)

C = Asc(Mid(S, I, 1))

If C >= 0 And C <128 Then

N = N + 1

Else

N = N + 2

End If

Next

StrLength = N

End Function

说明:

1.请注意我在脚本中 VBSCall ReadMemory(FindStr_Addr + CLng("&H" & i - 1) , 0 , bWord)

这行是以 0 (字节:1个BYTE) 方式读取,原因是因為实际上您在游戏中可能要比对的字串中英文混合 "火山湖ab12有美女"

,所以我在 StanleyUtl.vbs 提供了一个字串转成内存实际佔用Byte的函数。

2.实际你只要比对内存字串值,不用刻意对中文转码,什麼咧Unicode转ansi,简体转繁体,转来转去头都晕了,当然啦,

上列脚本只是简单应用,也许演算法写得不很好,如果有更好的写法也欢迎您po上来讨论。

3.一句老话,使用内存多观察内存值变化情况,确定你要找个这个中(英)文字串的内存起始位址,才不会找错

中文字在内存的应用介绍就到这边~ XD 很不好意思要这样跳来跳去看~ 全部写完会委请总版帮忙连在一起

RAM工作原理

RAM工作原理 实际的存储器结构由许许多多的基本存储单元排列成矩阵形式,并加上地址选择及读写控制等逻辑电路构成。当CPU要从存储器中读取数据时,就会选择存储器中某一地址,并将该地址上存储单元所存储的内容读走。 早期的DRAM的存储速度很慢,但随着内存技术的飞速发展,随后发展了一种称为快速页面模式(Fast Page Mode)的DRAM技术,称为FPDRAM。FPM内存的读周期从DRAM阵列中某一行的触发开始,然后移至内存地址所指位置的第一列并触发,该位置即包含所需要的数据。第一条信息需要被证实是否有效,然后还需要将数据存至系统。一旦发现第一条正确信息,该列即被变为非触发状态,并为下一个周期作好准备。这样就引入了“等待状态”,因为在该列为非触发状态时不会发生任何事情(CPU必须等待内存完成一个周期)。直到下一周期开始或下一条信息被请求时,数据输出缓冲区才被关闭。在快页模式中,当预测到所需下一条数据所放位置相邻时,就触发数据所在行的下一列。下一列的触发只有在内存中给定行上进行顺序读操作时才有良好的效果。 从50纳秒FPM内存中进行读操作,理想化的情形是一个以6-3-3-3形式安排的突发式周期(6个时钟周期用于读取第一个数据元素,接下来的每3个时钟周期用于后面3个数据元素)。第一个阶段包含用于读取触发行列所需要的额外时钟周期。一旦行列被触发后,内存就可以用每条数据3个时钟周期的速度传送数据了。 FP RAM虽然速度有所提高,但仍然跟不上新型高速的CPU。很快又出现了EDO RAM和SDRAM等新型高速的内存芯片。 介绍处理器高速缓存的有关知识 所谓高速缓存,通常指的是Level 2高速缓存,或外部高速缓存。L2高速缓存一直都属于速度极快而价格也相当昂贵的一类内存,称为SRAM(静态RAM),用来存放那些被CPU频繁使用的数据,以便使CPU不必依赖于速度较慢的DRAM。 最简单形式的SRAM采用的是异步设计,即CPU将地址发送给高速缓存,由缓存查找这个地址,然后返回数据。每次访问的开始都需要额外消耗一个时钟周期用于查找特征位。这样,异步高速缓存在66MHz总线上所能达到的最快响应时间为3-2-2-2,而通常只能达到4-2-2-2。同步高速缓存用来缓存传送来的地址,以便把按地址进行查找的过程分配到两个或更多个时钟周期上完成。SRAM在第一个时钟周期内将被要求的地址存放到一个寄存器中。在第二个时钟周期内,SRAM把数据传送给CPU。由于地址已被保存在一个寄存器中,所以接下来同步SRAM就可以在CPU读取前一次请求的数据同时接收下一个数据地址。这样,同步SRAM 可以不必另花时间来接收和译码来自芯片集的附加地址,就“喷出”连续的数据元素。优化的响应时间在66MHz总线上可以减小为2-1-1-1。 另一种类型的同步SRAM称为流水线突发式(pipelined burst)。流水线实际上是增加了一个用来缓存从内存地址读取的数据的输出级,以便能够快速地访问从内存中读取的连续数据,而省去查找内存阵列来获取下一数据元素过程中的延迟。流水线对于顺序访问模式,如高速缓存的行填充(linefill)最为高效。 什么是ECC内存 ECC是Error Correction Coding或Error Cheching and Correcting的缩写,它代表具有自动纠错功能的内存。目前的ECC存储器一般只能纠正一位二进制数的错误。 Intel公司的82430HX芯片组可支持ECC内存,所以采用82430HX芯片的主板一般都可以安装使用ECC 内存,由于ECC内存成本比较高,所以它主要应用在要求系统运算可靠性比较高的商业计算机

全面教你认识内存参数

全面教你认识内存参数 内存热点 Jany 2010-4-28

内存这样小小的一个硬件,却是PC系统中最必不可少的重要部件之一。而对于入门用户来说,可能从内存的类型、工作频率、接口类型这些简单的参数的印象都可能很模糊的,而对更深入的各项内存时序小参数就更摸不着头脑了。而对于进阶玩家来说,内存的一些具体的细小参数设置则足以影响到整套系统的超频效果和最终性能表现。如果不想当菜鸟的话,虽然不一定要把各种参数规格一一背熟,但起码有一个基本的认识,等真正需要用到的时候,查起来也不会毫无概念。 内存种类 目前,桌面平台所采用的内存主要为DDR 1、DDR 2和DDR 3三种,其中DDR1内存已经基本上被淘汰,而DDR2和DDR3是目前的主流。 DDR1内存 第一代DDR内存 DDR SDRAM 是 Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思。DDR内存是在SDRAM内存基础上发展而来的,仍然沿用SDRAM生产体系,因此对于内存厂商而言,只需对制造普通SDRAM 的设备稍加改进,即可实现DDR内存的生产,可有效的降低成本。 DDR2内存 第二代DDR内存

DDR2 是 DDR SDRAM 内存的第二代产品。它在 DDR 内存技术的基础上加以改进,从而其传输速度更快(可达800MHZ ),耗电量更低,散热性能更优良。 DDR3内存 第三代DDR内存 DDR3相比起DDR2有更低的工作电压,从DDR2的1.8V降落到1.5V,性能更好更为省电;DDR2的4bit 预读升级为8bit预读。DDR3目前最高能够1600Mhz的速度,由于目前最为快速的DDR2内存速度已经提升到800Mhz/1066Mhz的速度,因而首批DDR3内存模组将会从1333Mhz的起跳。 三种类型DDR内存之间,从内存控制器到内存插槽都互不兼容。即使是一些在同时支持两种类型内存的Combo主板上,两种规格的内存也不能同时工作,只能使用其中一种内存。 内存SPD芯片 内存SPD芯片

DDR系列内存详解及硬件设计规范-Michael

D D R 系列系列内存内存内存详解及硬件详解及硬件 设计规范 By: Michael Oct 12, 2010 haolei@https://www.wendangku.net/doc/8d2485000.html,

目录 1.概述 (3) 2.DDR的基本原理 (3) 3.DDR SDRAM与SDRAM的不同 (5) 3.1差分时钟 (6) 3.2数据选取脉冲(DQS) (7) 3.3写入延迟 (9) 3.4突发长度与写入掩码 (10) 3.5延迟锁定回路(DLL) (10) 4.DDR-Ⅱ (12) 4.1DDR-Ⅱ内存结构 (13) 4.2DDR-Ⅱ的操作与时序设计 (15) 4.3DDR-Ⅱ封装技术 (19) 5.DDR-Ⅲ (21) 5.1DDR-Ⅲ技术概论 (21) 5.2DDR-Ⅲ内存的技术改进 (23) 6.内存模组 (26) 6.1内存模组的分类 (26) 6.2内存模组的技术分析 (28) 7.DDR 硬件设计规范 (34) 7.1电源设计 (34) 7.2时钟 (37) 7.3数据和DQS (38) 7.4地址和控制 (39) 7.5PCB布局注意事项 (40) 7.6PCB布线注意事项 (41) 7.7EMI问题 (42) 7.8测试方法 (42)

摘要: 本文介绍了DDR 系列SDRAM 的一些概念和难点,并分别对DDR-I/Ⅱ/Ⅲ的技术特点进行了论述,最后结合硬件设计提出一些参考设计规范。 关键字关键字::DDR, DDR, SDRAM SDRAM SDRAM, , , 内存模组内存模组内存模组, , , DQS DQS DQS, DLL, MRS, ODT , DLL, MRS, ODT , DLL, MRS, ODT Notes : Aug 30, 2010 – Added DDR III and the PCB layout specification - by Michael.Hao

内存的物理结构和工作原理

内存的物理结构和工作原理 内存也叫主存,是PC系统存放数据与指令的半导体存储器单元,也叫主存储器(Main Memory),通常分为只读存储器(ROM-Read Only Memory)、随机存储器(RAM-Red Access Memory)和高速缓存存储器(Cache)。我们平常所指的内存条其实就是RAM,其主要的作用是存放各种输入、输出数据和中间计算结果,以及与外部存储器交换信息时做缓冲之用。 下面是结构: 1、PCB板 内存条的PCB板多数都是绿色的。如今的电路板设计都很精密,所以都采用了多层设计,例如4层或6层等,所以PCB板实际上是分层的,其内部也有金属的布线。理论上6层PCB板比4层PCB板的电气性能要好,性能也较稳定,所以名牌内存多采用6层PCB板制造。因为PCB板制造严密,所以从肉眼上较难分辩PCB板是4层或6层,只能借助一些印在PCB板上的符号或标识来断定。 2、金手指 黄色的接触点是内存与主板内存槽接触的部分,数据就是靠它们来传输的,通常称为金手指。金手指是铜质导线,使用时间长就可能有氧化的现象,会影响内存的正常工作,易发生无法开机的故障,所以可以隔一年左右时间用橡皮擦清理一下金手指上的氧化物。 3、内存芯片 内存的芯片就是内存的灵魂所在,内存的性能、速度、容量都是由内存芯片组成的。 4、内存颗粒空位 5、电容 PCB板上必不可少的电子元件就是电容和电阻了,这是为了提高电气性能的需要。电容采用贴片式电容,因为内存条的体积较小,不可能使用直立式电容,但这种贴片式电容性能一点不差,它为提高内存条的稳定性起了很大作用。 6、电阻 电阻也是采用贴片式设计,一般好的内存条电阻的分布规划也很整齐合理。7、内存固定卡缺口:内存插到主板上后,主板上的内存插槽会有两个夹子牢固的扣住内存,这个缺口便是用于固定内存用的。 8、内存脚缺口 内存的脚上的缺口一是用来防止内存插反的(只有一侧有),二是用来区分不同的内存,以前的SDRAM内存条是有两个缺口的,而DDR则只有一个缺口,不能混插。 9、SPD SPD是一个八脚的小芯片,它实际上是一个EEPROM可擦写存贮器,这的容量有256字节,可以写入一点信息,这信息中就可以包括内存的标准工作状态、速度、响应时间等,以协调计算机系统更好的工作。从PC100时代开始,PC100规准中就规定符合PC100标准的内存条必须安装SPD,而且主板也可

详解内存工作原理及发展历程

详解内存工作原理及发展历程 RAM(Random Access Memory)随机存取存储器对于系统性能的影响是每个PC 用户都非常清楚的,所以很多朋友趁着现在的内存价格很低纷纷扩容了内存,希望借此来得到更高的性能。不过现在市场是多种内存类型并存的,SDRAM、DDR SDRAM、RDRAM等等,如果你使用的还是非常古老的系统,可能还需要EDO DRAM、FP DRAM(块页)等现在不是很常见的内存。 虽然RAM的类型非常的多,但是这些内存在实现的机理方面还是具有很多相同的地方,所以本文的将会分为几个部分进行介绍,第一部分主要介绍SRAM 和异步DRAM(asynchronous DRAM),在以后的章节中会对于实现机理更加复杂的FP、EDO和SDRAM进行介绍,当然还会包括RDRAM和SGRAM等等。对于其中同你的观点相悖的地方,欢迎大家一起进行技术方面的探讨。 存储原理: 为了便于不同层次的读者都能基本的理解本文,所以我先来介绍一下很多用户都知道的东西。RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。 让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,

DRAM内存原理.

DRAM内存原理 1. 内存基础 不管你信不信,RDRAM (Rambus、DDR SDRAM甚至是EDO RAM它们在本质上讲是一样的。RDRAM、DDR RAM、SDRAM、EDO RAM都属于 DRAM(Dynamic RAM,即动态内存。所有的DRAM基本单位都是由一个晶体管和一个电容器组成。请看下图: 上图只是DRAM一个基本单位的结构示意图:电容器的状态决定了这个DRAM 单位的逻辑状态是1还是0,但是电容的被利用的这个特性也是它的缺点。一个电容器可以存储一定量的电子或者是电荷。一个充电的电容器在数字电子中被认为是逻辑上的1,而“空”的电容器则是0。电容器不能持久的保持储存的电荷,所以内存需要不断定时刷新,才能保持暂存的数据。电容器可以由电流来充电——当然这个电流是有一定限制的,否则会把电容击穿。同时电容的充放电需要一定的时间,虽然对于内存基本单位中的电容这个时间很短,只有大约0.2-0.18微秒,但是这个期间内存是不能执行存取操作的。

DRAM制造商的一些资料中显示,内存至少要每64ms刷新一次,这也就意味着内存有1%的时间要用来刷新。内存的自动刷新对于内存厂商来说不是一个难题,而关键在于当对内存单元进行读取操作时保持内存的内容不变——所以DRAM单元每次读取操作之后都要进行刷新:执行一次回写操作,因为读取操作也会破坏内存中的电荷,也就是说对于内存中存储的数据是具有破坏性的。所以内存不但要每64ms 刷新一次,每次读操作之后也要刷新一次。这样就增加了存取操作的周期,当然潜伏期也就越长。 SRAM,静态(StaticRAM不存在刷新的问题,一个SRAM基本单元包括4个晶体管和2个电阻。它不是通过利用电容充放电的特性来存储数据,而是利用设置晶体管的状态来决定逻辑状态——同CPU中的逻辑状态一样。读取操作对于SRAM不是破坏性的,所以SRAM不存在刷新的问题。 SRAM不但可以运行在比DRAM高的时钟频率上,而且潜伏期比DRAM短的多。SRAM仅仅需要2到3个时钟周期就能从CPU缓存调入需要的数据,而DRAM 却需要3到9个时钟周期(这里我们忽略了信号在CPU、芯片组和内存控制电路之间传输的时间。前面也提到了,SRAM需要的晶体管的数目是DRAM 的4倍,也就是说成本比DRAM高至少是4倍,在目前的售价SRAM每M价格大约是DRAM的8倍,是RAMBUS内存的2到3倍。不过它的极短的潜伏期和高速的时钟频率却的确可以带来更高的带宽。 结构和功能(SDRAM 内存最基本的单位是内存“细胞”——也就是我们前面展示给大家DRAM 基本单元示意图所示的部分,下面我们对这个部分通称为DRAM基本单元。每个DRAM 基本单元代表一个“位”——Bit(也就是一个比特,并且有一个由列地址和行地址定义的唯一地址。8个比特组成一个字节,它可代表256种组合(即2的八次幂,字节是内存中最小的可寻址单元。DRAM基本单元不能被单独寻址——否则现在的内存将会更加复杂,而且也没有必要。很多DRAM基本单元连接到同一个列线(Row line和同一个行线(Column line,组成了一个矩阵结构,这个矩阵结构就是一个Bank。大部

Flash存储芯片工作原理概况

Flash 存储芯片工作原理: Flash 芯片并不是像光盘那样把信息刻上去的。为了更加清楚地说明,我首先让你知道计算机的信息是怎样储存的。计算机用的是二进制,也就是0与1。在二进制中,0与1可以组成任何数。而电脑的器件都有两种状态,可以表示0与1。比如三极管的断电与通电,磁性物质的已被磁化与未被磁化,物质平面的凹与击,都可以表示0与1。硬盘就是采用磁性物质记录信息的,磁盘上的磁性物质被磁化了就表示1,未被磁化就表示0,因为磁性在断电后不会丧失,所以磁盘断电后依然能保存数据。而内存的储存形式则不同,内存不是用磁性物质,而是用RAM 芯片。现在请你在一张纸上画一个“田”,就是画一个正方形再平均分成四份,这个“田”字就是一个内存,这样,“田”里面的四个空格就是内存的储存空间了,这个储存空间极小极小,只能储存电子。。好,内存现在开始工作。内存通电后,如果我要把“1010”这个信息保存在内存(现在画的“田”字)中,那么电子就会进入内存的储存空间里。“田”字的第一个空格你画一点东西表示电子,第二个空格不用画东西,第三个空格又画东西表示电子,第四个格不画东西。这样,“田”的第一格有电子,表示1,第二格没有,表示0,第三格有电子,表示1,第四格没有,表示0,内存就是这样把“1010”这个数据保存好了。电子是运动没有规律的物质,必须有一个电源才能规则地运动,内存通电时它很安守地在内存的储存空间里,一旦内存断电,电子失去了电源,就会露出它乱杂无章的本分,逃离出内存的空间去,所以,内存断电就不能保存数据了。再看看U 盘,U 盘里的储存芯片是Flash 芯片,它与RAM 芯片的工作原理相似但不同。现在你在纸上再画一个“田”字,这次要在四个空格中各画一个顶格的圆圈,这个圆圈不是表示电子,而是表示一种物质。好,Flash 芯片工作通电了,这次也 是保存“1010”这个数据。电子进入了“田”的第一个空格,也就是芯片的储存空间。电子把里面的物质改变了性质,为了表示这个物质改变了性质,你可以把“田”内的第一个圆圈涂上颜色。由于数据“1010”的第二位数是0,所以Flash 芯片的第二个空间没有电子,自然里面那个物质就不会改变了。第三位数是1,所以“田”的第三个空格通电,第四个不通电。现在你画的“田”字,第一个空格的物质涂上了颜

一文详解SRAM特点和原理

一文详解SRAM特点和原理 基本简介SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM (Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,且功耗较大。所以在主板上SRAM存储器要占用一部分面积。 主要规格一种是置于CPU与主存间的高速缓存,它有两种规格:一种是固定在主板上的高速缓存(Cache Memory );另一种是插在卡槽上的COAST(Cache On A STIck)扩充用的高速缓存,另外在CMOS芯片1468l8的电路里,它的内部也有较小容量的128字节SRAM,存储我们所设置的配置数据。还有为了加速CPU内部数据的传送,自80486CPU 起,在CPU的内部也设计有高速缓存,故在PenTIum CPU就有所谓的L1 Cache(一级高速缓存)和L2Cache(二级高速缓存)的名词,一般L1 Cache是内建在CPU的内部,L2 Cache是设计在CPU的外部,但是PenTIum Pro把L1和L2 Cache同时设计在CPU的内部,故PenTIum Pro的体积较大。最新的Pentium II又把L2 Cache移至CPU内核之外的黑盒子里。SRAM显然速度快,不需要刷新的操作,但是也有另外的缺点,就是价格高,体积大,所以在主板上还不能作为用量较大的主存。 基本特点现将它的特点归纳如下: ◎优点,速度快,不必配合内存刷新电路,可提高整体的工作效率。 ◎缺点,集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。 ◎SRAM使用的系统: ○CPU与主存之间的高速缓存。 ○CPU内部的L1/L2或外部的L2高速缓存。 ○CPU外部扩充用的COAST高速缓存。 ○CMOS 146818芯片(RTCMOS SRAM)。

硬盘内部硬件结构和工作原理详解

硬盘内部硬件结构和工作原理详解 一般硬盘正面贴有产品标签,主要包括厂家信息和产品信息,如商标、型号、序列号、生产日期、容量、参数和主从设置方法等。这些信息是正确使用硬盘的基本依据,下面将逐步介绍它们的含义。 硬盘主要由盘体、控制电路板和接口部件等组成,如图1-1所示。盘体是一个密封的腔体。硬盘的内部结构通常是指盘体的内部结构;控制电路板上主要有硬盘BIOS、硬盘缓存(即CACHE)和主控制芯片等单元,如图1-2所示;硬盘接口包括电源插座、数据接口和主、从跳线,如图1-3所示。 图1-1 硬盘的外观 图1-2 控制电路板 图1-3 硬盘接口 电源插座连接电源,为硬盘工作提供电力保证。数据接口是硬盘与主板、内存之间进行数据交换的通道,使用一根40针40线(早期)或40针80线(当前)的IDE接口电缆进行连接。新增加的40线是信号屏蔽线,用于屏蔽高速高频数据传输过程中的串扰。中间的主、从盘跳线插座,用以设置主、从硬盘,即设置硬盘驱动器的访问顺序。其设置方法一般标注在盘体外的标签上,也有一些标注在接口处,早期的硬盘还可能印在电路板上。 此外,在硬盘表面有一个透气孔(见图1-1),它的作用是使硬盘内部气压与外部大气压保持一致。由于盘体是密封的,所以,这个透气孔不直接和内部相通,而是经由一个高效过滤器和盘体相通,用以保证盘体内部的洁净无尘,使用中注意不要将它盖住。

1.2 硬盘的内部结构 硬盘的内部结构通常专指盘体的内部结构。盘体是一个密封的腔体,里面密封着磁头、盘片(磁片、碟片)等部件,如图1-4所示。 图1-4 硬盘内部结构 硬盘的盘片是硬质磁性合金盘片,片厚一般在0.5mm左右,直径主要有1.8in (1in=25.4mm)、2.5in、3.5in和5.25in 4种,其中2.5in和3.5in盘片应用最广。盘片的转速与盘片大小有关,考虑到惯性及盘片的稳定性,盘片越大转速越低。一般来讲,2.5in硬盘的转速在5 400 r/min~7 200 r/ min之间;3.5in 硬盘的转速在4 500 r/min~5 400 r/min之间;而5.25in硬盘转速则在3 600 r/min~4 500 r/min之间。随着技术的进步,现在2.5in硬盘的转速最高已达15 000 r/min,3.5in硬盘的转速最高已达12 000 r/min。 有的硬盘只装一张盘片,有的硬盘则有多张盘片。这些盘片安装在主轴电机的转轴上,在主轴电机的带动下高速旋转。每张盘片的容量称为单碟容量,而硬盘的容量就是所有盘片容量的总和。早期硬盘由于单碟容量低,所以,盘片较多,有的甚至多达10余片,现代硬盘的盘片一般只有少数几片。一块硬盘内的所有盘片都是完全一样的,不然控制部分就太复杂了。一个牌子的一个系列一般都用同一种盘片,使用不同数量的盘片,就出现了一个系列不同容量的硬盘产品。 盘体的完整构造如图1-5所示。

DRAM原理详解

内存工作原理及发展历程 RAM(Random Access Memory)随机存取存储器对于系统性能的影响是每个PC用户都非常清楚的,所以很多朋友趁着现在的内存价格很低纷纷扩容了内存,希望借此来得到更高的性能。不过现在市场是多种内存类型并存的,SDRAM、DDR SDRAM、RDRAM等等,如果你使用的还是非常古老的系统,可能还需要EDO DRAM、FP DRAM(块页)等现在不是很常见的内存。 虽然RAM的类型非常的多,但是这些内存在实现的机理方面还是具有很多相同的地方,所以本文的将会分为几个部分进行介绍,第一部分主要介绍SRAM和异步DRAM (asynchronous DRAM),在以后的章节中会对于实现机理更加复杂的FP、EDO和SDRAM 进行介绍,当然还会包括RDRAM和SGRAM等等。对于其中同你的观点相悖的地方,欢迎大家一起进行技术方面的探讨。 存储原理: 为了便于不同层次的读者都能基本的理解本文,所以我先来介绍一下很多用户都知道的东西。RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。 让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,那么我们首先锁定第8行,然后找到第7列就能准确的找到这本书了。在RAM存储器中也是利用了相似的原理。 现在让我们回到RAM存储器上,对于RAM存储器而言数据总线是用来传入数据或者传出数据的。因为存储器中的存储空间是如果前面提到的存放图书的书架一样通过一定的规则定义的,所以我们可以通过这个规则来把数据存放到存储器上相应的位置,而进行这种定位的工作就要依靠地址总线来实现了。对于CPU来说,RAM就象是一条长长的有很多空格的细线,每个空格都有一个唯一的地址与之相对应。如果CPU想要从RAM中调用数据,它首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总线就会把数据传输给CPU。下面的示意图可以帮助你很好的理解这个过程。

硬盘内部硬件结构和工作原理详解概论

图1-1 硬盘的外观 图1-2 控制电路板 图1-3 硬盘接口 电源插座连接电源,为硬盘工作提供电力保证。数据接口是硬盘与主板、内存之间进行数据交换的通道,使用一根40针40线(早期)或40针80线(当前)的IDE 接口电缆进行连接。新增加的40线是信号屏蔽线,用于屏蔽高速高频数据传输过程中的串扰。中间的主、从盘跳线插座,用以设置主、从硬盘,即设置硬盘驱动器的访问顺序。其设置方法一般标注在盘体外的标签上,也有一些标注在接口处,早期的硬盘还可能印在电路板上。 此外,在硬盘表面有一个透气孔(见图1-1),它的作用是使硬盘内部气压与外部大气压保持一致。由于盘体是密封的,所以,这个透气孔不直接和内部相通,而是经由一个高效过滤器和盘体相通,用以保证盘体内部的洁净无尘,使用中注意不要将它盖住。 1.2 硬盘的内部结构 硬盘的内部结构通常专指盘体的内部结构。盘体是一个密封的腔体,里面密封着磁头、盘片(磁片、碟片)等部件,如图1-4所示。

图1-4 硬盘内部结构 硬盘的盘片是硬质磁性合金盘片,片厚一般在0.5mm左右,直径主要有1.8in (1in=25.4mm)、2.5in、3.5in和5.25in 4种,其中2.5in和3.5in盘片应用最广。盘片的转速与盘片大小有关,考虑到惯性及盘片的稳定性,盘片越大转速越低。一般来讲,2.5in硬盘的转速在5 400 r/min~7 200 r/ min之间;3.5in硬盘的转速在4 500 r/min~5 400 r/min之间;而5.25in硬盘转速则在3 600 r/min~4 500 r/min之间。随着技术的进步,现在2.5in硬盘的转速最高已达15 000 r/min,3.5in硬盘的转速最高已达12 000 r/min。 有的硬盘只装一张盘片,有的硬盘则有多张盘片。这些盘片安装在主轴电机的转轴上,在主轴电机的带动下高速旋转。每张盘片的容量称为单碟容量,而硬盘的容量就是所有盘片容量的总和。早期硬盘由于单碟容量低,所以,盘片较多,有的甚至多达10余片,现代硬盘的盘片一般只有少数几片。一块硬盘内的所有盘片都是完全一样的,不然控制部分就太复杂了。一个牌子的一个系列一般都用同一种盘片,使用不同数量的盘片,就出现了一个系列不同容量的硬盘产品。 盘体的完整构造如图1-5所示。

win7内存原理

Windows7内存管理机制Superfetch介绍 关键字: superfetch 在了解Superfetch 内存管理机制之前。我们要弄清楚一些概念。下面我就来讲解一下什么叫做“工作集”。 一、 首先,我们从内存讲起。我们可以简单的将内存理解为“数据结构”+“工作集”。 也就是说,在内存这个大房子里面有两个房间,一个是“数据结构”房间,另一个是“工作集”房间。那么我们就开始讲什么是“工作集”房间。 我们可以将每一个程序的运行占用的内存当做一个员工,而这些 员工要工作的话就必须要走进他们的办公室,然后才能开始工作,那么这些“办公室”就可以理解为工作集了。引用森木的话就是“简单的说,应用程序在运行过程 中进程所占用的内存中的工作空间就叫做工作集”。 那工作集的作用是什么呢?就如我刚才说的,是各个员工办公的 场 所,我们可以想象这些员工来自他们的“家”,也就是硬盘,工作集的作用就是让这些员工从家进入到大厦里(也就是内存里),也可以说,在这个大厦里,门口就 是工作集房间,员工进入了工作集才能进入大厦。再次引用森木的话就是“工作集的作用是为了应用程序在运行时将硬盘当中对应的文件引入物理内存中”。 可是我们知道,大厦不能只有工作集一个房间,所有的员工在这 个房间里面占用的地方并不是整个大厦(内存)。而工作集房间的面积大小就要看你这个大厦有多大了。如果大一点的大厦工作集房间肯定大,那小的大厦这个房间 自然就小了。我在前面也提到过,这个大厦还有一个房间,就是“数据结构”。 二、 物理内存的数据结构 在数据结构这个房间里,还分有五个小房间。他们分别是: Free Page List 自由页面列表(房间) Modified Page List已修改页面列表(房间) Standby Page List备用页面列表(房间) Zero Page List清零页面列表(房间) Bad Page List坏损页面列表(房间) 那下面我就结合工作集的工作原理来一起讲解数据结构这个房间 了。 三、 工作集的工作原理

详解内存

详解内存(RAM,SRAM,SDRAM)工作原理及发展历程 RAM(Random Access Memory)随机存取存储器对于系统性能的影响是每个PC用户都非常清楚的,所以很多朋友趁着现在的内存价格很低纷纷扩容了内存,希望借此来得到更高的性能。不过现在市场是多种内存类型并存的,SDRAM、DDR SDRAM、RDRAM等等,如果你使用的还是非常古老的系统,可能还需要EDO DRAM、FP DRAM(块页)等现在不是很常见的内存。 虽然RAM的类型非常的多,但是这些内存在实现的机理方面还是具有很多相同的地方,所以本文的将会分为几个部分进行介绍,第一部分主要介绍SRAM和异步DRAM(asynchronous DRAM),在以后的章节中会对于实现机理更加复杂的FP、EDO和SDRAM进行介绍等等。 存储原理: RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。 让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,那么我们首先锁定第8行,然后找到第7列就能准确的找到这本书了。在RAM存储器中也是利用了相似的原理。 现在让我们回到RAM存储器上,对于RAM存储器而言数据总线是用来传入数据或者传出数据的。因为存储器中的存储空间是如同前面提到的存放图书的书架一样通过一定的规则定义的,所以我们可以通过这个规则来把数据存放到存储器上相应的位置,而进行这种定位的工作就要依靠地址总线来实现了。对于CPU来说,RAM就象是一条长长的有很多空格的细线,每个空格都有一个唯一的地址与之相对应。如果CPU想要从RAM中调用数据,它首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总线就会把数据传输给CPU。下面的示意图可以帮助你很好的理解这个过程。

内存的原理和时序(SDRAM、DDR、DDR-Ⅱ、Rambus DRAM)-下

第二章 DDR SDRAM的原理和时序 DDR SDRAM 全称为Double Data Rate SDRAM,中文名为“双倍数据流SDRAM”。DDR SDRAM 在原有的SDRAM 的基础上改进而来。也正因为如此,DDR 能够凭借着转产成本优势来打败昔日的对手RDRAM,成为当今的主流。由于SDRAM 的结构与操作在前一章已有详细阐述,所以本文只着重讲讲DDR 的原理和DDR SDRAM 相对于传统SDRAM(又称SDR SDRAM)的不同。 DDR SDRAM可在一个时钟周期内传送两次数据 2.1 DDR的基本原理 有很多文章都在探讨DDR 的原理,但似乎也不得要领,甚至还带出一些错误的观点。首先我们看看一张DDR 正规的时序图。 DDR SDRAM 读操作时序图

从中可以发现它多了两个信号: CLK#与DQS,CLK#与正常CLK 时钟相位相反,形成差分时钟信号。而数据的传输在CLK 与CLK#的交叉点进行,可见在CLK 的上升与下降沿(此时正好是CLK#的上升沿)都有数据被触发,从而实现DDR。在此,我们可以说通过差分信号达到了DDR 的目的,甚至讲CLK#帮助了第二个数据的触发,但这只是对表面现象的简单描述,从严格的定义上讲并不能这么说。之所以能实现DDR,还要从其内部的改进说起。 DDR 内存芯片的内部结构图,注意比较上文中SDRAM 的结构图 这也是一颗128Mbit 的内存芯片,标称规格也与前文的SDRAM 一样为32×4bit。从图中可以看出来,白色区域内与SDRAM 的结构基本相同,但请注意灰色区域,这是与SDRAM 的不同之处。 首先就是内部的L-Bank 规格。SDRAM 中L-Bank 存储单元的容量与芯片位宽相同,但在DDR SDRAM 中并不是这样,存储单元的容量是芯片位宽的一倍,所以在此不能再套用讲解SDRAM 时“芯片位宽=存储单元容量”的公式了。也因此,真正的行、列地址数量也与同规格SDRAM 不一样了。 以本芯片为例,在读取时,L-Bank 在内部时钟信号的触发下一次传送8bit 的数据给读取锁存器,再分成两路4bit 数据传给复用器,由后者将它们合并为一路4bit 数据流,然后由发送器在DQS 的控制下在外部时钟上升与下降沿分两次传输4bit 的数据给北桥。这样,如果时钟频率为100MHz,那么在I/O 端口处,由于是上下沿触发,那么就是传输频率就是200MHz。 现在大家基本明白DDR SDRAM 的工作原理了吧,这种内部存储单元容量(也可以称为芯片内部总线位宽)=2×芯片位宽(也可称为芯片I/O 总线位宽)的设计,就是所谓的两位预取(2-bit Prefetch),有的公司则贴切的称之为2-n Prefetch(n 代表芯片位宽)。

虚拟机内存工作原理VCP

虚拟机内存工作原理 Windows环境内存名词释义 Windows内存管理概述 在现代计算机系统中,内存是指CPU可以直接访问的随机存储器。在硬件上,CPU通过一组地址线连接到内存上,这组地址线称为内存总线。而在软件上,CPU的许多指令允许用内存单元地址作为指令的操作数,实现直接操纵这些内存单元。内存地址,在Intel x86 体系结构中,内存地址有三种类型: 物理地址即内存存储器的索引,CPU操纵内存芯片时,通过地址线管脚加上电信号来读或写相应的内存单元。在Intel x86体系结构上,物理地址是一个32位或36位的无符号整数。 虚拟地址:在32位系统上,虚拟地址空间可以达到4GB大小,也就是说,整个空间可以有232=4294967296个字节单元。Intel x86芯片内有专门的电路负责把一个虚拟地址转译成物理地址。 逻辑地址。逻辑地址包含两部分:段和偏移。段指定了在整个地址空间中的一个基地址、段空间的大小、属性。与寻址相关的是段的基址和大小。偏移部分指定了一个逻辑地址相对于段基址的偏移量。此偏移量不能超过段的边界。因此,逻辑地址的实际地址是段基址加上偏移量。Intel x86芯片也有专门的电路把逻辑地址转译成一个虚拟地址或物理地址。 把一个地址告诉CPU,让它访问相对应的物理内存单元,这一过程是操作系统和CPU相互协作来完成的。CPU最终需要的是一个物理地址,它必须把软件指令中的地址转译成物理地址,在转译过程中可能会涉及一些数据结构,甚至涉及I/O操作。 从操作系统的角度来看,一方面,它需要有效地管理所有的物理内存,使得当一个进程需要内存时,能够分配足够的内存单元给这一进程;另一方面,正如上一章所讲,进程代表一个相对独立的任务,它有一个逻辑上独立的地址空间。不同进程的地址空间应该是相互隔离的。实现每个进程都有自己的私有地址空间。 当系统中进程数量增加以后,所需内存数量往往超过了总的物理内存,在这种情况下,操作系统须合理地安排内存的使用,使得内存紧缺时,既不会波及系统本身的稳定性,同时也不会严重影响系统的性能。当发生这种情况时,一般的做法是把不紧急的进程中的数据或代码先存放到硬盘(pagefile)中,从而把它们占用的物理内存腾出来给紧急的进程使用,或者交给系统使用。当内存紧缺的状况缓解时,系统再把硬盘(pagefile)中的进程数据或代码装回到已经空闲下来的内存单元中,从而使这些进程有机会继续运行。这两个过程称为内存换出和换入。几乎所有的多进程操作系统都支持这种内存管理。 内存基本单元总是字节Bytes。每个内存地址指向一个字节,地址值加1以后指向下一个字节。物理内存的地址是固定的,故让进程使用物理地址来访问内存将使得进程的动态分配难以有效实施,因为内存单元与进程将通过物理地址紧密地联系在一起了,从而内存的回收和再分配将受限于特定的进程和物理地址。为打破这种关联关系,思路是让进程使用虚拟地址,而虚拟地址和物理地址之间通过一个映射表来完成转译。 1.1 pagefile:即windows安装过程中创建的分页文件,见下图。

详解网卡的工作原理

网卡工作原理 网卡的主要工作原理:发送数据时,计算机把要传输的数据并行写到网卡的缓存,网卡对要传输的数据进编码(10M以太网使用曼切斯特码,100M以太网使用差分曼切斯特码),串行发到传输介质上.接收数据时,则相反。对于网卡而言,每块网卡都有一个唯一的网络节点地址,它是网卡生产厂家在生产时烧入ROM(只读存储芯片)中的,我们把它叫做MAC地址(物理地址),且保证绝对不会重复。MAC为48bit,前24比特由IEEE分配,是需要钱买的,后24bit由网卡生产厂家自行分配.

我们日常使用的网卡都是以太网网卡。目前网卡按其传输速度来分可分为10M网卡、10/100M自适应网卡以及千兆(1000M)网卡。如果只是作为一般用途,如日常办公等,比较适合使用10M网卡和10/100M自适应网卡两种。如果应用于服务器等产品领域,就要选择千兆级的网卡。 一、网卡的主要特点 网卡(Network Interface Card,简称NIC),也称网络适配器,是电脑与局域网相互连接的设备。无论是普通电脑还是高端服务器,只要连接到局域网,就都需要安装一块网 卡。如果有必要,一台电脑也可以同时安装两块或多块网卡。

电脑之间在进行相互通讯时,数据不是以流而是以帧的方式进行传输的。我们可以把帧看做是一种数据包,在数据包中不仅包含有数据信息,而且还包含有数据的发送地、接收地信息和数据的校验信息。一块网卡包括OSI模型的两个层――物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。Echo 应答协议

电脑内存工作原理

电脑内存工作原理 电脑内存工作原理 1.内存寻址 首先,内存从CPU获得查找某个数据的指令,然后再找出存取资料的位置时(这个动作称为“寻址”),它先定出横坐标(也就是“列地址”)再定出纵坐标(也就是“行地址”),这就好像在地图上画个十字标记一样,非常准确地定出这个地方。对于电脑系统而言,找出这个地方时还必须确定是否位置正确,因此电脑还必须判读该地址的信号,横坐标有横坐标的信号(也就是RAS信号,RowAddressStrobe)纵坐标有纵坐标的信号(也就是CAS信号,ColumnAddressStrobe),最后再进行读或写的动作。因此,内存在读写时至少必须有五个步骤:分别是画个十字(内有定地址两个操作以及判读地址两个信号,共四个操作)以及或读或写的操作,才能完成内存的存取操作。 2.内存传输 为了储存资料,或者是从内存内部读取资料,CPU都会为这些读取或写入的资料编上地址(也就是我们所说的十字寻址方式),这个时候,CPU会通过地址总线(AddressBus)将地址送到内存,然后数据总线(DataBus)就会把对应的正确数据送往微处理器,传回去给CPU使用。 3.存取时间 所谓存取时间,指的是CPU读或写内存内资料的'过程时间,也称为总线循环(buscycle)。以读取为例,从CPU发出指令给内存时,便会要求内存取用特定地址的特定资料,内存响应CPU后便会将CPU所需要的资料送给CPU,一直到CPU收到数据为止,便成为一个读取的流程。因此,这整个过程简单地说便是CPU给出读取指

令,内存回复指令,并丢出资料给CPU的过程。我们常说的6ns (纳秒,秒-9)就是指上述的过程所花费的时间,而ns便是计算 运算过程的时间单位。我们平时习惯用存取时间的倒数来表示速度,比如6ns的内存实际频率为1/6ns=166MHz(如果是DDR就标 DDR333,DDR2就标DDR2667)。 4.内存延迟 内存的延迟时间(也就是所谓的潜伏期,从FSB到DRAM)等于下 列时间的综合:FSB同主板芯片组之间的延迟时间(±1个时钟周期),芯片组同DRAM之间的延迟时间(±1个时钟周期),RAS到CAS延迟 时间:RAS(2-3个时钟周期,用于决定正确的行地址),CAS延迟时间(2-3时钟周期,用于决定正确的列地址),另外还需要1个时钟周期 来传送数据,数据从DRAM输出缓存通过芯片组到CPU的延迟时间 (±2个时钟周期)。一般的说明内存延迟涉及四个参数CAS (ColumnAddressStrobe行地址控制器)延迟,RAS (RowAddressStrobe列地址控制器)-to-CAS延迟,RASPrecharge(RAS预冲电压)延迟,Act-to-Precharge(相对于 时钟下沿的数据读取时间)延迟。其中CAS延迟比较重要,它反映 了内存从接受指令到完成传输结果的过程中的延迟。大家平时见到 的数据3—3—3—6中,第一参数就是CAS延迟(CL=3)。当然, 延迟越小速度越快。

第3章内存储器详解

第三章内存储器 教学提示: 本章主要介绍了内存的概念和发展,了解内存的性能指标和结构,学会识别区分各种内存,掌握内存条的选购和测试。 教学目标: A级:(基本要求) 1. 了解内存的基本知识和性能指标。 2. 掌握内存的安装和基本设置。 B级:(较高要求) 1. 了解识别内存条的基本方法。 2. 掌握条据需要选购内存条的方法。 3. 对内存进行测试和维护。 历史回顾: 计算机内存的诞生。世界上第一台数字计算机可以追溯到上个世纪30 年代宋到40 年代初,约翰阿塔纳索夫和他的学生贝瑞在美国艾奥瓦州立大学组装出了世界上第一台数字计算机。该计算机具备了许多现代计算机的设计思想.包括使用二进制数字、可再生存储器、并行计算以及将计算单元和存储单元分离开来等。约翰阿塔纳索夫计算机的存储系统使用的是一个大的磁鼓,这也是计算机内存储器的雏形。

图3-1 早期的计算机的存储系统使用的是一个大的磁鼓内存储器(内存)是微型计算机主机的组成部分,用来存放当前正在使用的或随时要使用的程序。 在计算机的存储系统中内存储器直接决定CPU的工作效率,它是CPU与其它部件进行数据传输的纽带。内存储器是计算机中仅次于CPU的重要部件,内存的容量及性能是影响计算机性能主要因素之一。因此配置和维护计算机就要了解和掌握内存储器的基本知识。 知识补充: 内部存储器按存储信息的功能可分为只读存储器(ROM )、可改写的只读存储器EPROM和随机存储器RAM三大类。存放在RAM上的数据既可以快速写入,也能快速读出。“中转仓库”一般就是用RAM来搭建的。因此,如果不是特别说明,内存一般指的就是RAM。 3.1 基础知识:认识内存储器 内存储器有很多种类,通常所说的内存就是指内存条,下面就逐步介绍内存条。 3.1.1 认识内存条 1.内存的工作原理 当CPU 在工作时,需要从硬盘等外部存储器上读取数据,但由于硬盘这个“仓库”太大,加上离CPU 也很“远”,运输“原料”数据的速度就比较慢,会使CPU 的生产效率降低。为了解决这个问题,在CPU 与外部存储器之间,建了一个“小仓库”:内存。内存虽然容量不大,一般只有几十MB 到几百MB ,但中转速度非常快,当CPU 需要数据时,事先可以将部分数据存放在内存中,这样提高了CPU的工作效率,同时也减轻了硬盘的负担。由于内存只是一个“中转仓库”,因此它并不能用来长时间存储数据,当突然断电时,内存中的所有数据都会丢失。内存的工作如图3-2所示。

相关文档