一种共享内存的地址映射方法及装置与流程

文档序号:13804645阅读:437来源:国知局
一种共享内存的地址映射方法及装置与流程

本申请实施例涉及数据存储技术领域,尤其涉及一种共享内存的地址映射方法及装置。



背景技术:

目前,内存部署逐渐由内核态向用户态切换,大部分业务已部署于用户态,部署于用户态的内存需要使用用户态虚拟地址进行访问。少部分业务(比如,驱动等)仍部署于内核态,主要用于直接内存存取(directmemoryaccess,dma)、以及远程直接内存存取(remotedirectmemoryaccess,rdma)操作。为了减小用户态进程间、以及用户态进程与内核态进程之间的数据拷贝,可以通过共享内存的方式来实现。共享内存是指允许多个进程共享的一个逻辑内存,共享内存是进程间共享数据的一种最快的方法。当用户态和内核态的多个进程访问同一共享内存时,该共享内存的地址需要同时被映射到该多个进程的地址空间中。

现有linux系统中,提供了一种常用的用户态与内核态共享内存映射机制,该共享内存映射机制包括以下步骤:在用户态通过系统调用函数,系统自动分配空闲的用户态虚拟地址。在内核态通过内存分配函数分配一段内存,得到该段内存的虚拟地址。将该段内存的虚拟地址通过系统函数转换成页框,并通过页框与物理地址转换函数将页框转换成对应页面的物理地址。最后,建立物理地址与用户态虚拟地址之间的映射关系,从而实现共享内存在用户态与内核态进程间的映射。但是,由于系统自动分配的用户态虚拟地址比较随机,从而导致用户态虚拟地址与内存的虚拟地址之间的转换无规律可循。同时,内存的虚拟地址与物理地址之间的转换,需要两次系统内核函数的调用,因此,上述映射机制中的地址转换效率较低。



技术实现要素:

本发明的实施例提供一种共享内存的地址映射方法及装置,解决了现有技术中共享内存的各地址之间转换效率低问题。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,提供一种共享内存的地址映射方法,该方法包括:当第一控制器接收到第一用户态进程触发的共享内存映射请求时,第一控制器从指定虚拟地址区间中获取第一用户态虚拟地址;第一控制器根据该指定虚拟地址区间、第一用户态虚拟地址和第一线性关系,确定第一用户态虚拟地址对应的第一内核态虚拟地址,第一线性关系用于指示用户态虚拟地址与内核态虚拟地址之间的关系;根据第一内核态虚拟地址和第二线性关系,确定共享内存的第一物理地址,该共享内存为用户态进程和内核态进程共享的内存,第二线性关系用于指示内核态虚拟地址与物理地址之间的关系。上述技术方案中,第一控制器可以通过指定用户态虚拟地址区间和第一线性关系,实现用户态虚拟地址与内核态虚拟地址之间的线性转换,通过第二线性关系实现内核态虚拟地址与共享内存的物理地址之间的线性转换,从而可以提高各地址之间的转换效率,进而提高共享内存中数据的访问效率。

在第一方面的一种可能的实现方式中,当该指定虚拟地址区间的起始地址为a0,第一用户态虚拟地址为a1,第一内核态虚拟地址为a2时,第一线性关系包括公式(1),式中m为常数:

a2=a1-a0+m(1)。

在第一方面的一种可能的实现方式中,当第一内核态虚拟地址为a2,第一物理地址为a3时,第二线性关系包括公式(2),式中m为常数:

a3=a2-m(2)。

上述可能的两种实现方式中,提供了一种用于用户态虚拟地址与内核态虚拟地址之间进行线性转换的关系,以及用于内核态虚拟地址与物理地址之间进行线性转换的关系。

在第一方面的一种可能的实现方式中,当第二用户态进程共享该共享内存时,该方法还包括:第一控制器为第二用户态进程配置以下信息中的一项或多项:该指定虚拟地址空间、该共享空间的物理地址区间、第一线性关系、第二线性关系。上述可能的实现方式中,第一用户态进程和第二用户态进程可以共享同一共享内存,从而第一用户态进程可以访问第二用户态进程在共享内存中写入数据,同时第二用户态进程也可以访问第一用户态进程在共享内存中写入数据,从而避免了用户态进程之间数据的拷贝,提高了数据的访问效率

在第一方面的一种可能的实现方式中,当第三内核态进程共享该共享内存时,该方法还包括:第一控制器为第三内核态进程配置以下信息中的一项或多项:该共享空间的物理地址区间、第二线性关系。上述可能的实现方式中,第一用户态进程和第三内核态进程可以共享同一共享内存,从而第一用户态进程可以访问第三内核态进程在共享内存中写入数据,同时第三内核态进程也可以访问第一用户态进程在共享内存中写入数据,从而避免了用户态进程与内核态进程之间数据的拷贝,提高了数据的访问效率。

在第一方面的一种可能的实现方式中,该方法还包括:第一控制器向第二控制器发送数据访问请求,该数据访问请求用于访问第二控制器中内存的数据,第二控制器中内存的内核态虚拟地址与内存的物理地址满足第二线性关系。上述可能的实现方式中,第一控制器和第二控制器之间可以直接进行数据的转发和存取,从而实现了跨控制器间的数据访问,从而可以提高存储系统的性能。

第二方面,提供一种控制器,该控制器作为第一控制器,包括:获取单元,用于当接收到第一用户态进程触发的共享内存映射请求时,从指定虚拟地址区间中获取第一用户态虚拟地址;确定单元,用于第一控制器根据该指定虚拟地址区间、第一用户态虚拟地址和第一线性关系,确定第一用户态虚拟地址对应的第一内核态虚拟地址,第一线性关系用于指示用户态虚拟地址与内核态虚拟地址之间的关系;确定单元,还用于根据第一内核态虚拟地址和第二线性关系,确定共享内存的第一物理地址,该共享内存为用户态进程和内核态进程共享的内存,第二线性关系用于指示内核态虚拟地址与物理地址之间的关系。

在第二方面的一种可能的实现方式中,当该指定虚拟地址区间的起始地址为a0,第一用户态虚拟地址为a1,第一内核态虚拟地址为a2时,第一线性关系包括公式(3),式中m为常数:

a2=a1-a0+m(3)。

在第二方面的一种可能的实现方式中,当第一内核态虚拟地址为a2,第一物理地址为a3时,第二线性关系包括公式(4),式中m为常数:

a3=a2-m(4)。

在第二方面的一种可能的实现方式中,当第二用户态进程共享该共享内存时,该控制器还包括:配置单元,用于为第二用户态进程配置以下信息中的一项或多项:该指定虚拟地址空间、该共享空间的物理地址区间、第一线性关系、第二线性关系。

在第二方面的一种可能的实现方式中,当第三内核态进程共享该共享内存时,第一控制器还包括:配置单元,用于为第三内核态进程配置以下信息中的一项或多项:该共享空间的物理地址区间、第二线性关系。

在第二方面的一种可能的实现方式中,第一控制器还包括:发送单元,用于向第二控制器发送数据访问请求,该数据访问请求用于访问第二控制器中内存的数据,第二控制器中该内存的内核态虚拟地址与该内存的物理地址满足第二线性关系。

第三方面,提供一种控制器,该控制器包括处理器、存储器、总线和通信接口,存储器中存储代码和数据,处理器与存储器通过总线连接,处理器运行存储器中的代码,使得控制器执行第一方面或第一方面的任一种可能的实现方式所提供的共享内存的地址映射方法。

本申请的又一方面,提供了一种可读存储介质,该可读存储介质中存储有指令,当该可读存储介质在设备上运行时,使得该设备执行第一方面或第一方面的任一种可能的实现方式所提供的共享内存的地址映射方法。

本申请的又一方面,提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行第一方面或第一方面的任一种可能的实现方式所提供的共享内存的地址映射方法。

可以理解地,上述提供的任一种共享内存的地址映射方法的装置、计算机存储介质或者计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。

附图说明

图1为本发明实施例提供的一种共享内存的示意图;

图2为现有技术中提供的一种共享内存的地址映射的流程图;

图3为本发明实施例提供的一种共享内存的地址映射方法的流程示意图;

图4为本发明实施例提供的一种系统内存的分布示意图;

图5为本发明实施例提供的一种共享内存的地址映射的流程图;

图6为本发明实施例提供的另一种共享内存的地址映射方法的流程示意图;

图7为本发明实施例提供的又一种共享内存的地址映射方法的流程示意图;

图8为本发明实施例提供的一种控制器间进行数据访问的示意图;

图9为本发明实施例提供的一种控制器的结构示意图;

图10为本发明实施例提供的另一种控制器的结构示意图。

具体实施方式

