软设笔记(存储管理--页式存储和段式存储考点)

  参考了博客:

http://t.csdn.cn/cRtgy

段式存储管理、段页式存储管理

一篇看懂,操作系统一一段式存储管理、 段页式存储管理:

分页存储管理相关习题

页式存储:

        解释:将程序划分为同样大小的块,以页为单位将程序调入内存。

基本概念:

       将一个用户进程的地址空间划分为相同大小的区域,称为页。定长。页从0开始编号。称为逻辑页。

        页帧(页框、块):内存地址空间划分成的与页大小相等的区域。称为物理页。每块大小为2的整数次幂,总大小在4KB-1GB之间。

        页表:存放于主存中,一张逻辑页到物理页映射的表。系统借助页表能找到在主存中目标页面所对应的物理块。页表的长度和页表的主存起始地址存放于PCB中。

        快表:一组高速存储器,保存当前访问较少的活动页及相关信息。

        地址结构:

       逻辑地址=页内地址+页号

       物理地址=页内地址+页帧号。

      实际地址定位:通过页表找到内存物理块起始地址,然后+页内偏移。

  1. 进程访问某个逻辑地址时,分页地址机构自动将逻辑地址分为页号和页内地址
  2. 页号大于页表长度,越界错误
  3. 页表项的地址 p = 页表起始地址 F + 页号 P * 表项大小 S,从而得到对应的物理块号 B
  4. 页和物理块的大小是一致的,所以 页内地址=块内地址
  5. 然后 物理地址 = 物理块号 B * 页大小 L + 页内地址
  6. 根据物理地址读取数据

逻辑地址与物理地址之间的转换过程:

例题解析:页的大小指的是存储容量,这里的4KB是4096B,因为存储容量=存储个数*编址内容。也就是等于4k个B,4k个字节byte。也就是需要0~4095 大约位置的空间。4096个空间也就是2^12。2的12次方,需要12位进行编码。因此确定了低12位是页内地址。逻辑地址中。

再来看剩下的高二位10,就是页号。转化为十进制就是2.查询页表可知,页号为2的对应的页帧号是6,再将6转化为二进制就是110,所以页帧号为110,低12为继续保留。得到物理地址:110 1100 1101 1110

在进程分配内存时,以块为单位,将进程的多个页分别装入可以不连续的块中,逻辑地址空间占用m位,每一页大小为2的n次方个地址单元,所以页内位移号占用n个单位,剩下m-n个位表示页号。用页号去页表中寻找对应的项,由此找到物理块号,再加上本身带的页内偏移量,就可以得到物理地址。

缺页中断:
在地址映射过程中,在页表中发现要访问的页面不在内存,产生中断,中断发生。中断发生时候,系统必须在内存中选择一个页面移出内存,调用新的页面让出空间,尽管每次可以随机选择一个页面置换,但选不常使用的页面会使系统的性能更好,减少不必要的额外开销,所以产生了页面置换算法。

发生缺页中断时候,淘汰页面简单依据为:

1、首先淘汰访问位为0的页面理论:局部性原理,时间局部性,刚刚被访问的可能很快又会被访问。

2、多个访问位为0,淘汰原则为淘汰修改位为0的。因为如果修改位为1,说明页面有变动,如果页面要淘汰掉,可能还要修改程序文件,花销更大。

 页面置换算法

1理想页面(Optimal, OPT)置换算法
发生缺页时,有些页面在内存中,其中有一页将很快被访问(包含紧接着 的下一条指令的那页),而其他页则可能到10、
100或1000条指令后才会被访问,每个页都可以用在该页面首次被访问前所要执行的指令数进行标记。标记树最大的页应该被置换。

举例:如果某页在八百万条指令内不会被使用,另外一页在六百万条指令不会被使用,则置换前一个页面。这个算法无法实现,因当缺页
中断时,系统无法知道各个页面下一次在什么时候被访问

2先进先出置换算法(First In First Out, FIFO)
置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按照进入内存的先后次序排列成队列,从队尾进入,从队首删除。但是该算法会淘汰经常访问的页面,不适应进程实际运行的规律,目前已经很少使用。有可能产生抖动。例如:432143543215序列,用3个页面,比4个缺页少。

3 随机RAND算法。听天由命

4最近最久未使用置换算法(Least Recently Used, LRU)

也叫最近最少使用。LRU,理论支撑是局部性原理,空间局部性
刚被访问的页面,可能马上又要被访问;而较长时间内没有被访问的页面,可能最近不会被访问。 LRU算法普偏地适用于各种类型的程
序,但是系统要时时刻刻对各页的访问历史情况加以记录和更新,开销太大,因此LRU算法必须要有硬件的支持。

5第二次机会页面置换算法
FIFO算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法进行简单的修改:检查最老页面的R位,如果R位是0,那么
这个页面又老有没用,可以立即置换出去,如果是1,就清零R位,并将该页放到链表的尾端,修改它的装入时间使它就像装入的一样,
然后继续搜索。如果所有的页面都被访问过,那么该算法就被降为纯粹的FIFO算法。

6时钟页面置换算法
由于第二次机会页面置换算法要经常在链表中移动页面,降低了效率。一个更好的办法,将所有的页面存在一个类似钟表面的环形链
表中。

7最近未使用(NRU:Not Recently Used)
用R位和M位构造一个简单的页面置换算法:当启动一个进程时,它的所有页的两个位都由操作系统设置成0,R位被定期的清零,以
区别最近没有被访问的页和被访问了的页。 
根据R位和M位,分为4类页面 
第0类:没有被访问,没有被修改 
第1类,没有被访问,被修改 
第2类,被访问,没有被修改 
第3类,被访问,被修改。
NRU算法随机地从编号最小的非空类中挑选一个页淘汰之。这个算法隐含的意思是,淘汰一个在最近一个时钟周期内没有被访问
的已修改页要比淘汰一个被频繁访问的干净的页好。

 A


分页存储管理

主要难点考查内存地址的获取
页号: 逻辑地址/页大小
页内偏移: 逻辑地址%页大小
以页号查页表,得到对应物理块号。
物理地址=物理块号×页大小+页内偏移。


段式存储:

分段:

进程的地址空间,按照自身逻辑关系划分若干个段,非定长。每个段有个段名。每段从0开始编址。

段:用户编制的程序可以由一个主程序、若干个子程序、符号表、栈以及数据等若干段组成,每一段都有独立、完整的逻辑意义,每一个段的长度可以不同。

段表:系统为每个进程创建一张段映射表,每个段在表中有一个表项记录该段在内存中的起始地址(基址)和长度(段长)。
        段表功能:实现了逻辑段到内存空间之间的映射

内存分配规则:以段为单位进行存储空间的管理。段为单位分配,每个段在内存中占连续空间,但各段之间可以不相邻。 

逻辑地址结构段号(段名)段内地址(段内偏移量组成。

段内偏移量不会超过相应段落的段长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值