一种虚拟机与主机的启动通信方法及相关装置与流程

文档序号:17441496发布日期:2019-04-17 04:49阅读:191来源:国知局
一种虚拟机与主机的启动通信方法及相关装置与流程

本申请涉及计算机技术领域,特别涉及一种虚拟机与主机的启动通信方法、计算机设备、装置以及计算机可读存储介质。



背景技术:

随着信息技术的不断发展,为了进一步降低计算成本,出现了云计算平台。其中,云计算平台的核心技术就是虚拟化技术,即把一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可以运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响。

在应用虚拟化技术时,需要虚拟机和主机之间进行相互的通信交互,才可以实现主机接收到部分的信息进行相应的操作,或者是向虚拟机发送消息以便虚拟机进行相应的操作。一般现有技术是通过在物理内存中设置通信文件,使主机和虚拟机都访问该通信文件,以便实现数据交互。但是,当主机中存在多个虚拟机时,主机和多个虚拟机均是访问同一个通信文件实现主机与虚拟机之间的通信。由于只是通过同一个通信文件进行访问,当虚拟机主动向主机进行通信时,主机只能接收到消息,而无法确定是哪一个虚拟机发送的消息,进而无法返回相应的消息。因此,现有技术只能实现主机向虚拟机发送消息,虚拟机再返回相应的消息,无法实现虚拟机向主机主动发消息,造成虚拟机与主机之间的应用场景受限。当虚拟机出现业务请求时,无法自主主动向主机进行请求,只能借助技术人员等外部操作实现,降低了虚拟机的运行效率。

因此,如何使得虚拟机主动向主机进行通信是本领域技术人员关注的重点问题。



技术实现要素:

本申请的目的是提供一种虚拟机与主机的启动通信方法、计算机设备、装置以及计算机可读存储介质,通过触发异常的方式使虚拟机监控器向虚拟机发送id号,虚拟机就可以通过id号和请求消息向主机进行主动消息请求,提高了虚拟机与主机之间通信的效率。

为解决上述技术问题,本申请提供一种虚拟机与主机的启动通信方法,包括:

当虚拟机接收到通信请求时,所述虚拟机执行预设操作触发虚拟机异常事件,以便虚拟机监控器接收到所述预设操作对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机;

将所述id号和请求消息发送至主机,以便所述主机根据所述id号和所述请求信息进行请求处理,并根据所述id号将请求处理结果发送至所述虚拟机。

可选的,当虚拟机接收到通信请求时,所述虚拟机执行预设操作触发虚拟机异常事件,以便虚拟机监控器接收到所述预设操作对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机,包括:

当所述虚拟机接收到通信请求时,所述虚拟机对保留端口进行读操作或写操作触发虚拟机异常事件,以便虚拟机监控器接收到对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机。

可选的,当虚拟机接收到通信请求时,虚拟机执行预设操作触发虚拟机异常事件,以便虚拟机监控器接收到所述预设操作对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机,包括:

所述虚拟机执行预设退出指令触发虚拟机异常事件,以便虚拟机监控器接收到对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机。

可选的,所述预设退出指令为vmcall。

可选的,虚拟机监控器接收到所述预设操作对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机,包括:

所述虚拟机监控器接收所述退出消息;

根据所述退出消息进行id号查找,得到所述虚拟机对应的所述id号;

将所述id号写入预设寄存器,以便所述虚拟机从所述预设寄存器中获取到所述id号。

本申请还提供一种计算机设备,包括:

虚拟机退出模块,用于当虚拟机接收到通信请求时,执行预设操作触发虚拟机异常事件,以便虚拟机监控器接收到所述预设操作对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机;

通信请求模块,用于将所述id号和请求消息发送至主机,以便所述主机根据所述id号和所述请求信息进行请求处理,并根据所述id号将请求处理结果发送至所述虚拟机。

可选的,还包括:

退出消息接收模块,用于接收所述退出消息;

id号查找模块,用于根据所述退出消息进行id号查找,得到所述虚拟机对应的所述id号;

id号写入模块,用于将所述id号写入预设寄存器,以便所述虚拟机从所述预设寄存器中获取到所述id号。

可选的,所述虚拟机退出模块,具体用于当虚拟机接收到通信请求时,对保留端口进行读操作或写操作触发虚拟机异常事件,以便虚拟机监控器接收到对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机。

