虚拟内存

虚拟内存是操作系统提供的一种内存管理技术,它将主存和磁盘等外部存储设备结合起来,使得程序能够访问超出其实际物理内存的地址空间。

在虚拟内存的管理下,每个进程都拥有一个独立的虚拟地址空间,包含代码段、数据段、堆

、栈等区域。当程序访问虚拟地址时,操作系统会将其映射到物理地址,如果所需数据已经在主存中,那么就直接从主存中取出;如果不在主存中,操作系统则会将其他不使用的数据从主存中换出,为所需数据腾出空间,并从磁盘中读取所需数据到主存中,最后将其映射到虚拟地址空间中。

虚拟内存的主要作用是扩展主存的容量,使得每个进程能够使用更大的内存空间,提高系统的可用性和性能。同时,虚拟内存还可以提供内存保护、共享和动态加载等功能,保证程序的安全性和灵活性。

需要注意的是,由于虚拟内存的使用需要磁盘和主存之间频繁的数据交换,因此会带来一定的性能开销。因此,在应用程序设计和系统配置中,需要合理地使用虚拟内存,并根据实际情况来进行调整。

常见虚拟内存技术

分页式

出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间

d将进程的虚拟地址空间划分成若干个固定大小的页,同时将物理内存划分成同样大小的页框。当程序访问虚拟地址时,操作系统通过页表将虚拟页映射到物理页框,从而实现地址的转换。

分页系统的优点是可以实现更灵活的内存管理,可以有效地减少内存碎片和提高内存利用率,同时还可以提供内存保护和共享等功能。缺点是由于每次访问内存都需要查找页表,会带来一定的开销,尤其是在页表较大或者缓存不命中的情况下。

  • 优点:分页式内存管理可以实现非连续内存分配,简化了地址空间的管理,同时也方便了内存保护和共享。没有外碎片,每个内碎片不超过页的大小
  • 缺点:由于每个页面的大小固定,可能会浪费一些内存空间(存在内部碎片)

分段式

出现的原因:为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。

将虚拟地址空间分成若干个逻辑段(segment),每个段可以是不同大小的,每个段的大小和属性都可以在进程运行时动态变化,可以将不同的数据存储在不同的段中。

  • 优点:分段式内存管理的优点是可以更加灵活地使用内存,避免了分页式中的内部碎片问题
  • 缺点:分段式内存管理可能会导致外部碎片问题,因为每个段的大小不一定是固定的,可能会留下一些不可用的空间。

段页式

页式存储有效的提高内存利用率,分段存储能反映程序的逻辑结构并有利于段的分享,将这两种方式结合一下。这种二者结合,将作业的地址空间首先被分成若干逻辑段,每段有自己的段号,每个段分成若干大小固定的页

页面置换算法

当物理内存不足时,需要将一部分页从物理内存中置换出去,以便为新的页腾出空间,通常使用的页面置换算法有FIFO算法、最近最少使用算法(LRU算法)、时钟算法(Clock算法)等。

页面缓存

为了提高文件访问速度,操作系统会将常用的文件或者程序的页缓存到物理内存中,当需要访问这些文件或程序时,可以直接从物理内存中读取,而不需要从硬盘中加载。

内存映射文件

将文件映射到虚拟地址空间中,可以让应用程序通过内存访问文件,操作系统将自动管理文件在物理内存和硬盘之间的数据传输。

Copy-on-write

一个进程fork(创建一个子进程)时,父进程的虚拟地址空间会被复制到子进程中,但是操作系统不会真正复制物理内存中的数据,而是让父进程和子进程共享同一块物理内存,只有当其中一个进程修改了内存中的数据时,操作系统才会复制出一份新的数据,以保证父进程和子进程的内存空间独立。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坠金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值