段页式虚拟存储管理
段式虚拟存储管理

学号:课程设计题目段页式虚拟存储管理学院计算机科学与技术专业班级姓名指导教师吴利军2013 年 1 月16 日课程设计任务书学生姓名:指导教师:吴利军工作单位:计算机科学与技术学院题目: 模拟设计段页式虚拟存储管理中地址转换初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解段页式存储管理的思想及相应的分配主存的过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.实现段页式存储管理中逻辑地址到物理地址的转换。
能够处理以下的情形:⑴能指定内存的大小,内存块的大小,进程的个数,每个进程的段数及段内页的个数;⑵能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。
2.设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日一、需求分析:页式管理基本原理:各个进程的虚拟空间被划分成若干个长度相等的页。
页长的划分和内存与外存之间的数据传输速度及内存大小等有关。
一般每个页长大约为1----4K,经过页划分之后,进程的虚拟地址变为页号p与页内地址w所组成。
除了将进程的虚拟空间划分为大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或者页面。
这些页面为系统中的任一进程所共享。
从而与分区管理不一样,分页管理时,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间不再连续。
操作系统-存储管理(4)段页式虚拟存储

操作系统-存储管理(4)段页式虚拟存储物理地址:⼜称绝对地址,即程序执⾏所使⽤的地址空间(处理器执⾏指令时按照物理地址进⾏)逻辑地址:⼜称相对地址,即⽤户编程所使⽤的地址空间,从0开始编号,有两种形式:⼀维逻辑地址(地址)⼆维逻辑地址(段号:段内地址)主存储器空间的分配与去配:分配:进程装⼊主存时,存储管理软件进⾏具体的主存分配操作,并设置⼀个表格记录主存空间的分配情况去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占⽤的全部或者部分存储空间,调整主存分配表信息主存储器空间的共享:多个进程共享主存储器资源:多道程序设计技术使若⼲个程序同时进⼊主存储器,各⾃占⽤⼀定数量的存储空间,共同使⽤⼀个主存储器多个进程共享主存储器的某些区域:若⼲个协作进程有共同的主存程序块或者主存数据块多道程序设计需要复⽤主存:按照分区复⽤:主存划分为多个固定/可变尺⼨的分区,⼀个程序/程序段占⽤⼀个分区按照页架复⽤:主存划分成多个固定⼤⼩的页架,⼀个程序/程序段占⽤多个页架装载程序/加载器(loader)把可执⾏程序装⼊内存的⽅式有:绝对装载可重定位装载动态运⾏时装载地址转换:⼜称重定位,即把可执⾏程序逻辑地址转换成绝对地址,可分为:静态地址重定位:由装载程序实现装载代码模块的加载和地址转换(⽆需硬件⽀持),把它装⼊分配给进程的内存指定区域,其中所有指令代码和数据的逻辑地址在执⾏前⼀次全部修改为内存物理地址。
早期单任务单⽤户OS使⽤。
动态地址重地位:由装载程序实现装载代码模块的加载,把它装⼊进程的内存在指定区域,但对链接程序处理过的应⽤程序逻辑地址不做修改,程序内存起始地址被置⼊重定位寄存器(基址寄存器)。
程序执⾏过程中每当CPU访问程序和数据引⽤内存地址时,由硬件地址转换机构截取此逻辑地址并加上重定位寄存器的值。
运⾏时链接地址重定位存储保护:为避免主存中的多个进程相互⼲扰,必须对主存中的程序和数据进⾏保护。
分段式虚拟存储管理

