计算机操作系统(第四版)第四章分页与分段存储管理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
逻辑地址由段号(名)和段内地址两部分组成。在该地 址结构中,允许一个作业最多有 64 K 个段,每个段的最大长 度为64 KB。
作业的分段结构
0 主程序段 ... 调用[X]段入口E „ 调用[Y]段入口F „ 访问A[116] ... p 子程序段[X] 数组A 0 E:„ „ 116 n 子程序段[Y] 0 F:„ „ I m 0 „ „ 工作区段 „ „
页表寄存器 页表长度 页表始址 相对地址(有效逻辑地址)
页号
页内地址
物理地址(绝对地址) 块号 块内地址
基本的地址变换机构
越界中断 页表寄存器 页表始址 + 页表长度 > 逻辑地址L 页号(3) 页内地址
页号 0 1 2 3
块号 1
b 物理地址 页表
图 4-12 分页系统的地址变换机构
绝对地址=块号×块长+页内地址 页表寄存器 页表长度 页表始址 3 0 相对地址 2
(4)分页与分段的区别
相似之处:
都采用离散分配的主存的方式; 都需要通过地址映射机构来实现地址变换。
不同之处: (1)分页是信息的物理单位,是系统管理的需要 而不是用户的需要;而分段则是信息的逻辑单位, 它含有一组意义相对完整的信息,是为了更好的满 足用户的需要。 (2)页的大小固定且由系统决定;而段的长度却 不固定,由用户所编写的程序决定。 (3)分页式作业的地址空间是一维的;而分段式 作业地址空间是二维的。 (4)分页的优点体现在内存空间的管理上,而分 段的优点体现在地址空间的管理上。
页
页 号
表
块 号
页表:由页号和块号组成,指出逻辑地址中页号与
主存中块号的对应关系。
页号---进程地址空间的页序号
块号---内存空间的页面序号
页表
用户程序 0页 1页 2页 3页 4页 5页
…
页表 页号 块号 0 2 1 3 2 6 3 8 4 9 5
… …
内存 0 1 2 3 4 5 6 7 8 9 10
页号
页内地址
+
页号 块号 页号 块号
0 1 2
2 4 5
输 入 寄 存 器
0 1 2 快表
2 4 5 块号 块内地址
页表(慢表)
物理地址
例2:设有一页式存储管理系统,已知页面大小
为1024字节,试将逻辑地址1011转化为相应的物 理地址。
页号 0 1 2 块号 2 3 1 1)逻辑地址--有效地 址 页号=INT[1011/1024] =0 页内地址=1011 MOD 1024=1011 2)查页表得到块号为2 3)物理地址= 2×1024+1011=3059
n页
图 4-11 页表的作用
地址变换(映射)机构
1 .基本的地址变换机构 基本任务:是利用页表把用户程序中的逻辑地址变换成内存中 的物理地址,用户程序中的页号 内存中的物理块号 实现方式:在系统中设置页表寄存器,用来存放页表的始址和 页表的长度。在进程未执行时,每个进程对应的页表的始址 和长度存放在进程的PCB中,当该进程被调度时,就将它们 装入页表寄存器。 在进行地址变换时,系统将页号与页表长度进行比较, 如果页号大于或等于页表寄存器中的页表长度,则访问越界, 产生越界中断。如未出现越界,则根据页表寄存器中的页表 始址和页号计算出该页在页表项中的位置,得到该页的物理 块号,将此物理块号装入物理地址寄存器中。与此同时,将 有效地址(逻辑地址)寄存器中页内地址直接装入物理地址 寄存器的块内地址字段中,这样便完成了从逻辑地址到物理 地址的变换。
页号 块号 0 6 1 7 4 5 5 10
快表
页表可以存放在主存里,这样取一个数据或指令至 少要访问主存两次,第一次按页号读出页表中对应 的块号,第二次按计算出来的物理地址进行读/写, 这样降低了存取速度。 为了提高存取速度,通常都设置一个专用的高速缓 冲寄存器,用来存放页表的一部分。存放在高速存 储器中的页表称为快表,这种高速存储器称联想寄 存器(associative memory)。 它的存取时间是小于主存的,但造价高,一般都是 小容量的。
3.地址变换机构
段表寄存器
段表始址 段表长度 TL
越界中断 ﹥
逻辑地址
段号S 1 位移量w 100
段号 0 1 2 3
段长SL 基址 15K 7K 8K 10K 40K 80K 120K 150K
物理地址 80k+100
物理地址:段的基址+段内地址(位移量)
为了实现从逻辑地址到物理地址的变换功能,系统 中设置了段表寄存器,用于存放段表始址和段表长 度。在进行地址变换时,系统将逻辑地址中的段号S 与段表长度TL进行比较。若 S≥TL,表示段号太大, 访问越界,于是产生越界中断信号;若未越界,则 根据段表的始址和该段的段号,计算出该段对应段 表项的位置,从中读出该段在内存中的起始地址, 然后再检查段内地址d是否超过该段的段长SL。若超 过,即 d≥SL,同样发出越界中断信号;若未越界, 则将该段的基址与段内地址w相加,得到要访问的内 存物理地址。
分段存储管理
(1)分段存储管理方式的引入
1.便于编程 通常用户常常把自己的作业按照逻辑关系划分成若干个 段,每个段都有自己的名字,且都从零开始编址,这样,用 户程序再执行中可用段名和段内地址进行访问。例如: LOAD 1,[A] | <D> 这条指令的含义是将分段A中的D单元内 的值读入寄存器1。 2.信息共享 在实现程序和数据的共享时,常常以信息的逻辑单位为 基础,而分页系统中的每一页只是存放信息的物理单位,其 本身没有完整的意义,因而不便于实现信息的共享,而段却 是信息的逻辑单位,有利于信息的共享。
3.信息保护 信息保护是对相对完整意义的逻辑单位(段)进行保护。 4.动态链接 通常一个源程序经过编译后所形成的若干个目标程序, 还需再经过链接,形成可执行代码后才能运行,这种在装入 时进行的链接称为静态链接。动态链接是指在作业运行之前, 并不把几个目标程序段都链接起来,而是先将主程序对应的 目标程序装入内存并启动运行,当运行过程中又需要调用某 段时,再将该段(目标程序)调入内存并链接起来。所以, 动态链接是以段为基础的。 5.动态增长 在实际系统中,往往有些数据段会不断地增长,而事先 却无法知道数据段会增长到多大,分段存储管理方式可以较 好地解决这个问题。
页号
452
页内地址
OS
物理地址 页号 0 1 2
页表
块号 2 3 8
8
452
8644
1024*8+452=8644
例:设块大小为32,利用下面的页表,将逻 辑地址140变换为物理地址
1)逻辑地址--有效地址 页号=INT[140/32]=4 页内地址=140 MOD 32=12 2)查页表得到块号为5 3)物理地址=5×32+12=172
段号(S)
段内地址(W)
以段为单位进行主存分配,每一个段在主存中占有连 续的空间,但各个段之间可以离散的存放在主存不同区域 中。
2.段表 在分段式存储管理系统中,为每个段分配一个连 续的分区,而进程中的各个段可以离散地分配到内 存中不同的分区中。在系统中为每个进程建立一张 段映射表,简称为“段表”。每个段在表中占有一 表项,在其中记录了该段在内存中的起始地址(又 称为“基址”)和段的长度,如下图所示。进程在 执行中,通过查段表来找到每个段所对应的内存区。 可见,段表实现了从逻辑段到物理内存区的映射。
作业按页分散存放
分配存储空间时,根据作业的长度确定它的 页面数。一个作业有多少页,在它装入主存 时就给它分配多少块主存空间。这些主存储 块可以是不相邻的。 一个大的作业可以分成很多小块存储空间, 充分利用了主存空间,提高了系统效率。
分页式的地址结构(页表)
采用分页式存储分配时,逻辑地址是连续的, 用户在编制程序时仍只须使用顺序的地址, 而不必考虑如何去分页。由地址结构自然就 决定了页面的大小,也就决定了主存分块的 大小。
例:系统页面大小为1KB,设A=2170B, 则P=2,W=122
注:通常页面大小是2的幂,且常在512B~8KB
3.页表 在将进程的每一页离散地分配到内存的多个 物理块中后,系统应能保证能在内存中找到每个 页面所对应的物理块。为此,系统为每个进程建 立了一张页面映射表,简称页表。每个页在页表 中占一个表项,记录该页在内存中对应的物理块 号。进程在执行时,通过查找页表,就可以找到 每页所对应的物理块号。 可见,页表的作用是实现从页号到物理块号 的地址映射。
基本分页存储管理方式
基本原理 存储空间的分配与去配 页表与地址转换 快表 页的共享与保护
基本原理
分页存储管理是解决存储零头的一种方法。 动态重定位是解决存储器零头问题的一种途径, 但要移动大量信息花去不少处理机时间,代价比较高, 这是因为这种分配要求把作业必须安置在一连续存 储区内的缘故,而分页存储管理正是要避开这种连续 性要求。分页存储管理允许将一个进程直接分散地 装入到许多不相邻接的分区中,则无须再进行“紧 凑”。基于这一思想产生了离散分配方式。 分页式存储管理将主存分成大小相等的许多区, 每个区称为一块,与此对应,编制程序的逻辑地址 分成页,页的大小与块的大小相等。分页存储器的 逻辑地址由两部分组成:页号和页内地址。(物理 分区,逻辑分页)
(3)信息共享
段是信息的逻辑单位,因此分段系统的一个突出的优点是 易于实现段的共享。即允许若干个进程共享一个或多个段, 而且对段的保护也十分简单。在分页系统中,虽然也能实 现程序和数据的共享,但远不如分段系统来得方便。分段 系统中,每个进程的段表中设置一个段表项。下页图是分 段系统中共享 editor编辑程序的示意图。 在实现段共享时,需要用到可重入代码(Reentrant Code) 又称为“纯代码”(Pure Code)。它是一种允许多个进程 同时访问的代码,是一种不允许任何进程对其进行修改的 代码。但在每个进程中,配以局部数据区,将在执行中可 能改变的部分,拷贝到该数据区,这样,程序在执行时, 只对该数据区(属于该进程私有)中的内容进行修改,而不 去改变共享的代码,这时的可共享代码即成为可重入代码。
(2)分段系统的基本原理
1.分段 在分段存储管理方式中,作业的地址空间被划分为若干个 段,每个段是一组完整的逻辑信息,如有主程序段、子程序 段、数据段及堆栈段等,每个段都有自己的名字,都是从零 开始编址的一段连续的地址空间,各段长度是不等的。分段 系统的地址结构如下图所示: 31 段 号 (s) 16 15 段 内 地 址(w) 0
31 页号P 12 11 页内地址W 0
图中地址长度为32位,其中0~11位为页内地址, 12 ~ 31位为页号,那么块(页)的大小为212=4KB;逻 辑地址有220=1M页。
思考题?
若给定一个逻辑地址空间中的地址为A,页面 大小为L,则页号P和页内地址W如何计算? P=INT[A/L] W=[A]MOD L
当进程访问一页时,系统将页号与快表 中的所有项进行并行比较。若访问的页 在快表中,即可立即进行地址转换。 当被访问的页不在快表中时,就要将由 慢表找到的内存块号与虚页号填入快表 中,若快表已满,则置换其中访问位为0 的一项。
具有快表的地址变换机构
页表寄存器
越界中断
逻辑地址
页表始址
页表长度
>
进程1 ed 1 ed 2 ed 4 0 d ata 1 d ata 10 进程 2 ed 1 ed 2 ed 4 0 d ata 1 d ata 10
页表 21 22
主存 0
60 61
ed 1 ed 2
21 22 60 61 70 71 80
70 页表 21 22
ed 4 0 d ata 1 d ata 10 d ata 1 d ata 10
作业空间 (MAIN)=0 0 15K (X)=1 0 7K (D)=2 0 8K (S)=3 0 10K
段 表 内存空间 0
段号 段长 基址 0 15K 40K 1 7K 80K
2 3
8K 120K
40k: (MAIN)=0 15K
80k:
10K 150K
Biblioteka Baidu
(X)=1, 7K 120k: (D)=2, 8K 150k: (S)=3, 10K
图 4 18 分 页 系 统 中 共 享 的 示 意 图
-
… … … …
… … … …
60 71
… … …
editor