连续分配存储管理方式产生的问题:
变连续分配为离散分配,允许将作业离散放到多个不相邻接的分区中。
空间划分
内存分配
已知逻辑地址求页号和页内地址
给定1个逻辑地址空间中的地址为 A,页面的大小为L,则页号 P 和页内地址 d(从 0 开始编号)可按下式求得:
其中,INT 是整除函数,mod 是取余函数。
例:系统的页面大小为 1 KB,设 A = 2170 B,则由上式可以求得 P = 2,d = 122。
为了便于在内存找到进程的每一个页面所对应块,分页系统中为每一个进程配置1张页表,进程逻辑地址空间中的每页,在页表中都对应有1个页表项。
页表寄存在内存中,属于进程的现场信息。
用处:1.记录进程的内存分配情况 2.实现进程运行时的动态重定位。
访问1个数据需访问内存 2 次 (页表1次,内存1次)。
页表的基址及长度由页表寄存器给出。
若页面较小
若页面较大
在分页存储管理方式中,如果不具有页面对换功能,不支持虚拟存储器功能,这类存储管理方式称为纯分页或基本分页存储管理方式。
在调度作业运行时,必须将它的所有页面1次调入内存,但逻辑上连续的各个页所对应的内存块可以不连续。
特殊的固定分区 + 离散分配
地址变换机构
地址变换机构种类
地址变换借助页表来完成,页表驻留内存。
为了提高地址变换的速度,系统中设置1个页表寄存器PTR (Page-Table Register)。
每一个进程对应1页表,其信息(如长度、始址)放在PCB 中,履行时将其装入页表寄存器。
在单处理机环境下,虽然系统中可以运行多个进程,但只需1个页表寄存器。
当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部份。
将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超出进程的地址空间,产生地址越界中断。
将页表始址与页号和页表项长度的乘积相加,得到该表项在页表中的位置,因而可从中得到该页的物理块号,将之装入物理地址寄存器中。
将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。
例:若在1分页存储管理系统中,某作业的页表以下表所示,已知页面大小为 1024B,试将10进制逻辑地址 1011,2148,5012 转化为相应的物理地址。
设页号为 P,页内位移为 W,逻辑地址为 A,内存地址为 M,页面大小为 L,则
P = int ( A / L )
W = A mod L
对逻辑地址 1011
P=int(1011/1024)=0
W=1011 mod 1024=1011
A=1011=(0,1011)
查页表第 0 页在第 2 块,所以物理地址为 M=1024*2+1011= 3059。
对逻辑地址为 2148
P= int (2148/1024)=2
W=2148 mod 1024=100
A=2148=(2,100)
查页表第 2 页在第 1 块,所以物理地
址为 M=1024*1+100=1124。
对逻辑地址 5012
P= int ( 5012/1024)=4
W=5012 mod 1024=916
页号超过页表长度,该逻辑地址非法。
例:存储器的用户空间共有 32 个页面,每页 1KB,内存16KB。假定某时刻系统为用户的第 0、1、2、3 页分别分配的物理块号为 5、10、4、7,试将逻辑地址 0A5C 和093C 变换为物理地址。
基本的地址变换机构存在的问题
具有快表的地址变换机构
有效访问时间(Effective Access Time ,EAT) 是指从给定逻辑地址,经过地址变换,到在内存中找到对应物理地址单元并取出数据所用的总时间。
基本地址变换机构
具有快表的地址变换机构
例:有1页式系统,其页表寄存在内存中。(1)如果对内存的1次存取需要 100ns,试问实现1次页面访问的存取时间是多少?(2)如果有快表,对快表的1次存取需要20ns, 平均命中率为 85%,试问此时的存取时间为多少?
页表放内存中,则实现1次页面访问需 2 次访问内存。
所以实现1次页面访问的存取时间为:100ns*2=200ns
系统有快表,则实现1次页面访问的存取时间为:
0.85*(20ns+100ns)+(1-0.85)*(20ns+2*100ns)=135ns
若逻辑地址空间很大 (2^32 ∼2^64 ) ,则划分的页比较多,页表就很大,占用的存储空间大(要求连续) ,实现较困难。
例如,对 32 位逻辑地址空间的分页系统,如果规定页面大小为 4 KB 即 2^12 B,则在每一个进程页表就由高达2^20 页组成。设每一个页表项占用1个字节,每一个进程仅仅页表就要占用 1 MB 的内存空间。
解决问题的方法
将页表再进行分页,离散地将各个页表页面寄存在不同的物理块中,同时也再建立1张外部页表用以记录页表页面对应的物理块号。
正在运行的进程,必须把外部页表调入内存,而动态调入内部页表。只将当前所需的1些内层页表装入内存,其余部份根据需要再陆续调入。
将外层页表再进行分页,也将各外层页表页面离散地寄存在不同的物理块中,再利用第 2 级的外层页表来记录它们之间的对应的关系。
解决问题的方法
1般页表的表项是按页号进行排序,页表项中的内容是物理块号。
反置页表是为每个物理块设置1个页表项并按物理块号排序,其中的内容是页号 P 及隶属进程标志符 pid。
利用反置页表进行地址变换
页的同享:各进程把需要同享的数据/程序的相应页指向相同物理块。
页的保护
页式存储管理系统提供了两种方式:
同享带来的问题
若同享数据与不同享数据划在同1块中,则:
实现数据同享的最好方法:分段存储管理。
转载自:杨森源
下一篇 java语言的特点