分段式虚拟存储管理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
处理;如果段已经被换出,就会发生一次陷入 (缺段中断)处理;如果段在主存,则随后检查
偏移量是否超出了段的结尾,如果是也会发生 一次陷入(越界中断)处理。
l 假设段在内存中并且偏移量也在范围内, 就把描述符中32位的基地址和偏移量相加形 成32位线性地址(linear address),如图4-34 所 示 。 为 了 和 只 有 24 位 基 地 址 的 保 护 模 式 (80286)以及使用16位段寄存器来描述20位 基地址的实模式(8086/8088)兼容,基址被 分成3片分布在描述符的各个位置。实际上, 基址允许各个段的起始地址在32位线性地址
允许分页时线性地址的组成
10
线性地址
Dir
10 Page
12 Offset
线性地址转换为物理地址的 过程
1024 表项
页目录 Dir
页表 Page
页架 Offset
页目录项和页表项的结构是类 似的,均为32位,其中20位是 页表位置/页架号,其余的未包
括了由硬件设置的供操作系统
使用的引用位、修改位、保护 位、和其他一些有用的位。
页目录项和页表项的结构
lD位:修改位,当该页程序修改后,应先纪 录为淘汰做准备。
lA位:(读/写)引用位,凡对程序读写均置 为已访问(accessed),淘汰时先找A=0的页面 (Windows用LRU法)。
lP位:存在位,页面在内存时,P=1。
lU/S位:用户/管理员(User/Supervisor)位, 若U/S=0,该页为一个管理员页面(OS页面), 用户不能访问。
页表分为三层: 页目录PGD、中间页目录PMD和页表PTE。
在 Pentium 计 算 机 上 它 被 简 化 成 两 层 , PGD和PMD合二为一。
l 存取权限: 00(可执行);01(可读);11(可 写);
l 扩充位: 0(固定长);1(可扩充);
l 标志位: 00(未修改);01(已修改);11(不 可移动);
否 发越界中断
是
否
S段在内存
B<S段长度
是
否
是
符合存取权限
发缺段中断
发保护中断
非法存取
S段可扩充
否 地址错
是
S段末端相邻的空
当设置G控制位1,系统运行于段页模式,此 时每个进程可有8192个段,每个段220个页, 每个页4KB,也就是说段可有232字节大小。
当设置G控制位1,把系统六个段寄存器设 置为同一个段选择符,段描述符基地址设 置为”0”,段大小设置为最大;这时系统运 行于分页模式,单段、分页,32位地址空 间模式运行。
否
闲区长度满足要求
是
形成绝对地址
移动或调 出分段
继续执行指令
硬件
操作系统
否
主存中有满足S段
长度的连续空闲区
移动或调 出分段
是 装入S段
调整S段段表及主存分配 表
重新启动指令
4.5.4段页式存储管理
段式存储是基于用户程序结构的存储管 理技术,有利于模块化程序设计,便于 段的扩充、动态链接、共享和保护,但往 往会生成段内碎片浪费存储空间;
所有进程从3GB到4 GB的虚拟内存地址 都是一样的,又相同的页目录项和页表, 对应到同样的物理内存段。Linux以此方 式让内核态进程共享代码段和数据段。 另 外 , 虚 拟 内 存 地 址 从 3GB 到 3 GB+4MB 的 一 段 和 0 到 4MB 的 一 段 是 对 应的。
Linux请求页式技术管理虚拟 内存
长度0-15
l基地址共32位(分三处合并),生成内存段的首址,源自文库上32
位偏移形成内存地址。对于286程序,基地址的24—31位不用, 恒为0;所以,286只能处理24位基址。
l长度位共20位,限定段描述符寻址的内存段的长度,注意段长 度的计量单位可以是字节或页。
lG位用于描述颗粒大小,即段长度的计量单位。G=0表示长度 以字节为单位;G=1表示长度以页为单位,在Pentium中页的长 度 是 固 定 的 , 为 4KB 。 于 是 段 的 长 度 分 别 为 220 字 节 或 2204KB=232字节。
lD位:当D=1时,为32位段;当D=0时,为16位段。
lP位表示内存段是否在物理主存中,若P=1,表示段在内存中, 若P=0,表示段不在内存中。
lDpl位(2位)表示特权级(0—3),用于保护。0为内 核级;1为系统调用级,2为共享库级,3为用户程序级。 Windows 95只用两级:0级和3级,即系统级和用户级。
2、实地址划分成位置固定、大小相等的页框(块) , 这是段页式存储管理的页式特征
3、将每一段的线性地址空间划分成与页框大小相 等的页面,于是形成了段页式存储管理的特征
段 号 (s) 段 内 页 号 (p) 4、逻辑地址形式为:
页 内 位 移 (d)
段号(s) 段内页号 (p) 页内位移(d)
对于用户来说,段式虚拟地址应该由段号s和段内 位移d’组成,操作系统内部再自动把d’解释成两 部分:段内页号p和页内位移d,也就是说,d’=p× 块长+d。
当设置G控制位0, 系统运行于分段模式,每 个进程可有213=8K(8192)个段,每个段可有 220字节大小,这种模式是为了与286兼容。
4.6.4地址转换
Pentium采用分段模式时,每一个虚地址 包括一个16位段选择符和一个32位偏移 量,不分段时,用户的虚拟内存是232=4GB;
而分段时,虚拟地址空间为2(32+14)=64TB; 物理地址空间使用32个地址位,最大有 4GB。
数据结构
段页式存储管理的数据结构包括作业表、 段表和页表三级结构。
作业表中登记了进入系统中的所有作业及 该作业段表的起始地址,
段表中至少包含这个段是否在内存,以及 该段页表的起始地址,
页表中包含了该页是否在主存(中断位)、 对应主存块号。
动态地址转换
从逻辑地址出发,先以段号s和页号p作索 引去查快表,如果找到,那么立即获得页p的 页框号p’,并与位移d一起拼装得到访问主 存的实地址,从而完成了地址转换。若查快 表失败,就要通过段表和页表来作地址转换 了,用段号s作索引,找到相应表目,由此得 到s段的页表的起始地址s’,再以p作索引得 到s段p页对应的表目,由此得到页框号p’;这 时一方面把s段p页和页框号p’置换进快表, 另一方面用p’和d生成主存的实地址,从而 完成地址转换。
4.6.2段选择符和段描述符
选择符是一个16位数,如图4-32所示。 选择符中的一位指出这个段是局部的还 是全局的,其他13位是LDT和GDT的入 口号。
13 索引
12
0=GDT / 1=LDT
特权级(0-3)
基址24-31
GD0
长度16-19 P DPL S
type A
基址16-23
基址0-15
页式存储是基于系统存储器结构的存储 管理技术, 存储利用率高,便于系统管理, 但不易实现存储共享、保护和动态扩充。
如果把两者优点结合起来, 在分页式存储 管理的基础上实现分段式存储管理这就 是段页式存储管理,
段页式存储管理的基本原理。
1、虚地址以程序的逻辑结构划分成段,这是段页 式存储管理的段式特征。
lR/W位:读/写(Read/Write)位,R/W=1时 允许页修改;R/W=0时,不允许页修改;通常 程序区的R/W=0。
4.6.6 Pentium的保护机制
l0级为操作系统内核级。处理I/O、存储管理、 和其他关键操作。该级可使用特权指令,可访问 所有段和所有页。
l1级为系统调用处理程序级。用户程序可以通 过调用这里的过程执行系统调用,但是只有一 些特定的和受保护的过程可以被调用。
局部描述符表LDT(local descriptor table) 和 全 局 描 述 符 表 GDT(global descriptor table)。
每个进程都有一个自己的LDT,它描述 局部于每个进程的段,包括代码段、数 据段、堆栈段的基地、大小和有关控制 信息等;
系统的所有进程共享一个GDT, 它描述 系统段,包括操作系统自己的基地、大 小和有关控制信息等。
lS位为段位,当S=1时,表示当前段为应用程序;当 S=0时,表示描述符将引用内存段外的系统信息(如OS 的特别数据结构)。
ltype类型字段(3位),表示内存段类型,如可执行代码 段、只读数据段、调用门等等。
l A位为访问位,表示是否访问过内存段,为淘汰作准 备
4.6.3 虚拟存储运行模式选择
4.6.5 二级页表和页式地址转换
每个运行进程都有一个由1024个32位表项组成 的页目录(page directory),它的地址由一个 全局寄存器指出。目录中的每一个表项都指向 一个也包含1024个32位表项的页表,页表项指 向页框(块),这个方案如图4-35和图4-36所 示。线性地址被分成3个域:Dir、Page和Offset。 Dir域被作为索引在页目录找到指向正确页表 的指针;随后,Page域被作为索引在页表找到 页框的物理地址;最后,Offset被加到页框的 地址上得到需要的字节或字的物理地址。
l2级为共享库过程级。它可以被很多正在运行 的程序共享,用户程序可以调用这些过程,都 去它们的数据,但是不能修改它们。
l3级为用户程序级。它受到的保护最少。
调用不同级别的过程是允许的,但是要通 过一种被严格控制着的方法。为了执行越 级调用,CALL指令必须包含一个选择符 而不是地址,选择符指向一个称为调用门 (call gate)的描述符,由它给出被调用 过程的地址。因此要跳转到任何一个不同 级别的代码段的中间都是不可能的,必须 正式地指定入口点。
段表控制寄存器
段表始址 段表长度
段超长?
段号s 页号p 位移d
段表
页表
页框号 位移
4.6实例研究:Intel Pentium
Intel的Pentium和Pentium Pro既 可以作为分段系统,又可以作 为分页系统,也可以作为一个 段页式存储管理系统来运行
4.6.1Pentium虚拟存储器的核 心数据结构——描述符表
空间的任何位置。至此段转换己经完成。
选择符
描述符 基地址 长度
其他的域
偏移量
线性地址
是否要分页依据G控制位,若为0,说明目前运行 于分段模式,那么段转换得到的线性地址就 是物理地址并被送往存储器用于读写;因此在 分页被禁止时,就得到了一个纯的分段解决
方案,各个段的基址在它的描述符中。注意,
段允许互相覆盖,这是因为用硬件来检查所
地址转换过程如下:
l
首先根据段选择符第二位T选择是查找
LDT或GDT;
l
以段选择符索引域的值为索引,把它拷
贝进一个内部寄存器中并且它的低三位被清零,
然后LDT或GDT表的起始地址被加到它上面,
找到所要访问的段描述符。
l 检查段描述符中的P控制位,如果段不在主 存(选择符为0),就会发生一次陷入(中断)
有的段都互不重叠代价太大,完全可以通过 操作系统的软件机制加以解决。
若G控制位为1,这时以分页模式运行,那么 段转换得到的线性地址将被解释成分页模式 的虚地址,需要通过页表找到页框后才映射成 物理地址。这里真正复杂的是在32位虚地址 和4K页面的情况下,一个段可能包括多达一 百万个页。因此Pentium使用了一种两级页表 以在段较小的情况下减少页表的尺寸。
4.5.3 分段式虚拟存储系统
分段式虚拟存储系统把作业的所有分段 的副本都存放在辅助存储器中,当作业 被调度投入运行时,首先把当前需要的 一段或几段装入主存,在执行过程中访 问到不在主存的段时再把它们装入。
段式虚拟存储管理的段表扩展
段号
特征
存取权限
扩充位
标志
主存始址
限长
辅存始址
l 特征位: 00(不在内存);01(在内存); 11(共享段);
陷入和中断采用了一种和调用门类似的机 构,它们引用的也是描述符而不是地址, 这些描述符指向将被执行的特定过程。描 述符的类型域可以区分是代码段、数据段、 还是各种门。
4.7 实例研究:Linux存储管理
4.7.1 Linux的分页管理机制 在Linux中,每一个用户进程都可以访问4GB的
线性地址空间。其中从0从3GB的虚拟内存地 址是用户空间,用户进程都可以直接对其进 行访问。从3GB到4 GB的虚拟内存地址是内 核态空间,存放仅供内核态访问的代码和数 据,用户进程处于用户态时不能访问。当中 断或系统调用发生,用户进程进行模式切换 (处理器特权级别从3转为0)。
偏移量是否超出了段的结尾,如果是也会发生 一次陷入(越界中断)处理。
l 假设段在内存中并且偏移量也在范围内, 就把描述符中32位的基地址和偏移量相加形 成32位线性地址(linear address),如图4-34 所 示 。 为 了 和 只 有 24 位 基 地 址 的 保 护 模 式 (80286)以及使用16位段寄存器来描述20位 基地址的实模式(8086/8088)兼容,基址被 分成3片分布在描述符的各个位置。实际上, 基址允许各个段的起始地址在32位线性地址
允许分页时线性地址的组成
10
线性地址
Dir
10 Page
12 Offset
线性地址转换为物理地址的 过程
1024 表项
页目录 Dir
页表 Page
页架 Offset
页目录项和页表项的结构是类 似的,均为32位,其中20位是 页表位置/页架号,其余的未包
括了由硬件设置的供操作系统
使用的引用位、修改位、保护 位、和其他一些有用的位。
页目录项和页表项的结构
lD位:修改位,当该页程序修改后,应先纪 录为淘汰做准备。
lA位:(读/写)引用位,凡对程序读写均置 为已访问(accessed),淘汰时先找A=0的页面 (Windows用LRU法)。
lP位:存在位,页面在内存时,P=1。
lU/S位:用户/管理员(User/Supervisor)位, 若U/S=0,该页为一个管理员页面(OS页面), 用户不能访问。
页表分为三层: 页目录PGD、中间页目录PMD和页表PTE。
在 Pentium 计 算 机 上 它 被 简 化 成 两 层 , PGD和PMD合二为一。
l 存取权限: 00(可执行);01(可读);11(可 写);
l 扩充位: 0(固定长);1(可扩充);
l 标志位: 00(未修改);01(已修改);11(不 可移动);
否 发越界中断
是
否
S段在内存
B<S段长度
是
否
是
符合存取权限
发缺段中断
发保护中断
非法存取
S段可扩充
否 地址错
是
S段末端相邻的空
当设置G控制位1,系统运行于段页模式,此 时每个进程可有8192个段,每个段220个页, 每个页4KB,也就是说段可有232字节大小。
当设置G控制位1,把系统六个段寄存器设 置为同一个段选择符,段描述符基地址设 置为”0”,段大小设置为最大;这时系统运 行于分页模式,单段、分页,32位地址空 间模式运行。
否
闲区长度满足要求
是
形成绝对地址
移动或调 出分段
继续执行指令
硬件
操作系统
否
主存中有满足S段
长度的连续空闲区
移动或调 出分段
是 装入S段
调整S段段表及主存分配 表
重新启动指令
4.5.4段页式存储管理
段式存储是基于用户程序结构的存储管 理技术,有利于模块化程序设计,便于 段的扩充、动态链接、共享和保护,但往 往会生成段内碎片浪费存储空间;
所有进程从3GB到4 GB的虚拟内存地址 都是一样的,又相同的页目录项和页表, 对应到同样的物理内存段。Linux以此方 式让内核态进程共享代码段和数据段。 另 外 , 虚 拟 内 存 地 址 从 3GB 到 3 GB+4MB 的 一 段 和 0 到 4MB 的 一 段 是 对 应的。
Linux请求页式技术管理虚拟 内存
长度0-15
l基地址共32位(分三处合并),生成内存段的首址,源自文库上32
位偏移形成内存地址。对于286程序,基地址的24—31位不用, 恒为0;所以,286只能处理24位基址。
l长度位共20位,限定段描述符寻址的内存段的长度,注意段长 度的计量单位可以是字节或页。
lG位用于描述颗粒大小,即段长度的计量单位。G=0表示长度 以字节为单位;G=1表示长度以页为单位,在Pentium中页的长 度 是 固 定 的 , 为 4KB 。 于 是 段 的 长 度 分 别 为 220 字 节 或 2204KB=232字节。
lD位:当D=1时,为32位段;当D=0时,为16位段。
lP位表示内存段是否在物理主存中,若P=1,表示段在内存中, 若P=0,表示段不在内存中。
lDpl位(2位)表示特权级(0—3),用于保护。0为内 核级;1为系统调用级,2为共享库级,3为用户程序级。 Windows 95只用两级:0级和3级,即系统级和用户级。
2、实地址划分成位置固定、大小相等的页框(块) , 这是段页式存储管理的页式特征
3、将每一段的线性地址空间划分成与页框大小相 等的页面,于是形成了段页式存储管理的特征
段 号 (s) 段 内 页 号 (p) 4、逻辑地址形式为:
页 内 位 移 (d)
段号(s) 段内页号 (p) 页内位移(d)
对于用户来说,段式虚拟地址应该由段号s和段内 位移d’组成,操作系统内部再自动把d’解释成两 部分:段内页号p和页内位移d,也就是说,d’=p× 块长+d。
当设置G控制位0, 系统运行于分段模式,每 个进程可有213=8K(8192)个段,每个段可有 220字节大小,这种模式是为了与286兼容。
4.6.4地址转换
Pentium采用分段模式时,每一个虚地址 包括一个16位段选择符和一个32位偏移 量,不分段时,用户的虚拟内存是232=4GB;
而分段时,虚拟地址空间为2(32+14)=64TB; 物理地址空间使用32个地址位,最大有 4GB。
数据结构
段页式存储管理的数据结构包括作业表、 段表和页表三级结构。
作业表中登记了进入系统中的所有作业及 该作业段表的起始地址,
段表中至少包含这个段是否在内存,以及 该段页表的起始地址,
页表中包含了该页是否在主存(中断位)、 对应主存块号。
动态地址转换
从逻辑地址出发,先以段号s和页号p作索 引去查快表,如果找到,那么立即获得页p的 页框号p’,并与位移d一起拼装得到访问主 存的实地址,从而完成了地址转换。若查快 表失败,就要通过段表和页表来作地址转换 了,用段号s作索引,找到相应表目,由此得 到s段的页表的起始地址s’,再以p作索引得 到s段p页对应的表目,由此得到页框号p’;这 时一方面把s段p页和页框号p’置换进快表, 另一方面用p’和d生成主存的实地址,从而 完成地址转换。
4.6.2段选择符和段描述符
选择符是一个16位数,如图4-32所示。 选择符中的一位指出这个段是局部的还 是全局的,其他13位是LDT和GDT的入 口号。
13 索引
12
0=GDT / 1=LDT
特权级(0-3)
基址24-31
GD0
长度16-19 P DPL S
type A
基址16-23
基址0-15
页式存储是基于系统存储器结构的存储 管理技术, 存储利用率高,便于系统管理, 但不易实现存储共享、保护和动态扩充。
如果把两者优点结合起来, 在分页式存储 管理的基础上实现分段式存储管理这就 是段页式存储管理,
段页式存储管理的基本原理。
1、虚地址以程序的逻辑结构划分成段,这是段页 式存储管理的段式特征。
lR/W位:读/写(Read/Write)位,R/W=1时 允许页修改;R/W=0时,不允许页修改;通常 程序区的R/W=0。
4.6.6 Pentium的保护机制
l0级为操作系统内核级。处理I/O、存储管理、 和其他关键操作。该级可使用特权指令,可访问 所有段和所有页。
l1级为系统调用处理程序级。用户程序可以通 过调用这里的过程执行系统调用,但是只有一 些特定的和受保护的过程可以被调用。
局部描述符表LDT(local descriptor table) 和 全 局 描 述 符 表 GDT(global descriptor table)。
每个进程都有一个自己的LDT,它描述 局部于每个进程的段,包括代码段、数 据段、堆栈段的基地、大小和有关控制 信息等;
系统的所有进程共享一个GDT, 它描述 系统段,包括操作系统自己的基地、大 小和有关控制信息等。
lS位为段位,当S=1时,表示当前段为应用程序;当 S=0时,表示描述符将引用内存段外的系统信息(如OS 的特别数据结构)。
ltype类型字段(3位),表示内存段类型,如可执行代码 段、只读数据段、调用门等等。
l A位为访问位,表示是否访问过内存段,为淘汰作准 备
4.6.3 虚拟存储运行模式选择
4.6.5 二级页表和页式地址转换
每个运行进程都有一个由1024个32位表项组成 的页目录(page directory),它的地址由一个 全局寄存器指出。目录中的每一个表项都指向 一个也包含1024个32位表项的页表,页表项指 向页框(块),这个方案如图4-35和图4-36所 示。线性地址被分成3个域:Dir、Page和Offset。 Dir域被作为索引在页目录找到指向正确页表 的指针;随后,Page域被作为索引在页表找到 页框的物理地址;最后,Offset被加到页框的 地址上得到需要的字节或字的物理地址。
l2级为共享库过程级。它可以被很多正在运行 的程序共享,用户程序可以调用这些过程,都 去它们的数据,但是不能修改它们。
l3级为用户程序级。它受到的保护最少。
调用不同级别的过程是允许的,但是要通 过一种被严格控制着的方法。为了执行越 级调用,CALL指令必须包含一个选择符 而不是地址,选择符指向一个称为调用门 (call gate)的描述符,由它给出被调用 过程的地址。因此要跳转到任何一个不同 级别的代码段的中间都是不可能的,必须 正式地指定入口点。
段表控制寄存器
段表始址 段表长度
段超长?
段号s 页号p 位移d
段表
页表
页框号 位移
4.6实例研究:Intel Pentium
Intel的Pentium和Pentium Pro既 可以作为分段系统,又可以作 为分页系统,也可以作为一个 段页式存储管理系统来运行
4.6.1Pentium虚拟存储器的核 心数据结构——描述符表
空间的任何位置。至此段转换己经完成。
选择符
描述符 基地址 长度
其他的域
偏移量
线性地址
是否要分页依据G控制位,若为0,说明目前运行 于分段模式,那么段转换得到的线性地址就 是物理地址并被送往存储器用于读写;因此在 分页被禁止时,就得到了一个纯的分段解决
方案,各个段的基址在它的描述符中。注意,
段允许互相覆盖,这是因为用硬件来检查所
地址转换过程如下:
l
首先根据段选择符第二位T选择是查找
LDT或GDT;
l
以段选择符索引域的值为索引,把它拷
贝进一个内部寄存器中并且它的低三位被清零,
然后LDT或GDT表的起始地址被加到它上面,
找到所要访问的段描述符。
l 检查段描述符中的P控制位,如果段不在主 存(选择符为0),就会发生一次陷入(中断)
有的段都互不重叠代价太大,完全可以通过 操作系统的软件机制加以解决。
若G控制位为1,这时以分页模式运行,那么 段转换得到的线性地址将被解释成分页模式 的虚地址,需要通过页表找到页框后才映射成 物理地址。这里真正复杂的是在32位虚地址 和4K页面的情况下,一个段可能包括多达一 百万个页。因此Pentium使用了一种两级页表 以在段较小的情况下减少页表的尺寸。
4.5.3 分段式虚拟存储系统
分段式虚拟存储系统把作业的所有分段 的副本都存放在辅助存储器中,当作业 被调度投入运行时,首先把当前需要的 一段或几段装入主存,在执行过程中访 问到不在主存的段时再把它们装入。
段式虚拟存储管理的段表扩展
段号
特征
存取权限
扩充位
标志
主存始址
限长
辅存始址
l 特征位: 00(不在内存);01(在内存); 11(共享段);
陷入和中断采用了一种和调用门类似的机 构,它们引用的也是描述符而不是地址, 这些描述符指向将被执行的特定过程。描 述符的类型域可以区分是代码段、数据段、 还是各种门。
4.7 实例研究:Linux存储管理
4.7.1 Linux的分页管理机制 在Linux中,每一个用户进程都可以访问4GB的
线性地址空间。其中从0从3GB的虚拟内存地 址是用户空间,用户进程都可以直接对其进 行访问。从3GB到4 GB的虚拟内存地址是内 核态空间,存放仅供内核态访问的代码和数 据,用户进程处于用户态时不能访问。当中 断或系统调用发生,用户进程进行模式切换 (处理器特权级别从3转为0)。