4.3 分页式存储管理

31
4.3 分分分分分分分 4.3.1 分分分分分分分分分分分分 4.3.2 分分 4.3.3 分分分分分分分分分分分分分 4.3.4 分分分分分分分分分分分分分分分 4.3.5 分分分分 4.3.6 分分分分

Upload: kiona-oneal

Post on 30-Dec-2015

109 views

Category:

Documents


0 download

DESCRIPTION

4.3 分页式存储管理. 4.3.1 分页式存储管理的基本原理 4.3.2 快表 4.3.3 分页式存储空间的分配和去配 4.3.4 分页式存储空间的页面共享和保护 4.3.5 多级页表 4.3.6 反置页表. 4.3.1 分页式存储管理 基本原理 (1). • 为什么要引进分页技术 ? • 基本原理 (1) 页框 (2) 页面 (3) 逻辑地址形式 (4) 页表和地址转换. 分页式存储管理基本原理 (2). 作业的页面与分给的页框如何建立联系呢? 逻辑地址 ( 页面 ) 如何变换成物理地址 ( 页框 ) 呢? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 4.3  分页式存储管理

4.3 分页式存储管理4.3.1 分页式存储管理的基本原理 4.3.2 快表4.3.3 分页式存储空间的分配和去配4.3.4 分页式存储空间的页面共享和保护4.3.5 多级页表4.3.6 反置页表

Page 2: 4.3  分页式存储管理

4.3.1 分页式存储管理基本原理 (1)

• 为什么要引进分页技术 ?• 基本原理(1) 页框 (2) 页面 (3) 逻辑地址形式 (4) 页表和地址转换

Page 3: 4.3  分页式存储管理

分页式存储管理基本原理 (2) 作业的页面与分给的页框如何建立联系呢? 逻辑地址 ( 页面 ) 如何变换成物理地址 ( 页框 )

呢? 作业的物理地址空间由连续变成分散后,如何保

证程序正确执行呢? • 使用动态重定位技术,给每个页面设立重定位

寄存器,重定位寄存器的集合便称页表。 • 页表是操作系统为每个用户作业建立的,用来

记录程序页面和主存对应页框的对照表。

Page 4: 4.3  分页式存储管理

页式存储管理的地址转换和存储保护

页表基址寄存器页表基址寄存器

物理地址逻辑地址

01·

·p b

· ··

01·

·p b

· ··

页表

CPU p dp d b db d

主存

分页存储管理的地址转换

Page 5: 4.3  分页式存储管理

4.3.2 快表相联存储器快表的格式 采用相联存储器后地址转换

Page 6: 4.3  分页式存储管理

采用相联存储器的地址转换 假定访问主存时间为 100 毫微秒,访问

相联存储器时间为 20 毫微秒,相联存储器为 32 个单元时快表命中率可达 90% ,按逻辑地址存取的平均时间为:

( 100 + 20 ) ×90% + (100+100+20)×(1-90%) = 130 毫微秒

比两次访问主存的时间 100 毫微秒 ×2+20 = 200 毫微秒下降了三成多。

Page 7: 4.3  分页式存储管理

4.3.3 分页式存储空间的分配和去配 (1)

位示图法链表方法分配算法

Page 8: 4.3  分页式存储管理

主存分配的位示图和链表方法

Page 9: 4.3  分页式存储管理

4.3.4 分页存储空间的页面共享和保护 (1)

数据共享程序共享标志位保护方法键保护方法。

Page 10: 4.3  分页式存储管理

两种共享 (2) 数据共享 -- 允许不同进程对共享的数据页

用不同的页号,只要让各自页表中的有关表项指向共享的数据页框;

程序共享 -- 由于指令包含指向其他指令或数据的地址,进程依赖于这些地址才能执行,不同进程中正确执行共享代码页面,必须为它们在所有逻辑地址空间中指定同样页号。

Page 11: 4.3  分页式存储管理

分页存储空间的页面共享和保护 (3)

共享库 动态链接器 编译和动态链接共享库的过程

Page 12: 4.3  分页式存储管理

编译和动态链接共享库的过程 (4) 编译时,给出 main1.c ,并包含 #include <stdio.h> 等头文件; 链接器对编译的输出信息: main1.o 和标准共享库 libc.so 的

重定位和符号表信息进行静态链接,获得部分链接的可执行目标代码命名为 Exmain1 ;

当装入器 (execve( )) 加载和运行 Exmain1 时,发现包含动态链接器的路径名,动态链接器本身是一个共享目标代码(如,在 Linux 系统上的 LD-LINUX.so ),装入器不再像它通常那样将控制传递给应用程序,取而代之是加载和运行这个动态链接器。

动态链接器通过执行下面的重定位完成链接任务: (1) 重定位 libc.so 的文本和数据到某个主存段。在 Linux 系

统中,标准共享库被加载到从地址 0x40000000 开始的区域中;

(2) 重定位 Exmain1 中所有对由 libc.so 定义的符号的引用; (3) 动态链接器将控制传递给应用程序,从这个时刻开始,

共享库的位置便固定,并在程序执行过程中都不会改变。

Page 13: 4.3  分页式存储管理

Linux 进程的虚存映象 (5)

0

0x08048000

0x40000000

0xc0000000

内核虚存

用户栈 ( 运行时创建 )

共享库主存映象区

运行时堆空间堆 (malloc 创建 )读 / 写段

只读段从可执行文件加载

esp

用户代码不可见

未 用

brk

Page 14: 4.3  分页式存储管理

分页存储空间的页面共享和保护 (6)

Windows 动 态 链接

编译后的目标文件 引入库 (DLL 函数的定位信息 )

链接器

可执行程序

主存

重要定位信息

动态链接库

调用 DLL 中的函数

Page 15: 4.3  分页式存储管理

4.3.5 多级页表多级页表的概念 多级页表的具体做法 逻辑地址结构逻辑地址到物理地址转

换过程

Page 16: 4.3  分页式存储管理

多级页表的概念系统为每个进程建一张页目录表 ,

它的每个表项对应一个页表页 , 而页表页的每个表项给出了页面和页框的对应关系 , 页目录表是一级页表 ,页表页是二级页表。

逻辑地址结构有三部分组成:页目录、页表页和位移。

Page 17: 4.3  分页式存储管理

多级页表地址转换过程

B offset

dir page offset

BF

进程一级页表 进程二级页表

物理地址

逻辑地址

页目录表控制寄存器

Page 18: 4.3  分页式存储管理

解决页表页占用主存空间的问题进程运行涉及页面的页表页应放在主

存 , 其他页表页使用时再调入 ,在页目录表中增加特征位 , 指示对应

的页表页是否已调入主存 ,地址转换机构根据逻辑地址中的 dir,

去查页目录表对应表项 , 如未调入 ,应产生一个”缺页表页”中断信号,请求操作系统将页表页调入主存。

Page 19: 4.3  分页式存储管理

SUN SPARC 计算机三级分页结构

上下文号 索引 1(8) 索引 2(6) 索引 3(6) 偏移 (12)

上下文表第一级

第二级第三级

4K 页面0

4095

页表

Page 20: 4.3  分页式存储管理

多级页表结构的本质多级不连续导致多级索引。以二级页表为例,用户程序的页面不

连续存放,要有页面地址索引,该索引是进程页表;进程页表又是不连续存放的多个页表页,故页表页也要页表页地址索引,该索引就是页目录。

页目录项是页表页的索引,而页表页项是进程程序的页面索引。

Page 21: 4.3  分页式存储管理

4.3.5 反置页表 (1)

页框号 位移进程标识 页号 位移

进程标识 页号 特征位 链指针

序号

反置页表

物理地址逻辑地址

••

哈希函数

哈希表

反置页表及其地址转换

Page 22: 4.3  分页式存储管理

反置页表 (2)IPT 是为主存中的每一个物理块

建立一个页表并按照块号排序 ,该表每个表项包含正在访问该

页框的进程标识、页号及特征位 , 用来完成主存页框到访问进程的页号、即物理地址到逻辑地址的转换。

Page 23: 4.3  分页式存储管理

反置页表 (3) 反置页表地址转换过程如下 : 逻辑地址给出进程标识和页号 , 用它们

去比较 IPT, 若整个反置页表中未能找到匹配的页表项 , 说明该页不在主存 , 产生请页中断 , 请求操作系统调入 ; 否则,该表项的序号便是页框号 , 块号加上位移 , 便形成物理地址。

Page 24: 4.3  分页式存储管理

4.4 分段式存储管理4.4.1 程序的分段结构4.4.2 分段式存储管理的基本原理4.4.3 段的共享和保护4.4.4 分段和分页的比较

Page 25: 4.3  分页式存储管理

4.4.1 程序的分段结构分段存储管理引入的主要原因模块化程序设计的分段结构分页存储管理 --- 一维地址结构分段存储管理 --- 二维地址结构

Page 26: 4.3  分页式存储管理

模块化程序设计的分段结构

子程序段 X 数组段 A

┇call [X]∣<E>

( 调用 X 段的入口E)┇

call [Y]∣<F>( 调用 Y 段的入口

F)┇

load 1,[A]∣<G> ( 调用数组段 A[G]

)┇

┇call [X]∣<E>

( 调用 X 段的入口E)┇

call [Y]∣<F>( 调用 Y 段的入口

F)┇

load 1,[A]∣<G> ( 调用数组段 A[G]

)┇

主程序段

E :┅┅┅┅┅┅E :┅┅┅┅┅┅

F :┅┅┅┅┅┅F :┅┅┅┅┅┅

子程序段 Y

G :┅┅┅┅┅┅G :┅┅┅┅┅┅

工作区段

Page 27: 4.3  分页式存储管理

4.4.2 分段式存储管理的基本原理 (1)

• 两维逻辑地址段号:段内地址

• 作业表和段表 • 段式存储管理的地址转换和

存储保护

Page 28: 4.3  分页式存储管理

分段式存储管理的基本原理 (2) 段控制寄存器

段表始址 段表长度 段号 s 位移 d

段长 基址

物理地址

越界 ?

段表

Page 29: 4.3  分页式存储管理

4.4.3 段的共享多对基址 / 限长寄存器 段的共享,是通过不同作业段表

中的项指向同一个段基址来实现。几道作业共享的例行程序就可放

在一个段中,只要让各道作业的共享部分有相同的基址 / 限长值。

对共享段的信息必须进行保护。

Page 30: 4.3  分页式存储管理

分段和分页的比较 (1) 分段是信息的逻辑单位,由源程序

的逻辑结构所决定,用户可见,段长可根据用户需要来规定,段起始地址可从任何主存地址开始。

分段方式中,源程序 ( 段号,段内位移 ) 经连结装配后地址仍保持二维结构。

Page 31: 4.3  分页式存储管理

分段和分页的比较 (2) 分页是信息的物理单位,与源程序

的逻辑结构无关,用户不可见,页长由系统确定,页面只能以页大小的整倍数地址开始。

分页方式中,源程序 ( 页号,页内位移 ) 经连结装配后地址变成了一维结构。