目前,控制器中内存的部署逐渐由内核态向用户态切换,大部分业务已部署于用户态,少部分业务(比如,驱动等)仍部署于内核态。其中,部署于用户态的内存需要使用用户态虚拟地址进行访问,部署于内核态的内存需要使用内核态虚拟地址进行访问。这里的用户态和内核态是操作系统的两种运行级别,intelcpu提供ring0-ring3三种级别的运行模式。ring0级别最高,ring3最低。

用户态:当进程在执行用户的代码时,则称该进程处于用户运行态,也可以简称为用户态,此时处理器在特权级最低的(3级)用户代码中运行。内核态:当一个任务(进程)执行系统调用而陷入内核代码中执行时,则称该进程处于内核运行态或简称为内核态,此时处理器处于特权级最高的0级内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。这里的进程可以是指程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位。

为了减小用户态进程间、以及用户态进程与内核态进程之间的数据拷贝,可以通过共享内存的方式来实现不同进程对同一内存中数据的共享。共享内存是指允许多个进程共享或访问的一个逻辑内存,共享内存是进程间共享数据的一种最快的方法。比如,如图1所示,控制器中的进程a、进程b和进程c共享同一共享内存,其中进程a和进程b是处于用户态的进程,进程c是处于内核态的进程。进程a、进程b和进程c可以是互不相关的进程。

现有技术中,linux操作系统提供了一种用户态与内核态共享内存的映射机制mmap。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,而不必再调用read()、write()等操作。映射具体流程如图2所示,步骤1:调用用户态map函数,然后通过系统调用mmap函数,系统自动分配空闲的用户态虚拟地址(假设为a1)。步骤2:在内核态通过vmalloc分配一段内存,得到该段内存的虚拟地址(即内核态虚拟地址,假设为a2);步骤3:将该段内存的虚拟地址a2通过系统函数vmalloc_to_page转换成页框,并通过page_to_phys将页框转换成对应页面的物理地址(假设为a3)。步骤4:通过vm_insert_page建立物理地址a3与用户态虚拟地址a1之间的映射关系。

但是,上述方法中,系统自动分配的用户态虚拟地址比较随机,从而导致用户态虚拟地址与内存的虚拟地址之间的转换效率无规律可循,进而致使用户态虚拟地址与内核态虚拟地址之间的转换效率较低。同时,内存的虚拟地址与物理地址之间的转换,需要两次系统内核函数vmalloc_to_page和page_to_phys的调用,因此,内存的虚拟地址与物理地址之间的转换效率也较低。此外,由于上述转换方法仅支持同一控制器中用户态与内核态的地址之间的转换,即两个内核函数只能转换本控制器范围内的内存地址,而不支持不同控制器之间的内存地址。

基于此,本申请实施例提供一种支持共享内存中各地址之间的线性转换的方法及装置,从而可以提高共享内存中各地址之间的转换效率,进而提高存储系统的性能。

图3为本申请实施例提供的一种共享内存的地址映射方法的流程示意图,参见图3,该方法包括以下几个步骤。

步骤301:当第一控制器接收到第一用户态进程触发的共享内存映射请求时,第一控制器从指定虚拟地址区间中获取第一用户态虚拟地址。

其中,第一控制器中可以安装有多个程序,第一控制器可以运行该多个程序中一个或者多个程序。第一控制器通过运行不同的程序可以为用户提供不同的服务。第一控制器运行一个程序时,该程序会创建相应的进程,同时为该进程分配一定的内存。本申请实施例中,当一个进程执行用户代码时,可以称该进程为用户态进程。当一个进程执行系统调用而陷入内核代码中执行时,可以称该进程为内核态进程。

另外,第一用户态进程可以是指第一控制器中处于用户态的多个进程中的任一进程。第一用户态进程可以与处于用户态的其他进程、以及处于内核态的进程共享同一共享内存,即该共享内存为用户态进程和内核态进程共享的内存,第一用户态进程和共享该共享内存的其他进程都可以访问该共享内存。

第一用户态虚拟地址是指第一用户态进程用于访问共享内存的虚拟地址。指定虚拟地址区间是指一段连续的虚拟地址范围,也可以称为虚拟地址空间范围。该指定虚拟地址区间可以事先进行设置或规划,第一用户态虚拟地址可以是该指定虚拟地址区间中的虚拟地址。