本申请还提供一种装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上所述的启动通信方法的步骤。

本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的启动通信方法的步骤。

本申请所提供的一种虚拟机与主机的启动通信方法,包括:当虚拟机接收到通信请求时,所述虚拟机执行预设操作触发虚拟机异常事件,以便虚拟机监控器接收到所述预设操作对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机;将所述id号和请求消息发送至主机,以便所述主机根据所述id号和所述请求信息进行请求处理,并根据所述id号将请求处理结果发送至所述虚拟机。

通过虚拟机执行预设操作触发虚拟机异常事件,在物理计算机中可以跳出虚拟机环境以便虚拟机监控器接收到退出消息,虚拟机监控器根据退出消息将该虚拟机对应的id号发送至虚拟机,此时虚拟机就可以将id号和请求消息同时发送至主机,以便主机在通信文件获知具体是哪一个虚拟机发送的请求消息,进而对该虚拟机进行相应的请求处理,并返回对应的请求处理结果,实现了虚拟机主动向主机进行消息发送,拓宽了虚拟机和主机通信机制的应用范围,并且当出现业务请求时,虚拟机可以不通过外部操作主动向主机发送相应的业务请求消息,提高了虚拟机处理相应的业务请求的效率。

本申请还提供一种计算机设备、装置以及计算机可读存储介质,具有以上有益效果,在此不做赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种虚拟机与主机的启动通信方法的流程图;

图2为本申请实施例所提供的启动通信方法中的id号获取处理的流程图;

图3为本申请实施例所提供的一种计算机设备的结构示意图。

具体实施方式

本申请的核心是提供一种虚拟机与主机的启动通信方法、计算机设备、装置以及计算机可读存储介质,通过触发异常事件的方式使虚拟机监控器向虚拟机发送id号,虚拟机就可以通过id号和请求消息向主机进行主动消息请求,提高了虚拟机与主机之间通信的效率。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

现有技术中,主机和多个虚拟机均是访问同一个通信文件实现主机与虚拟机之间的通信,而由于只是通过一个通信文件进行访问,当虚拟机主动向主机进行通信时,主机只能接收到对应的消息,而无法确定具体是哪一个虚拟机发送的消息,进而无法向请求消息的虚拟机返回消息。也就是只能实现主机向虚拟机主动发送消息,虚拟机再返回相应的消息,而无法实现虚拟机向主机主动发消息,造成虚拟机与主机之间的应用场景受限,当虚拟机出现业务请求时,无法自主主动向主机进行请求,只能借助技术人员等外部操作实现,降低了虚拟机的运行效率。

因此,本申请提供一种虚拟机与主机的启动通信方法,通过虚拟机执行预设操作触发虚拟机异常事件,在物理计算机中可以跳出虚拟机环境以便虚拟机监控器接收到退出消息,虚拟机监控器根据退出消息将该虚拟机对应的id号发送至虚拟机,此时虚拟机就可以将id号和请求消息同时发送至主机,以便主机在通信文件获知具体是哪一个虚拟机发送的请求消息,进而对该虚拟机进行相应的请求处理,并返回对应的请求处理结果,实现了虚拟机主动向主机进行消息发送,拓宽了虚拟机和主机通信机制的应用范围,并且当出现业务请求时,虚拟机可以不通过外部操作主动向主机发送相应的业务请求消息,提高了虚拟机处理相应的业务请求的效率。

请参考图1,图1为本申请实施例所提供的一种虚拟机与主机的启动通信方法的流程图。

本实施例中,该方法可以包括:

s101,当虚拟机接收到通信请求时,虚拟机执行预设操作触发虚拟机异常事件,以便虚拟机监控器接收到预设操作对应的退出消息,并根据退出消息将虚拟机对应的id号发送至虚拟机;

本步骤旨在当虚拟机接收到通信请求时,虚拟机执行预设操作触发虚拟机异常事件,使得该虚拟机触发虚拟机异常事件,以便虚拟机监控器发现该虚拟机异常事件,也就是接收到该预设操作对应的退出消息,然后虚拟机监控器再根据其退出消息将该虚拟机对应的id号发送至虚拟机中。由于在虚拟机和主机同一个通信文件的条件下,虚拟机无法通过正常的方式向主机或虚拟机监控器进行id号的请求操作,因此,只能通过触发异常事件的方式,通知虚拟机监控器,以便虚拟机监控器向其发送对应的id号。

