关于linux内存管理.doc

关于linux内存管理.doc

ID:49508189

大小:243.00 KB

页数:12页

时间:2020-03-02

关于linux内存管理.doc_第1页
关于linux内存管理.doc_第2页
关于linux内存管理.doc_第3页
关于linux内存管理.doc_第4页
关于linux内存管理.doc_第5页
资源描述:

《关于linux内存管理.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、关于linux内存管理分linux内存管理2011-08-2023:201829人阅读评论⑵收藏举报Linux的内存管理主要分为两部分:物理地址到虚拟地址的映射,内核内存分配管理(主要基于slab)o物理地址到虚拟地址之间的映射1>概念物理地址(physicaladdress)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念屮最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存木身,把内存看成一个从0字节一肓到最大空輦逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这

2、以是一个驶件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,真接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。虚拟内存(virtualmemory)这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数纟R屮0x08000000・1那个地址元素;Z所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即

3、虚拟内存(virtualmemory)o进程使用虚拟内存屮的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补汕墙,银行也是这样了做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换示的物理地址并非相同的。可以把连接麻的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是callA,而是call0x0811111111,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的

4、概念,这样做是根木行不通的。打住了,这个问题再说下去,就收不住了。逻辑地ill.(logicaladdress)Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令屮,用来指定一个操作数或者是一条指令的地址。以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址。——不过不好意思,这样说,好像又违背了Intel屮段式管理屮,对逻辑地址要求,“一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移最,表示为[段标识符:段内偏移最],也就是说,上例屮那个0x08111111,应该表示为[A的代码段标

5、识符:0x08111111],这样,才完整一些”线性地址(linearaddress)或也叫虚拟地址(virtualaddress)跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。CPU将一个虚拟内存空间屮的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。这样做两次转换,的确是非常麻烦而且没有必要的,

6、因为育接可以把线性地址抽像给进程。之所以这样兀余,Intel完全是为了兼容而已。2、CPU段式内存管理,逻辑地址如何转换为线性地址一个逻辑地址rh两部份组成,段标识符:段内偏移量。段标识符是由一个16位长的字段纟R成,称为段选择符。其屮前13位是一个索引号。示面3位包含一些硬件细节,如图:段选择符15索引号3210T

7、npiTl=表指示器RPL=请求者持权级最麻两位涉及权限检查,木贴屮不包含。索引号,或者直接理解成数组下标——那它总要对应一个数纽•吧,它又是什么东东的索引呢?这个东东就是“段描述符(segmentdescriptor)n,呵呵,段描述符

8、具体地址描述了一个段(对于“段”这个字眼的理解,我是把它想像成,拿了一把刀,把虚拟内存,砍成若干的截——段)。这样,很多个段描述符,就组了一个数组,叫“段描述符表”,这样,可以通过段标识符的前13位,育接在段描述符表中找到一个具体的段描述符,这个描述符就描述了一•个段,我刚才对段的抽像不太准确,因为看看描述符里面究竟有什么东东——也就是它究竟是如何描述的,就理解段究竟有什么东东了,每一个段描述符由8个字节组成,如下图:数据段描述符63626160595857565554535251504948474645444342414039383736S53433

9、32BASE(24-31)GB0AVILIMIT(16-19)1S1TYPEBASE(16-2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。