发明内容
本申请提供一种资源隔离方法、装置和终端设备,用以解决操作系统内部的多个控制组之间隔离性差问题。
第一方面,本申请提供一种资源隔离方法,包括:
解析当前控制组的当前资源隔离文件,根据所述当前资源隔离文件中的配置参数,确定所述当前控制组的使用资源;
根据所述当前控制组的所述使用资源和所述当前控制组所在操作系统的资源信息,判断所述当前控制组的所述使用资源是否满足资源隔离条件;
当所述当前控制组的所述使用资源满足所述资源隔离条件时,将所述当前控制组的所述当前资源隔离文件更新到资源隔离数据库中,以使所述当前资源隔离文件生效。
可选地,所述判断所述当前控制组的所述使用资源满足资源隔离条件的情况,包括以下至少一种:
确定所述当前控制组的所述使用资源在所述操作系统的可用硬件资源范围内;
确定所述当前控制组的所述使用资源在所述当前控制组所属家庭资源范围内;
确定所述当前控制组的所述使用资源在所述当前控制组所在的命名空间的空间资源范围内。
可选地,所述当前控制组的所述使用资源在所述当前控制组所属家庭资源范围内,包括:
当所述当前控制组包括父控制组时,确定所述父控制组的全部资源为所述当前控制组的所属家庭资源;
根据所述家庭资源,确定所述家庭资源中可用的资源为第二资源;
确定所述使用资源在所述第二资源范围内。
可选地,所述确定所述当前控制组的所述使用资源在所述当前控制组的命名空间的空间资源范围内,包括:
确定所述当前控制组所在的所述命名空间的全部资源为所述命名空间的空间资源;
根据所述空间资源,确定所述空间资源中的可用资源为第三资源;
确定所述使用资源在所述第三资源范围内。
可选地,所述判断所述当前控制组的所述使用资源是否满足资源隔离条件,还包括:
根据当前控制组的当前进程,确定所述当前进程所属的命名空间;
根据所述命名空间中的进程,确定所述进程的资源上限;
根据所述资源上限和所述当前进程的资源,确定当前进程的资源是在所述资源上限的范围内。
可选地,当所述当前控制组的所述使用资源不满足所述资源隔离条件时,所述方法还包括:
根据所述资源隔离条件,修改所述当前资源隔离文件中的配置参数,以使所述配置参数对应的使用资源满足所述资源隔离条件。
可选地,所述方法还包括以下至少一种:
当所述资源为数量型资源时,修改所述配置参数中的资源数量,以使所述资源数量满足所述资源隔离条件中的资源上限;
当所述资源为内存资源时,修改所述配置参数中的内存地址,以使所述内存地址满足所述资源隔离条件中的资源范围。
可选地,所述方法还包括:
根据所述资源隔离条件,修改初始化脚本;
运行所述初始化脚本,并修改所述当前控制组的所当前述资源隔离文件。
可选地,所述方法,还包括:
根据所述资源隔离条件,修改所述当前控制组的当前资源隔离文件中的配置参数。
可选地,所述方法,还包括:
根据所述资源隔离条件,修改所述当前控制组的进程的进程代码;
运行所述进程代码,并修改所述当前控制组的当前资源隔离文件中的配置参数。
第二方面,本申请提供一种资源隔离装置,包括:
获取模块,用于解析当前控制组的当前资源隔离文件,根据所述当前资源隔离文件中的配置参数,确定所述当前控制组的使用资源;
处理模块,用于根据所述当前控制组的所述使用资源和所述当前控制组所在操作系统的资源信息,判断所述当前控制组的所述使用资源是否满足资源隔离条件;当所述当前控制组的所述使用资源满足所述资源隔离条件时,将所述当前控制组的所述当前资源隔离文件更新到资源隔离数据库中,以使所述当前资源隔离文件生效。
可选地,所述处理模块,包括以下至少一种:
确定所述当前控制组的所述使用资源在所述操作系统的可用硬件资源范围内;
确定所述当前控制组的所述使用资源在所述当前控制组所属家庭资源范围内;
确定所述当前控制组的所述使用资源在所述当前控制组所在的命名空间的空间资源范围内。
可选地,所述处理模块,具体用于:
当所述当前控制组包括父控制组时,确定所述父控制组的全部资源为所述当前控制组的所属家庭资源;
根据所述家庭资源,确定所述家庭资源中可用的资源为第二资源;
确定所述使用资源在所述第二资源范围内。
可选地,所述处理模块,具体用于:
确定所述当前控制组所在的所述命名空间的全部资源为所述命名空间的空间资源;
根据所述空间资源,确定所述空间资源中的可用资源为第三资源;
确定所述使用资源在所述第三资源范围内。
可选地,所述处理模块,具体用于:
根据当前控制组的当前进程,确定所述当前进程所属的命名空间;
根据所述命名空间中的进程,确定所述进程的资源上限;
根据所述资源上限和所述当前进程的资源,确定当前进程的资源是在所述资源上限的范围内。
可选地,所述处理模块,还包括以下至少一种:
当所述资源为数量型资源时,修改所述配置参数中的资源数量,以使所述资源数量满足所述资源隔离条件中的资源上限;
当所述资源为内存资源时,修改所述配置参数中的内存地址,以使所述内存地址满足所述资源隔离条件中的资源范围。
可选地,所述处理模块,具体用于:
根据所述资源隔离条件,修改初始化脚本;
运行所述初始化脚本,并修改所述当前控制组的所当前述资源隔离文件。
可选地,所述处理模块,具体用于:
根据所述资源隔离条件,修改所述当前控制组的当前资源隔离文件中的配置参数。
可选地,所述处理模块,具体用于:
根据所述资源隔离条件,修改所述当前控制组的进程的进程代码;
运行所述进程代码,并修改所述当前控制组的当前资源隔离文件中的配置参数。
第三方面,本申请提供一种终端设备,包括:存储器和处理器;
存储器用于存储程序指令;处理器用于调用存储器中的程序指令执行第一方面及第一方面任一种可能的设计中的资源隔离方法。
第四方面,本申请提供一种可读存储介质,可读存储介质中存储有计算机程序,当终端设备的至少一个处理器执行该计算机程序时,终端设备执行第一方面及第一方面任一种可能的设计中的资源隔离方法。
第五方面,本申请提供一种计算机程序产品,所述计算机程序产品包括计算机程序,当终端设备的至少一个处理器执行该计算机程序时,终端设备执行第一方面及第一方面任一种可能的设计中的资源隔离方法。
本申请提供的资源隔离方法,通过获取当前控制组的当前资源隔离文件;解析该当前资源隔离文件,确定该当前控制组的使用资源;获取操作系统的资源信息;根据该资源信息和该当前控制组的使用资源进行判断;当当前控制组的使用资源满足资源隔离条件时,将该当前控制组的当前资源隔离文件更新到资源隔离数据库中,以使当前资源隔离文件生效;当当前控制组的当前资源隔离文件不满足资源隔离条件时,根据资源隔离条件,修改当前资源隔离文件中的使用资源,以使使用资源满足资源隔离条件的手段,实现限制当前控制组的进程访问其他控制组或者其他命名空间的资源,从而提高资源隔离的效果,使得系统资源得到合理利用和安全使用的效果。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换。例如,在不脱离本文范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。
取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。
应当进一步理解,术语“包含”、“包括”表明存在的特征、步骤、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、步骤、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。
此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“A、B或C”或者“A、B和/或C”意味着“以下任一个:A。B。C。A和B。A和C。B和C。A、B和C”。仅当元件、功能、步骤或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
linux容器(Linux Container,LXC)是基于Linux内核的命名空间机制和控制组(Control Group,CGroup)资源隔离机制的容器技术。Linux内核上运行有该Linux操作系统。本申请中所提及的命名空间、控制组、进程均位于该操作系统上。其中,一个操作系统中可以包括一个主操作子系统和多个客操作子系统。其中,主操作子系统中包括该操作系统的根控制组。其中,每一客操作子系统中包括一个控制组。该主操作子系统或者每一客操作子系统相当于一个容器。并且,该主操作子系统或者每一客操作子系统可以具有其名词定义空间。命名空间即为操作系统的名词定义空间。命名空间可以包含UTS、PID、IPC、MNT、NET等子空间。其中,每一控制组中包括至少一个进程和/或至少一个线程。进程或者线程在运行时需要访问资源。CGroup资源隔离原理是通过配置控制组的资源权限,限制控制组的进程访问资源
目前,LXC可以通过将操作系统的资源划分到独立的控制组中,以更好地平衡控制组之间的资源使用需求。然而,目前的LXC中两个独立的命名空间,可以通过修改控制组的资源隔离配置文件,实现相互访问彼此资源。该配置虽然增加了控制组之间资源访问的灵活性,却无疑降低了控制组之间的隔离性。控制组之间资源的相互访问相当于容器内的进程可以访问容器外的资源,或者,A容器内的进程可以访问B容器内的资源。该设置显然存在极大的安全隐患。
针对这一问题,本申请提出了一种资源隔离方法。该资源隔离方法基于命名空间的资源隔离(Control Group Based Namespace,BNsC-Group)机制。该BNsC-Group机制可以通过增加用户权限,使用户可以对控制组的配置文件(资源隔离文件)进行修改和/或检查。通过该修改和/或检查,用户可以实现对进程的访问资源的限制,使命名空间内的控制组的进程无法访问命名空间外的资源,从而增加了LXC技术的资源隔离性,使得系统资源得到合理利用和安全使用。本申请通过约束,使两个命名空间之间无法相互访问彼此的空间资源,使得LXC技术的容器间隔离性更强,从而避免因为控制组的资源分配方案不合理导致控制组中的资源被他人利用。
本申请中,终端设备中可以运行的操作系统可以为Linux系统。当该操作系统启动后,操作系统使用该资源隔离方法完成宿主机或者不同容器系统的资源隔离配置操作。具体地,该资源隔离方法可以分为三个步骤。其一,终端设备的操作系统解析当前控制组的资源隔离文件,确定其配置参数。当当前资源隔离文件生效时,该当前资源隔离配置文件中的配置参数得以实现。操作系统可以根据解析得到的配置参数确定该控制组的使用资源。该使用资源用于指示该控制组的进程在运行过程中需要使用的资源。其二,终端设备的操作系统通过资源隔离条件,检查并判断该当前资源隔离文件是否合法。其三,当该资源隔离文件合法时,终端设备的操作系统使资源隔离文件生效,进而使该控制组的进程访问合适的系统资源。其中,资源隔离条件是实现控制组资源合法性判断的最重要的环节。该资源隔离条件具体可以包括多个检查项。例如,当前设备可用的系统资源检查、当前控制组所属的家庭资源检查、当前命名空间的空间资源检查等。
下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图1示出了本申请一实施例提供的一种资源隔离的场景示意图。如图1所示,该终端设备可以为汽车车机。该终端设备的操作系统可以为该车机的车机系统。该车机系统中至少可以包括根文件系统、仪表系统和娱乐系统三个子系统。其中,根文件系统为该机车系统的主操作子系统(Host OS),仪表系统和娱乐系统为该机车系统的客操作子系统(GuestOS)。其中,Host OS定义为LXC虚拟化环境中,运行在物理硬件上的操作系统。Guest OS则可以定义为运行在LXC上的虚拟机操作系统。在实际使用中,一汽车的车机中可以包括一个Host OS和多个Guest OS。上述仅为示意,列举了该多个Guest OS中的两个。
在运行过程中,车机系统的Linux内核首先启动Host OS的根文件系统,就绪LXC的虚拟化环境,并为启动Guest OS准备。LXC虚拟化运行环境就绪后,车机系统优先启动汽车仪表系统,从而保证汽车点火启动的实时性要求。汽车仪表系统启动后,车机系统启动汽车娱乐系统。其中,启动Guest OS方法是通过LXC技术提供的可执行程序完成。即,车机系统通过启动Guest OS的进程完成一个Guset OS的启动。
完成Host OS和多个Guest OS的启动后,车机系统通过分别创建各自Guest OS的命名空间,使Host OS和每一Guest OS拥有独立的命名空间。该命名空间的创建是虚拟化技术的基本保证。命名空间是操作系统的名词定义空间,Guest OS可以选择与Host OS共享命名空间或者拥有自己独立的命名空间。
图2示出了本申请一实施例提供的一种资源隔离方法的流程图。在图1所示实施例的基础上,如图2所示,以终端设备为执行主体,本实施例的方法可以包括如下步骤:
S101、解析当前控制组的当前资源隔离文件,根据当前资源隔离文件中的配置参数,确定当前控制组的使用资源。
本实施例中,终端设备的操作系统获取当前控制组的当前资源隔离文件。终端设备的操作系统解析该当前资源隔离文件中的配置参数。终端设备的操作系统可以根据该配置参数确定该当前控制组的使用资源。该使用资源为该当前控制组的进程在运行时需要请求获取的资源。其中,该资源可以为数量型资源、内存资源、掩码型资源、CPU资源等。该配置参数可以用于指示数量型资源的数量、指示内存资源的存储地址、指示掩码型资源的掩码等。
一种示例中,当前控制组通过限制进程访问的资源,实现资源隔离。一个控制组中可以包括一个或者多个进程。当当前控制组中包括多个进程时,操作系统可以通过该当前控制组的当前资源隔离文件,对该当前控制组中的每一进程可以访问的资源进行限定。
S102、根据当前控制组的使用资源和当前控制组所在操作系统的资源信息,判断当前控制组的使用资源是否满足资源隔离条件。
本实施例中,终端设备的操作系统还可以获取操作系统的资源信息。该资源信息中可以包括该操作系统中各个控制组的资源分配情况。终端设备的操作系统可以根据该资源信息和该当前控制组的使用资源,判断当前控制组的使用资源是否满足资源隔离条件。
一种示例中,当当前控制组的使用资源在操作系统的硬件资源范围内时,资源隔离条件满足。
本示例中,当控制组在该操作系统内运行时,该控制组所使用的硬件资源为该操作系统内部的硬件资源。因此,终端设备的操作系统可以通过判断该使用资源是否在该操作系统的硬件资源的范围内,确定该使用资源是否符合资源隔离要求。当该使用资源不在该操作系统的硬件资源范围内时,终端设备的操作系统无法将该硬件资源分配给该控制组,该控制组也无法访问到该硬件资源。即,该控制组的进程将无法访问到该硬件资源。因此,当该使用资源不在该操作系统的硬件资源范围内时,终端设备的操作系统可以确定当前控制组的当前资源隔离文件不满足资源隔离条件。当当前控制组的当前资源隔离文件不满足资源隔离条件时,该次判断结束,并跳转到步骤S104。例如,如图3所示,当S212判断为不通过时,结束该次判断操作。
具体地,该判断过程可以包括如下两个步骤:
步骤1、确定操作系统的硬件资源中可用的资源为第一资源。
本步骤中,终端设备的操作系统根据该操作系统中的硬件资源,确定其中的可用资源为第一资源。该第一资源可以被当前控制组访问。而硬件资源中除第一资源以外的资源为已经被使用的资源。因此,为了提高硬件资源的隔离,避免这些已经被使用的资源再次被访问,该部分硬件资源应不在当前控制组的进程的资源访问范围内。
步骤2、判断使用资源在第一资源范围内。
本步骤中,终端设备的操作系统可以通过判断使用资源是否在第一资源范围内,确定该使用资源是否符合资源隔离条件。当该使用资源在该第一资源范围内时,使用资源为可以访问的资源。此时,该当前控制组的资源满足资源隔离条件。否则,当该使用资源不在该第一资源范围内时,使用资源中存在不可以访问的资源。即,当当前控制组不满足资源隔离条件。
另一种示例中,当当前控制组的使用资源在当前控制组所属家庭资源范围内时,资源隔离条件满足。
本示例中,当前控制组可以为一父控制组的子控制组。子控制组的资源受限于父控制组。即,该当前控制组可以获取的资源应在该父控制组所拥有的资源范围内。当该父控制组所拥有的全部资源为家庭资源时,该子控制组可以访问的资源不能超出该家庭资源的范围。当当前控制组的使用资源中出现家庭资源以外的资源时,该次判断结果为不满足资源隔离条件。同时,该次判断结束,并跳转到步骤S104。例如,如图3所示,当S213判断为不通过时,结束该次判断操作。
具体地,该判断过程可以包括如下三个步骤:
步骤1、当当前控制组包括父控制组时,确定父控制组的全部资源为当前控制组的所属家庭资源。
步骤2、根据家庭资源,确定家庭资源确定父控制组中可用的资源为第二资源。
本步骤中,终端设备的操作系统根据该父控制组所拥有的家庭资源,可以确定该家庭资源中还未被使用的资源为第二资源。其中,已经被使用的资源可以为该父控制组的进程已经使用的资源,或者为该父控制组的其他子控制组的进程已经使用的资源。由于该当前控制组与其他子控制组为同级的控制组,因此,子控制组与该当前控制组之间,应无法进行资源的相互访问。因此,可以确定该家庭资源中未被分配到其他子控制组,且未被父控制组使用的资源为第二资源。
步骤3、确定使用资源在第二资源范围内。
本步骤中,终端设备的操作系统可以通过判断使用资源是否在第二资源范围内,确定该使用资源是否符合资源隔离条件。当该使用资源在该第二资源范围内时,使用资源为可以访问的资源。此时,该当前控制组的资源满足资源隔离条件。否则,该使用资源不在该第二资源范围内时,使用资源中存在不可以访问的资源。即,当当前控制组不满足资源隔离条件。
再一种示例中,当当前控制组的使用资源在当前控制组所在的命名空间的空间资源范围内时,资源隔离条件满足。
本示例中,如图1所示,操作系统在启动一个Guest OS后,可以生成该Guest OS的命名空间。该Guest OS可以相当于上一示例中的父控制组。当当前控制组为在该父控制组内部创建的与该父控制组等级相同的控制组时,上一示例中对于子控制组的限制将不再适用于本示例中的当前控制组。然而,由于该当前控制组创建于该父控制组的内部,因此,该当前控制组可以访问的资源同样应局限于该父控制组的家庭资源内。否则,该当前控制组访问其他与该父控制组同级的控制组的资源时,相当于容器内的进程访问该容器外其他容器内的资源,存在资源无法隔离的问题。
因此,当当前控制组的使用资源在当前控制组所在的命名空间的空间资源范围内时,终端设备的操作系统可以确定当前控制组的当前资源隔离文件不满足资源隔离条件。否则,当当前控制组的当前资源隔离文件不满足资源隔离条件时,该次判断结束,并跳转到步骤S104。例如,如图3所示,当S213判断为不通过时,结束该次判断操作。
具体地,该判断过程可以包括如下三个步骤:
步骤1、确定当前控制组所在的命名空间的全部资源为命名空间的空间资源。
本步骤中,终端设备的操作系统根据该当前控制组,确定其所在的命名空间。终端设备根据该命名空间,确定该命名空间的全部资源为该命名空间的空间资源。该命名空间内的该当前控制组的进程可以访问的资源无法超出该空间资源。
步骤2、根据空间资源,确定空间资源中的可用资源为第三资源。
本步骤中,终端设备的操作系统根据该命名空间的空间资源,可以确定该空间资源中还未被使用的资源为第三资源。其中,已经被使用的资源可以为该命名空间中其他控制组的进程已经使用的资源,或者,该命名空间本身的进程已经使用的资源。当前控制组无法访问已经被其他进程使用的资源。
步骤3、确定使用资源在第三资源范围内。
本步骤中,终端设备的操作系统可以通过判断使用资源是否在第三资源范围内,确定该使用资源是否符合资源隔离条件。当该使用资源在该第三资源范围内时,使用资源为可以访问的资源。此时,该当前控制组的资源满足资源隔离条件。否则,该使用资源不在该第三资源范围内时,使用资源中存在不可以访问的资源。即,当当前控制组不满足资源隔离条件。
例如,当资源为数量型资源时,终端设备的操作系统可以确定第三资源的数量。当使用资源的数量小于等于第三资源的数量,确定该使用资源符合资源隔离条件。否则,当该使用资源的数量大于资源上限时,使用资源需要访问第三资源外的资源才难满足需求。此时,该当前控制组的资源不满足资源隔离条件。
又一种示例中,当前控制组的使用资源在当前控制组所在的命名空间的空间资源范围内时,资源隔离条件满足。其具体判断步骤可以包括:
步骤1、根据当前控制组的当前进程,确定当前进程所属的命名空间。
本步骤中,终端设备的操作系统可以获取当前控制组的进程所属的PID命名空间,并确定该PID命名空间为当前进程所属的命名空间。
步骤2、根据命名空间中的进程,确定进程的资源上限。
本步骤中,终端设备的操作系统可以获取命名空间中的某一个进程的资源上限。终端设备的操作系统可以确定该资源上限为当前控制组的资源上限。或者,终端设备的操作系统可以获取命名空间中的全部进程的资源上限。终端设备的操作系统可以确定其中资源上限的最大值为当前控制组的资源上限。例如,终端设备的操作系统可以获取该PID命名空间的1号进程(PID=1)的资源上限。终端设备的操作系统可以确定当前控制组的进程的资源上限为该1号进程的资源上限。
步骤3、根据资源上限和当前进程的资源,确定当前进程的资源是在资源上限的范围内。
本步骤中,终端设备的操作系统根据资源上限和当前进程的资源,判断当前进程的资源是否超出资源上限。当当前控制组的进程的资源上限小于等于该1号进程的资源上限时,当前控制组的进程的使用资源满足资源隔离条件。否则,当当前控制组的进程的资源上限大于该1号进程的资源上限时,使用资源中存在不可以访问的资源。即,当当前控制组不满足资源隔离条件。
又一种示例中,资源隔离条件可以包括上述三个示例中的多个。例如,如图3所示,上述三个示例可以如S302、S303和S304所示。当当前控制组同时满足上述三个示例时,终端设备将当前资源隔离文件更新到当前控制组的资源隔离数据库中。
S103、当当前控制组的使用资源满足资源隔离条件时,将当前控制组的当前资源隔离文件更新到资源隔离数据库中,以使当前资源隔离文件生效。
本实施例中,当终端设备的操作系统完成上述判断,并确定该当前控制组的使用资源符合资源隔离条件时,终端设备的操作系统可以将该当前控制组的当前资源隔离文件更新到资源隔离数据库中。当当前资源隔离文件更新到资源隔离数据库后,该当前资源隔离文件即可在该终端设备的操作系统中生效。其中,当前资源隔离文件为在原资源隔离文件基础上修改后的资源隔离文件。
S104、当当前控制组的使用资源不满足资源隔离条件时,根据资源隔离条件,修改当前资源隔离文件中的配置参数,以使配置参数对应的使用资源满足资源隔离条件。
本实施例中,当终端设备的操作系统完成上述判断,并确定该当前控制组的使用资源不符合资源隔离条件时,终端设备的操作系统可以结束该次操作。终端设备的操作系统还可以向用户发送提醒,以告知用户该当前控制组的资源不符合资源隔离条件。或者,终端设备的操作系统还可以返回如图3所示的S201,并对该当前控制组的当前资源隔离文件再次进行修改。其中,资源的类型可以包括数量型资源、内存资源、掩码型资源(NamespaceMasks&Request Masks|Current Masks)、CPU资源、网络资源、IO资源等等。在掩码型资源中,Namespace Masks为命名空间的资源最大掩码值。Request Masks为当前控制组的掩码值。Current Masks为当前控制组的进程的使用资源的掩码值。终端设备的操作系统可以通过修改Request Masks调整当前控制组的掩码型资源。或者,终端设备的操作系统可以通过修改Current Masks调整当前控制组的进程的使用资源。
其中,当前资源隔离文件中的配置参数的具体修改内容可以根据参数类型确定。例如,当资源为数量型资源时,可以通过修改配置参数中的资源数量,以使资源数量满足资源隔离条件中的资源上限。例如,当可以将配置参数中的资源数量从100修改到50。又如,当资源为数量型资源时,终端设备的操作系统可以修改使用资源的上限为命名空间中相应资源最大值。又如,当资源为内存资源时,可以通过修改配置参数中的内存地址,以使内存地址满足资源隔离条件中的资源范围。又如,以图1所示的仪表系统为例,仪表系统的命名空间的CPU掩码最大值为0x00111111。仪表系统中的控制组的进程的使用资源掩码值为0x00110001。假设该控制组希望访问第1核和第6核中资源(申请掩码值为0x01000010)。该控制组的使用资源的CPU资源掩码值为0x00110011。可见,仪表系统的系统资源中不包括第6核的资源。因此,控制组应无法访问第6核的资源。因此,终端设备的操作系统可以修改当前控制组的使用资源的掩码值,从而使当前控制组的使用资源不需要访问第6核的资源。
其中,当前资源隔离文件中的配置参数的具体修改方式可以包括如下示例:
一种示例中,可以通过运行修改后的初始化脚本,生成新的当前控制组的资源隔离文件。其具体步骤可以包括:
步骤1、根据资源隔离条件,修改初始化脚本。
本步骤中,终端设备的操作系统可以根据资源隔离条件,对初始化脚本进行修改。其中,终端设备的操作系统可以使用脚本生成代码对该初始化脚本文件进行修改。例如,终端设备的操作系统运行该脚本生成代码,该脚本生成代码读取该资源隔离条件,并从该资源隔离条件中获取参数。脚本生成代码根据原始参数和从资源隔离条件中获取的参数,生成初始化脚本。
步骤2、运行初始化脚本,并修改当前控制组的所当前述资源隔离文件。
本步骤中,终端设备的操作系统可以根据配置场景,确定该配置场景是否为系统启动过程。若该配置场景为系统启动过程,则需要在Linux内核初始化完成后,启动Host OS的根文件系统,以使LXC的虚拟化环境就绪,并为启动Guest OS准备。LXC虚拟化运行环境就绪后,终端设备的操作系统逐一启动其中的Guest OS,并针对每一Guest OS创建命名空间。在该系统启动过程中,Guest OS的初始化脚本为增加资源隔离条件后的初始化脚本已经完成修改。因此,当该Guest OS的启动过程时,可以即为根据该修改后的初始化脚本生成目标控制组当前控制组的第一资源隔离文件当前资源隔离文件的过程。
另一种示例中,根据资源隔离条件,修改当前控制组的当前资源隔离文件中的配置参数。
本示例中,终端设备的操作系统可以根据配置场景,确定该配置场景是否需要修改当前控制组的当前资源隔离文件。若该配置场景需要修改当前控制组的当前资源隔离文件,则可以通过修改当前控制组的使用资源,将该当前控制组的原始资源隔离文件进行修改作为当前资源隔离文件。
具体地,终端设备的操作系统可以在操作系统运行过程中,通过命令行新增控制组或者修改控制组的使用资源。终端设备的操作系统可以在挂载CGroup文件系统后,通过该CGroup文件系统,修改当前控制组中的配置文件。该当前控制组可以被看作一个控制子系统(Control SubSystem,CSS)。例如,在仪表系统中的一个控制组,可以为该仪表系统的一个控制子系统。
LXC机制的原理即为通过不同CSS,实现对系统的硬件资源的管理。例如,CPUSET子系统可以管理CPU资源。MEMORY子系统可以管理内存资源。BLKIO子系统可以管理IO资源等等。
针对不同的资源,终端设备的操作系统可以通过不同的命令行实现对不同资源的不同参数的修改。例如,当该资源为内存资源时,该命令行可以用于判断进程访问的内存地址是否符合资源隔离条件,以及修改该内进程访问的地址,使该内存地址符合资源隔离条件。
再一种示例中,可以通过运行修改后的进程代码,实现对资源隔离文件的修改。其具体步骤可以包括:
步骤1、根据资源隔离条件,修改当前控制组的进程的进程代码。
步骤2、运行进程代码,并修改当前控制组的当前资源隔离文件中的配置参数。
本示例中,终端设备的操作系统可以在操作系统运行过程中,通过使用程序,调用并修改当前进程所属当前控制组的当前资源隔离文件的配置参数。该配置参数的修改将使该当前进程的使用资源对应修改。
其中,如图3所示为将上述三个示例置于判断前的执行逻辑。其执行逻辑可以理解为:终端设备的操作系统根据配置场景,确定其资源隔离文件的修改方式,并实现对资源隔离文件的修改。当完成资源隔离文件后,终端设备的操作系统使用上述S101和S102的步骤,判断当前控制组修改后的资源隔离文件是否符合资源隔离条件。需要注意的是,虽然上述S104的三个示例中使用了不同方式修改资源隔离文件,但是在实际实现过程中,由于优先级、修改成功率、其他控制组对资源的使用等情况,可能导致资源隔离文件修改不成功或者修改后的资源隔离文件仍然不符合资源隔离条件等情况。因此,在完成资源隔离文件的修改后,如图3中S211至S215所示,需要再次执行是否符合资源隔离条件的判断。当判断结果为符合资源隔离条件时,终端设备的操作系统可以执行S103。当判断结果为不符合资源隔离条件时,终端设备的操作系统可以执行S104。即,当断结果为不符合资源隔离条件时,终端设备的操作系统可以返回如图3所示的S201,并再次执行S201至S210,对该资源隔离文件进行修改。
其中,在如图3所示的实现方式中,S201至S210中包括可上述三个示例中的三种对资源隔离文件的修改方式。不同修改方式的选择可以根据S202和S203所示的配置场景判断确定。具体地,终端设备的操作系统重新配置当前资源隔离文件的场景可以包括以下三种:操作系统启动过程中,通过初始化脚本配置当前控制组的使用资源、操作系统运行过程中在线修改当前控制组的当前资源隔离文件、操作系统运行过程中在线修改当前控制组的进程的使用资源。并且,在执行S202和S203对配置场景的判断之前,当用户在终端设备的操作系统中打开命名空间和控制组的编译选项后,用户可以在重新编译操作系统内核后,对该操作系统进行刷机后上电,从而启动该中断设备的操作系统。
一种实现方式中,当在预设时间段内,对当前控制组的资源隔离文件的修改次数达到预设值时,可以拒绝继续修改该当前控制组的资源隔离文件。
本申请提供的资源隔离方法,终端设备的操作系统获取当前控制组的当前资源隔离文件。终端设备的操作系统解析该当前资源隔离文件,确定该当前控制组的使用资源。终端设备的操作系统还可以获取操作系统的资源信息。终端设备的操作系统可以根据该资源信息和该当前控制组的使用资源进行判断。当当前控制组的当前资源隔离文件满足资源隔离条件时,终端设备的操作系统可以将该当前控制组的当前资源隔离文件更新到资源隔离数据库中,以使当前资源隔离文件生效。当当前控制组的当前资源隔离文件不满足资源隔离条件时,根据资源隔离条件,修改当前资源隔离文件中的使用资源,以使使用资源满足资源隔离条件。本申请中,通过检查当前控制组的使用资源的权限,确定使用资源是否符合资源隔离条件,从而实现限制当前控制组的进程访问其他控制组或者其他命名空间的资源,从而提高资源隔离的效果,使得系统资源得到合理利用和安全使用。
图4示出了本申请一实施例提供的一种资源隔离装置的结构示意图,如图4所示,本实施例的资源隔离装置10用于实现上述任一方法实施例中对应于终端设备的操作,本实施例的资源隔离装置10包括:
获取模块11,用于解析当前控制组的当前资源隔离文件,根据当前资源隔离文件中的配置参数,确定当前控制组的使用资源。
处理模块12,用于根据当前控制组的使用资源和当前控制组所在操作系统的资源信息,判断当前控制组的使用资源是否满足资源隔离条件。当当前控制组的使用资源满足资源隔离条件时,将当前控制组的当前资源隔离文件更新到资源隔离数据库中,以使当前资源隔离文件生效。
一种实现方式中,处理模块12,包括以下至少一种:
确定当前控制组的使用资源在操作系统的可用硬件资源范围内。
确定当前控制组的使用资源在当前控制组所属家庭资源范围内。
确定当前控制组的使用资源在当前控制组所在的命名空间的空间资源范围内。
一种实现方式中,处理模块12,具体用于:
当当前控制组包括父控制组时,确定父控制组的全部资源为当前控制组的所属家庭资源。
根据家庭资源,确定家庭资源中可用的资源为第二资源。
确定使用资源在第二资源范围内。
一种实现方式中,处理模块12,具体用于:
确定当前控制组所在的命名空间的全部资源为命名空间的空间资源。
根据空间资源,确定空间资源中的可用资源为第三资源。
确定使用资源在第三资源范围内。
一种实现方式中,处理模块12,具体用于:
根据当前控制组的当前进程,确定当前进程所属的命名空间。
根据命名空间中的进程,确定进程的资源上限。
根据资源上限和当前进程的资源,确定当前进程的资源是在资源上限的范围内。
一种实现方式中,处理模块12,还包括以下至少一种:
当资源为数量型资源时,修改配置参数中的资源数量,以使资源数量满足资源隔离条件中的资源上限。
当资源为内存资源时,修改配置参数中的内存地址,以使内存地址满足资源隔离条件中的资源范围。
一种实现方式中,处理模块12,具体用于:
根据资源隔离条件,修改初始化脚本。
运行初始化脚本,并修改当前控制组的所当前述资源隔离文件。
一种实现方式中,处理模块12,具体用于:
根据资源隔离条件,修改当前控制组的当前资源隔离文件中的配置参数。
一种实现方式中,处理模块12,具体用于:
根据资源隔离条件,修改当前控制组的进程的进程代码。
运行进程代码,并修改当前控制组的当前资源隔离文件中的配置参数。
本申请实施例提供的资源隔离装置10,可执行上述方法实施例,其具体实现原理和技术效果,可参见上述方法实施例,本实施例此处不再赘述。
图5示出了本申请实施例提供的一种终端设备的硬件结构示意图。如图5所示,该终端设备20,用于实现上述任一方法实施例中对应于终端设备的操作,本实施例的终端设备20可以包括:存储器21和处理器22。
存储器21,用于存储计算机程序。该存储器21可能包含高速随机存取存储器(Random Access Memory,RAM),也可能还包括非易失性存储(Non-Volatile Memory,NVM),例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
处理器22,用于执行存储器存储的计算机程序,以实现上述实施例中的资源隔离方法。具体可以参见前述方法实施例中的相关描述。该处理器22可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
可选地,存储器21既可以是独立的,也可以跟处理器22集成在一起。
当存储器21是独立于处理器22之外的器件时,终端设备20还可以包括总线23。该总线23用于连接存储器21和处理器22。该总线23可以是工业标准体系结构(IndustryStandard Architecture,ISA)总线、外部设备互连(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准体系结构(Extended Industry StandardArchitecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
本实施例提供的终端设备可用于执行上述的资源隔离方法,其实现方式和技术效果类似,本实施例此处不再赘述。
本申请还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时用于实现上述的各种实施方式提供的方法。
其中,计算机可读存储介质可以是计算机存储介质,也可以是通信介质。通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。计算机存储介质可以是通用或专用计算机能够存取的任何可用介质。例如,计算机可读存储介质耦合至处理器,从而使处理器能够从该计算机可读存储介质读取信息,且可向该计算机可读存储介质写入信息。当然,计算机可读存储介质也可以是处理器的组成部分。处理器和计算机可读存储介质可以位于专用集成电路(Application Specific Integrated Circuits,ASIC)中。另外,该ASIC可以位于用户设备中。当然,处理器和计算机可读存储介质也可以作为分立组件存在于通信设备中。
具体地,该计算机可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random-Access Memory,SRAM),电可擦除可编程只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM),可编程只读存储器(Programmable read-only memory,PROM),只读存储器(Read-OnlyMemory,ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
本申请还提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。设备的至少一个处理器可以从计算机可读存储介质中读取该计算机程序,至少一个处理器执行该计算机程序使得设备实施上述的各种实施方式提供的方法。
本申请实施例还提供一种芯片,该芯片包括存储器和处理器,存储器用于存储计算机程序,处理器用于从存储器中调用并运行计算机程序,使得安装有芯片的设备执行如上各种可能的实施方式中的方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
其中,各个模块可以是物理上分开的,例如安装于一个的设备的不同位置,或者安装于不同的设备上,或者分布到多个网络单元上,或者分布到多个处理器上。各个模块也可以是集成在一起的,例如,安装于同一个设备中,或者,集成在一套代码中。各个模块可以以硬件的形式存在,或者也可以以软件的形式存在,或者也可以采用软件加硬件的形式实现。本申请可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
当各个模块以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例方法的部分步骤。
应该理解的是,虽然上述实施例中的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制。尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换。而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。