存储管理--虚拟内存

虚拟内存:虚拟内存的基本思想是每个程序拥有自己的地址空间,这样空间被分为好多快,每一块称作一个页面,每个页面有连续的地址范围。本质是用来创造一个新的抽象概念--地址空间

虚拟地址空间按照固定的大学奥划分成为页面的若干单元,在物理内存中对应的单元称为页框,通常情况下页面和页框大小是一样的。如果程序访问的页面在内存中有直接的页框与之相对应,那么根据对应的防止寻找物理内存,如果要访问的页面没有直接与之映射的页框,则CPU陷入到操作系统中,这个陷阱叫做缺页中断,操作系统找到一个很少使用的页框且把它的内容写入磁盘中,随后把需要访问的页面读到刚才回收到的页框中去,修改映射关系。

一种最简单的实现,虚拟地址被分成虚拟页号和片段一地址,虚拟也好可以作为页表的索引,找到虚拟页面对应的额页表项,由页表项找到对应的页框号,然后把页框号拼接到偏移量的高位端,替换掉虚拟页号,行成送往内存的物理地址。

一个典型的页表项主要一般包括一下内容高速禁止位 访问位 修改位 保护位 在/不在位 页框号。 保护位一般对应的是读写之类的标记。修改和访问为在写入一页的时候由硬件自动设置,如果页面没有被修改过,可以直接丢掉,如果页面被修改过,我们说这个页面的数据是脏数据,需要写回磁盘中去设置访问位的值,还用在缺页中断时候决定要淘汰页面的时候使用。

加速分页:在任何分页系统中,都需要考虑两个问题,虚拟地址到物理地址的映射必须非常快,如果虚拟地址空间很大,页表也会很大。在部分页的情况下,每条指令只访问一次内存,有了分页以后每次访问页表再访问内存,次数会增加,会降低一半的性能。同时发现一种现象:大多数程序总是对少量的页面进行多次的反问,而不是相反。这样就提出了一种解决方案,设置一个小型的硬件设备,这种设备称为转换检测缓冲区(TLB),将虚拟地址直接映射到物理地址中去,在使用内存的过程中硬件首先将虚拟页号与设备中所有页表项并发进行对比,寻找到页框号。如果虚拟页号不在TLB中,就会进行正常的页表项查询,接着从TLB中淘汰一个表项,用一个新的代替它,当一个也表项被清除的时候,将修改位复制到内存中的页表项中,除了访问位其他的不变。当页表项装入TLB时候,所有数据来自内存。这种实现是正确的,但是现在许多机器的页面管理都是在软件中实现的。无论是硬件还是软件,常见方法都是找到页表项,并执行索引操作定位页面,如果用软间管理,如果页面不在TLB中产生软失效,此时要做的就是更新TLB,如果页面不再内存中,将产生硬失效,此时需要磁盘装载,比较浪费时间。

针对比较小的内存,我们可以用快表来加快虚拟内存到物理内存的转换,但是如果虚拟内存巨大,就需要加上别的方法进行处理:第一中方法,就是多级页面技术,例如32位的虚拟地址,可以划分位10PT1 10PT212位偏移地址,页面长度4k,这样找的时候线先找到第一页面,然后根据第一数据对第二页面进行查找,根据第二页面映射到物理页面,加上偏移地址找到却定的物理地址。还有一种方法就是到排页面:这种设计中在实际内存中每个页框有一个表项,而不是每个虚拟页面有个表项,这种设计虽然省空间,但是虚拟地址到物理地址的映射将更加困难。解决这种问题的方法就是使用TLB,不过这次记录的是使用频繁的页面,如果失效的时候,就用软件搜索到排页表。

内存映射中不可避免的出现的问题就是缺页的问题,如果发生缺页的时候,该把设么样的页面置换出去,有不同的算法用来实现。

1:最优页面置换放发,在发生缺页中断的时候,有些页面在内存中,其中有个页面将很快被访问到,有些页面可能需要到101001000条指令以后才能被访问到,每个页面都可以用在该页面首次被访问前要执行的指令数做标记。最优指令置换法规定每次置换标记最大的一个。当然这种算法虽然很好,但是无法实现,因为操作系统无法知道什么时候该页面才被访问。

2:最近未使用页面法:每个页面包含有两个状态位被访问读或写的时候设置R,页面被写入时设置M,可以用RM来构造一个简单的页面置换算法:当启动一个进程时,所有页面两个位被设为0R位被定期的清0,用来区别最近使用和最近没有使用的页面。当发生缺页中段的时候,操作系统检查所以页面,根据RM值分成四类,第一类:没有被访问,没有被修改,第二类:没有被访问,已经被修改,第三类:已被访问,没有被修改,第四类:已被访问,已被修改。每次随机第从编号最小的非空类中挑选一个淘汰。含义是淘汰一个没有被访问过的已修改的页面比访问一个频繁使用额干净页面好的多。

3:先进先出页面置换法:操作系统维护页面链表,新的页面放在尾端,进久的放在表头,发生缺页中段的时候,淘汰表头的页面,调入新的页面加入表尾。算法存在缺陷,很少纯粹使用此算法。

4:第二次机会页面置换算法:为了避免先进先出算法缺陷,对算法做修改,检查老页面的R位,如果R位是0,那么页面老又没有被使用,理科换掉,如果为10并装入表尾。

5:时钟页面置换算法:第二次机会页面算法比较合理,但是经常移动链表,浪费时间。更好方法就是,把所有页面都保存在一个类似钟面的唤醒链表中。发生缺页中断的时候如果R0,淘汰,并插入新页面,指针指向下一个位置,如果R1,就清楚并指针前移。

6:最近最少使用页面法:此算法基于下列观察,在前面使用的页面很可能在后面的几条指令中使用。反过来说已经很久没有使用过的页面有可能间来较长一段时间也不会被使用。当发生缺页中段到的时候,每次置换未使用过的最长的页面,这个称为LRU


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值