首页
关于
Search
1
2023 年保研经验贴 [计算机-末九Rank50%-入北计清深-北计直博]
324 阅读
2
Linux Kernel-THP阅读分析[Hang up]
223 阅读
3
FreeBSD Kernel-编译环境搭建
199 阅读
4
Linux Kernel-编译调试环境搭建
151 阅读
5
CSAPP 1. 计算机系统漫游
139 阅读
内核
源码分析
阅读笔记
Rust
语法
习题
读书笔记
深入理解计算机系统
技术之外
开发
rcore-arm
登录
Search
yyi
累计撰写
46
篇文章
累计收到
0
条评论
首页
栏目
内核
源码分析
阅读笔记
Rust
语法
习题
读书笔记
深入理解计算机系统
技术之外
开发
rcore-arm
页面
关于
搜索到
1
篇与
的结果
2024-02-20
FreeBSD Arch Handbook阅读笔记 #7 VM
https://docs.freebsd.org/en/books/arch-handbook/vm/7.1 vm_page_tvm_page_t 管理物理内存,每个vm_page_t对应一个物理页面,vm_page_t属于不同双向链表队列。主要包括活动、非活动、缓存或空闲。缓存和空闲的分页队列更加复杂,会根据L1和L2 Cache的大小分成多个队列。申请新页面的时候也会从Cache的角度来申请对齐的页面。页面通过引用计数持有,通过繁忙计数锁定。VM system通过LRU来对页面进行降级。对于Weird类型的页面,不在队列里,通常是载有一个页表。空闲链表里的页面是真正空闲的,而Cache链表里的页面随时可被重用。当进程访问一个不在页表里的页面时,如果页面在页面队列里,页错误就会导致更少的开销。否则只能从外存读入了。pageout守护进程负责:动态调整分页队列、维持各个队列页面合理比例维持脏页面和干净页面的细分(清洗脏页、升降级)VM会尝试在产生合理的页错误量级的前提下帮助决策何时换出和清洗页面。7.2 vm_object_tFreeBSD实现了一个通用内存对象,这个对象的backend可以是:TypesunbackedSwap-backedPhysical device backedFile-backedVM对象可以被遮蔽,具体可以看我的另一篇笔记https://yirannn.com/source_code/vm_sys.html比较常见的应用就是cow一个vm_page_t同时只能和一个vm_object关联。而不同实例的内存共享由遮蔽特性提供7.3 struct buf对于vnode作为back的vm对象,比如file,对脏页信息的维护和vm对脏页信息的维护是相互独立的。在写回脏页时,vm需要在写回前清除dirty标记。另外文件也需要将文件映射到KVM才能进行操作,这种结构被称为文件系统缓冲区,一般是struct buf,文件系统需要对VM进行操作时,把这个vm对象转换为一个buf,然后把buf中的页面映射在KVM里。同理,磁盘IO也是先把vm_object映射到buf,再在buf上发出IO。7.4 vm_map_t, vm_entry_tFreeBSD通过vm_map_t结构把object和虚拟内存范围相关联,页表通过vm_map_t/vm_entry_t/vm_object_t 直接合成。这一段我其实没太读懂,但是我感觉笔者意思是一个物理页不光是和一个vm_object联系,同时也和页表项联系。但是对于同个object的同个页面,对应的vm_page_t都相同7.5 KVM 内存映射FreeBSD用KVM保存内核结构,其中最大的就是7.3中提到的buf。FreeBSD不会把所有物理内存都映射到KVM,主要利用区域分配器管理KVM
2024年02月20日
37 阅读
0 评论
0 点赞