操作系统之内存管理

内存管理

调度之交换:
操作系统每一个进程都会分配有独立的内存空间,如果进程很多,内存空间不够使用怎么办?需要把部分内存转移到磁盘中保存,当需要再次使用它的时候再把它从其中取出,把不用的部分“交换”进去,这就是交换的简单原理。通过交换,我们可以保存更多的内存信息,同时避免了内存不足。但它也存在一些问题,比如交换的过程中会带来一定的开销,如果一个进程的使用时间短于它交换到内存的时间,这样效率是很低的,或者说当进程需要不断地从内存和磁盘间来回切换时,会导致“系统颠簸”,效率低下。
分页:
分页技术和下面提到的分段技术,都是为了更好的对内存进行管理而设计的。分页顾名思义,它的特点就是每页的大小一样,把内存空间分为了若干页,通过页的初始地址和页内的偏移来确定需要索引的数据的位置,分页的索引是通过页表来实现的,通过一个逻辑地址(包括页号和页内偏移)去查询页表,然后得到最终的物理地址;更快的方式是使用TLB,它是内存中的有页号和帧号属性的map,通过它可以缓存一些页的信息,当使用某些页有较高的概率时,命中缓存的机会页越大,时间复杂度是O(1),如果没有命中怎么办?自然是再次通过页表去索引数据。页的设计是有助于内存调度的实现的,因为它可以帮助操作系统更快地找到相应地内存数据,然后进行调度,同时也有利于对信息进行索引。分页技术也存在一些不足,假设一个数据段只有5kb,而分页的大小是100kb,那这就导致了95kb的内存浪费,因此,分页技术存在“碎片”问题。
分段:
了解分段的概念关键是了解它和分页的区别。分段的每个“段”的长度是可以不同的,分段是一个比分页更加“大”的概念,比如一段C语言的数据需要存储,它保存栈信息,代码信息,程序计数器,堆,标准C库函数等,这些信息分别作为不同的段进行存储,自然,每个段都会页段号,段之间也是没有绝对的顺序的。分段技术也是通过段表的数据结构来索引,同样也存在缓存的方式,逻辑地址包括段号和段内偏移,通过索引段表后可以得到最终的物理地址。分段的最大优点是可以避免碎片化,分段和分页结合起来使用为最佳,先索引段,然后再段内找相应的页信息。在索引上需要花费时间,因此优化的策略是把二者结合起来,直接完成段和页的索引以及物理地址的形成。

虚拟内存

虚拟内存的概念:
虚拟内存是一种技术,它可以使得有限的物理空间存储大于空间内存的数据。实现的方式是:复用技术和交换技术。在需要时候每段数据时才从磁盘中获取它,把磁盘内容部分交换到内存区域中。这里需要强调一点,只有内存中的数据才能是CPU可以直接使用的,因此,诸如进程之类的数据信息需要从磁盘中调入内存才可以使用。
按需调页:
在上面介绍虚拟内存的时候略有提及这个概念,这是一种惰性交换,它和交换的区别是它是对页进行调度,而交换技术一般是指对整个进程进行调度。在需要用到的时候再加载相应的数据到内存中,必要的时候可以把一些不用的数据存入磁盘,节省出的内存空间可以存放需要使用的数据。
写时复制:
写时复制可以避免频繁创建进程的开销,它采用的是父进程和子进程共享部分公共的代码区域,当子进程或者父进程需要修改一部分数据时,则把改数据所在分页进行复制,所有修改的地方修改在复制的后的分页中,这就是写时复制。写时复制效率很高,也实现了内存的复用,体现了虚拟内存的特点。
页面置换:
什么时候需要用到页面置换呢?当CPU需要用到某个分页而在内存中不存在这个分页时,就需要用到页面置换,此时操作系统会产生一个陷阱(错误),这时就需要从磁盘中加载相应分页,然后再判断是否满足要求。理论上完成一次加载,每个页面都会经历一次页面置换,但实际上会存在部分分页复用的现象,实际上用不了加载那么多页面。
FIFO页置换:当内存不足时,新的页优先置换存在时间最久的页。
最优置换:优先置换最长时间不使用的页。
LRU页置换:也称为最近最少使用算法。最近最少使用可以理解为把最近的一段时间的情况看作是未来的情况,从而可以综合考虑一个分页过去的使用情况和将来的使用情况,然后判断是否需要把它“牺牲”。
近似LRU页置换:使用一个引用位,初始为0,引用之后为1,长期不被使用的分页就会被替换。
系统颠簸:
这个概念上上面已经提到,就是指一段内存频繁地在内存和磁盘之间切换,导致的系统不稳定,低效率的现象。当系统发生颠簸的时候,需要拿出更多地帧来消除这种颠簸。
其他考虑:
预调页:为了避免进程在刚开始创建的时候产生大量的错误,可以采用预调页,这种策略就是指同时将所需要的分页调入内存。
TLB范围:增加命中率和TLB范围可提高性能。
IO互锁:假设当一个进程发起IO请求,进入IO设备的就绪队列等待,此时CPU获取了某个进程的使用权,通过页错误,把之前的那个IO等待进程的IO相关分页替换掉了,当那个IO进程需要执行的时候,发现数据没了,需要重新加载,这就导致了效率的低下。解决的最好方法是对数据加锁,避免被修改。滥用锁页会带来一些问题,可能有些资源被锁住后就再也没有被使用的机会,这就导致了内存的浪费。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值