内存管理

虚拟内存和物理内存:
操作系统通过CPU芯片的内存管理单元(MMU)将虚拟地址映射为物理地址。
内存分段:内存分段是将程序根据逻辑分为若干段(代码段、数据段、堆段、栈段等)。虚拟地址通过段表(段选择因子和段偏移量)映射物理内存。
缺点:外部内存碎片。内存交换(swap)解决碎片----借用磁盘,重新分配内存(效率很低,性能瓶颈)。
内存分页:分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。Linux下,每页的大小是4KB。虚拟地址与物理地址之间通过页表(页号和页内偏移量)来映射。
缺点:内部内存碎片。
更进一步地,分页的方式使得我们在加载程序的时候,不再需要一次性都把程序加载到物理内存中。我们完全可以在进行虚拟内存和物理内存的页之间的映射之后,并不真的把页加载到物理内存里,而是只有在程序运行中,需要用到对应虚拟内存页里面的指令和数据时,再加载到物理内存里面去。
如果内存空间不够,操作系统会把其他正在运行的进程中的「最近没被使用」的内存页面给释放掉,也就是暂时写在硬盘上,称为换出(Swap Out)。一旦需要的时候,再加载进来,称为换入(Swap In)。所以,一次性写入磁盘的也只有少数的一个页或者几个页,不会花太多时间,内存交换的效率就相对比较高。
扩展(多级页表TLB):可以减少创建页表占用的内存消耗。
段页式内存管理:先分段,再在段内分页,提高内存利用率。
---------------------------虚拟内存的作用?????????
第一,虚拟内存可以使得进程对运行内存超过物理内存大小,因为程序运行符合局部性原理,CPU 访问内存会有很明显的重复访问的倾向性,对于那些没有被经常使用到的内存,我们可以把它换出到物理内存之外,比如硬盘上的 swap 区域。
第二,由于每个进程都有自己的页表,所以每个进程的虚拟内存空间就是相互独立的。进程也没有办法访问其他进程的页表,所以这些页表是私有的,这就解决了多进程之间地址冲突的问题。
第三,页表里的页表项中除了物理地址之外,还有一些标记属性的比特,比如控制一个页的读写权限,标记该页是否存在等。在内存访问方面,操作系统提供了更好的安全性。

#快乐学习#
全部评论
楼主讲的很好
点赞 回复 分享
发布于 2022-08-15 18:25

相关推荐

点赞 评论 收藏
分享
昨天 18:26
门头沟学院 Java
看到各位佬的oc 本来都绝望了 刚接到hr口头oc 秋招可以暂时告一段落了😭
爱_信_等_:xdm别慌 hr意思是这几天都有打电话 爱信等!
投递去哪儿等公司10个岗位 >
点赞 评论 收藏
分享
GGrain:没事,本硕985也不发面试笔试😖
点赞 评论 收藏
分享
1 10 评论
分享
牛客网
牛客企业服务