一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种进程间通信的方法、装置及计算机存储介质与流程

2022-02-25 18:23:11 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种进程间通信的方法、装置及计算机存储介质。


背景技术:

2.基于微内核的操作系统架构(简称微内核架构)被广泛使用在云平台、嵌入式设备、移动设备、无人驾驶等场景中。微内核架构将自己真正的核心功能减少到非常少,将传统的操作系统内核(例如宏内核架构linux)中的众多的组件,比如系统程序等都放在用户态的进程中运行。
3.相比传统的操作系统内核,微内核架构能够保证任何承担复杂功能的模块都可以被放在用户态的进程中,并能够使不同的进程隔离运行。这种方式能够极大增强操作系统的隔离性和可靠性。比如,当一个恶意的用户态的应用程序攻击了一个用户态的系统程序后,只有这个系统程序能够访问的文件可能被恶意的应用程序访问到,而其它的系统程序仍然是处于被保护的状态。此外,如果是某个系统程序触发了内部的漏洞导致系统程序崩溃,也只会影响到这个系统程序本身,而不会影响到整个操作系统的正确性。并且管理员可以很容易地重新启动该系统程序来继续提供服务。这也提供了相比传统的操作系统内核更加好的可靠性。
4.然而,微内核架构也带来了巨大的性能损失。由于运行在用户态的应用程序和系统程序是隔离的,所以系统程序无法直接访问应用程序的地址空间,造成微内核架构的性能较差。


技术实现要素:

5.本技术实施例提供了一种进程间通信的方法、装置及计算机存储介质,用于提高操作系统的性能。
6.本技术实施例第一方面提供了一种进程间通信的方法,方法应用于计算机设备,方法包括:执行第一指令,第一指令用于指示第一进程调用第二进程,第一进程为用户态的应用程序或系统程序,第二进程为内核态的第一系统程序;响应于第一指令,内核根据第一指令将第一进程的上下文切换到第二进程的上下文;执行第二进程。其中,第一指令是预置的用于应用程序调用系统程序的一条指令。上下文是指进程的上下文,具体地,指的是一个操作系统中维护的一个进程的各种数据,通常包括进程使用的页表、进程的虚拟地址空间、进程的元数据以及进程的号码等等。
7.在内核会将第一进程的上下文切换到第二进程的上下文后,第二进程可以直接访问第一进程对应的虚拟地址空间,相比于现有的微内核中,系统程序的进程无法直接访问运行在用户态的其他进程对应的虚拟地址空间,本技术实施例可以提高操作系统的性能。除此之外,由于第一系统程序是以独立的第二进程运行的,而不是同内核一起以一个进程运行,所以相当于减小了内核的大小,从而减小了内核的攻击面。
8.作为一种可实现的方式,内核将第一进程的上下文切换到第二进程的上下文包括:内核确定第一指令中的第二进程的标识对应的第二进程的页表基地址,具体地,内核根据第二进程的标识可以确定第二进程的上下文,而页表基地址是上下文的一种;内核将用户态的页表寄存器中第一进程的页表基地址保存到内存中;内核将第二进程的页表基地址写入内核态的页表寄存器。其中,用户态和内核态各自使用不同的页表寄存器;页表寄存器用于存储页表基地址,页表基地址是页表的一部分。页表用于表示第一进程对应的虚拟地址与物理地址之间的关联关系,页表基地址是指虚拟地址空间中的页在物理地址内存中的基址。
9.内核将用户态的页表寄存器中第一进程的页表基地址保存到内存中,并将第二进程的页表基地址写入内核态的页表寄存器,从而实现了将第一进程的页表基地址切换为第二进程的页表基地址。
10.作为一种可实现的方式,第一指令携带有第一进程的虚拟地址,该虚拟地址可以是虚拟地址空间中的一个具体的虚拟地址,也可以是虚拟地址空间中的一段虚拟地址;在执行第二进程之后,方法还包括:第二进程根据第一进程的页表读取第一进程的虚拟地址对应的物理地址中的数据,页表中包含第一进程的虚拟地址与物理地址之间的关联关系。
11.由于第二进程可以根据第一进程的页表直接读取第一进程的虚拟地址对应的物理地址中的数据,而不需通过内核读取第一进程的虚拟地址对应的物理地址中的数据,因此能够提高操作系统的性能。
12.作为一种可实现的方式,方法还包括:执行第二指令,第二指令用于指示第二进程调用内核或第三进程;响应于第二指令,内核将第二进程的上下文切换到内核或第三进程的上下文,第三进程为在内核态运行的第二系统程序。其中,第二指令是预置的用于系统程序调用程序或系统程序调用内核的指令。
13.第二进程调用第二指令,可以实现第一系统程序对内核的调用,也可以实现第一系统程序对第二系统程序的调用。
14.作为一种可实现的方式,内核或第三进程与第二进程对第二虚拟地址具有不同的访问权限,第二虚拟地址属于内核空间的地址;内核根据第一指令将第一进程的上下文切换到第二进程的上下文包括:内核确定第一指令中的第二进程的标识对应的第二进程对第二虚拟地址的访问权限;内核将第二进程对第二虚拟地址的访问权限写入第一寄存器,第一寄存器用于存储内核空间的地址的访问权限。其中,第一寄存器用于存储内核空间的地址的访问权限。
15.具体地,对于第二虚拟地址,可以为第二进程和第三进程分别配置不同的域;同样地,对于第二虚拟地址,也可以为第二进程与内核分别配置不同的域。然后通过设置域与访问权限之间的关系,来实现对第二虚拟地址的访问权限的配置。
16.由于内核与第二进程对第二虚拟地址具有不同的访问权限,所以在上下文切换的过程中,将第二进程对第二虚拟地址的访问权限写入第一寄存器,实现对第二进程访问虚拟地址的控制,由于第一寄存器中仅存储有第二进程对第二虚拟地址的访问权限,而未存储有内核对第二虚拟地址的访问权限,所以可以实现第二进程与内核之间的隔离,保证内核对虚拟地址的访问不受第二进程的影响。
17.作为一种可实现的方式,内核将第二进程的上下文切换到内核或第三进程的上下
文包括:内核根据第二指令中的内核的标识确定内核对第二虚拟地址的访问权限;内核将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为内核对第二虚拟地址的访问权限。
18.第二进程和内核对第二虚拟地址具有不同的访问权限,从而可以实现对第二进程和内核的隔离,从而保证第二进程与内核之间的安全性。
19.作为一种可实现的方式,内核将第二进程的上下文切换到内核或第三进程的上下文包括:内核根据第二指令中的第三进程的标识确定第三进程对第二虚拟地址的访问权限;内核将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为第三进程对第二虚拟地址的访问权限。
20.第二进程和第三进程对第二虚拟地址具有不同的访问权限,从而可以实现对第二进程和第三进程的隔离,从而保证第二进程与第三进程之间的安全性。
21.作为一种可实现的方式,第二进程对第二虚拟地址的访问权限与第三进程对第二虚拟地址的访问权限分别存储在不同的页表中;或第二进程对第二虚拟地址的访问权限与内核对第二虚拟地址的访问权限分别存储在不同的页表中。
22.第二进程对第二虚拟地址的访问权限与第三进程对第二虚拟地址的访问权限分别存储在不同的页表中,这样,被恶意攻击后的第二进程仅能获取到存储第二进程访问权限的页表,所以仅能读取到第二进程对第二虚拟地址的访问权限,而读取不到第三进程对第二虚拟地址的访问权限,进一步保证了第二进程与第三进程的隔离性,提高了操作系统的安全性。
23.同样地,第二进程对第二虚拟地址的访问权限与内核对第二虚拟地址的访问权限也可以分别存储在不同的页表中,这样,被恶意攻击后的第二进程仅能获取到存储第二进程访问权限的页表,所以仅能读取到第二进程对第二虚拟地址的访问权限,而读取不到内核对第二虚拟地址的访问权限,进一步保证了第二进程与内核的隔离性,提高了操作系统的安全性。
24.作为一种可实现的方式,操作系统还包括以独立的第四进程运行在内核态的第三系统程序;第二进程和第四进程对内核空间的地址具有相同的访问权限。
25.由于第二进程和第四进程对内核空间的地址具有相同的访问权限,所以在上下文切换的过程中,不需要切换第二进程对内核空间的地址的访问权限和第四进程对内核空间的地址的访问权限,从而减少了上下文切换的开销,进而能够提高操作系统的性能。本技术实施例第二方面提供了一种进程间通信的装置,装置包括:执行单元,用于执行第一指令,第一指令用于指示第一进程调用第二进程,第一进程为用户态的应用程序或系统程序,第二进程为内核态的第一系统程序;切换单元,用于根据第一指令将第一进程的上下文切换到第二进程的上下文;执行单元,还用于执行第二进程。
26.作为一种可实现的方式,切换单元用于内核确定第一指令中的第二进程的标识对应的第二进程的页表基地址;将用户态的页表寄存器中第一进程的页表基地址保存到内存中;将第二进程的页表基地址写入内核态的页表寄存器。
27.作为一种可实现的方式,第一指令携带有第一进程的虚拟地址;装置还包括:读取单元,用于根据第一进程的页表读取第一进程的虚拟地址对应的物理地址中的数据,页表中包含第一进程的虚拟地址与物理地址之间的关联关系。
28.作为一种可实现的方式,执行单元还用于执行第二指令,第二指令用于指示第二进程调用内核或第三进程;切换单元还用于将第二进程的上下文切换到内核或第三进程的上下文,第三进程为在内核态运行的第二系统程序。
29.作为一种可实现的方式,内核或第三进程与第二进程对第二虚拟地址具有不同的访问权限,第二虚拟地址属于内核空间的地址;切换单元用于内核确定第一指令中的第二进程的标识对应的第二进程对第二虚拟地址的访问权限;将第二进程对第二虚拟地址的访问权限写入第一寄存器,第一寄存器用于存储内核空间的地址的访问权限。
30.作为一种可实现的方式,切换单元用于根据第二指令中的内核的标识确定内核对第二虚拟地址的访问权限;将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为内核对第二虚拟地址的访问权限。
31.作为一种可实现的方式,切换单元用于根据第二指令中的第三进程的标识确定第三进程对第二虚拟地址的访问权限;将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为第三进程对第二虚拟地址的访问权限。
32.作为一种可实现的方式,第二进程对第二虚拟地址的访问权限与第三进程对第二虚拟地址的访问权限分别存储在不同的页表中;或第二进程对第二虚拟地址的访问权限与内核对第二虚拟地址的访问权限分别存储在不同的页表中。
33.作为一种可实现的方式,操作系统还包括以独立的第四进程运行在内核态的第三系统程序;第二进程和第四进程对内核空间的地址具有相同的访问权限。
34.其中,以上各单元的具体实现、相关说明以及技术效果请参考本技术实施例第一方面的描述。
35.本技术实施例第三方面提供一种计算机设备,包括:至少一个处理器和存储器,存储器存储有可在处理器上运行的计算机执行指令,当所述计算机执行指令被所述处理器执行时,该计算机设备执行如上述第一方面中任意一种实施方式所述的进程间通信的方法。
36.本技术实施例第四方面提供一种芯片或者芯片系统,该芯片或者芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以执行如上述第一方面中任意一种实施方式所述的进程间通信的方法。
37.本技术实施例第五方面提供了一种计算机存储介质,该计算机存储介质用于储存为上述计算机设备所用的计算机软件指令,其包括用于执行为计算机设备所设计的程序;
38.该计算机设备可以如前述第二方面所描述的进程间通信的装置。
39.本技术实施例第六方面提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现上述第一方面中任意一种实施方式所述的进程间通信的方法。
40.从以上技术方案可以看出,本技术实施例具有以下优点:
41.执行第一指令,第一指令用于指示第一进程调用第二进程,第一进程为用户态的应用程序或系统程序,第二进程为内核态的第一系统程序;响应于第一指令,内核根据第一指令将第一进程的上下文切换到第二进程的上下文;执行第二进程;在内核会将第一进程的上下文切换到第二进程的上下文后,第二进程可以直接访问第一进程对应的虚拟地址空间,相比于现有的微内核中,系统程序的进程无法直接访问运行在用户态的其他进程对应
的虚拟地址空间,本技术实施例可以提高操作系统的性能;除此之外,由于第一系统程序是以第二进程运行的,而不是同内核一起以一个进程运行,所以相当于减小了内核的大小,从而减小了内核的攻击面。
附图说明
42.图1为现有的微内核的架构示意图;
43.图2为本技术实施例中操作系统的架构示意图;
44.图3为图2所示的操作系统的架构的一个具体实施例示意图;
45.图4为现有的宏内核的架构示意图;
46.图5为本技术实施例中进程间通信的方法的实施例示意图;
47.图6为本技术实施例中切换上下文的第一实施例示意图;
48.图7为本技术实施例中切换上下文的第二实施例示意图;
49.图8为本技术实施例中切换上下文的第三实施例示意图;
50.图9为虚拟地址与域的对应关系的存储位置的一个实施例示意图;
51.图10为虚拟地址与域的对应关系的存储位置的另一个实施例示意图;
52.图11为本技术实施例中设计操作系统的实施例示意图;
53.图12本技术实施例中进程间通信的装置的实施例示意图;
54.图13为申请实施例中计算机设备的实施例示意图。
具体实施方式
55.本技术实施例提供了一种进程间通信的方法,用于提高操作系统的系统性能。
56.首先,对内核态和用户态进行说明。内核态和用户态是中央处理器cpu的两种工作状态。若一个进程执行系统调用而执行内核代码,则称该进程处于内核态;若一个进程执行用户代码,则称该进程处于用户态。其中内核态又可以称为特权态,用户态又可以称为非特权态,下文将统一采用内核态和用户态进行说明。
57.具体地,在arm架构中,采用el0表示用户态,采用el1表示内核态;而在x86架构中,采用ring3表示用户态,采用ring0表示内核态。
58.如图1所示,在现有的微内核架构中,应用程序和系统程序分别以独立的进程运行在用户态,内核运行在内核态,应用程序需要通过内核访问系统程序。而由于应用程序和系统程序是相互隔离的,所以系统程序无法访问应用程序的地址空间,造成微内核架构的性能较低。
59.例如,应用程序需要获取系统程序的读/写服务,则需要至少两次数据拷贝,所以微内核架构的性能较低。具体地,如图1所示,以应用程序获取系统程序的写服务为例,即应用程序调用系统程序以将应用程序中的数据写入存储器中;则需要先由内核先访问应用程序的地址空间,以将应用程序的地址空间内的数据拷贝到内核的地址空间中;然后再由内核将内核的地址空间中的数据拷贝到系统程序的地址空间中,最后由系统程序将系统程序的地址空间中的数据写入存储器中。所以,在应用程序获取系统程序的写服务的过程中,至少需要进行第一次拷贝和第二次拷贝。
60.为此,本技术实施例提供了一种方案,在该方案中,先对操作系统的架构进行调
整,然后在调整后的操作系统的架构中进行进程间的通信,以实现程序间的访问。具体地,如图2所示,在本技术实施例中,操作系统的架构包括以独立的进程运行在内核态的系统程序,以独立的进程运行在用户态的应用程序,以及独立运行在内核态的内核。对比图1和图2可知,相对于现有的微内核架构来说,本技术实施例中系统程序的运行位置发生了改变,即系统程序以独立的进程运行在内核态。应理解,在操作系统中,内核态的进程具备较高的访问权限,即内核态的进程可以直接访问用户态的进程对应的地址空间,所以本技术实施例中的系统程序可以直接访问应用程序的地址空间,从而可以提高操作系统的系统性能。下文将对本技术实施例提供的方案进行具体介绍。
61.在介绍本技术实施例提供的进程间通信的方法前,先对本技术实施例中的相关术语进行说明。
62.进程是指程序的运行实体。程序是指令、数据及其组织形式的描述,进程是程序的运行实体。一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程可以是进程的实际运作单位,但本技术实施例不对线程和进程进行明确区分,描述过程中都用进程代替。
63.上下文是指进程的上下文,具体地,指的是一个操作系统中维护的一个进程的各种数据,通常包括进程使用的页表、进程的虚拟地址空间、进程的元数据以及进程的号码等等。请参阅图3,图3为图2所示的操作系统的架构的一个具体实施例示意图。如图3所示,本技术实施例提供了一种进程间通信的方法的一个实施例,该方法应用于计算机设备,计算机设备包括硬件层以及运行在硬件层上的操作系统,操作系统包括运行的内核(kernel)、以独立的第一进程运行在用户态的程序,以及以独立的第二进程运行在内核态的第一系统程序。
64.系统程序是指控制和协调计算机设备及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合。
65.应用程序是和系统软件相对应的,是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的程序的集合,分为应用软件包和用户程序。
66.其中,本技术实施例中的操作系统可以应用于英特尔intel架构、arm架构和aarch64架构等多种架构的平台中。
67.第一系统程序以独立的第二进程运行在内核态,可以理解为,内核态的系统程序作为独立的可执行文件被单独加载和运行。而如图4所示,在现有的宏内核架构中,系统程序和内核以一个进程运行在内核态,即系统程序和内核作为一个可执行文件被加载和运行,因此系统程序又可以看成是内核的一部分,即系统程序可以看成是内核中的一个功能模块,本技术实施例在内核中以虚线框的形式将系统程序这一功能模块标识出。对比图3和图4可知,相对于宏内核架构来说,本技术实施例是将与宏内核架构中与内核同处一个进程的系统程序从内核所在的进程中独立出来,即系统程序以独立的进程运行在内核态,而不是与内核处于同一个进程;对应地,在本技术实施例中,第一系统程序以独立的第二进程运行在内核态。
68.应理解,在操作系统中,内核和其他进程(包括应用程序的进程和系统程序的进程)通常是通过虚拟地址访问物理地址的,虚拟地址与物理地址之间存在对应关系。其中,物理地址用于内存芯片级的单元寻址,与地址总线相对应。
69.在图1所示的架构下,由于内核运行在内核态,其他进程运行在用户态,所以为了保证内核的安全,操作系统一般都强制其他进程不能直接访问内核(仅能通过调用的方式访问内核),而内核可以直接访问其他进程。具体的实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。
70.以32位的linux操作系统为例,其虚拟地址空间(也称为寻址空间或线性地址空间)为4g。理论上,内核、应用程序的进程和系统程序的进程各自对应的最大地址空间为4g。然而为了保证内核的安全,在linux操作系统中,最高的1g字节(从虚拟地址0xc0000000到虚拟地址0xffffffff)由内核使用,称为内核空间。而较低的3g字节(从虚拟地址0x00000000到虚拟地址0xbfffffff)由其他进程使用,称为用户空间。
71.运行在内核态的代码可以不受任何的限制,自由地访问整个虚拟地址空间(例如可以包括虚拟地址0xc0000000到虚拟地址0xffffffff,以及从虚拟地址0x00000000到虚拟地址0xbfffffff),也可以直接进行端口的访问。而运行在用户态的代码要受到cpu的诸多检查,且只能访问用户空间(例如从虚拟地址0x00000000到虚拟地址0xbfffffff)。
72.基于上述说明可知,在本技术实施例中,第一进程可以使用用户空间(可以是从虚拟地址0x00000000到虚拟地址0xbfffffff);而由于第二进程运行在内核态,所以第二进程可以使用内核空间(可以是从虚拟地址0xc0000000到虚拟地址0xffffffff),并且,第二进程在内核态的运行不受任何的限制,也可以访问用户空间(可以是从虚拟地址0x00000000到虚拟地址0xbfffffff)。
73.需要说明的是,在本技术实施例中,以独立的第一进程运行在用户态的程序可以是应用程序,也可以是系统程序,本技术实施例对此不做具体限定。第一系统程序可以有多种,例如可以为以下系统程序中的任意一种:文件系统程序、内存管理程序、网络程序和驱动程序。内核的功能包括但不限于异常处理功能、定时器功能、进程间通信功能和内存映射功能。
74.基于如图3所示的操作系统架构,如图5所示,本技术实施例提供的进程间通信的方法包括:
75.步骤101,执行第一指令,该第一指令用于指示第一进程调用第二进程,第一进程为用户态的应用程序或系统程序,第二进程为内核态的第一系统程序。具体地,第一进程调用第一指令,第一指令由硬件层中的中央处理器cpu执行,以使得内核将第一进程的上下文切换到第二进程的上下文。
76.其中,第一指令是预置的用于应用程序调用系统程序的一条指令。
77.步骤102,内核根据第一指令将第一进程的上下文切换到第二进程的上下文。
78.基于前文对上下文的相关说明,在本技术实施例中,内核将第一进程的上下文切换到第二进程的上下文可以理解为,内核将寄存器或程序计数器中的第一进程的各种数据保存至内存,并将内存中的第二进程的各种数据写入寄存器或程序计数器。
79.需要说明的是,第二进程的上下文和第一进程的上下文均包含多种,对于同一类上下文,第一进程使用的寄存器与第二进程使用的上下文可以相同,第一进程使用的寄存器与第二进程使用的上下文也可以不同;同样地,对于同一类上下文,第一进程使用的程序计数器与第二进程使用的上下文可以相同,第一进程使用的程序计数器与第二进程使用的上下文也可以不同。
80.由于第二进程的上下文和第一进程的上下文均包含多种,因此本技术实施例在此不做详述。后文将以具体地示例对该上下文切换的过程进行说明。
81.步骤103,执行第二进程。
82.可以理解的是,第二进程由cpu执行;由于cpu同一时间只能执行一个进程,在内核将第一进程的上下文切换到第二进程的上下文后,cpu暂停执行第一进程,并开始执行第二进程。
83.在本技术实施例中,当第一进程需要访问第二进程(也可以看成是第一进程调用第二进程)时,第一进程调用第一指令,此时cpu会执行该第一指令;在cpu执行第一指令后,内核会将第一进程的上下文切换到第二进程的上下文,从而完成第一进程对第二进程的调用。在内核会将第一进程的上下文切换到第二进程的上下文后,第二进程可以直接访问第一进程对应的虚拟地址空间,相比于现有的微内核中,系统程序的进程无法直接访问运行在用户态的其他进程对应的虚拟地址空间,本技术实施例可以提高操作系统的性能。除此之外,由于第一系统程序是以独立的第二进程运行的,而不是同内核一起以一个进程运行,所以相当于减小了内核的大小,从而减小了内核的攻击面。
84.基于前述说明可知,本技术实施例中的第二进程运行在内核态,第一进程运行在用户态,所以第一进程的配置信息和第二进程的配置信息存在不同,其中,该配置信息可以有多种。下面对此进行具体介绍。
85.基于前述各个实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,与物理地址存在映射关系的第一进程的虚拟地址属于用户空间的地址,与物理地址存在映射关系的第二进程的虚拟地址属于内核空间的地址。
86.基于前文说明可知,由于进程需要通过虚拟地址访问物理地址,所以在本技术实施例中,第一进程的配置信息和第二进程的配置信息均包括与物理地址存在映射关系的虚拟地址;具体地,与物理地址存在映射关系的第一进程的虚拟地址属于用户空间的地址,与物理地址存在映射关系的第二进程的虚拟地址属于内核空间的地址。
87.基于前述各个实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,第一进程的配置信息和第二进程的配置信息还可以包括用于存储上下文的寄存器。基于前述说明可知,对于同一类上下文,第一进程使用的寄存器与第二进程使用的上下文可以不同,示例性地,该寄存器可以为页表寄存器。其中,页表寄存器用于存储页表基地址,页表基地址是页表的一部分。页表用于表示第一进程对应的虚拟地址与物理地址之间的关联关系,页表基地址是指虚拟地址空间中的页在物理地址内存中的基址。
88.具体地,第一进程运行在用户态,所以第一进程使用的页表寄存器为用户态的页表寄存器,第二进程运行在内核态,所以第二进程使用的页表寄存器为内核态的页表寄存器。
89.基于页表基地址属于上下文的一种,在本技术实施例中,如图6所示,内核将第一进程的上下文切换到第二进程的上下文包括:
90.步骤201,内核确定第一指令中的第二进程的标识对应的第二进程的页表基地址。
91.可以理解的是,第一指令中可以携带第二进程的标识,内核根据该第二进程的标识可以确定第二进程的上下文,页表基地址为上下文的一种。
92.步骤202,内核将用户态的页表寄存器中第一进程的页表基地址保存至内存。
93.可以理解的是,通常是将页表基地址保存至内存中。
94.步骤203,内核将第二进程的页表基地址写入内核态的页表寄存器。
95.可以理解的是,通常情况下,内核将内存中的第二进程的页表基地址写入内核态的页表寄存器。
96.通过步骤201、步骤202和步骤203,内核将第一进程的页表基地址切换到第二进程的页表基地址。
97.在上述实施例中,内核将第一进程的上下文切换到第二进程的上下文,从而完成第一进程对第二进程的调用,在多数场景下,在完成第二进程的调用后,最终需将第二进程的上下文切回到第一进程的上下文。
98.所以,在本技术实施例提供的进程间通信的方法的另一个实施例中,本技术实施例提供的进程间通信的方法还可以包括:
99.第二进程调用第三指令,第三指令由硬件层中的中央处理器cpu执行,以使得内核将第二进程的上下文切换到第一进程的上下文。
100.与将第一进程的上下文切换到第二进程的上下文的过程类似,将第二进程的上下文切换到第一进程的上下文可以包括:
101.内核根据第一指令中的进程标识确定第二进程的页表基地址,内核将用户态的页表寄存器中第一进程的页表基地址保存,内核将第二进程的页表基地址写入内核态的页表寄存器。
102.基于前述实施例对将第一进程的上下文切换到第二进程的上下文的过程进行了说明,故可参照将第一进程的上下文切换到第二进程的上下文的过程的相关说明,对将第二进程的上下文切换到第一进程的上下文的过程进行理解。
103.除了页表寄存器外,用于存储上下文的寄存器还可以包括用于存储进程的号码的号码寄存器;具体地,基于前述各个实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,内核将第一进程的上下文切换到第二进程的上下文还可以包括:
104.内核将用户态的号码寄存器中的第一进程的号码保存至内存,确定第一指令中的第二进程的标识对应的第二进程的号码,并将第二进程的号码写入内核态的号码寄存器。
105.其中,第一进程的号码属于第一进程的标识的一种,第二进程的号码属于第二进程的标识的一种。
106.需要说明的是,用于存储上下文的寄存器中,还可以包括一种或多种寄存器,本技术实施例在此不进行一一列举。
107.上面通过多个示例说明了第一进程的配置信息和第二进程的配置信息是不同的,除此之外,第一进程的配置信息和第二进程的配置信息还可以包括异常向量表。
108.异常向量表中包括异常的描述和异常对应的地址。其中,异常可以理解为:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。当一种异常发生的时候,处理器会跳转到该异常对应的地址去执行异常处理程序,而该异常对应的地址,则为异常向量。
109.基于前述实施例的相关说明可知,在执行第一指令后,内核会将第一进程的上下文切换到第二进程的上下文;具体地,在执行第一指令后,会产生异常,该异常会被内核捕获,然后内核会根据异常向量表中对异常的描述以及异常向量,将第一进程的上下文切换
到第二进程的上下文。其中,在本技术实施例中,异常包含中断。
110.需要说明的是,由于第一进程运行在用户态,第二进程运行在内核态,所以第二进程对应的异常向量与第一进程对应的异常向量表不同。
111.基于前述说明可知,本技术实施例能够提升操作系统的性能,下面以一实施例具体说明本技术提供的方案能够提升操作系统的性能。
112.具体地,基于前述各个实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,第一指令携带有第一进程的虚拟地址,第一进程的可以是虚拟地址空间中的一个具体的虚拟地址,也可以是虚拟地址空间中的一段虚拟地址;在第一进程调用第一指令之后,方法还包括:
113.第二进程根据第一进程的页表读取第一进程的虚拟地址对应的物理地址中的数据,页表中包含第一进程的虚拟地址与物理地址之间的关联关系。
114.可以理解的是,第二进程运行在内核态,第一进程运行在用户态,由于内核态的进程具有较高的访问权限,即可以访问用户态的进程的虚拟地址,所以第二进程可以直接访问第一进程虚拟地址,从而读取第一进程的虚拟地址对应的物理地址中的数据。
115.例如,以独立的第一进程运行的应用程序需要获取以独立的第二进程运行的系统程序的写服务时,第一进程调用第一指令,以使得内核将第一进程的上下文切换到第二进程的上下文,这样,第二进程便可以直接访问第一指令中携带的第一进程的虚拟地址,然后读取第一进程的虚拟地址对应的物理地址中的数据,最终完成数据的写入。对比图1所示的获取写服务的示例可知,本技术实施例仅需要拷贝一次数据即可完成数据的写入,因此,本技术实施例能够提高操作系统的性能。
116.上面对用户态的第一进程调用内核态的第二进程的过程进行了说明,下面对内核态的第二进程调用内核态的其他对象的过程进行说明。
117.可以理解的是,除了第一系统程序外,内核态还可以运行有其他系统程序的进程;具体地,基于前述各个实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,操作系统还包括以独立的第三进程运行在内核态的第二系统程序。
118.基于此,方法还包括:
119.执行第二指令,第二指令用于指示第二进程调用内核或第三进程。
120.执行第二指令的过程与cpu执行第一指令的过程类似,具体请参阅前述对执行第一指令的过程的相关说明进行理解。
121.不同的是,第二指令是预置的用于系统程序调用程序或系统程序调用内核的指令。
122.内核将第二进程的上下文切换到内核或第三进程的上下文,第三进程为在内核态运行的第二系统程序。
123.其中,第二系统程序与第一系统程序不同,也可以为以下系统程序中的任意一种:文件系统程序、内存管理程序、网络程序和驱动程序。
124.第二进程调用第二指令,可以实现第一系统程序对内核的调用,也可以实现第一系统程序对第二系统程序的调用。
125.需要说明的是,由于第三进程的上下文和内核的上下文均包含多种,因此本技术实施例在此不做详述。后文将以具体地示例对该上下文切换的过程进行说明。
126.在本技术实施例中,由于第二进程、第三进程以及内核均运行在内核态,所以第二进程、第三进程以及内核可以共享一些信息,从而可以减少上下文切换的开销,以提高操作系统的性能。例如,第二进程、第三进程以及内核可以共用一个页表,即第二进程的虚拟地址与物理地址的对应关系、第三进程的虚拟地址与物理地址的对应关系、以及内核与为物理地址的对应关系均存储在同一页表中,在上下文切换的过程中,则无需进行页表寄存器的切换,从而可以调高操作系统的性能。
127.需要说明的是,第二进程、第三进程以及内核共享的信息可以根据实际需要进行选择,本技术实施例对此不做限定。
128.应理解,第二进程运行在内核态,所以理论上,第二进程与内核共用内核空间;此时,若当一个恶意的应用程序攻击了一个系统程序后,内核和第二系统程序(第三进程)也可能被恶意的应用程序访问到,所以若第二进程、第三进程以及内核处于未隔离状态,则操作系统的安全性较差。
129.为此,基于上述实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,内核或第三进程与第二进程对第二虚拟地址具有不同的访问权限,第二虚拟地址属于内核空间的地址。
130.需要说明的是,第二虚拟地址可以为内核空间中的特定地址,也可以为内核空间中的任意一个地址。若第二虚拟地址为内核空间中的任意一个地址,则第二进程与第三进程对内核空间中的每个地址都具有不同的访问权限,第二进程与内核对内核空间中的每个地址也都具有不同的访问权限,可以实现第二进程与内核,以及第二进程与第三进程之间的完全隔离;即使第二进程被恶意攻击,恶意攻击后的第二进程也仅具有第二进程本身对内核空间中地址的访问权限,而不会获取到内核或第三进程对内核空间中地址的访问权限,从而可以保证第二进程、第三进程和内核的安全性。若第二虚拟地址可以为内核空间中的特定地址,则意味着对于某一虚拟地址,第二进程与内核可以具有相同的访问权限,或者第二进程与第三进程可以具有相同的访问权限,这样,在进行第二进程与内核的上下文切换时,则不需要切换第二进程与内核对该某一虚拟地址的访问权限;同样地,在进行第二进程与第三进程的上下文切换时,则不需要切换第二进程与第三进程对该某一虚拟地址的访问权限。
131.基于上述说明,在本技术实施例中,如图7所示,内核将第一进程的上下文切换到第二进程的上下文还包括:
132.步骤301,内核确定第一指令中的第二进程的标识对应的第二进程对第二虚拟地址的访问权限。
133.可以理解的是,内核根据第二进程的标识可以确定第二进程的上下文,而第二进程对第二虚拟地址的访问权限也属于第二进程的上下文。
134.步骤302,内核将第二进程对第二虚拟地址的访问权限写入第一寄存器。
135.其中,第一寄存器用于存储内核空间的地址的访问权限。
136.在本技术实施例中,由于内核、第三进程分别与第二进程对第二虚拟地址具有不同的访问权限,所以在上下文切换的过程中,将第二进程对第二虚拟地址的访问权限写入第一寄存器,实现对第二进程访问虚拟地址的控制,由于第一寄存器中仅存储有第二进程对第二虚拟地址的访问权限,而未存储有内核对第二虚拟地址的访问权限,所以可以实现
第二进程分别与内核、第三进程之间的隔离,保证内核和第三进程对虚拟地址的访问不受第二进程的影响。
137.基于上述实施例,如图10所示,在本技术实施例提供的进程间通信的方法的另一个实施例中,内核将第二进程的上下文切换到内核或第三进程的上下文包括:
138.步骤401,内核根据第二指令中的内核的标识确定内核对第二虚拟地址的访问权限。
139.可以理解的是,由于内核与第二进程对第二虚拟地址具有不同的访问权限,所以在上下文切换的过程中,先确定内核对第二虚拟地址的访问权限。
140.步骤402,内核将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为内核对第二虚拟地址的访问权限。
141.在确定内核对第二虚拟地址的访问权限后,内核将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为内核对第二虚拟地址的访问权限,从而实现对内核访问虚拟地址的控制,进而实现第二进程与内核之间的隔离。
142.同样地,内核将第二进程的上下文切换到内核或第三进程的上下文还可以包括:内核根据第二指令中的第三进程的标识确定第三进程对第二虚拟地址的访问权限;内核将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为第三进程对第二虚拟地址的访问权限。
143.需要说明的是,内核将第二进程的上下文切换到第三进程的上下文的过程,与内核将第二进程的上下文切换到内核的上下文的过程类似,具体可参照前述对内核将第二进程的上下文切换到内核的上下文的过程的相关说明进行理解。
144.在本技术实施例中,第二进程对第二虚拟地址的访问权限与第三进程对第二虚拟地址的访问权限分别存储在不同的页表中,这样,被恶意攻击后的第二进程仅能获取到存储第二进程访问权限的页表,所以仅能读取到第二进程对第二虚拟地址的访问权限,而读取不到第三进程对第二虚拟地址的访问权限,进一步保证了第二进程与第三进程的隔离性,提高了操作系统的安全性。
145.同样地,第二进程对第二虚拟地址的访问权限与内核对第二虚拟地址的访问权限也可以分别存储在不同的页表中,这样,被恶意攻击后的第二进程仅能获取到存储第二进程访问权限的页表,所以仅能读取到第二进程对第二虚拟地址的访问权限,而读取不到内核对第二虚拟地址的访问权限,进一步保证了第二进程与内核的隔离性,提高了操作系统的安全性。需要说明的是,对于第二虚拟地址,存在多种方法为第二进程和内核分别配置不同的访问权限,本技术实施例对此不做具体限定。下面介绍其中一种配置访问权限的方法。在该方法中,对于第二虚拟地址,为第二进程和第三进程分别配置不同的域;同样地,对于第二虚拟地址,也可以为第二进程与内核分别配置不同的域。然后通过设置域与访问权限之间的关系,来实现对第二虚拟地址的访问权限的配置。
146.基于上述实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,对于第二进程,第二虚拟地址对应第一域(domain);对于内核或第三进程,第二虚拟地址对应第二域。下面以内核为例进行说明。
147.可以理解的是,对于第二虚拟地址,第二进程和内核分别对应不同的域,因此可以预先配置域与访问权限的对应关系,基于域与访问权限的对应关系即可确定第二进程对第
二虚拟地址的访问权限,以及内核对第二虚拟地址的访问权限。
148.具体地,内核根据第一指令中的进程标识确定第二进程对第二虚拟地址的访问权限包括:内核根据第一指令中的第二进程的标识确定第一域与访问权限的对应关系。
149.内核将第二进程对第二虚拟地址的访问权限写入第一寄存器包括:内核将第一域与访问权限的对应关系写入第一寄存器。
150.同样地,基于上述实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,内核根据第一指令中的内核标识确定内核对第二虚拟地址的访问权限包括:内核根据第一指令中的内核标识确定第二域与访问权限的对应关系。
151.内核将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为内核对第二虚拟地址的访问权限包括:内核将第一寄存器中第一域与访问权限的对应关系,更新为第二域与访问权限的对应关系。
152.基于上述各个实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,第二虚拟地址和第一域的对应关系,以及内核和第二域的对应关系分别存储在不同的页表中。
153.例如,在arm架构中,第二虚拟地址和第一域的对应关系,以及内核和第一域的对应关系可以分别存储在不同的一级页表中。由于一级页表的地址存储在零级页表中,所以如图8所示,第二进程和内核可以分别对应不同的零级页表。除此之外,如图9所示,第二进程和内核可以对应相同的零级页表,然后在零级页表中划分不同的地址,使得其中一个地址指向一个一级页表,另一个地址指向另一个一级页表,从而实现第二进程和内核对应不同的一级页表,这样,便可以将第二虚拟地址和第一域的对应关系,以及内核和第一域的对应关系分别存储在不同的一级页表中。
154.在上述各个实施例中,对于第二虚拟地址,内核对应的域与第一进程对应的域不同,不同的域对应不同的访问权限;需要说明的是,作为另一种可实现的方式,对于第二虚拟地址,内核对应的域与第一进程对应的域可以相同,但对于同一域来说,内核和第一进程分别具有不同的访问权限。例如,对于第二虚拟地址,内核和第一进程均对应第三域,内核对第三域的访问权限与第一进程对第三域的访问权限不同。
155.在上述各个实施例中,第二进程和内核对第二虚拟地址具有不同的访问权限,从而可以实现对第二进程和内核的隔离,从而保证第二进程与内核之间的安全性;需要说明的是,在某些场景下,也可以牺牲一定的安全性,来提高操作系统的性能。
156.具体地,基于上述各个实施例,在本技术实施例提供的进程间通信的方法的另一个实施例中,操作系统还包括以独立的第四进程运行在内核态的第三系统程序;第二进程和第四进程对内核空间的地址具有相同的访问权限。
157.在本技术实施例中,由于第二进程和第四进程对内核空间的地址具有相同的访问权限,所以在上下文切换的过程中,不需要切换第二进程对内核空间的地址的访问权限和第四进程对内核空间的地址的访问权限,从而减少了上下文切换的开销,进而能够提高操作系统的性能。
158.其中,第三系统程序与第一系统程序不同,也可以为以下系统程序中的任意一种:文件系统程序、内存管理程序、网络程序和驱动程序。
159.综上所述可知,本技术实施例提供的方案可以看成是将现有的微内核架构中运行
在用户态的系统程序转移到内核态,也可以看成是将现有的宏内核架构中与内核同一进程的系统程序独立出来,即与内核同一进程的系统程序以独立的进程运行。具体地,如图11所示,在操作系统的设计阶段,可以通过以下步骤使得系统程序能够以第二进程运行在内核态。
160.步骤501,开发人员将第一系统程序抽象成独立的可执行文件。
161.步骤502,开发人员将第二进程对应的虚拟地址设置为内核空间的地址。
162.步骤503,开发人员将第二进程对应的页表寄存器设置为内核态的页表寄存器。
163.步骤504,开发人员对第二进程对应的异常向量表进行调整。
164.需要说明的是,可参照前述相关说明对步骤502、步骤503以及步骤505进行具体理解。
165.步骤505,开发人员设定第二进程和内核各自对内核空间的访问权限。
166.具体地,可以参照前述实施例中第二进程和内核对第二虚拟地址的访问权限的相关说明,对步骤505进行理解。
167.步骤506,开发人员增加第二进程的内核态标识。
168.可以理解的是,通过执行步骤501至步骤506,以及可能存在的其他操作,可以使系统程序能够以独立第二进程运行在内核态。其中,步骤501至步骤506之间的执行顺序可以根据实际需要进行调整,本技术实施例对此不做具体限定。
169.请参阅图12,本技术实施例还提供了一种进程间通信的装置,装置包括:
170.执行单元601,用于执行第一指令,第一指令用于指示第一进程调用第二进程,第一进程为用户态的应用程序或系统程序,第二进程为内核态的第一系统程序;切换单元602,用于根据第一指令将第一进程的上下文切换到第二进程的上下文;执行单元601,还用于执行第二进程。
171.作为一种可实现的方式,切换单元602用于内核确定第一指令中的第二进程的标识对应的第二进程的页表基地址;将用户态的页表寄存器中第一进程的页表基地址保存到内存中;将第二进程的页表基地址写入内核态的页表寄存器。
172.作为一种可实现的方式,第一指令携带有第一进程的虚拟地址;装置还包括:读取单元603,用于根据第一进程的页表读取第一进程的虚拟地址对应的物理地址中的数据,页表中包含第一进程的虚拟地址与物理地址之间的关联关系。
173.作为一种可实现的方式,执行单元601还用于执行第二指令,第二指令用于指示第二进程调用内核或第三进程;切换单元602还用于将第二进程的上下文切换到内核或第三进程的上下文,第三进程为在内核态运行的第二系统程序。
174.作为一种可实现的方式,内核或第三进程与第二进程对第二虚拟地址具有不同的访问权限,第二虚拟地址属于内核空间的地址;切换单元602用于内核确定第一指令中的第二进程的标识对应的第二进程对第二虚拟地址的访问权限;将第二进程对第二虚拟地址的访问权限写入第一寄存器,第一寄存器用于存储内核空间的地址的访问权限。
175.作为一种可实现的方式,切换单元602用于根据第二指令中的内核的标识确定内核对第二虚拟地址的访问权限;将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为内核对第二虚拟地址的访问权限。
176.作为一种可实现的方式,切换单元602用于根据第二指令中的第三进程的标识确
定第三进程对第二虚拟地址的访问权限;将第一寄存器中第二进程对第二虚拟地址的访问权限,更新为第三进程对第二虚拟地址的访问权限。
177.作为一种可实现的方式,第二进程对第二虚拟地址的访问权限与第三进程对第二虚拟地址的访问权限分别存储在不同的页表中;或第二进程对第二虚拟地址的访问权限与内核对第二虚拟地址的访问权限分别存储在不同的页表中。
178.作为一种可实现的方式,操作系统还包括以独立的第四进程运行在内核态的第三系统程序;第二进程和第四进程对内核空间的地址具有相同的访问权限。
179.其中,以上各单元的具体实现、相关说明以及技术效果请参考本技术实施例进程间通信的方法的描述。
180.请参阅图13,图13为本技术实施例中计算机设备的结构示意图。
181.本技术实施例中计算机设备一个实施例可以包括一个或一个以上处理器701,存储器702,通信接口703。
182.存储器702可以是短暂存储或持久存储。更进一步地,处理器701可以配置为与存储器702通信,在控制设备上执行存储器702中的一系列指令操作。
183.本实施例中,处理器701可以执行前述各个实施例中方法的步骤,具体此处不再赘述。
184.示例性地,处理701可以执行以下步骤:
185.执行第一指令,第一指令用于指示第一进程调用第二进程,第一进程为用户态的应用程序或系统程序,第二进程为内核态的第一系统程序;
186.响应于第一指令,内核根据第一指令将第一进程的上下文切换到第二进程的上下文;
187.执行第二进程。
188.在本技术实施例中,处理器701中的具体功能模块划分可以与前述图12中所描述的功能模块的划分方式类似,此处不再赘述。
189.本技术实施例还提供一种芯片或者芯片系统,该芯片或者芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以执行前述各个实施例中方法的步骤,具体此处不再赘述。
190.其中,芯片中的通信接口可以为输入/输出接口、管脚或电路等。
191.本技术实施例还提供了芯片或者芯片系统的第一种实施方式,本技术中上述描述的芯片或者芯片系统还包括至少一个存储器,该至少一个存储器中存储有指令。该存储器可以为芯片内部的存储单元,例如,寄存器、缓存等,也可以是该芯片的存储单元(例如,只读存储器、随机存取存储器等)。
192.本技术实施例还提供了一种计算机存储介质,该计算机存储介质用于储存为上述计算机设备所用的计算机软件指令,其包括用于执行为计算机设备所设计的程序。
193.该计算机设备可以如前述图12所描述的进程间通信的装置。
194.本技术实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现前述各个实施例所示的方法中的流程。
195.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,
装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
196.在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
197.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
198.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
199.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献