具体的,当第一控制器中的第一用户态进程与其他进程共享同一内存时,第一控制器在创建第一用户态进程时会触发共享内存映射请求,该共享内存映射请求用于将共享内存映射在第一用户态进程的地址空间中。当第一控制器接收到第一用户态进程触发的共享内存映射请求时,第一控制器可以从指定虚拟地址区间中获取处于空闲状态的第一用户态虚拟地址。

步骤302:第一控制器根据指定虚拟地址区间、第一用户态虚拟地址和第一线性关系,确定第一用户态虚拟地址对应的第一内核态虚拟地址,第一线性关系用于指示用户态虚拟地址与内核态虚拟地址之间的关系。

其中,该指定虚拟地址区间可以表示为[usr_start,usr_end],usr_start可以是指共享内存用户态虚拟地址的起始地址,usr_end可以是指共享内存用户态虚拟地址的结束地址。该指定虚拟地址区间的设置与共享内存的物理地址区间有关。

另外,第一内核态虚拟地址是指该第一用户态进程穿越到内核态访问共享内存时,第一用户态虚拟地址在内核态中对应的用于访问共享内存的虚拟地址。第一线性关系用于指示用户态虚拟地址与内核态虚拟地址之间的关系,即用于用户态虚拟地址与内核态虚拟地址之间进行相互转换的关系,且是线性转换的关系。通过第一线性关系进行用户态虚拟地址与内核态虚拟地址之间的转换,可以简化转换过程,提高其转换效率。

具体的,当该指定虚拟地址区间的起始地址表示为a0,从该指定虚拟地址区间中获取的第一用户态虚拟地址表示为a1,第一内核态虚拟地址表示为a2时,第一线性关系可以如下公式(1)所示,式中m为常数。

a2=a1-a0+m(1)

可选的,该指定虚拟地址区间的起始地址也可以根据该指定虚拟地址区间的区间长度和该虚拟地址区间的结束地址来表示。假设区间长度为l,结束地址为an,则a0可以表示为an-l,相应的公式(1)可以如下公式(1-1)所示。

a2=a1-a0+m=an-l+m(1-1)

比如,在内核态,通过重定义共享内存映射文件的操作函数(伪代码如下所示),通过get_shm_umapped_area()函数从指定虚拟地址区间[usr_start,usr_end]中分配未使用的虚拟地址,得到a1。之后,通过公式(1)得到第一内核态虚拟地址a2。

进一步的,当第一控制器确定第一内核态虚拟地址a2之后,第一控制器可以从内存空间中分配一段指定大小的内存(即共享内存),且可以将第一内核态虚拟地址a2作为访该共享内存的虚拟起始地址。

其中,第一控制器中的内存空间可以如图4所示。在第一控制器的系统启动时,在内核态中,除了一部分内存预留给操作系统(即操作系统内存),剩余部分的内存可以由内存管理模块进行管理,包括该剩余部分内存的映射关系,该剩余部分内存用于整个系统运行过程中的所有内存分配请求。该剩余部分内存的映射关系可以为线性映射。

需要说明的是,该内存管理模块可以位于内核态中,且可以是通过软件的方式来实现。该内存管理模块可以为内核态虚拟地址与内存的物理地址之间建立映射关系,该映射关系具体可以是通过对物理地址进行固定的加减偏移来实现。

步骤303:根据第一内核态虚拟地址和第二线性关系,确定共享内存的第一物理地址,第二线性关系用于指示内核态虚拟地址与物理地址之间的关系。

其中,第一物理地址是指与第一内核态虚拟地址对应的共享内存的物理地址。第二线性关系用于指示内核态虚拟地址与物理地址之间的关系,即用于内核态虚拟地址与物理地址之间进行相互转换的关系,且是线性转换的关系。通过第二线性关系进行内核态虚拟地址与用户态虚拟地址之间的转换,可以简化转换过程,提高其转换效率。

具体的,当第一内核态虚拟地址为a2,第一物理地址为a3时,第二线性关系可以如下公式(2)所示,式中m为常数,且与公式(1)中m的取值相同。

a3=a2-m(2)

需要说明的是,公式(2)所示的第二线性关系,可以是由内存管理模块为第一用户态进程分配共享内存时,为该共享内存分配的内核态虚拟地址与物理地址之间分配的映射关系。也即是,内存管理模块通过对物理地址进行固定的加减偏移(比如,m),得到相应的内核态虚拟地址。因此,当第一控制器获取第一内核态虚拟地址a2时,可以根据第一内核态虚拟地址a2和公式(2)所示的第二线性关系,确定第一内核态虚拟地址a2对应的第一物理地址a3。

示例性的,如图5所示,该共享内存的地址映射流程具体可以为:在用户态调用用户态map函数,通过mmap系统调用从指定虚拟地址区间中获取用户态虚拟地址a1;通过第一线性关系转换得到a1对应的内核态虚拟地址a2;从线性行映内存区域分配一段内存,起始地址为a2;通过公第二线性关系将内核态虚拟地址a2转换为物理地址a3;建立物理地址a3与用户态虚拟地址a1之间的映射。

在实际应用中,用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作、或网络数据发送等操作,则必须通过write、或者send等系统调用,这些系统调用会利用内核中的代码来完成操作。此时,该进程必须切换到内核态,然后进入共享地址区间中的内核地址空间去执行这些代码完成操作,完成后再切换回用户态。因此,当一个进程在用户态申请共享空间,并写入数据时,如果该进程穿越到内核态,则可以根据第一线性关系快速的获取内核态虚拟地址,进而通过内核态虚拟地址对写入的数据进行访问。同样,当一个进程在内核态申请共享空间,并写入数据时,如果该进程穿越到用户态,则可以根据第一线性关系快速的获取用户态虚拟地址,进而通过用户态虚拟地址对写入的数据进行访问,从而避免了用户态与内核态之间的数据拷贝,提高了数据的访问效率。

在本申请实施例中,第一控制器可以通过指定用户态虚拟地址区间和第一线性关系,实现用户态虚拟地址与内核态虚拟地址之间的线性转换,通过第二线性关系实现内核态虚拟地址与共享内存的物理地址之间的线性转换,从而可以提高各地址之间的转换效率,进而提高共享内存中数据的访问效率。

进一步的,当第一控制器的第二用户态进程与第一用户态进程共享第一用户态进程建立的共享内存时,如图6所示,该方法还可以包括:步骤304。

步骤304:第一控制器为第二用户态进程配置以下信息中的一项或多项:该指定虚拟地址空间、共享空间的物理地址区间、第一线性关系、第二线性关系。

当第一控制器中的第二用户态进程共享第一用户态进程建立的共享内存时,第一控制器可以将该指定虚拟地址空间、共享空间的物理地址区间、第一线性关系和第二线性关系中一项或者多项配置给第二用户态进程。当配置上述多个信息中的部分信息时,其余未配置的信息可以事先进行约定或者设置,本申请实施例对此不作具体限定。

因此,当第二用户态进程实现共享内存映射时,可以根据该指定虚拟地址空间、共享空间的物理地址区间、第一线性关系和第二线性关系,通过与第一用户态进程类似的方法实现共享内存的映射,即根据上述步骤301-步骤303将共享内存映射在第二用户态进程的地址空间中,从而第一用户态进程和第二用户态进程都可以对内存共享进行访问。

在本申请实施例中,第一用户态进程和第二用户态进程可以共享同一共享内存,从而第一用户态进程可以访问第二用户态进程在共享内存中写入数据,同时第二用户态进程也可以访问第一用户态进程在共享内存中写入数据,从而避免了用户态进程之间数据的拷贝,提高了数据的访问效率。

进一步的,当第一控制器的第三内核态进程与第一用户态进程共享第一用户态进程建立的共享内存时,如图7所示,该方法还可以包括:步骤305。

步骤305:第一控制器为第三内核态进程配置以下信息中的一项或多项:共享空间的物理地址区间、第二线性关系。

当第一控制器中的第三内核态进程共享第一用户态进程建立的共享内存时,第一控制器可以将该指定虚拟地址空间和第二线性关系中一项或者多项配置给第三内核态进程。当仅配置上述两个信息中的一个信息时,未配置的信息可以事先进行约定或者设置,本申请实施例对此不作具体限定。

因此,当第三内核态进程进行共享内存映射时,可以根据该共享空间的物理地址区间和第二线性关系,实现内核态虚拟地址与物理地址之间的映射,即根据上述步骤303将共享内存映射在第三内核态进程的地址空间中,从而第一用户态进程和第三内核态进程都可以对内存共享进行访问。

进一步的,如果共享内存是由第三内核态进程建立的,则第一控制器可以为第一用户态进程配置第二线性关系和共享内存的物理地址区间,从而第一用户态进程可以根据指定虚拟地址区间、物理地址区间、第一线性关系和第二线性关系,将共享内存映射到第一用户态进程的地址空间中。