本实施例中主要是解决虚拟机可以主动向主机发送通信请求的问题,而现有技术中主要是由于虚拟机没有办法获取到本虚拟机在本机中的id号,而没有办法向主机主动建立有效的通信通道。因此,本实施例主要是当虚拟机需要向主机发送相应的消息时,获取到该虚拟机在主机中的id号。具体的,本实施例中是通过触发虚拟机监控器,使虚拟机监控器向虚拟机发送该虚拟机的id号。

因此,本步骤的主要目的就是触发虚拟机异常事件以告知虚拟机监控器,也就是使虚拟机监控器得知是哪个虚拟机需要向主机请求相应的消息,并且向虚拟机发送对应的id号。

具体的,本步骤就是通过执行预设操作去触发虚拟机异常,该预设操作可以包括访问预设的端口,也可以是执行预设退出指令,该预设退出指令可以使虚拟机换出虚拟机环境,到达虚拟机监控器环境,还可以是执行相应的异常中断,引发虚拟机中断从而跳出虚拟机环境。可见,本步骤中执行预设操作的方式并不唯一,在实际应用过程中可以选用合适的异常操作触发虚拟机异常事件,在此不做具体限定。

其中,退出消息是在虚拟机环境中,当虚拟机出现异常事件时表示发生异常情况的消息。当虚拟机监控器接收到退出消息时就知道发生了异常情况,并且由于异常操作的不同所对应的退出消息也不同。因此,当虚拟机监控器接收到预设操作对应的退出消息时,就知道此时不用对异常情况进行处理,而是向虚拟机发送该虚拟机对应的id号。

需要说明的是,本实施例中的虚拟机监控器,是在计算机上的软件,固件或是硬件,能用来创建与执行虚拟机。常见的虚拟机监控器包括kvm、xen等。当虚拟机监控器为计算机上的软件时,虚拟机监控器与虚拟机传送id号时,就是在同一个虚拟机中传送。当虚拟机监控器为硬件时,那么虚拟机监控器与虚拟机之间传送id号时,就可能是在两个硬件之间进行传送,此时就需要通过网络或者是串口的通信方式进行传送,在此不做具体限定。

可选的,本步骤可以包括:

虚拟机对预设端口进行读操作或写操作,以便虚拟机监控器接收到对应的退出消息,并根据退出消息将虚拟机对应的id号发送至虚拟机。

本可选方案主要是通过对预设端口进行写操作或读操作,以便触发虚拟机的异常。可见,本可选方案中对预设端口进行读写操作就是s101中的预设操作。

一般的,在虚拟机中存在一些端口,这些端口是没有办法进行访问的端口,当系统进行访问时就触发虚拟机异常。也就是预设端口,一般的可以实现这些效果的端口存在多种,其中保留端口就是这样的端口。

因此,当虚拟机的系统去访问保留端口时,就可以触发虚拟机异常,以便虚拟机监控器可以接收到对应的退出消息。

可选的,本步骤可以包括:

虚拟机执行预设退出指令,以便虚拟机监控器接收到对应的退出消息,并根据退出消息将虚拟机对应的id号发送至虚拟机。

本可选方案主要是通过执行预设退出指令,以便触发虚拟机的异常。可见,本可选方案中执行预设退出指令的操作就是s101中的预设操作。

一般的,在虚拟机的环境中,可以存在一些预设退出指令,执行这些预设退出指令时就可以跳出虚拟机环境,以便虚拟机监控器接收到对应的退出消息,并执行后续的步骤。

具体的,该预设退出指令可以为vmcall。在虚拟机环境中执行该指令可以引发虚拟机的离开事件,也就是异常事件,退出到虚拟机监控器环境。

s102,虚拟机将id号和请求消息发送至主机,以便主机根据id号和请求信息进行请求处理,并根据id号将请求处理结果发送至虚拟机。

在s101的基础上,本步骤中虚拟机就获取到了该虚拟机自身在主机中的id号,此时将该id号和请求消息通过原有的通信文件进行消息发送时,主机就可以知道是哪个虚拟机发出的请求消息,也就是得到了该虚拟机的id号,进而可以根据该id号与该虚拟机之间建立相应的通信连接。具体的,当请求消息是对该虚拟机进行某些操作时,那么该主机就可以根据该id号对该虚拟机进行操作,并且将操作结果的信息再根据该id号返回至该虚拟机中。