数据结构
段页式存储管理的数据结构包括作业表、 段表和页表三级结构。
作业表中登记了进入系统中的所有作业及 该作业段表的起始地址,
段表中至少包含这个段是否在内存,以及 该段页表的起始地址,
页表中包含了该页是否在主存(中断位)、 对应主存块号。
动态地址转换
从逻辑地址出发,先以段号s和页号p作索 引去查快表,如果找到,那么立即获得页p的 页框号p’,并与位移d一起拼装得到访问主 存的实地址,从而完成了地址转换。若查快 表失败,就要通过段表和页表来作地址转换 了,用段号s作索引,找到相应表目,由此得 到s段的页表的起始地址s’,再以p作索引得 到s段p页对应的表目,由此得到页框号p’;这 时一方面把s段p页和页框号p’置换进快表, 另一方面用p’和d生成主存的实地址,从而 完成地址转换。
长度0-15
l基地址共32位(分三处合并),生成内存段的首址,加上32
位偏移形成内存地址。对于286程序,基地址的24—31位不用, 恒为0;所以,286只能处理24位基址。
l长度位共20位,限定段描述符寻址的内存段的长度,注意段长 度的计量单位可以是字节或页。
lG位用于描述颗粒大小,即段长度的计量单位。G=0表示长度 以字节为单位;G=1表示长度以页为单位,在Pentium中页的长 度 是 固 定 的 , 为 4KB 。 于 是 段 的 长 度 分 别 为 220 字 节 或 2204KB=232字节。
l2级为共享库过程级。它可以被很多正在运行 的程序共享,用户程序可以调用这些过程,都 去它们的数据,但是不能修改它们。
l3级为用户程序级。它受到的保护最少。
调用不同级别的过程是允许的,但是要通 过一种被严格控制着的方法。为了执行越 级调用,CALL指令必须包含一个选择符 而不是地址,选择符指向一个称为调用门 (call gate)的描述符,由它给出被调用 过程的地址。因此要跳转到任何一个不同 级别的代码段的中间都是不可能的,必须 正式地指定入口点。
基本分页存储管理方式和虚拟存储方式

基本分页存储管理方式和虚拟存储方式
基本分页存储管理方式是一种将主存储器划分为固定大小的页框和相同大小的页的方法。
程序在执行时被划分为固定大小的页,而主存储器划分为相同大小的页框。
当程序执行需要的某个页时,该页从辅助存储器加载到一个空闲的页框中,程序就可以继续执行。
虚拟存储方式是一种将程序按逻辑地址划分为多个大小固定的逻辑块,而主存储器被划分为固定大小的块。
逻辑块的大小可以不同于物理块的大小。
当程序执行需要的某个逻辑块时,该块可以从辅助存储器加载到主存储器中的任意一个空闲块中。
区别:
1.分页方式划分的是主存储器中的页框和程序的页,而虚拟存储方式划分的是主存储器中的块和程序的逻辑块。
2.分页方式中,页的大小是固定的,而虚拟存储方式中,逻辑块的大小可以不同于物理块的大小。
3.分页方式中,程序执行时需要的页会被加载到主存储器中的任意一个空闲页框中,而虚拟存储方式中,逻辑块会被加载到主存储器中的任意一个空闲块中。
综上所述,基本分页存储管理方式和虚拟存储方式都是一种将程序按组块管理的方法,但在具体的实现细节和块的大小上有所不同。
linux段页机制

linux段页机制
Linux操作系统中的段页机制是一种内存管理机制,用于将物
理内存映射到进程的虚拟地址空间。
段页机制结合了段式存储管理
和页式存储管理两种技术,以提供更灵活和高效的内存管理方式。
在Linux中,段页机制的实现主要包括以下几个方面:
1. 段式存储管理,Linux使用段式存储管理来管理进程的地址
空间。
每个进程都有自己的地址空间,被划分为多个段,如代码段、数据段、堆栈段等。
每个段都有自己的基地址和限长,这样可以更
灵活地管理内存空间。
2. 页式存储管理,Linux使用页式存储管理来将进程的虚拟地
址空间映射到物理内存。
虚拟地址空间被划分为固定大小的页,通
常为4KB。
操作系统负责将进程的页映射到物理内存中,并进行页
面置换等管理操作。
3. 虚拟内存管理,Linux通过段页机制实现了虚拟内存管理,
允许多个进程共享物理内存,并提供了一种虚拟内存空间,使得每
个进程都认为自己拥有整个地址空间。
4. 内存保护,段页机制可以实现内存保护,通过设置段的访问权限和页的访问权限,可以保护进程的地址空间不被非法访问。
总的来说,Linux中的段页机制通过段式存储管理和页式存储管理相结合,实现了对进程地址空间的灵活管理和对物理内存的高效利用,从而提高了系统的性能和安全性。
分页、分段与段页式存储

