G06F9/44 H04L12/24
1.一种用户态获取受限访问信息的方法,其特征在于,包括:
步骤S1,在Linux内核初始化时,申请大块连续内存作为共享内存使 用,并记录该内存的地址和大小;
步骤S2,内核创建受限访问信息的数据结构,将该数据结构的存储路 径指向所申请的所述共享内存的地址;
步骤S3,内核创建线程获取受限访问信息,将获取的受限访问信息赋 值给共享内存中受限访问信息的数据结构;
步骤S4,用户态在初始化时获取申请的所述共享内存的地址和大小, 创建与内核相同的受限访问信息的数据结构,并将所建立的数据结构的存 储路径指向共享内存的地址;
步骤S5,用户态创建线程获取共享内存中的受限访问信息;
其中,所述受限访问信息为用户态无法直接从内核获取的信息。
2.根据权利要求1所述的方法,其特征在于,所述创建的受限访问 信息的数据结构至少包括:
网络设备接口的up/down状态、速率、双工状态以及接口收发包统计。
3.根据权利要求2所述的方法,其特征在于,所述步骤S3包括:
步骤S31,扫描网络设备接口的up/down状态,并将扫描到的网络设 备接口的up/down状态赋值给共享内存中受限访问信息的数据结构;和/ 或
步骤S32,读取硬件状态寄存器获取相对应的网络设备接口的速率、 双工状态以及接口收发包统计,并将获取的网络设备接口的速率、双工状 态以及接口收发包统计赋值给共享内存中受限访问信息的数据结构。
4.根据权利要求1所述的方法,其特征在于,所述步骤S4包括:
步骤S41,用户态初始化时,通过ioctl方式获取已申请的所述共享 内存的地址和大小;
步骤S42,采用mmap函数将所述共享内存的地址映射为用户态可操作 的共享内存的虚拟地址;
步骤S43,用户态创建与内核相同的受限访问信息的数据结构;
步骤S44,将所建立的数据结构的存储路径指向所述共享内存的虚拟 地址。
5.根据权利要求1至4中任一项中所述的方法,其特征在于,所述步 骤S1包括:
在Linux内核初始化时,通过Bigphysarea申请大块连续内存作为共 享内存使用,并记录该内存的地址和大小。
6.一种用户态获取受限访问信息的装置,其特征在于,包括:
存储单元(10),连接到其他单元并为所连接的单元提供共享内存, 以用于其他单元在该共享内存存储对应的数据;
内存申请单元(1),与所述存储单元(10)相连,用于在Linux内核 初始化时从所述存储单元(10)中申请大块连续内存作为共享内存使用, 并记录该内存的地址和大小;
数据结构创建单元(2),与所述存储单元(10)相连,用于为内核创 建受限访问信息的数据结构,将创建的该数据结构的存储路径指向所述存 储单元(10)中共享内存的地址;
受限访问信息存储单元(3),与所述存储单元(10)相连,用于为内 核创建线程获取受限访问信息,将获取的受限访问信息赋值给所述数据结 构创建单元(2)创建的受限访问信息的数据结构,实现受限访问信息存 储于所述存储单元(10)中的共享内存中;
受限访问信息获取路径映射单元(4),与所述存储单元(10)相连, 用于在用户态初始化时,为用户态获取所述存储单元(10)中共享内存的 地址和大小,创建与内核相同的受限访问信息的数据结构,并将所建立的 数据结构的存储路径指向所述共享内存的地址;
受限访问信息获取单元(5),与所述存储单元(10)相连,用于为用 户态创建线程,实现用户态获取所述存储单元(10)中的共享内存中存储 的受限访问信息;
其中,所述受限访问信息为用户态无法直接从内核获取的信息。
7.根据权利要求6所述的装置,其特征在于,所述创建的受限访问信 息的数据结构至少包括:
网络设备接口的up/down状态、速率、双工状态以及接口收发包统计。
8.根据权利要求7所述的装置,其特征在于,所述受限访问信息存储 单元(3),具体用于扫描网络设备接口的up/down状态,并将扫描到的网 络设备接口的up/down状态赋值给共享内存中受限访问信息的数据结构; 和/或读取硬件状态寄存器获取相对应的网络设备接口的速率、双工状态 以及接口收发包统计,并将获取的网络设备接口的速率、双工状态以及接 口收发包统计赋值给共享内存中受限访问信息的数据结构。
9.根据权利要求6所述的装置,其特征在于,所述受限访问信息获取 路径映射单元(4),具体用于采用mmap函数将所述共享内存的地址映射 为用户态可操作的共享内存的虚拟地址,创建与内核相同的受限访问信息 的数据结构,将所建立的数据结构的存储路径指向所述共享内存的虚拟地 址,来实现将所建立的数据结构的存储路径指向共享内存的地址。
10.根据权利要求6至8中任一项所述的装置,其特征在于,所述内 存申请单元(1)通过Bigphysarea申请大块连续内存作为共享内存使用。
本发明属于计算机网络技术领域,具体涉及一种用户态获取受限访问 信息的方法及装置。
目前,Linux用户态直接从内核获取的访问信息是受限的,如果用户 态要直接从内核获取那些受限的访问信息,必须采用一些方式才行。例如, Linux内核驱动网络设备时可以正常获取网络设备的接口状态,如网络设 备接口的up/down状态、速率、双工状态以及接口收发包统计等,虽然对 于网络设备的用户态收发包已经很普遍,但是针对内核驱动的设备,用户 态无法直接读取硬件寄存器,导致用户态无法直接获取网络设备的接口状 态,即网络设备接口状态发的直接访问受到限制。所以用户态需要通过一 些方式(如ioctl方式)从内核获取网络设备的接口状态,但是网络设备 接口的up/down状态的获取往往需要不断地扫描函数,而频繁的ioctl操 作会损耗大量的系统性能,还会影响收发性能。
因此,有必要提供一种用户态获取受限访问信息的方法及装置,能够 满足用户态对受限访问信息的感知需求,同时可以减小对系统性能的损 耗,以解决上述技术问题。
本发明的目的是提供一种用户态获取受限访问信息的方法及装置,能 够满足用户态对受限访问信息的感知需求,同时可以减小对系统性能的损 耗,以解决用户态使用其他通讯方式获取受限访问信息而损耗系统性能的 问题。
根据本发明的一个方面,提供一种用户态获取受限访问信息的方法, 包括以下步骤:步骤S1,在Linux内核初始化时,申请大块连续内存作为 共享内存使用,并记录该内存的地址和大小;步骤S2,内核创建受限访问 信息的数据结构,将该数据结构的存储路径指向所申请的所述共享内存的 地址;步骤S3,内核创建线程获取受限访问信息,将获取的受限访问信息 赋值给共享内存中受限访问信息的数据结构;步骤S4,用户态在初始化时 获取申请的所述共享内存的地址和大小,创建与内核相同的受限访问信息 的数据结构,并将所建立的数据结构的存储路径指向共享内存的地址;步 骤S5,用户态创建线程获取共享内存中的受限访问信息;其中,所述受限 访问信息为用户态无法直接从内核获取的信息。
其中,在上述发明中,所述创建的受限访问信息的数据结构至少包括: 网络设备接口的up/down状态、速率、双工状态以及接口收发包统计。
其中,在上述发明中,所述步骤S3包括:步骤S31,扫描网络设备接 口的up/down状态,并将扫描到的网络设备接口的up/down状态赋值给共 享内存中受限访问信息的数据结构;和/或步骤S32,读取硬件状态寄存器 获取相对应的网络设备接口的速率、双工状态以及接口收发包统计,并将 获取的网络设备接口的速率、双工状态以及接口收发包统计赋值给共享内 存中受限访问信息的数据结构。
其中,在上述发明中,所述步骤S4包括:步骤S41,用户态初始化时, 通过ioctl方式获取已申请的所述共享内存的地址和大小;步骤S42,采 用mmap函数将所述共享内存的地址映射为用户态可操作的共享内存的虚 拟地址;步骤S43,用户态创建与内核相同的受限访问信息的数据结构; 步骤S44,将所建立的数据结构的存储路径指向所述共享内存的虚拟地址。
其中,在上述发明中,所述步骤S1包括:在Linux内核初始化时, 通过Bigphysarea申请大块连续内存作为共享内存使用,并记录该内存的 地址和大小。
根据本发明的另一个方面,提供一种用户态获取受限访问信息的装置, 包括:存储单元,连接到其他单元并为所连接的单元提供共享内存,以用 于其他单元在该共享内存存储对应的数据;内存申请单元,与所述存储单 元相连,用于在Linux内核初始化时从所述存储单元中申请大块连续内存 作为共享内存使用,并记录该内存的地址和大小;数据结构创建单元,与 所述存储单元相连,用于为内核创建受限访问信息的数据结构,将创建的 该数据结构的存储路径指向所述存储单元中共享内存的地址;受限访问信 息存储单元,与所述存储单元相连,用于为内核创建线程获取受限访问信 息,将获取的受限访问信息赋值给所述数据结构创建单元创建的受限访问 信息的数据结构,实现受限访问信息存储于所述存储单元中的共享内存中; 受限访问信息获取路径映射单元,与所述存储单元相连,用于在用户态初 始化时,为用户态获取所述存储单元中共享内存的地址和大小,创建与内 核相同的受限访问信息的数据结构,并将所建立的数据结构的存储路径指 向所述共享内存的地址;受限访问信息获取单元,与所述存储单元相连, 用于为用户态创建线程,实现用户态获取所述存储单元中的共享内存中存 储的受限访问信息;所述受限访问信息为用户态无法直接从内核获取的信 息。
其中,在上述发明中,所述创建的受限访问信息的数据结构至少包括: 网络设备接口的up/down状态、速率、双工状态以及接口收发包统计。
其中,在上述发明中,所述受限访问信息存储单元,具体用于扫描网 络设备接口的up/down状态,并将扫描到的网络设备接口的up/down状态 赋值给共享内存中受限访问信息的数据结构;和/或读取硬件状态寄存器 获取相对应的网络设备接口的速率、双工状态以及接口收发包统计,并将 获取的网络设备接口的速率、双工状态以及接口收发包统计赋值给共享内 存中受限访问信息的数据结构。
其中,在上述发明中,所述受限访问信息获取路径映射单元,具体用 于采用mmap函数将所述共享内存的地址映射为用户态可操作的共享内存 的虚拟地址,创建与内核相同的受限访问信息的数据结构,将所建立的数 据结构的存储路径指向所述共享内存的虚拟地址,来实现将所建立的数据 结构的存储路径指向共享内存的地址。
其中,在上述发明中,所述内存申请单元通过Bigphysarea申请大块 连续内存作为共享内存使用。
根据本发明的一种用户态获取受限访问信息的方法及装置,通过内核 获取受限访问信息并保存在共享内存中,实现用户态获取保存在共享内存 中的受限访问信息,满足了用户态对受限访问信息的感知需求,同时解决 了用户态使用其他通讯方式获取受限访问信息而损耗系统性能的问题。
图1显示了现有技术中的用户态获取受限访问信息的原理图;
图2显示了本发明的用户态获取受限访问信息的原理图;
图3显示了本发明优选实施例的用户态获取受限访问信息方法的流程 图;
图4显示了图3中步骤S3的子流程图;
图5显示了图3中步骤S4的子流程图;
图6显示了本发明优选实施例的用户态获取受限访问信息装置的结构 示意图。
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实 施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是 示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对 公知结构和技术的描述,以避免不必要地混淆本发明的概念。
本发明中,受限访问信息包括:网络设备接口状态(如,接口link up/down状态、协商出的速率双工状态、接口收发包统计等),硬件的rx mode(接收模式:单播、多播、组播和混杂),以及硬件状态寄存器的统 计(收发包的个数、字节数和错误包数等等)等用户态无法直接从内核获 取的信息。优选地,下文中受限访问信息以网络设备接口状态为例进行描 述。
图1显示了现有技术中的用户态获取受限访问信息的原理图。
如图1所示,在现有技术中,Linux用户态直接从内核获取的访问信 息是受限的,例如用户态无法直接从内核获取网络设备的接口状态。因为 针对内核驱动的设备,用户态无法直接读取硬件寄存器,导致用户态无法 直接获取网络设备的接口状态,所以用户态需要通过其他方式从内核获取 网络设备的接口状态,例如采用ioct方式,但是网络设备接口的up/down 状态的获取往往需要不断地扫描函数,而频繁的ioctl操作会损耗大量的 系统性能,还会影响收发性能。
图2显示了本发明的用户态获取受限访问信息的原理图。
如图2所示,以受限访问信息为网络设备接口的状态为例,在本发明 中,针对内核驱动的设备,先通过内核获取网络设备的接口状态并保存在 共享内存中,然后由用户态从共享内存中获取网络设备的接口状态,实现 了用户态获取使用共享内存获取网络设备的接口状态的目的,满足了用户 态对网络设备接口状态的感知需求,同时解决了用户态使用其他通讯方式 获取网络设备接口状态而损耗系统性能的问题。
图3显示了本发明优选实施例的用户态获取受限访问信息方法的流程 图;图4显示了图3中步骤S3的子流程图;图5显示了图3中步骤S4的 子流程图。
如图3所示,本发明优选实施例的用户态获取受限访问信息方法,包 括:
步骤S1,在Linux内核初始化时,申请大块连续内存作为共享内存使 用,并记录该内存的地址和大小。
具体来说,在Linux内核初始化时,通过Bigphysarea申请大块连续 内存作为共享内存使用,并记录该内存的地址和大小,共享内存用于存储 用户态所要感知的受限访问信息。Bigphysarea作为大块内存申请的补丁, 可以解决Linux无法申请大块连续内存的问题。其中,在步骤S1中所申 请内存的大小根据需要自定,以受限访问信息为网络设备接口的状态为 例,一般地,系统中网络设备的数量越多,所需要申请的内存越大,反之 越小。
步骤S2,内核创建受限访问信息的数据结构,将该数据结构的存储路 径指向所申请的所述共享内存的地址。
在本发明中,对于受限访问信息为网络设备接口状态而言,创建的受 限访问信息的数据结构至少包括网络设备接口的up/down状态、速率、双 工状态以及接口收发包统计。其中,受限访问信息数据结构可根据自身需 要进行修改或扩增,凡是用户态无法直接从内核获取的内容均可使用此方 法获得。在步骤S2中,内核创建受限访问信息的数据结构之后,将所创 建的受限访问信息的数据结构的存储路径指向步骤S1中所申请的共享内 存的地址,使得将受限访问信息的数据结构存储在共享内存中。
步骤S3,内核创建线程获取受限访问信息,将获取的受限访问信息赋 值给共享内存中受限访问信息的数据结构。
以受限访问信息为网络设备接口的状态为例,具体来说,步骤S3如 图4所示,包括:
步骤S31和步骤S32根据需要进行选取,无必然先后关系。
步骤S31,扫描网络设备接口的up/down状态,并将扫描到的网络设 备接口的up/down状态赋值给共享内存中受限访问信息的数据结构。使得 共享内存中存储有与网络设备相对应的接口up/down状态。
步骤S32,读取硬件状态寄存器获取相对应的网络设备接口的速率、 双工状态以及接口收发包统计,并将获取的网络设备接口的速率、双工状 态以及接口收发包统计赋值给共享内存中网络设备接口状态的数据结构。 使得共享内存中存储有与网络设备相对应的接口速率、双工状态以及接口 收发包统计等状态。
步骤S4,用户态在初始化时获取申请的所述共享内存的地址和大小, 创建与内核相同的受限访问信息的数据结构,并将所建立的数据结构的存 储路径指向共享内存的地址。
具体来说,步骤S4如图5所示,包括:
步骤S41,用户态初始化时,通过ioctl方式获取已申请的所述共享 内存的地址和大小。其中,ioctl是设备驱动程序中对设备的I/O通道进 行管理的函数,可用于用户态和内核间通信,通过ioctl方式共享内存进 行检测,检测出该内存的地址和大小,如果检测到地址和大小相符,则进 行获取。
步骤S42,采用mmap函数将所述共享内存的地址映射为用户态可操作 的共享内存的虚拟地址。通过步骤S42使得用户态可读取映射后的共享内 存中存储的内容。
步骤S43,用户态创建与内核相同的受限访问信息的数据结构。如果 受限访问信息为网络设备接口的状态,则用户态创建的受限访问信息的数 据结构至少包括网络设备接口的up/down状态、速率、双工状态以及接口 收发包统计。
步骤S44,将所建立的数据结构的存储路径指向所述共享内存的虚拟 地址。在步骤S43中用户态创建与内核相同的受限访问信息的数据结构之 后,将所创建的受限访问信息的数据结构的存储路径指向步骤S42中所申 请的共享内存的虚拟地址,使得用户可获取共享内存中存储的受限访问信 息。例如受限访问信息为网络设备接口的状态,则在步骤S43中用户态创 建与内核相同的网络设备接口状态的数据结构之后,将所创建的网络设备 接口状态的数据结构的存储路径指向步骤S42中所申请的共享内存的虚拟 地址,使得用户可获取共享内存中存储的网络设备接口的up/down状态、 速率、双工状态以及接口收发包统计等状态。
步骤S5,用户态创建线程获取共享内存中的受限访问信息。
在步骤S5中,以受限访问信息为网络设备接口的状态为例,具体地, 用户态创建线程,读取共享内存中的存储的网络设备接口的接口up/down 状态,根据需要读取共享内存中网络设备的的接口速率、双工状态以及接 口收发包统计等状态。由于内核不断地将更新的网络设备接口状态存储在 共享内存中,用户态可准确获取网络设备当前的接口状态。
通过采用上述流程,先通过内核获取受限访问信息如网络设备接口状 态,并将更新的网络设备的接口状态保存在共享内存中,然后用户态通过 读取共享内存,获取存储在共享内存中的网络设备接口状态,实现用户态 以损耗最低的系统性能获取网络设备接口的up/down状态、速率、双工状 态以及接口收发包统计等状态。本发明中,凡是用户态无法直接从内核获 取的受限访问信息均可使用此方法获得。
图6显示了本发明优选实施例的用户态获取受限访问信息装置的结构 示意图。
如图6所示,本发明优选实施例的用户态获取内核受限访问信息装置, 包括:存储单元10、内存申请单元1、数据结构创建单元2、受限访问信 息存储单元3、受限访问信息获取路径映射单元4以及受限访问信息获取 单元5。
存储单元10,连接到其他单元并为所连接的单元提供共享内存,以用 于其他单元在该共享内存存储对应的数据。具体地,存储单元10为内存 申请单元1、数据结构创建单元2、受限访问信息存储单元3和受限访问 信息获取路径映射单元4提供共享内存,使得内存申请单元1、数据结构 创建单元2、受限访问信息存储单元3和受限访问信息获取路径映射单元 4可将对应的数据均存储在该共享内存中。
内存申请单元1,与存储单元10相连,用于在Linux内核初始化时从 所述存储单元10中申请大块连续内存作为共享内存使用,并记录该内存 的地址和大小。具体来说,在Linux内核初始化时,内存申请单元1通过 Bigphysarea从存储单元10中申请大块连续内存作为共享内存使用,并记 录该内存的地址和大小,共享内存用于存储用户态所要感知的受限访问信 息,并为数据结构创建单元2、受限访问信息存储单元3、受限访问信息 获取路径映射单元4以及受限访问信息获取单元5所共用。Bigphysarea 作为大块内存申请的补丁,可以解决Linux无法申请大块连续内存的问题。 其中,内存申请单元1所申请内存的大小根据需要自定,以受限访问信息 为网络设备接口的状态为例,一般地,系统中网络设备的数量越多,所需 要申请的内存越大,反之越小。
数据结构创建单元2,与存储单元10相连,用于为内核创建受限访问 信息的数据结构,将创建的该数据结构的存储路径指向所述存储单元10 中共享内存的地址。其中,对于受限访问信息为网络设备接口状态而言, 创建的受限访问信息的数据结构至少包括网络设备接口的up/down状态、 速率、双工状态以及接口收发包统计。受限访问信息数据结构可根据自身 需要进行修改或扩增,凡是用户态无法直接从内核获取的内容均可使用此 方法获得。数据结构创建单元2为内核创建受限访问信息的数据结构之后, 将所创建的受限访问信息的数据结构的存储路径指向存储单元10中共享 内存(内存申请单元1所申请的大块连续内存)的地址,使得将受限访问 信息的数据结构存储在该共享内存中。
受限访问信息存储单元3,与存储单元10相连,用于为内核创建线程 获取受限访问信息,将获取的受限访问信息赋值给所述数据结构创建单元 2创建的受限访问信息的数据结构,实现受限访问信息存储于所述存储单 元10中的共享内存中。以受限访问信息为网络设备接口状态为例,具体 来说,受限访问信息存储单元3扫描网络设备接口的up/down状态,并将 扫描到的网络设备接口的up/down状态赋值给存储单元10中共享内存中 受限访问信息的数据结构,使得该共享内存中存储有与网络设备相对应的 接口up/down状态;和/或,根据需要,受限访问信息存储单元3读取硬 件状态寄存器获取相对应的网络设备接口的速率、双工状态以及接口收发 包统计,并将获取的网络设备接口的速率、双工状态以及接口收发包统计 赋值给存储单元10中共享内存中受限访问信息的数据结构,使得该共享 内存中存储有与网络设备相对应的接口速率、双工状态以及接口收发包统 计等状态。
受限访问信息获取路径映射单元4,与存储单元10相连,用于在用户 态初始化时,为用户态获取所述存储单元10中共享内存的地址和大小, 创建与内核相同的受限访问信息的数据结构,并将所建立的数据结构的存 储路径指向所述共享内存的地址。具体来说,用户态初始化时,受限访问 信息获取路径映射单元4通过ioctl方式获取已申请的所述存储单元10 中共享内存的地址和大小,然后采用mmap函数将所述共享内存的地址映 射为用户态可操作的虚拟地址,来实现将所建立的数据结构的存储路径指 向共享内存的地址。
受限访问信息获取单元5,与存储单元10相连,用于为用户态创建线 程,实现用户态获取所述存储单元10中的共享内存中存储的受限访问信 息。以受限访问信息为网络设备接口状态为例,具体地,受限访问信息获 取单元5为用户态创建线程,读取存储单元10中的共享内存中存储的网 络设备接口的up/down状态,根据需要读取共享内存中网络设备的的接口 速率、双工状态以及接口收发包统计等状态。由于内核不断地将更新的受 限访问信息存储在共享内存中,用户态根据受限访问信息获取单元5的获 取操作可准确获取当前的受限访问信息。
如上所述,根据本发明的一种用户态获取受限访问信息的方法及装 置,通过内核获取受限访问信息并保存在共享内存中,实现用户态获取保 存在共享内存中的受限访问信息,满足了用户态对受限访问信息的感知需 求,同时解决了用户态使用其他通讯方式获取受限访问信息而损耗系统性 能的问题。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解 释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精 神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发 明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要 求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
本文发布于:2023-04-14 07:45:03,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/86497.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |