操作系统内存管理

1、分段

分段主要是对用户程序进行分段处理,用户程序运行的逻辑地址都是相对地址,为了避免使用相同的地址,需要偏移基址+逻辑地址来进行从逻辑地址到内存可用物理地址的映射,段表LDT就是用来存储偏移基址的,每一个进程有自己的LDT表用来存储不同分段的基址,操作系统有一个总的GDT表用来存储各LDT表信息

 

2、分页

分页是指对物理内存进行分页,因为内存不适合进行分段处理,段比较大,容易出现内存碎片的问题,因此物理内存需要存更小的页在物理内存中进行存储,这样就能避免内存碎片,提高内存利用率,分页处理需要页表,但是由于页比较小,假设是4k一个页面,32位物理地址的内存就有2^32/2^12=2^20个页,页表的一个页表项存储一个页地址,如果一个页表项为4个字节,为了保证数据(页号)的连续性,不管页表项是否为空,操作系统就需要从小到大连续存储2^22个页表项,空间浪费太大了,因此操作系统使用多级页表来进行优化页表的存储,假设是二级页表,也就是将页表分为章和节,第一级页表只存储目录地址,不存储具体地址,第二级页表存储目录对应具体的物理地址,只有当具体的物理地址被调用时才会开辟第二级页表的空间,既能按顺序访问又能节省空间,但是这样的缺点就是增加了访问次数,因此操作系统使用TLB(快表)来进行优化,快表类似一个缓存,访问过的数据地址会存储在快表中。只要快表中命中过的数据就不再去查多级页表了

 

3、段页结合

段页结合是指将用户程序的分段和物理内存的分页通过虚拟内存结合起来,使得用户侧看起来程序仍然是分段的,而从内存侧数据仍然是分页的。具体的过程其实就用户程序使用了一段内存,首先在虚拟内存上找到一段空的内存,然后将用户程序使用的内存映射到空的虚拟内存上,最后虚拟内存再将这段内存映射到物理内存上。虚拟内存一般比物理内存大,其实是通过页在物理内存的换入换出来实现的空间,让用户觉得仿佛它就是在和虚拟内存一样大的物理内存上进行了操作一样。

 

4、页面置换算法

(1)FIFO 先进先出算法 就是当内存满了之后,又有新的进程请求换入时,先进入内存的进程先被换出

 (2)最优未来最近不被使用置换算法   就是当内存满了之后,又有新的进程请求换入时,未来最近不被使用的页面先被换出,一种理论,没法实现

(3)Lru算法  就是当内存满了之后,又有新的进程请求换入时,历史最近最少被使用的页面被换出

 (4)时钟循环队列算法 是一种改进 的lru算法 是一个指针循环循环队列+一个标识位,当页面被访问过的时候,标识位置为1,要置换的时候,如果当前指针的标识位为0时就将其换出,否则就将当前置为0,循环直到找到标志位为0的为止,但是这种情况就是容易出现如果一个队列每次都是缺页比较少时容易退还为FIFO算法

因此使用一个快指针和一个慢指针,快指针定时给标识位清0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值