内存管理

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

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

相关推荐

有个问题,现在大家都在劝退客户端,客户端岗位也很稀缺,那为什么不去呢,就算干一两年被裁了也可以社招进去吧,人不是同样很少,社招岗位也户会急招人的吧😋😋😋
Runquicky:在前三年客户端还好,主要是因为大厂都在扩张状态。这两年已经不建议了,大厂都只剩维护的需求了,没新功能,自然也没那么多需求。新人进去一两年被裁会怎样很难说了。
点赞 评论 收藏
分享
你是来当牛马的吧:行了,照片拍完了,让大家都回工位吧
点赞 评论 收藏
分享
1 10 评论
分享
牛客网
牛客企业服务