page cache中存的是页的内容还是索引(地址)?

发表于:2007-07-04来源:作者:点击数: 标签:
看了很多资料,都说存的是页的内容.但我觉得存的是页的索引,或者地址指针.如果存的是页的内容,那不是浪费了物理内存空间吗? grub007 回复于:2003-07-18 09:17:04 是页面的内容 flightbird 回复于:2003-07-18 09:31:32 从下面的叙述看,应该是指针: 当一页的

看了很多资料,都说存的是页的内容. 但我觉得存的是页的索引,或者地址指针.如果存的是页的内容, 那不是浪费了物理内存空间吗?

 grub007 回复于:2003-07-18 09:17:04
是页面的内容

 flightbird 回复于:2003-07-18 09:31:32
从下面的叙述看,应该是指针:
   当一页的数据从内存映射文件中读出,例如当 demand paging 时需要放到内存中的时候,此页通过  page cache 中读出。如果此页在缓存中,就返回一个指向 mem_map_t 数据结构的指针给 page fault 的处理代码。否则,此页必须从存放此文件的文件系统中加载到内存中。  Linux 分配物理内存并从磁盘文件中读出该页。如果可能, Linux 会启动对文件下一页的读。这种单页的超前读意味着如果进程从文件中顺序读数据的话,下一页数据将会在内存中等待。

 qjlemon 回复于:2003-07-18 09:37:41
此cache非彼cache,对CPU而言的page cache存放的是页的内容,至于OS自己的cache那就不能一概而论了

 flightbird 回复于:2003-07-18 09:54:13
对cup而言的page cache指的是什么? 在cpu内部? 否则应该只有os自己的page cache吧.

 qjlemon 回复于:2003-07-18 09:57:55
现在买CPU不都能看到一个指标是缓存有多大吗?就是CPU里面的cache。
其实CPU里的cache并不只有这一种,还有诸如页表缓存之类,存放的就是最新的页表项。。。

 flightbird 回复于:2003-07-18 10:22:17
[quote:86d68444db="qjlemon"]现在买CPU不都能看到一个指标是缓存有多大吗?就是CPU里面的cache。
其实CPU里的cache并不只有这一种,还有诸如页表缓存之类,存放的就是最新的页表项。。。[/quote:86d68444db]     

ft..

 qjlemon 回复于:2003-07-18 10:31:48
[quote:fba879b396="flightbird"]    

ft..[/quote:fba879b396]   :twisted:  :twisted:  :twisted:

 flightbird 回复于:2003-07-18 13:36:10
页表放在cpu里面的cache里?

 qjlemon 回复于:2003-07-18 14:50:41
每次更新段寄存器的内容时CPU都会把相应的页表项读到一个专门的cache里,每个段寄存器都有一个对应的cache
要不然每次访问一块"内存",都要到"内存"里查一遍页表,那还不慢死了!

 flightbird 回复于:2003-07-18 16:14:22
我想你指的是cpu里的tlb吧? 页表是存在物理内存中的. tlb里只是一部分页表的拷贝.

 qjlemon 回复于:2003-07-18 16:19:15
就是这个意思

 qjlemon 回复于:2003-07-18 16:31:09
[quote:ca2427c4e0="flightbird"]tlb里只是一部分页表的拷贝.[/quote:ca2427c4e0]如果是全部页表的拷贝,就不叫cache了

 flightbird 回复于:2003-07-18 16:42:25
我想问的是page cache里存的是内容还是数据.如你所述,tlb是页表的部分拷贝,而页表存的不是数据(页数据).这里的page cache不是你所说的cpu里面的cache,而是os里面的page cache.

 blsword 回复于:2004-04-14 14:24:43
晕,讨论半天到底page cache里寸的是什么啊?如果page cache是占用的物理内存,那再从page cache里读页到物理内存中,岂不是在物理内存中有两份拷贝?

原文转自:http://www.ltesting.net