免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenzhanyiczy

缓存,缓存!!! [复制链接]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2010-03-01 11:53 |显示全部楼层
现在的问题就在于 page cache和进程的关系。
如果page cache就是进程内核态缓存,那当进程退出的时候,操作系统回收了该进程的所有资源,这个缓存怎么还可以保留下来?

论坛徽章:
0
发表于 2010-03-01 20:01 |显示全部楼层
这里的前提条件不是进程退出吗? 进程退出了,malloc的内存还不释放?
chenzhanyiczy 发表于 2010-03-01 11:43

不一定。如果是最原始的回收算法,那可能是立即释放。但是,这样做,系统开销太大。一般是满足某些条件后才集中回收。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2010-03-01 20:29 |显示全部楼层
不一定。如果是最原始的回收算法,那可能是立即释放。但是,这样做,系统开销太大。一般是满足某些条件后 ...
beepbug 发表于 2010-03-01 20:01



我觉得只要地址之间解除mapping,那么这块内存就是可以重新利用的了

至于什么时候放入free-list,这个没关系了

论坛徽章:
0
发表于 2010-03-03 10:27 |显示全部楼层
本帖最后由 drowndog 于 2010-03-03 10:43 编辑

几天没有上来了,就这个问题再罗嗦两句。
系统在运行时,并不是只有进程,也不是所有的资源都是属于某个进程的。
操作系统的内核也在运行,在运行时,也会申请一些资源(比如内存),这些资源是不属于任何进程的,也不会随着某个进程的退出而释放掉。可以暂时叫它们为内核态资源。
另外,内核是工作在内核态的,而进程可能会在内核态和用户态之间切换。只有在内核态时,才能访问内核态的资源。
回到本文的问题上来。
fread() -> 库缓存 -> read() -> 文件缓存 -> ... -> 设备
这里的库缓存是用户态的,而文件缓存(确切的说应该叫文件系统缓存)是由操作系统内核中的文件系统模块维护的,属于内核态,不属于任何进程。
当进程调用read系统调用时,它陷入到内核态,向文件系统请求数据,文件系统在自己的缓存中查找是否有对应的数据,如果有,就把数据copy到read系统调用提供的用户态缓存区(即库缓存)中,否则,它会到设备去读取相关数据,放入到缓存,并执行上述同样的动作。
当进程退出后,文件系统的缓存一般不会立即释放,因为可能会有其他的进程还需要读这些数据呢。何时释放,由文件系统根据自己的算法以及一系列的内核参数来决定。
总之,文件系统缓存不是由进程“malloc”的,和进程没啥归属关系。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2010-03-03 11:06 |显示全部楼层
几天没有上来了,就这个问题再罗嗦两句。
系统在运行时,并不是只有进程,也不是所有的资源都是属于某个进 ...
drowndog 发表于 2010-03-03 10:27



请问一下:
   
page cache指的是内核态地址空间缓存?它跟文件缓存是什么关系?

论坛徽章:
0
发表于 2010-03-03 12:42 |显示全部楼层
请问一下:
   
page cache指的是内核态地址空间缓存?它跟文件缓存是什么关系?
chenzhanyiczy 发表于 2010-03-03 11:06


我不知道你所谓的page cache是指的什么?有上下文吗?
我是把它当作文件系统缓存来理解的。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2010-03-03 14:53 |显示全部楼层
我不知道你所谓的page cache是指的什么?有上下文吗?
我是把它当作文件系统缓存来理解的。
drowndog 发表于 2010-03-03 12:42



如果将page cache当作文件系统缓存的话,那么进程读文件的流程应该写成这样?

fread -> 库缓存(进程用户态缓存) -> read -> 进程内核态缓存 -> ... -> page cache(文件系统缓存) -> .. -> 设备

论坛徽章:
0
发表于 2010-03-03 15:27 |显示全部楼层
如果将page cache当作文件系统缓存的话,那么进程读文件的流程应该写成这样?

fread -> 库缓存(进 ...
chenzhanyiczy 发表于 2010-03-03 14:53


没有那个所谓的进程内核态缓存,read系统调用会直接把数据copy到库缓存(用户态缓存)中。

论坛徽章:
0
发表于 2010-03-03 15:29 |显示全部楼层
女秘书是大家共用的,并不是你用一次就属于你了。你用完了,那个秘书不一定马上去洗澡,也许先休息一会儿。这么简单一个问题,我看着都难受。

论坛徽章:
0
发表于 2010-03-03 17:14 |显示全部楼层
我觉得只要地址之间解除mapping,那么这块内存就是可以重新利用的了

至于什么时候放入free-list,这 ...
chenzhanyiczy 发表于 2010-03-01 20:29

你意思是,可以在放入自由链之前再次使用?这不会乱套?系统还怎么管?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




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

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP