技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种基于UnixV6的页式连续存储管理系统的地址映射方法  >  正文

一种基于UnixV6的页式连续存储管理系统的地址映射方法

  • 国知局
  • 2024-07-31 22:50:10

本发明属于计算机系统存储管理领域,具体涉及一种基于unix v6的页式连续存储管理系统的地址映射方法。背景技术:::1、unix v6是非常重要的操作系统,内核简洁、高效、内存开销小,。将这个操作系统移植到现代计算机平台可以为生产领域实际使用的操作系统提供有益方法借鉴。移植工程的最大困难在于系统架构。针对本发明,unix v6使用的地址映射元件与现代计算机系统使用的分页元件不同,在对时间、空间有要求的应用场合,需要调整unix v6内存管理模块,加速地址映射重建过程,缩小进程切换开销。2、unix v6系统运行在pdp-11小型机上。这种型号的计算机,分页元件引用cpu内部的2组活动页寄存器。一组映射现运行进程的用户空间,一组映射核心空间。每组活动页寄存器有8对,每一对管理一个逻辑页,包括一个页地址寄存器(par)和一个页说明寄存器(pdr);par记录逻辑页的起始物理地址,pdr登记页的长度和读写权限,参见图1。cpu切换现运行进程时,需要重写用户空间的活动页寄存器,为新选中的进程建立地址映射关系。3、实现上,unix v6内核在每个进程的进程控制块中设置了一个结构与用户空间活动页寄存器组完全相同的数据结构,相对虚实地址映射表,由uisa数组和uisd数组组成。每个数组有8个元素,uisa对标par,用来记录每个逻辑页的首地址相对于正文段首地址或可交换部分首地址的相对偏移量;uisd对标pdr,是每个页的其余属性。进程切换时,系统执行8次内存读操作将uisd数组赋值给pdr,执行8次内存读操作取出uisa,属于正文段的元素加正文段首地址,属于可交换部分的元素加可交换部分首地址,赋值给par,达到刷新活动页寄存器组为新选中进程建立地址映射关系的效果。执行上述过程的是针对pdp-11硬件高度优化的函数sureg(),配合相对虚实地址映射表,是提升unix v6内存管理系统性能的核心设计。4、x86系统使用段页式内存管理方式,一般而言分段元件废弃不用,可以作为现代分页系统的代表实施unix v6系统的代码移植工作。5、unix v6系统移植x86系统上,需要在ia32芯片上重新设计、实现mmu底层驱动。ia32的cr3寄存器中存放着页目录的起始物理地址,mmu用这个页目录进行内存管理。每个页表项(pte)编码了一个逻辑页面的重定位信息和这张页面的属性。其中page baseaddress(pba)为20位,是存放这张逻辑页面的物理页框号。pte的低12位是页保护位(prot),记录这张逻辑页面的属性和使用状态。移植后的unix v6系统,使用的pte具体结构如图2所示。6、由于ia32芯片的特殊性,维持unix v6的设计,移植后的unix v6示例系统unix v6++用内核空间中的四个固定页框建立所有现运行进程的地址映射关系。物理内存2m字节处是内核空间的页表区,起始的四个页框固定用来存放页目录,核心态页表(1页)和用户态页表(2页)。所有进程共用这四张页表来完成内核空间和用户空间的地址映射。7、实现上,移植后的unix v6系统在进程的扩展进程控制块user结构中设置了一个成员——内存描述符,相对虚实地址映射表就在其中,占据连续两个页面的空间,该空间取自页表区物理内存区域[2m+16k,4m-4k)。相对表与系统用户页表一一对应,区别在于:它的pba是相对于共享正文段或可交换部分起始地址的页面偏移量,不是实际的物理页框号。进程在切换上台、载入可执行文件、堆栈扩展时,都需要重新建立系统用户页表,主要操作包括:清空用户页表,扫描相对虚实地址映射表,为所有属于代码段的pte,pba赋值为相对表的pba加上代码段的内存起始页框号,为所有属于数据段和堆栈段的pte赋值为相对表的pba加上ppda区的内存起始页框号。从而在进程上台之后,可以正确地完成地址变换。执行上述重建页表映射操作的函数是maptopagetable,与前文的sureg()对应,是我们想要优化地址映射要关注的核心函数。8、使用相对虚实映射表的unix v6++系统存在一些问题:首先,每个进程都有一个相对虚实映射表且占据8kb的连续内核空间,页表的内存开销太大;其次,进程切换、进程创建、进程图像扩展等等,几乎所有内存管理操作都需要维护相对虚实地址映射表,内核代码复杂度高、运行开销大。更费时的是,进程切换时系统需要遍历用户页表,清空所有pte表项。好多pte清零操作都是无用的赋值,可以想办法减少这些冗杂的操作,提高进程切换速度。9、综上,移植到x86上的unix v6系统,使用相对虚实地址映射表的方法存在内存开销大、进程切换耗时长等一系列问题,亟需一种新方法进行地址映射。技术实现思路1、针对上述问题,本发明调整了unix v6内存管理策略的实现方案,给出了一种连续内存管理方式地址映射优化方法,适用于unix v6系统到x86系统的移植,可以为其它页式连续存储操作系统的地址映射和速度优化提供可参考借鉴。2、本发明技术方案:3、一、整体描述4、一种基于unix v6的页式连续存储管理系统的地址映射方法,其特征在于,不使用unix v6的相对虚实地址映射表,采用连续内存管理方式下的虚实地址映射策略进行内存管理,如下:5、(1)进程代码段和只读数据段映射至物理内存同一块区域,供执行同一个应用程序的多个进程共享;6、(2)每个cpu配置页表,登记正在执行的进程的地址映射关系;所述页表包括:系统核心页表和系统用户页表;其中系统核心页表登记操作系统内核的地址映射关系,系统用户页表登记正在执行的应用程序的地址映射关系。本发明主要涉及系统用户页表管理技术。7、(3)进程切换时需要刷新系统用户页表,为cpu重建用户空间地址映射关系。该操作由cpu的原运行进程和新选中进程共同完成,前者擦除,后者设置必要的页表项。8、相关处理如下:9、系统需要重写页表、建立新的地址映射关系时,运行进程调用maptopagetable函数;10、需要擦除系统页表中的地址映射关系时,运行进程调用clearpagetableentry函数;11、进程切换操作会先选中一个新运行进程,然后更新系统用户页表;页表更新操作执行时,原运行进程先执行clearpagetableentry函数,随后新运行进程执行maptopagetable函数。12、二、进一步说明13、进程运行时不会更改代码段和只读数据段,这两个逻辑段可与其它进程共享,将其映射至一块连续的物理内存区域,沿用unix v6的称谓,形成进程的共享正文段;数据段、bss段、用户堆和用户栈存放程序变量,是进程的私有数据区、不能与其它进程共享,将其映射至另一块连续物理内存区域,形成进程的可交换部分。该方案的优势在于减少进程图像的内存消耗,降低进程图像内存移动和换入换出操作的系统开销。14、本发明给出实现上述方案的连续内存管理方式下的虚实地址映射策略,具体如下:15、1、进程虚空间的使用细节和表示方法:16、(1)虚空间布局(用户空间):代码段、数据段、只读数据段、bss、堆各段紧贴、连续存放在低地址端,用户栈存放在高地址端。堆向高地址方向扩展,栈向低地址方向扩展,其间空闲区供二者共享。各逻辑段的长度是页面尺寸的整数倍,页面尺寸通常为4096字节。17、(2)内存描述符:用来登记虚空间逻辑段属性。段表数组section是其中的关键字段,数组中的每个元素section[i]对应用户空间中的一个逻辑段,其中,字段sectionaddress是其在虚空间中的起始地址,sectionlength是长度。18、2、进程物理空间的使用细节和表示方法:19、(1)进程控制块中登记共享正文段和可交换部分在物理内存中的起始地址和长度,沿用unix v6的称谓,正文段首地址和长度分别是x_caddr和x_size,可交换部分首地址和长度分别是p_addr和p_size。20、(2)各逻辑段在物理内存中起始地址的计算方法如下:(用段类型:起始地址表示)21、代码段:x_caddr;22、只读数据段:x_caddr+代码段长度;23、数据段:p_addr+ppda区长度;24、bss段:p_addr + 数据段长度+ppda区长度;25、堆:p_addr + 数据段长度 + bss段长度+ppda区长度;26、用户栈:p_addr+数据段长度+bss段长度+堆长度+ppda区长度。27、(3)各逻辑段在物理内存中的长度与其在虚空间中的长度sectionlength相等。28、3、建立地址映射关系的方法maptopagetable():29、使用内存描述符(而非unix v6核心数据结构相对虚实地址映射表),细粒度重写系统页表,为cpu建立新选中进程的地址映射关系,具体过程如下:(pagetable是用户页表)30、(1)计算正文段起始物理页框号,初始化物理页框计数器textcount31、textcount=x_caddr/页面尺寸32、计算可交换部分起始物理页框号,初始化物理页框计数器paddrcount33、paddrcount=(p_addr/页面尺寸)+134、(2)逐段、逐页重写系统页表pagetable中的pte,循环对每个下标为i的逻辑段执行以下操作。35、(2.1)计算该逻辑段的起始逻辑页号start和页面数量count,36、start=section[i].sectionaddress/页面尺寸37、count=section[i].sectionlength/页面尺寸38、(2.2)从start开始,连续书写count个pte,每个pte需要执行3个操作。39、(2.2.1)设置逻辑页号为start的pte,主要是4个字段,物理页框号base,读写标识位rw,访问权限标识位u/s和存在位present。其中,40、·base=物理页框计数器。代码段或只读数据段的物理页框计数器是textcount,其余逻辑段,物理页框计数器是paddrcount。41、·代码段、只读数据段没有写权限,rw为0;其余逻辑段,rw是1。42、·所有逻辑页u/s置1表示应用程序有权访问。present置1表示页在主存。43、(2.2.2)start加1。44、(2.2.3)当前使用的物理页框计数器,textcount或paddrcount加1。45、以上操作过程可以针对具体体系结构优化。46、4、删除地址映射关系的方法clearpagetableentry():47、重建地址映射关系前需要擦除页表中旧的地址映射关系,逐段、逐页重写系统用户页表pagetable中的pte。对下标为i的每个逻辑段,执行以下操作:48、(1)计算该逻辑段的起始逻辑页号start和页面数量count,49、start=section[i].sectionaddress/页面尺寸50、count=section[i].sectionlength/页面尺寸51、(2)从start开始,清空count个pte,将每个pte的present位置为0。52、5、合并只读数据段和代码段的方法:53、进一步的,将只读数据段与代码段映射至一块连续的物理空间,方法如下:54、(1)在调整以后的用户物理空间中,代码段和只读数据段映射至共享正文段,起始物理地址为x_caddr,数据段、bss段、堆段和栈段映射至可交换部分,起始物理地址为p_addr+页面尺寸。55、(2)物理空间上合并代码段和只读数据段的任务主要由可执行程序加载过程实施,与之相关的操作步骤列表如下:56、(2.1)读入可执行文件头部的段表数组,将其中各个逻辑段在虚空间中的起始地址和长度存入进程的内存描述符,字段section数组。填充每个元素的sectionaddress和sectionlength。57、(2.2)为正文段分配物理内存,长度为代码段和只读数据段的长度之和。58、(2.3)为可交换部分分配物理内存,长度为ppda区、数据段、bss段、堆和用户栈的长度之和。59、(2.4)执行maptopagetable函数,将代码段、只读数据段映射至物理内存共享正文段,数据段、bss、堆和栈映射至物理内存可交换部分。建立虚实地址映射关系,在地址空间映射层面完成只读数据段与其余逻辑段分离,与代码段合并之工作。60、(2.5)扫描可执行文件的段表数组,加载可执行文件数据,对所有逻辑段实施初始化操作。具体而言,对下标为i的逻辑段,就是写虚地址空间[section[i].sectionaddress,section[i].sectionaddress+section[i].sectionlength)中的所有内存单元。写入的值用来初始化这个逻辑段,与该逻辑段的属性相关:代码段、数据段和只读数据段是磁盘可执行文件中相对应的数据,bss段是0,堆段和栈段不写。这一步在物理空间,也就是进程的存储介质上,实现代码段内容与只读数据段内容的合并。61、6、进程切换操作:62、进程切换操作执行时需要更新系统用户页表。这个操作可以由让出cpu的原运行进程做,也可以由系统或选中的新运行进程来做。通常,新运行进程很难直接获得原运行进程的内存描述符,只能通过清0所有pte的方式对页表实施清空操作,其间很多操作不必要,会增加进程切换开销;所以,本实施例采用由原运行进程执行页表清空操作的优化策略。63、具体过程分2步:现运行进程让出cpu之前执行删除自己的地址映射关系。系统选出新运行进程后,后者写页表,为自己建立地址映射关系。64、7、改变进程虚空间时需要执行的操作65、进程执行malloc、free时,堆空间会发生变化;子程序调用时,可能会引发栈扩展操作;进程载入新的可执行文件时,exec系统调用会刷新整个用户空间。这些操作需要(1)改变进程虚空间,本发明修改内存描述符中的段表,用户堆或用户栈的sectionaddress和sectionlength字段(2)同步改变进程物理空间,保持图3所示结构,用新空间的首地址和长度更新p_addr和p_size。具体而言,如果可交换部分长度增加,按增加后的尺寸分配新物理空间,复制原进程图像至新空间,随后移动用户栈至物理空间最高端;如果长度缩小,向低地址方向移动用户栈,尺寸缩小多少,进程图像移动多少,随后释放高地址端多余空间;exec系统调用释放全部用户空间,只留ppda区,无需移动用户栈(3)重建虚实地址映射关系,即执行maptopagetable函数,根据更新后的虚空间和物理空间重写系统用户页表。若进程图像缩小,需要先执行clearpagetableentry函数。exec系统调用释放全部用户空间,无需执行clearpagetableentry函数。66、本发明有益效果:67、本发明的各个逻辑段在逻辑空间中都是连续排布的(除栈段),因此只需要根据各个逻辑段的长度就可以完成对页表项的填写,无需相对虚实地址映射表。68、本发明删除相对虚实地址映射表,内核没有进程页表的存储开销。69、本发明将代码段和只读数据段合并,在涉及到进程图像的换入和换出时,如果代码段和只读数据段被其他内存进程共享,一方面可以减少内存占用,从而提高内存空间利用率,另一方面可以减少移动所需要复制的数据量,从而提高换入和换出的效率。70、本发明的重写用户页表函数,不需要遍历两张用户页表来清空present位,可以直接定位到需要写的页表项,直接写页表项即可,极大地减少了对页表项的访问次数,进而加快了重建页表的速度。71、本发明为了适应前述的不遍历两张用户页表来清空present位的要求,选择让下台进程来清空自己所使用的页表项,这样只需要访问一部分页表项即可完成对页表的清空,同样极大地节省了清空用户页表的时间,本质上就是减少了重复或不必要的清空操作。72、本发明所采用的地址映射方式是灵活而且可拓展的,不局限于固定数量的逻辑段,可以通过较小规模的改动适应新加入的逻辑段,用同样的方法为其建立地址映射关系。73、本发明所采用的地址映射方法是普适的,可用于单核计算机系统,也可用于多核计算机系统。74、综上,本发明降低了操作系统unix v6地址映射时的内存占用以及耗时,重新安排了页表清空和重建的时机,相比于原方法在时间和空间上都有一定优势,为后续操作系统的地址映射方法提供借鉴。当前第1页12当前第1页12

本文地址:https://www.jishuxx.com/zhuanli/20240730/194895.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。