在本申请实施例中,第一用户态进程和第三内核态进程可以共享同一共享内存,从而第一用户态进程可以访问第三内核态进程在共享内存中写入数据,同时第三内核态进程也可以访问第一用户态进程在共享内存中写入数据,从而避免了用户态进程与内核态进程之间数据的拷贝,提高了数据的访问效率。

进一步的,该方法还包括:第一控制器向第二控制器发送数据访问请求,该数据访问请求用于访问第二控制器中内存的数据,第二控制器中内存的内核态虚拟地址与内存的物理地址满足第二线性关系。

其中,第二控制器可以与第一控制器一样,通过上述第二线性关系进行内核态虚拟地址与内存的物理地址之间的线性转换,从而可以保证第一控制器和第二控制器具有相同的地址转换关系。因此,第一控制器可以直接向第二控制器发送数据访问请求,当第二控制器接收到该数据访问请求时,第二控制器可以根据该数据访问请求中的内核态虚拟地址,直接对第二控制器中的内存进行访问,从而实现第一控制器与第二控制器之间的直接数据存取的过程。

示例性的,如图8所示,第一控制器表示为a控,第二控制器表示为b控,假设a控的用户态中包括进程a和进程b,b控的用户态中包括进程c和进程d。a控和b控的内核态中均包括驱动和用于数据处理的芯片,驱动在运行时可以在内核态中创建相应的进程,由于内核态本身就是个大进程,因此驱动在运行时创建的进程也可以称为线程。a控和b控中的内核态虚拟地址与物理地址之间的转换关系均满足第二线性关系,从而a控中的驱动可以与b控中的驱动进行数据转发和远程直接数据存取rdma。

在本申请实施例中,第一控制器和第二控制器可以均通过第二线性关系实现内核态虚拟地址与物理地址之间的线性转换,保证了第一控制器和第二控制器具有相同的地址转换关系,从而第一控制器和第二控制器之间可以直接进行数据的转发和存取,实现了跨控制器间的数据访问,进而可以提高存储系统的性能。

上述主要从各个网元的角度对本申请实施例提供的方案进行了介绍。可以理解的是,各个网元,例如第一控制器、第二控制器等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的网元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请实施例可以根据上述方法示例对第一控制器进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

在采用对应各个功能划分各个功能模块的情况下,图9示出了上述实施例中所涉及的第一控制器的一种可能的结构示意图,第一控制器包括:获取单元901和确定单元902。其中,获取单元901用于支持第一控制器执行图3、图6或图7中的步骤301;确定单元902用于支持第一控制器执行图3、图6或图7中的步骤302和步骤303。进一步的,第一控制器还可以包括:配置单元903和发送单元904;其中,配置单元903用于支持第一控制器执行图6中的步骤304、或者图7中的步骤304和步骤305;发送单元904用于第一控制器向第二控制器发送数据访问请求的步骤。

在硬件实现上,上述确定单元902和配置单元903可以为处理器;获取单元901可以为接收器,发送单元904可以为发送器,接收器和发送器可以构成通信接口。

图10所示,为本申请的实施例提供的上述实施例中所涉及的第一控制器的一种可能的逻辑结构示意图。第一控制器包括:处理器1002、通信接口1003、存储器1001以及总线1004。处理器1002、通信接口1003以及存储器1001通过总线1004相互连接。在本申请的实施例中,处理器1002用于对第一控制器的动作进行控制管理,例如,处理器1002用于支持第一控制器执行图3中的步骤302-步骤303,图6中的步骤302-步骤304,图7中的步骤302-步骤305,和/或用于本文所描述的技术的其他过程。通信接口1003用于支持第一控制器进行通信。存储器1001,用于存储第一控制器的程序代码和数据。

其中,处理器1002可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线1004可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

在本申请的另一实施例中,还提供一种可读存储介质,可读存储介质中存储有计算机执行指令,当一个设备(可以是单片机,芯片等)或者处理器执行图3、图6或者图7所提供的共享内存的地址映射方法。前述的可读存储介质可以包括:u盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。

在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备实施执行图3、图6或者图7所提供的共享内存的地址映射方法。

在本申请实施例中,第一控制器可以通过指定用户态虚拟地址区间和第一线性关系,实现用户态虚拟地址与内核态虚拟地址之间的线性转换,通过第二线性关系实现内核态虚拟地址与共享内存的物理地址之间的线性转换,从而可以提高各地址之间的转换效率,进而提高共享内存中数据的访问效率。

最后应说明的是:以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1