操作系统的页式,段式和段页式存储管理

先说页式

页式呢,是在内存在不一定需要连续分配,但是要一次性装入

是由虚页和实页构成的。虚页是作业的虚拟地址空间,实页在主存里面

一个作业运行前,需要将所有的虚页全部装入主存块中,主存的空闲块要够大。

有一个界面变换表,对应有虚页号和块号,通过界面变换表就能从逻辑地址空间找到实际的物理地址空间。

比如说有三个作业。

0 5

1 6


0 2

1 4

2 7


0 8

左边就是页号,右边就是块号

分页系统中,页的大小是2的整数次幂,所以页内偏移是0到2的n次方-1

| 页号 | 页内偏移|

对于每条访问内存的指令,分页系统的地址变换过程是这样的。

页表控制寄存器是记录这个东西

页表起始地址 页表长度(用户在访问内存空间,不能超过页表长度)

| S | L |

逻辑地址是由页号和页内偏移构成

页号 页内偏移

| P | D |

通过逻辑地址提供的页号和页表控制器提供的页表起始地址和页表长度就能找到虚页的页表地址

虚页的页表地址=页表起始地址+虚页号*页表表项长度

有了页表的徐烨号 就能找到实页号,通过实页+页内偏移构成地址寄存器,地址寄存器就能访问内存

地址寄存器

实页 页内偏移

| B | D |


进程页表:每个进程有一个页表,描述该进程占用的物理界面及逻辑排列顺序。

请求表:整个系统有个请求表,描述系统内各个进程页表的位置和大小,用于地址转换。

物理页面表:描述内存空间中,每个实页的分配使用情况和当前空闲页的总数。数据结构有两种:位示图,空闲页面链表

位示图

  0--------------------------31

0 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 |

   .

   .

   .

  空闲块数

位示图是0的话表示没有使用


需要的硬件支持:内存管理单元MMU完成地址变换

页表管理系统访问数据和指令时,至少需要两次访问内存,第一次查找页表,第二次真正访问指令或数据。

为了加快速度,设置一对寄存器:

页表基址寄存器(PTBR)+页表长度寄存器(PTLR)或者采用联想存储器(快表)

PTBR获取当前进程页表的位置,第一次访问完,根据页内偏移+页表位置可以得到用户区的实际物理地址,第二次访问即可得到指令或数据了。

PTLR实现存储保护,就是不能让你访问超过页表长度。在范围之内,正常访问,不在就不能。

快表:按内容进行查找(不是按照地址),查找逻辑页号到物理页号的映射。

联想存储器速度快但价格昂贵,容量不大


页式存储管理的优点

1.无外碎片,每个内碎片不超过页大小

2.不需要连续存放程序,有利于改变程序所占空间的大小

缺点

1.需要一次性装入

2.需要动态地址变换机构,会增加系统的成本

3.需要一定的数据结构,比如链表,会占用和花费时间去建立和管理

4.碎片问题,每页的最后一页内碎片

5.存储扩充问题没有解决。当没有足够大的空闲界面装整个作业或进程时,无法执行。


先写这么多,后续有时间再补上

没有更多推荐了,返回首页