分页、分段与段页式存储⼀. 分页存储管理1.基本思想⽤户程序的地址空间被划分成若⼲固定⼤⼩的区域,称为“页”,相应地,内存空间分成若⼲个物理块,页和块的⼤⼩相等。
可将⽤户程序的任⼀页放在内存的任⼀块中,实现了离散分配。
1) 等分内存页式存储管理将内存空间划分成等长的若⼲物理块,成为物理页⾯也成为物理块,每个物理块的⼤⼩⼀般取2的整数幂。
内存的所有物理块从0开始编号,称作物理页号。
2) 逻辑地址系统将程序的逻辑空间按照同样⼤⼩也划分成若⼲页⾯,称为逻辑页⾯也称为页。
程序的各个逻辑页⾯从0开始依次编号,称作逻辑页号或相对页号。
每个页⾯内从0开始编址,称为页内地址。
程序中的逻辑地址由两部分组成:页号P和页内位移量W。
在执⾏⼀个程序之前,内存管理器需要的准备⼯作:1) 确定程序的页数2) 在主存中留出⾜够的空闲页⾯3) 将程序的所有页⾯载⼊主存⾥。
(静态的分页,页⾯⽆需连续)2. 分页存储管理的地址机构页号x位,每个作业最多2的x次⽅页,页内位移量的位数表⽰页的⼤⼩,若页内位移量y位,则2的y次⽅,即页的⼤⼩,页内地址从000000000000开始到2的y次⽅若给定⼀个逻辑地址为A,页⾯⼤⼩为L,则页号P=INT[A/L],页内地址W=A MOD L3.内存分配相邻的页⾯在内存中不⼀定相邻,即分配给程序的内存块之间不⼀定连续。
对程序地址空间的分页是系统⾃动进⾏的,即对⽤户是透明的。
由于页⾯尺⼨为2的整数次幂,故相对地址中的⾼位部分即为页号,低位部分为页内地址。
4. 页表分页系统中,允许将进程的每⼀页离散地存储在内存的任⼀物理块中,为了能在内存中找到每个页⾯对应的物理块,系统为每个进程建⽴⼀张页表,⽤于记录进程逻辑页⾯与内存物理页⾯之间的对应关系。
页表的作⽤是实现从页号到物理块号的地址映射,地址空间有多少页,该页表⾥就登记多少⾏,且按逻辑页的顺序排列,形如:5. 地址变换页式虚拟存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如图7-3所⽰。
段页式存储管理

近年来,随着计算机技术的快速发展,段页式存储管理 也在不断优化和改进。在国内,众多高校和研究机构在 段页式存储管理方面进行了深入研究,取得了一系列重 要成果。在国际上,各国也对段页式存储管理进行了广 泛研究,提出了一些新的存储管理技术和方法
段页式存储管理
段页式存储管理的不足之处
尽管段页式存储管理在内存管理方面具有显著优势,但仍存在一些不足之处 首先,内存碎片问题仍然存在,尽管段页式存储管理通过固定大小的段和页来管理内存, 减少了内存碎片,但在内存分配和回收的过程中,仍然可能产生内存碎片 内存碎片会导致内存利用率下降,影响系统性能 其次,页表的开销较大,段页式存储管理需要维护段表和页表,这会增加系统的开销 尤其是在大型程序中,页表的大小可能会很大,导致页表查找的开销增加,影响系统性 能 此外,段页式存储管理对于大型程序的内存管理效率较低 因为大型程序需要频繁地在内存和磁盘之间进行页面调度,段页式存储管理的效率可能 会降低
段页式存储管理是操作系统内存管理的重要组成部分,主要负责程序的逻辑地址到物理地 址的映射。它通过将内存划分为固定大小的段和页,分别管理程序的逻辑结构和物理结构 ,实现了内存的高效利用和程序的顺利运行。具体来说,段页式存储管理具有以下几个作 用 (1)内存分配:为程序提供内存空间,确保程序能够顺利运行 (2)内存回收:当程序执行完成后,回收内存空间,以便其他程序使用 (3)地址转换:将程序的逻辑地址转换为物理地址,使程序能够访问到正确的内存单 元 (4)内存保护:通过设置内存访问权限,保护程序和数据的安全
段页式存储管理
当程序访问内存时,通过页表 将逻辑地址转换为对应的物理 地址
其中,段号用于查找段表,页 内地址用于查找页表
段页式存储管理通过将逻辑地 址分为段号和页内地址,分别 查找段表和页表,将逻辑地址 转换为物理地址
页式、段式、段页式存储优缺点总结

