一种cpu中缓存的用户态分配方法和系统的制作方法

文档序号:8472906阅读:343来源:国知局
一种cpu中缓存的用户态分配方法和系统的制作方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别是涉及一种中央处理器(Central ProcessingUnit,CPU)中缓存的用户态分配方法和系统。
【背景技术】
[0002]在计算机系统中,为了加快CPU对随机静态存储器(Static Random AccessMemory, SRAM)的访问速度,一般在CPU内部封装了多级高速缓存,根据内存数据访问的局部性原理,预先将内存中的数据存储到高速缓存中,同时优化高速缓存刷新算法,以提高高速缓存的命中率。
[0003]但是CPU内部的高速缓存对应用程序不可见,也就是应用程序不能直接访问缓存在CPU高速缓存中的数据。缓存在内存中的数据刷新及数据一致性管理,一般由高速缓存控制器实现,传统的高速缓存管理器无法避免内存的刷新,所以在内存中缓存的供应用程序访问的数据会频繁地被刷新,致使应用程序的运行效率低。

【发明内容】

[0004]本发明提供一种CPU中缓存的用户态分配方法和系统,以解决传统的高速缓存管理器无法避免内存的刷新,造成应用程序性能降低的问题。
[0005]为了解决上述问题,本发明公开了一种CPU中缓存的用户态分配方法,包括:
[0006]在引导参数中设定预留高速缓存的容量和起始地址;
[0007]按照所述预留高速缓存的容量和起始地址在CPU的缓存中创建所述预留高速缓存;
[0008]为用户态应用程序分配所述预留高速缓存。
[0009]优选地,所述按照所述预留高速缓存的容量和起始地址在CPU的缓存中创建所述预留高速缓存,包括:
[0010]根据所述预留高速缓存的容量和起始地址创建并初始化所述预留高速缓存的虚拟字符设备;
[0011]初始化所述虚拟字符设备的文件操作符集合,设置所述虚拟字符设备的文件操作符,并向操作系统注册设置的文件操作符;
[0012]根据所述引导参数中设定的预留高速缓存的容量和起始地址,在CPU的缓存中分配所述预留高速缓存,并确定所述预留高速缓存的物理地址;
[0013]调用所述文件操作符建立虚拟内存空间中的内存地址与所述预留高速缓存的物理页框号之间的映射关系。
[0014]优选地,所述根据所述预留高速缓存的容量和起始地址创建并初始化所述预留高速缓存的虚拟字符设备,包括:
[0015]通过所述引导参数向CPU内核传递所述虚拟字符设备的设备编号进行注册,若所述传递的设备编号被占用,则通过CPU内核为所述虚拟字符设备分配另一个设备编号;
[0016]向操作系统添加所述设备编号,令用户态应用程序获取所述虚拟字符设备的设备编号。
[0017]优选地,所述调用所述文件操作符建立虚拟内存空间中的内存地址与所述预留高速缓存的物理页框号之间的映射关系,包括:
[0018]当用户态应用程序的请求内存的容量小于或等于所述预留高速缓存的容量时,调用所述文件操作符获取所述请求内存的页内偏移地址;
[0019]将所述页内偏移地址和所述缓存空间的物理地址相加,得到供用户态应用程序使用的预留高速缓存的物理地址;
[0020]对所述供用户态应用程序使用的预留高速缓存的物理地址进行页框运算得到物理页框号;
[0021 ] 建立虚拟内存空间中的内存地址与所述预留高速缓存的物理页框号之间的映射页表。
[0022]优选地,所述为用户态应用程序分配所述预留高速缓存,包括:
[0023]根据已建立的虚拟字符设备的节点获取文件描述符,其中,所述虚拟字符设备的节点用以在用户态应用程序打开所述虚拟字符设备的节点后,将对所述虚拟字符设备的操作与所述虚拟字符设备的驱动程序操作进行连接;
[0024]通过所述文件描述符和所述文件操作符获取空闲的预留高速缓存的容量;
[0025]若为用户态应用程序分配的预留高速缓存的容量小于等于所述空闲的预留高速缓存的容量,则通过所述文件描述符调用所述虚拟字符设备的驱动程序操作,得到为用户态应用程序分配的预留高速缓存的容量和起始地址。
[0026]相应地,本发明还公开了一种CPU中缓存的用户态分配系统,包括:
[0027]参数设定模块,用于在引导参数中设定预留高速缓存的容量和起始地址;
[0028]缓存创建模块,用于按照所述预留高速缓存的容量和起始地址在CPU的缓存中创建所述预留高速缓存;
[0029]缓存分配模块,用于为用户态应用程序分配所述预留高速缓存。
[0030]优选地,所述缓存创建模块,包括:
[0031]虚拟字符设备初始化模块,用于根据所述预留高速缓存的容量和起始地址创建并初始化所述预留高速缓存的虚拟字符设备;
[0032]文件操作符设置模块,用于初始化所述虚拟字符设备的文件操作符集合,设置所述虚拟字符设备的文件操作符,并向操作系统注册设置的文件操作符;
[0033]物理地址确定模块,用于根据所述引导参数中设定的预留高速缓存的容量和起始地址,在CPU的缓存中分配所述预留高速缓存,并确定所述预留高速缓存的物理地址;
[0034]映射模块,用于调用所述文件操作符建立虚拟内存空间中的内存地址与所述预留高速缓存的物理页框号之间的映射关系。
[0035]优选地,所述虚拟字符设备初始化模块,包括:
[0036]编号注册模块,用于通过所述引导参数向CPU内核传递所述虚拟字符设备的设备编号进行注册,若所述传递的设备编号被占用,则通过CPU内核为所述虚拟字符设备分配另一个设备编号;
[0037]编号添加模块,用于向操作系统添加所述设备编号,令用户态应用程序获取所述虚拟字符设备的设备编号。
[0038]优选地,所述映射模块,包括:
[0039]页内偏移地址获取模块,用于当用户态应用程序的请求内存的容量小于或等于所述预留高速缓存的容量时,调用所述文件操作符获取用户态应用程序的请求内存的页内偏移地址;
[0040]物理地址获取模块,用于将所述页内偏移地址和所述缓存空间的物理地址相加,得到供用户态应用程序使用的预留高速缓存的物理地址;
[0041]物理页框号获取模块,用于对所述供用户态应用程序使用的预留高速缓存的物理地址进行页框运算得到物理页框号;
[0042]映射页表建立模块,用于建立虚拟内存空间中的内存地址与所述预留高速缓存的物理页框号之间的映射页表。
[0043]优选地,所述缓存分配模块,包括:
[0044]文件描述符获取模块,用于根据已建立的虚拟字符设备的节点获取文件描述符,其中,所述虚拟字符设备的节点用以在用户态应用程序打开所述虚拟字符设备的节点后,将对所述虚拟字符设备的操作与所述虚拟字符设备的驱动程序操作进行连接;
[0045]空闲容量获取模块,用于通过所述文件描述符和所述文件操作符获取空闲的预留高速缓存的容量;
[0046]容量和起始地址获取模块,用于若为用户态应用程序分配的预留高速缓存的容量小于等于所述空闲的预留高速缓存的容量,则通过所述文件描述符调用所述虚拟字符设备的驱动程序操作,得到为用户态应用程序分配的预留高速缓存的容量和起始地址。
[0047]与【背景技术】相比,本发明包括以下优点:
[0048]为了提高应用程序的性能,本发明通过新建的页表将导出到内核(Kernel)态的(PU中的高速缓存输出到用户态,供应用程序使用。具体可以在引导参数中设定预留高速缓存的容量和起始地址,按照预留高速缓存的容量和起始地址在CPU的高速缓存中创建预留高速缓存,然后为用户态应用程序分配预留高速缓存,供用户态应用程序使用。
[0049]关于CPU访问内存的几个原则为:若CPU的高速缓存中缓存有与内存对应的数据,则直接从高速缓存中读取,否则,从内存中读取;高速缓存管理器一般根据最久未使用原则(Least Recently Used, LRU),将一部分高速缓存中的数据刷新到内存中,使得一部分高速缓存空闲可用;从内存中读取数据到空闲可用的高速缓存中,再从高速缓存中读取数据。
[0050]由于CPU中的高速缓存的访问速率远远高于普通内存,并且,预留高速缓存供用户态应用程序使用后,高速缓存管理器不再自动刷新预留高速缓存。所以,本发明在CPU的高速缓存中创建一部分预留高速缓存供用户态应用程序使用,提高了应用程序的性能。
【附图说明】
[0051]图1是本发明技术方案实现的第一阶段流程图;
[0052]图2是本发明中虚拟字符设备的初始化流程图;
[0053]图3是本发明中虚拟字符设备的文件操作符的实现流程图;
[0054]图4是本发明中用户态应用程序获取可用的高速缓存大小的流程图;
[0055]图5是本发明中建立虚拟字符设备节点的流程图;
[0056]
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1