需要知道是,在现有技术中当主机和虚拟机之间通过通信文件进行通信时,由于主机保存有每个虚拟机对应的id号,因此当主机可以根据每个虚拟机对应的id号对对应的虚拟机主动进行通信。因此,在以通信文件进行通信时,主机和虚拟机之间通信的基础,或者是通信发起的必要条件就是,通信发起方知道对方虚拟机的id号,或者是本虚拟机的id号。而现有技术中只有主机保存有虚拟机的id号,所以现有技术只能实现主动向虚拟机进行通信,而由于id号是主机在虚拟机创建时对虚拟机分配的,因此虚拟机本身是没有存在该id号。

可见,通过s101虚拟机就获取到了该虚拟机对应的id号,在此基础上,s103将该id号和请求消息一并发送至主机,就实现了虚拟机主动向主机进行通信。

综上所述,本实施例通过虚拟机执行的预设操作,以便通过该异常操作对应的退出消息通知到虚拟机监控器,以便虚拟机监控器可以将id号传送回该虚拟机,也就是虚拟机可以获取到该虚拟机的id号,在此基础上,该虚拟机就可以通过该id号向主机主动进行通信请求,实现了更高效的虚拟机与主机之间的相同通信的方法。

基于上一实施例,本实施例主要是上一实施例中虚拟机监控器如何发送id号的处理做一个优选的说明,其他部分与上一实施例大体相同,相同部分可以参考上一实施例,在此不做赘述。

请参考图2,图2为本申请实施例所提供的启动通信方法中的id号获取处理的流程图。

本实施例中,该处理可以包括:

s201,虚拟机监控器接收退出消息;

本步骤旨在使虚拟机监控器接收到退出消息。也就是虚拟机触发了虚拟机异常,此时就会产生对应的退出消息,进一步的虚拟机监控器就会接收到该退出消息。

s202,根据退出消息进行id号查找,得到虚拟机对应的id号;

在s201的基础上,本步骤旨在根据退出消息在主机中获取到id号,也就是根据退出消息进行id号查找,并得到该id号。

一般的,每个虚拟机对应的id号都在当该虚拟机创建时,主机对每个虚拟机均分配了一个id号,该id号就保存在主机中,虚拟机进而就可以根据发出的退出消息查找到该虚拟机对应的id号。

s203,将id号写入预设寄存器,以便虚拟机从预设寄存器中获取到id号。

在s202的基础上,本步骤旨在将该id号发送至虚拟机中,具体的,也就是本步骤中将id号写入到预设寄存器中,虚拟机可以通过该预设寄存器中获取到这个写入的id号。

本实施例通过虚拟机监控器获取到id号,并且通过寄存器的方式将该id号从虚拟机监控器传送至虚拟机中,也就是使虚拟机获取到它的id号,实现了一种id号的获取方式,使得虚拟机可以主动向主机发送通信消息。

在以上所有实施例的基础上,以下还提供一种更加具体的启动通信方法。该实施例中采用以上实施例中的启动通信方法,实现了虚拟机主动向主机进行资源请求,使主机可以接收到的虚拟机请求并做出相应的更改,避免了使用外部力量对虚拟机资源进行修改,提高了虚拟机进行动态资源调整的效率。

具体的,本实施例可以包括:

(1)主机为所有的虚拟机都添置一个通信通道,用于虚拟机和主机间进行通信。在虚拟机中,该通信通道以设备的形式呈现,可以通过打开这个设备,对设备进行读、写与主机进行交互。在主机中,该通信通道以文件的形式呈现,通过读、写文件接收请求并反馈结果。

(2)虚拟机可以与虚拟机监控器交互,得知此虚拟机对应的id号。其中业界常用的虚拟机监控器有kvm、xen等,它们的作用是隐藏底层物理硬件,支持多个运行在其上的虚拟机可以透明地使用和共享同一个硬件。虚拟机监控器中包含在其上运行的虚拟机相关信息,比如虚拟机的id号。