页式、段式、段页式存储优缺点总结内存管理⽅式主要分为:页式管理、段式管理和段页式管理。
页式管理的基本原理是将各进程的虚拟空间划分为若⼲个长度相等的页。
把内存空间按页的⼤⼩划分为⽚或者页⾯,然后把页式虚拟地址与内存地址建⽴⼀⼀对应的页表,并⽤相应的硬件地址转换机构来解决离散地址变换问题。
页式管理采⽤请求调页和预调页技术来实现内外存存储器的统⼀管理。
优点:没有外碎⽚,每个内碎⽚不超过页的⼤⼩。
缺点:程序全部装⼊内存,要求有相应的硬件⽀持,如地址变换机构缺页中断的产⽣和选择淘汰页⾯等都要求有相应的硬件⽀持。
增加了机器成本和系统开销。
段式管理的基本思想是把程序按内容或过程函数关系分成段,每段有⾃⼰的名字。
⼀个⽤户作业或者进程所包含的段对应⼀个⼆维线性虚拟空间,也就是⼀个⼆维虚拟存储器。
段式管理程序以段为单位分配内存,然后通过地址映射机构把段式虚拟地址转换为实际内存物理地址。
优点:可以分别编写和编译,可以针对不同类型的段采取不同的保护,可以按段为单位来进⾏共享,包括通过动态链接进⾏代码共享。
缺点:会产⽣碎⽚。
段页式管理,系统必须为每个作业或者进程建⽴⼀张段表以管理内存分配与释放、缺段处理等。
另外由于⼀个段⼜被划分为若⼲个页,每个段必须建⽴⼀张页表以把段中的虚页变换为内存中的实际页⾯。
显然与页式管理时相同,页表也要有相应的实现缺页中断处理和页⾯保护等功能的表项。
段页式管理是段式管理和页式管理相结合⽽成,具有两者的优点。
由于管理软件的增加,复杂性和开销也增加。
另外需要的硬件以及占⽤的内存也有所增加,使得执⾏速度下降。
————————————————————————————————————————————————⾸先看⼀下“基本的存储分配⽅式”种类:1. 离散分配⽅式的出现 由于连续分配⽅式会形成许多内存碎⽚,虽可通过“紧凑”功能将碎⽚合并,但会付出很⼤开销。
于是出现离散分配⽅式:将⼀个进程直接分散地装⼊到许多不相邻的内存分区中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计题目段页式虚拟存储管理学院计算机科学与技术专业班级姓名指导教师吴利军2013年1月16日课程设计任务书学生姓名:指导教师:吴利军工作单位:计算机科学与技术学院题目: 模拟设计段页式虚拟存储管理中地址转换初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解段页式存储管理的思想及相应的分配主存的过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.实现段页式存储管理中逻辑地址到物理地址的转换。
能够处理以下的情形:⑴能指定内存的大小,内存块的大小,进程的个数,每个进程的段数及段内页的个数;⑵能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。
2.设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日一、需求分析:页式管理基本原理:各个进程的虚拟空间被划分成若干个长度相等的页。
页长的划分和内存与外存之间的数据传输速度及内存大小等有关。
一般每个页长大约为1----4K,经过页划分之后,进程的虚拟地址变为页号p与页内地址w所组成。
除了将进程的虚拟空间划分为大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或者页面。
这些页面为系统中的任一进程所共享。
从而与分区管理不一样,分页管理时,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间不再连续。
第一是实现了内存中碎片的减少,因为任意碎片都会小于一个页面。
第二是实现了由连续存储到非连续存储的这个飞跃,为在内存中局部地、动态地存储那些反复执行或即将执行的程序和数据段打下了基础。
怎样由页式虚拟地址转变为内存页面物理地址页式管理把页式虚拟地址与内存页面物理地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。
静态页面管理:静态页面管理方法是在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面,并通过页表和硬件地址变换机构实现虚拟地址到内存物理地址的地址映射。
1、内存页面的分配与回收静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。
系统依靠存储页面表、请求页面表以及页表来完成内存的分配。
(1)页表最简单的页表由页号与页面号组成,页表在内存中占有一块固定的存储区。
页表的大小有进程或作业的长度决定。
每个进程至少要拥有一个页表。
(2)请求表用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置。
系统必须知道每个作业或进程的页表起始地址和长度,以进行内存的分配和地址变换,另外请求表中还应包括每个作业或进程所要求的页面数。
(3)存储页面存储页面表也是整个系统一张,存储页面表指出内存各个页面是否已被分配出去,以及未被分配页面总数。
存储页面表也有两种构成方法,一种是在内存中划分一块固定区域,每个单元的每个比特代表一个页面,如果该页面已被分配,则对应比特位置置1,否则置0。
另一种方法空闲页面链,不占内存空间。
2、分配算法3、地址变换在程序执行过程中,执行的是虚拟空间中的代码,代码中的指令是相对于虚拟空间的,需要到内存的实际空间中寻找对应的要执行的指令。
静态页式管理的缺陷:虽然解决了分区管理时的碎片问题,但是由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,改作业或进程只好等待。
而且,作业或进程的大小仍受内存可用空间的限制。
动态页式管理:动态页式管理是在静态页式管理的基础上发展起来的。
它分为请求页式管理和与调入页式管理(调入方式上)。
请求页式管理和预调入页式管理在作业或进程开始执行之前都不把作业或进程的程序段和数据段一次性的调入内存,而是只装入被认为是经常反复执行和调用的工作区部分。
其他部分都在执行过程中动态的装入。
请求式页式管理:当需要执行某条指令或某些数据时而又发现他不在内存中时,从而发生缺页中断,系统将相应的页面调入内存。
预调入:系统对于那些在外存中的页进行调入顺序计算,估计出这些页中指令和数据的执行和被访问的顺序,并按此顺序将他们顺次调入和调出内存。
请求页式管理的地址变换与静态页式相同,也是通过页表查出相应的页面号,由页面号与页内相对地址相加而得到实际物理地址。
由于只有进程或程序的部分存在内存中因此怎样发现这些不在内存中的虚页以及怎样处理这种情况是必须解决的两个基本问题。
怎样发现这些不在内存中的虚页:扩充页表的方法。
即与每个虚页号相对应,除了页面号之外,再增设该页是否在内存中的中断位以及该页在外存中的副本起始地址。
(1)采用何种方法将所缺的页调入内存。
(2)如果内存中没有空闲页面时,把调进来的页面放在什么地方。
即采用什么策略淘汰已占据内存的页。
还有就是如果内存中的也被淘汰,但该页被修改过,显然该页应当被重新写到外存加以保存。
所以还要增加一项记录是否该页已经被改变。
常见的置换算法:(1)随机淘汰(2)轮转法和先进先出法(3)最近最久未使用内存保护:页式管理提供两种方式的内存保护:一是:地址越界保护。
二是:通过页表控制对内存信息的存取操作方式以提供保护。
地址越界保护:由地址变换机构中的控制存储器的值——页表长度和所要访问的虚地址相比较来完成。
存取控制保护的实现则是在页表中增加相应的保护位即可。
段式管理:分区式管理和页式管理时的进程的地址空间结构都是线性的,这要求对源程序进行编译连接时,把源程序中的主程序、子程序、数据区等按线性空间的一维地址顺序排列起来。
共享子程序和数据变得很困难,再者从链接的角度来看,分区管理和页式管理只能采用静态链接。
段式存储管理是基于为用户提供一个方便的灵活的程序设计环境而提出来的。
段式管理的基本思想是:把程序按内容或过程(函数)关系分成段,每段都有自己的名字。
一个用户进程或作业所包含的段对应于一个二维线性虚拟空间,也就是二维虚拟存储器。
段式管理程序以段为单位分配内存,然后通过地址映射机构把段式虚拟地址转换成实际的内存物理地址。
和页式管理一样,段式管理也采用只把那些经常访问的段驻留内存,而把那些在将来一段时间内不被访问的段放在外存,待需要时自动调入的方法实现二维虚拟存储器。
段式管理把一个进程的虚拟空间设计成二维结构,即段号s与段内相对地址w。
与页式管理不一样的是,页式管理中,被划分的页号按顺序编号递增排列,属一维空间,而段式管理中段号与段号之间无顺序关系。
另外段的划分也不像页的划分那样具有相同的页长,段的长度是不固定的。
每个段定义一组逻辑上完整的程序或数据。
例如,一个进程中的程序和数据可划分为主程序段、子程序段、数据段与工作区段。
每个段是一个首地址为零的、连续的一维线性空间。
根据需要段长可以动态的增长。
对端式虚拟空间地址的访问包括两个部分:段名和段内地址。
段式管理中以端为单位分配内存,每段分配一个连续的内存区,由于各段长度不等,所以这些存储区的大小不一,而且统一进程所包含的各段之间不要求连续。
段式管理的内存分配与释放在作业或进程的执行过程中动态进行。
首先,段式管理程序为一个准备进入内存准备执行的进程或作业分配部分内存,以作为该进程的工作区和放置即将执行的程序段。
随着进程的执行,进程根据需要随时申请调入新段和释放老段。
进程对于内存区的申请和释放可分为两种情况。
一种是当进程要求调入某一段时,内存中有足够的空闲区满足该段的内存要求。
另一种是内存中没有足够的空闲区。
对于第一种情况,系统要用相应的表格或数据结构来管理内存空闲区,以便对用户进程或作业的有关程序段进行内存分配和回收。
事实上,可以采用和动态分区式管理相同的空闲区管理方式。
即把内存各空闲区按物理地址从低到高排列或按空闲区的大小从小到大或从大到小排列。
与这几种空闲区自由链相对应,分区式管理时所用的几种分配算法:最先适应算法、最佳适应算法、最坏适应法都可以用来进行空闲区分配。
当然分区式内存管理时用到的内存回收方法也可以用在段式管理中。
另一种内存管理的分配与回收方法是在内存中没有足够的空闲区满足调入段的内存时使用的。
这时段式管理程序根据给定的置换算法淘汰内存中在今后一段时间内不再被CPU 访问的段,也就是淘汰那些访问率最低的段。
不过任何一个段的长度都不允许超过内存的可用区长度。
除了段的初始分配之外,段的动态分配是在CPU所要访问的指令和数据不在内存时产生缺页中断的情况下发生的。
因此段的淘汰或置换算法实际上是缺页中断处理过程的一部分。
段式管理的地址变换:由于段式管理只存放部分用户信息副本在内存,而大部分信息在外存中,这必然引起CPU访问内存时发成所访问的段不在内存中的情况,CPU如何感知所要访问的段不在内存中而启动中断处理程序呢还有,段式虚拟地址属于一个二维的虚拟空间。
一个二维空间虚拟地址怎样变为一个一维的线性物理地址呢。
(1)段表(2)段式管理程序在进行初始内存分配之前,首先根据用户要求的内存大小为一个作业或一个进程建立一个段表,以实现动态地址变换和缺页中断处理及存储保护等。
段式管理是通过段表来进行内存管理的。
(3)段号与用户指定的段名一一对应,始址和长度分别表示该段在内存或外存的物理地址和实际长度。
存取方式是用来对该段进行存取保护的。
只有处理机状态字中的存取控制位与段表中的存取方式一致时才能访问该段。
内外栏是指该段现在存储在外存还是内存中。
如果如果该栏目指出所访问段在外存的话,则发生缺页中断。
而访问位则是根据淘汰算法的需要而设的。
(4)(5)动态地址变换一般在内存中给出一块固定的区域放置段表。
当某进程开始执行的时候,管理程序首先把该进程的段表始址放入段表地址寄存器。
通过访问段表寄存器,管理程序得到该进程段表始址从而可以开始访问段表。
然后由虚拟地址中的段号s为索引,查段表。
若该段在内存中,则判断其存取方式是否有错。
如果存取方式正确,则从段表相应表目中查出该段在内存中的起始地址,并将其和段内相对地址w相加,从而得到实际内存地址。
如果该段不在内存,则产生缺页中断将CPU控制权交给内存分配程序。
内存分配程序首先检查空闲区链,以找到足够长度的空闲区来装入所需要的段。
如果可用的空闲区总数小于所要求的段长,检查段表中的访问位,以淘汰那些访问概率低的段并将所需要的段调入。