功夫熊猫
2022-10-07
来自湖北
感觉像redis之类的数据库也可以使用mmap来增加性能
作者回复: 是的
2
一个工匠
2022-09-23
来自湖北
老师写的很棒。
作者回复: 谢谢
2
苏流郁宓
2022-09-23
来自湖北
写时复制的目的是减少不必要的调页,更好的利用内存空间,调页要引发中断,缺页异常,操作系统分配新的页? 由于程序的局部性原理,总有一部分数据会被重复利用!利用写时复制,在cpu层面,减少维护数据一致性浪费的时间,提高cpu的效率(包括寻页址浪费的时间(cpu要扫盘)) 但在应用上具体问题具体分析,内核区cow肯定大大方便了!但如果是多核呢?在非内核区的应用层,多核加内存条容量大。二八定律的反面(长尾理论),看似在单核上的节俭到多核未必节俭的啊!(其它核晒太阳?) 这也是哈佛结构在局部应用领域优于冯诺依曼结构,如果进程过多,时间轮片(每个进程执行一会)会越来越吃力! 在分支预测层面,0.99的预测率多乘几次会发现,高不到哪里去!这就体现多核的优势,复杂问题简单化,每个核运行不同线程,减少分支预测次数! 在内存管理上,写时复制混序用得过于频繁(中途假如需要反复换数据),在庞大的线程排队面前,还不如多开几个页面,更好的利用写时复制(不同类型不同页面)的优点,又减少了线程排队的时间! 最后吐槽的新笔记本的x64cpu,不知是win操作系统还是cpu问题,不直接支持32位程序运行了!说明大名鼎鼎x86的cpu也不是固有印象,也在寻求变化! 但说实话,并发等还处在增长阶段,操作系统和cpu估计还会相亲相爱共同进化下去,大胆假设,小心求证!俺不怕说错出丑!
展开
作者回复: 666666 正确
2
一个要强的男人
2022-12-06
来自湖北
对于mmap而言,如果我对某个2G的文件进行顺序读,那么也应该到最后是把整个2G的文件加载到内存了吧。会出现因为内存不足导致之前读取过的数据已经被释放的情况吗?
作者回复: 会的
1
TableBear
2022-09-23
来自湖北
有个小疑问请问一下老师: COW的写入只读内存页的时候触发的缺页异常,还有mmap的的两次缺页异常,中断处理程序是怎么跟普通的缺页异常区分开的。它们调用的都是同一个中断处理程序吗?是通过特殊的状态位吗?
作者回复: 对 是同一个处理程序 页表的标志位
共 2 条评论
1
peter
2022-09-23
来自湖北
请教老师几个问题: Q1:A应用和B应用返回的pid为什么是一样的? 文中提到“应用 A 调用 fork 返回的 pid 与应用 B 调用 getpid 返回的 pid,是完全一样的”,但A返回的是61618,B返回的是61819,是不同的,为什么说是相同的呢。 Q2:fork后,B应用的页表设置为只读,那A应用的页表也是只读吗? Q3:fork后,B应用有写入采摘后会分配物理内存,同时还把A应用的内容拷贝到B应用, 这个拷贝有什么意义?B应用是另外一个程序,有自己的数据,为什么需要A应用的数据?
作者回复: Q1 不是一样的; Q2 都是只读