(3)虚拟机向主机发送的动态资源调整请求信息,至少包含两个部分,此虚拟机对应的id号和请求的类型,其中请求的类型可以为申请设备、释放设备等。主机收到来自虚拟机的请求后,就可根据请求信息中包含的id号和请求类型,为对应虚拟机执行相关操作,并根据对应的id号将操作结果(成功或失败)反馈给虚拟机。

基于上述内容,可见在虚拟机和主机中存在不同实现方法:

在虚拟机中:

(1)获取虚拟机对应的id号工具:与虚拟机监控器打交道,得到对应的id号。

(2)虚拟机请求资源的客户端(client):在获知虚拟机对应id的基础上,基于业务需求向主机发送请求,比如申请设备、释放设备等。

在主机中:

(3)主机接收请求的服务端(server):主机通过监听不同虚拟机对应的通信文件,判断是否有虚拟机请求到达,若有新请求,则处理请求;否则阻塞,等待着请求到达。

为了更清楚地说明本发明的技术方案,下面将对本实施例的系统架构进行介绍。

本实施例中的架构包括:最底层的真实物理硬件,主机端操作系统的内核态包含一个虚拟机监控器,用于屏蔽底层物理硬件细节,以支持多个虚拟机透明共享访问底层硬件,虚拟机端包含主机端创建的多个虚拟机实体,运行在用户态,其实虚拟机在主机端呈现的形式只是一个普通的进程,有其对应的进程id号。

本发明还提供一种虚拟机请求资源的操作流程,与现有技术明显不同的是,请求的源头来自于虚拟机。虚拟机根据其业务产生了某种需求后主动向主机进行资源请求,比如申请设备。

(1)首先第一步虚拟机中的客户端client借助获取虚拟机id工具获得本虚拟机在主机端的进程id号。

(2)在上述过程中,获取虚拟机id工具会和虚拟机监控器打交道,虚拟机监控器会把虚拟机对应的id号反馈给虚拟机端。其交互的方式为,虚拟机id工具通过相关操作,触发虚拟机异常,进入到虚拟机监控器,虚拟机监控器检测到这种异常,会把对应虚拟机的id号反馈给虚拟机。

(3)最后一步,虚拟机中的客户端client,把包含虚拟机id号和请求类型的信息发送给主机端的server程序,server程序监听到有新请求来到时,会退出阻塞状态,读取请求的信息,进而根据信息做出相关操作,并把操作结果反馈给虚拟机中的客户端client。

本申请实施例提供的虚拟机请求资源的操作流程,通过虚拟机执行的预设操作,以便通过该异常操作对应的退出消息通知到虚拟机监控器,以便虚拟机监控器可以将id号传送回该虚拟机,也就是虚拟机可以获取到该虚拟机的id号,在此基础上,该虚拟机就通过该id号向主机主动进行动态资源调整请求,实现了更高效的虚拟机与主机之间的资源请求的方法。

下面对本申请实施例提供的一种计算机设备进行介绍,下文描述的计算机设备与上文描述的一种虚拟机与主机的启动通信方法可相互对应参照。

请参考图3,图3为本申请实施例所提供的一种计算机设备的结构示意图。

该设备可以包括:

虚拟机退出模块100,用于当虚拟机接收到通信请求时,执行预设操作触发虚拟机异常事件,以便虚拟机监控器接收到所述预设操作对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机;

通信请求模块200,用于将所述id号和请求消息发送至主机,以便所述主机根据所述id号和所述请求信息进行请求处理,并根据所述id号将请求处理结果发送至所述虚拟机。

可选的,该设备还可以包括:

退出消息接收模块,用于接收所述退出消息;

id号查找模块,用于根据所述退出消息进行id号查找,得到所述虚拟机对应的所述id号;

id号写入模块,用于将所述id号写入预设寄存器,以便所述虚拟机从所述预设寄存器中获取到所述id号。

可选的,该虚拟机退出模块100,具体可以用于当虚拟机接收到通信请求时,对保留端口进行读操作或写操作触发虚拟机异常事件,以便虚拟机监控器接收到对应的退出消息,并根据所述退出消息将所述虚拟机对应的id号发送至所述虚拟机。

本申请实施例还提供一种装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如以上实施例所述的启动通信方法的步骤。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如以上实施例所述的启动通信方法的步骤。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的一种虚拟机与主机的启动通信方法、计算机设备、装置以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

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