内存管理

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

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

相关推荐

1.自我介绍2.实习拷打3.mq如何能解决流量毛刺问题的4.mq如何实现数据从客户端到broker集群的5.mq发数据是用了什么协议,是怎么保证不丢数据的6.tcp是如何建立连接的,socket只是表层表现,底层原理呢7.broker集群是如何保证exactly one语义的8.broker集群是如何保证不丢数据的9.一个topic下有多个broker的实例,如果一个主broker挂了,是怎么切换的10.通过ISR水位线就能保证数据不丢失吗11.ack除了0,1,-1三种不同的确认的方式,如果想要保证数据不丢失,你能另外考虑比较好的实现方式吗12.wal为啥会有这种策略,为啥要先写日志呢13.broker是如何把message持久化的14.零拷贝是什么东西15.零拷贝和mmap还有sendfile关系是什么16.零拷贝解决了什么核心问题17.那你觉得为啥要有内核态和用户态区分呢18.操作系统是如何实现对内核态和用户态的区分19.你觉得可能是在页表上实现,那现在请完整考虑3种需要:1.感知到还没被分配的内存空间大小 2.申请满足需要的内存空间 3.用户态程序没法申请内核态的空间 假如你要设计并且实现这样的一个系统,你会如何实现呢20.页表的是解决什么问题21.页表最大能存多少页,每页大小是多少22.分页和分段有啥区别呢23.为啥分段会有内部碎片的问题,但是分页没有呢,你说分页大小小,分段也可以分段的很小也是几KB啊,那是为什么呢24.二级页表是解决什么问题的,它的原理是怎么样的25.讲讲java的gc26.图用什么数据结构存27.想要遍历图的所有节点如何遍历28.讲讲非递归遍历代码怎么写
查看28道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
10
分享

创作者周榜

更多
牛客网
牛客企业服务