CN108875381A - 一种支持内核模块隔离的消息服务模块的设计方案 - Google Patents

一种支持内核模块隔离的消息服务模块的设计方案 Download PDF

Info

Publication number
CN108875381A
CN108875381A CN201710350406.6A CN201710350406A CN108875381A CN 108875381 A CN108875381 A CN 108875381A CN 201710350406 A CN201710350406 A CN 201710350406A CN 108875381 A CN108875381 A CN 108875381A
Authority
CN
China
Prior art keywords
module
message
isolated
kernel
messaging service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201710350406.6A
Other languages
English (en)
Inventor
陈叶
黄皓
赵冠军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201710350406.6A priority Critical patent/CN108875381A/zh
Publication of CN108875381A publication Critical patent/CN108875381A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种支持内核模块隔离的消息服务模块的设计方案。内核模块隔离是将内核的可划分模块利用内存页表的不可见性思想将其隔离,使得不同模块之间不能直接交互,保证对内核中某一模块的攻击所造成的影响不会扩散到其它模块。本发明主要为隔离后各个模块之间正常交互提供服务,包括两个交互点:一是将不同的系统调用通过消息分发给对应内核模块;二是不同模块之间函数调用必须借助消息服务完成信息交换。本发明主要创新点如下:1)解耦内核模块,提出借助消息服务模块完成解耦模块之间交互的方法;2)设计消息管理机制;3)针对消息管理设计进程间同步机制Msglock;4)针对消息接收方设计消息通知机制。

Description

一种支持内核模块隔离的消息服务模块的设计方案
技术领域
本发明属于计算机操作系统安全领域,即一种基于内核模块隔离的保护内核模块安全的研究,涉及一种支持内核模块隔离的消息服务模块的设计方案。
背景技术
与Windows相比,Linux被认为具有更好的安全性和扩展功能。随着Linux系统的成熟,运行在Linux上的应用越来越多,其在保险、金融、证券、电信等行业得到了非常广泛的应用,越来越多的人开始将Linux系统作为自己的日常使用系统。随着Linux应用量的增加,其安全性也逐渐受到一些黑客的关注,对于Linux系统内核的攻击也越来越多。
一个典型的内核攻击方式就是在内核模块中插入木马并将其隐藏起来。攻击者首先获取到主机的管理员权限并设法在内核中插入木马程序。然而为了要将插入的木马程序隐藏起来,攻击者修改了系统调用表并将系统调用的请求地址重定向到自己插入的木马程序的地址。此时若进程调用系统调用,木马就可以截获系统调用,在自己的木马程序完成其工作后激活真正的系统调用,这样在用户看来内核只帮助自己完成了一项工作,但是实际内核已经完成了木马所要求的工作,且这些工作没有被记录下来,因此用户无法感知内核已经受到了恶意代码的攻击。
为了保护内核的安全性,使其不被破坏,目前最常见的使用方法就是利用虚拟机隔离的方式以及采用微内核系统的方式。虚拟你隔离的方式是将需要保护的模块放入到虚拟机中,这样做的好处是如果黑客攻击内核,而虚拟机中部分就可以保持完整。然而,虚拟机目前只能隔离一些对于内核来说比较独立的模块,比如驱动。对于其他的模块的隔离由于种种原因困难较大或者不可行。比如隔离文件系统,由于无法解决虚拟机本身是一个文件而造成的将文件系统任务定向到虚拟机所产生的循环依赖的问题,因此文件系统隔离暂时不能使用虚拟机的方式。同时,由于使用虚拟机进行内核模块隔离后,虚拟机和客户机之间的控制流的转移方式导致效率比较低,因此也不建议使用这种方式隔离内核主要模块。微内核由于内核中只有最基本的调度,内存管理。驱动和文件系统等都是由守护进程去实现的,虽然相比较宏内核来讲,系统比较稳定,但是效率却很低,典型代表QNX,QNX的文件系统是跑在用户态的进程,数据的吞吐量就不太乐观。
针对以上两种内核隔离机制效率低的问题,提出了基于内存页表隔离的内核模块隔离方案,保证对某一模块的攻击不会扩展到其它模块。由于被隔离的模块之间由于内存的不可见性不能进行交互,而现有的消息机制由于其实现的原因无法应用于使用内存不可见性隔离的情况。比如:1)目前的进程间通信机制是为用户进程提供服务的,用户进程通过内核提供的系统调用接口实现用户进程之间的通信,该方法无法适用于内核进程间的通信;2)在内核模块被隔离的系统中,内核代码和数据对象都是被隔离的,原有的消息机制会导致消息传递循环依赖的问题。比如文件系统隔离中:msgsend()函数会调用kmalloc()函数分配一段内存,而隔离后,当文件系统模块想要分配一段内存,此时需要调用消息将分配内存的请求发送到非文件系统处执行,但是由于消息本身使用了kmalloc()函数,这就造成了循环依赖的问题。
针对上述内核消息机制的缺陷,本发明提出的支持内核模块隔离的消息服务模块的设计方案不仅解决了内核进程间的正常通信以及不会出现代码循环依赖的问题之外,还从两个方面保证了被隔离模块之间的正常交互。一方面在将各模块的系统调用进行劫持后,利用本文所实现的消息服务模块实现劫持前和劫持后两个内核进程之间的通信,并告诉接收消息的进程应该执行什么样的任务;另一方面在文件系统代码中使用非文件系统代码时,基于消息模块实现两个部分的通信,包括函数调用和数据交换。
发明内容
发明目的:本发明所要解决的技术问题是针对目前Linux操作系统安全性不够而使用的一种新的基于内存页表不可见性的内核模块隔离方案,从而造成不同模块之间无法直接交互的问题,提出了一种让隔离后的不同模块之间正常交换信息的设计设计方案。
为了解决以上问题,本发明公开了一种支持内核模块隔离的消息服务模块的设计方案,该方法所有的步骤均运行与Linux平台,分别针对系统调用的分发和不同模块之间函数功能的调用进行信息的交换。
所述支持内核模块隔离的消息服务模块的设计方案中对于被隔离后不同模块之间的信息交换的过程如下:
包括如下步骤:
1、一种支持内核模块隔离的消息服务模块的设计方案,其包括以下几个步骤:
步骤1,提出对内核不同模块之间交互关系进行解耦,并提出借助消息服务模块完成解耦模块之间交互的方法;
步骤2,设计了进程之间消息交互的消息管理机制,以及保证消息存放的正确性和有效性方法;
步骤3,针对多个进程并发访问消息队列的情况,提出了不同于内核自旋锁的进程间同步方法,即Msglock方法。
步骤4,针对消息接收方设计了消息通知机制,提出了适合内核模块隔离的消息通知方式。
步骤1包括如下子步骤:
步骤1-1,划分内核模块,将内核模块根据功能的不同划分为四个模块:文件系统模块、进程管理模块、内存管理模块、其它模块;
步骤1-2,选取一个被隔离的模块,其它模块统一作为一个大的模块,解耦被隔离模块和其它模块之间的交互过程,此时被隔离模块除了自身的数据对象和代码之外,不能直接访问其它模块的数据对象和代码;
步骤1-3,利用消息服务模块连接步骤1-2中被解耦的模块,使得被隔离模块只能通过消息服务模块与其它模块进行数据的交互。
步骤1-3包括以下子步骤:
步骤1-3-1,独立一个处理器作为专门处理被隔离模块的任务,该处理器上面绑定了特定的执行进程,用来处理被隔离模块的任务;
步骤1-3-2,修改系统调用表,其它模块进程将被隔离模块的系统调用通过消息服务模块交给被隔离模块进程处理;
步骤1-3-3,当被隔离模块进程在执行到被隔离模块中的某块需要调用其它模块的代码时,需要通过消息服务模块将需要执行其他模块代码的信息通过消息服务模块传递给其它模块进程,当该进程处理完消息中所带的任务后,将结果再通过消息服务模块返回给被隔离模块进程;
步骤1-3-4,重复步骤1-3-3,直至被隔离模块进程执行到系统调用任务的最后一行代码为止;
步骤1-3-5,被隔离模块进程将整个系统调用任务的结果通过消息服务模块返回给1-3-2中的其它模块进程,被隔离模块进程继续等待下一个任务的到来,然后重复1-3-2到1-3-5的步骤。
步骤2包括以下子步骤:
步骤2-1,采用环形消息队列和共享内存组合的消息存储方法,根据消息大小来确定是否需要将消息体放在单独的共享内存中;若消息比较小,则直接将消息放到消息队列中,否则将消息体单独存放在共享内存中;一个消息队列有两个全局变量,一个是消息的队头指针,一个是消息的队尾指针;其中队头指针指的位置是下一个要取出消息的起始地址,队尾指针指的下一个要放入消息的起始地址;根据队头指针和队尾指针的关系,决定此时队列是否为空或为满。
步骤2-2,设计了一种通用的消息格式存储方法,消息格式存放一个进程控制块指针,一个cpu号,4个泛型指针;进程控制块指针保存发送消息进程的进程控制块,cpu号为该进程当前所在的cpu,泛型指针分别指向回调函数、参数、小块内存、大块内存。其中回调函数是消息接收方接收到消息后所要完成的操作,参数根据实际情况选择不同参数列表,小块内存可以用来存放一些小数据,比如返回值。大块内存可以用来存放大块数据,比如读写的文件内容。
步骤2-3,设计了可变的参数列表,根据研究内核代码发现函数参数的个数的范围在0~8,因此,本文的消息参数列表一共有9个,根据参数个数不同选择不同的参数列表来传递消息;步骤2-2中的一个泛型指针即是指向参数列表的。
步骤2-3包括以下子步骤:
步骤2-3-1,每个参数列表采用宏定义的方式,第一个参数为函数返回值类型,第二个参数及其之后都为参数类型;
步骤2-3-2,宏定义的真正实现是一个Func_container_x的结构体,其中包括封装了步骤2-3-1中的四个参数;根据实际函数的不同以及参数的不同选择不同的宏定义来解析以及存放参数。
步骤3包括以下子步骤:
步骤3-1,设计了加锁进程的排队方式,即使用单链表来将需要竞争资源的进程进行排队;
步骤3-2,设计了进程对竞争资源加锁的方法,采用的是先来先服务原则;
步骤3-3,设计了进程对竞争资源释放锁的方法,采用的是对锁队列进行特殊操作的方法。
步骤3-2包括以下子步骤:
步骤3-2-1,msg_lock()尝试为加锁的进程创建一个对象,将其中的成员变量spin域设置为0(表示不是锁的持有者),然后通过原子操作将节点插入到锁队列中,并获得插入之前的队尾指针tail;
步骤3-2-2,如果tail为空,说明当前锁是空闲的,没有被任何线程占用,因此获得锁成功;如果tail指针不空,那么设置自己的前驱,然后循环直至它的前驱进程将自己的spin域置为1;当节点的spin域为1,那么该线程就变成锁的持有者了;
步骤3-3包括以下子步骤:
步骤3-3-1,msg_unlock()释放锁的进程需要检查是否存在后继节点,如果存在后继节点,那么将它的后继节点的spin域设置为1即可,后继将结束循环,成功获得锁;
步骤3-3-2,不存在后继节点的情况有两种:其一:它是最后一个进程,将队列置为空即可;其二:它不是最后一个进程,即此时存在另外一个进程在进行加锁操作,尝试加锁的进程已经成功设置了新的队尾指针,但是还没有设置其前驱,因此需要等待该进程的前驱被设置了,当前释放锁的进程才可以释放锁并设置后继进程的spin域为1。
步骤4包括以下子步骤:
步骤4-1,设计了进程状态的转变方式,对于消息服务模块,为了减少cpu的消耗,发送消息的进程在发送完消息后不能一直占用处理机等待结果(接收方拿到消息处理后返回结果),这样对于多进程并发的情况,处理机的功耗就特别的高。因此在实际中当发送方发送完消息后或者发送方此时没有任务需要做,需要将自己放入到睡眠队列中睡眠,直到消息队列中返回结果需要自己处理时才从睡眠队列中被唤醒并从睡眠队列中移除。
步骤4-2,设计了唤醒进程的方式,即采用核间中断的方式唤醒指定进程;由于在隔离后的各个模块之间无法直接使用其他模块的代码和数据对象,且相互通信的两个进程处于两个不同的模块中,因此采用核间中断的方式唤醒进程;核间中断的发起者是发送消息的进程所在的核,接收者是特定核;核的中断处理函数为唤醒指定进程。
本发明的有益效果:本发明提出的一种支持内核模块隔离的消息服务模块的设计方案解决了内核模块被隔离后,不同模块之间无法直接交互的问题。该方案目前已经成功应用于基于内存页表不可见性隔离的文件系统隔离和驱动隔离中。该方案通过自己设计消息管理方式,进程并发情况的处理过程以及进程状态之间的切换方案,相比于内核原有的消息通信机制,更具有针对性,且解决了内核原有消息通信机制由于本身的局限性以及实现过程而无法应用于内核模块隔离的问题。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述或其它方面的优点将会变得更加清楚。
图1为Linux内核层次图。
图2为本发明的背景图,即内核隔离框架图。
图3为文件系统隔离框架图,即将文件系统与内核其他模块的代码和数据分离开。
图4为消息原理图,即消息存放方式,多进程同步以及通知过程。
图5为消息服务模块作用图,即消息服务模块在文件系统隔离中所使用的场景。
具体实施方式
下面结合附图及实施例对本发明做进一步说明。
本发明提出了一种支持内核模块隔离的消息服务模块的设计方案,在利用内存页表的不可见行将内核中的可划分模块进行隔离后,建立了被隔离模块之间的桥梁,使得不同模块之间原本无法进行交互成为可能。
如图1所示,目前Linux操作系统的内核在设计上都是由几个逻辑上不同模块组成,但是这些模块都共享内核的同一个地址空间且具有相同的特权。通用操作系统都会包含进程管理、内存管理和文件系统这几个最基本的模块。从该图可以看出模块之间既保持自己的独立性,又与其它模块有交互。
如图2所示,将Linux内核模块进行分离,插入了本文所发明的消息服务模块作为各个模块之间交互的桥梁。各个模块之间不能如图1所示的那样直接交互,而是必须通过消息服务模块才能交互。消息服务模块主要应用于两个场景:一是劫持系统调用并将系统调用通过消息服务模块分发给对应被隔离的模块;二是不同模块之间需要借助消息服务模块进行信息的交换。
如图3所示,将整个文件系统模块的代码和数据与非文件系统模块的代码和数据进行隔离,隔离之后文件系统与其他模块之间必须要通过消息服务模块才能进行消息的交互。
如图4所示,消息服务中的消息体是存放在环形队列加共享内存中的,为了能够使得消息的存取按照一定的规则,设计了Msglock机制以及消息通知机制。
如图5所示,体现了消息服务的基本过程。其实现步骤如下:
1)为每个被隔离的模块启动一个专门进程来处理任务,初始化两块共享内存作为1号消息管理容器和2号消息管理器,其作用在下面介绍;
2)获取系统调用表基地址,采用Long模式的LP64字长模式,Long模式使用system_call,其MSR(Model Specific Register)寄存器地址为0xc0000082,通过宏MSR_LSTAR来代表,使用rmdsr指令获取system_call地址,再通过system_call地址获取系统调用表基地址。在x86_64下syscall_table的特征码为“\xff\x14\xc5”。因此可以从syscall_addr地址开始遍历,直到找到刚好匹配的特征码为止,则特征码的下一个地址就是syscall_table的地址。
3)修改系统调用表的写保护寄存器,cr0是系统内的控制寄存器之一,且第16位是“写保护”(Write Protect,WP)位,该位控制是否允许处理器向标记为只读属性的内存页写入数据。WP位为0表示禁用写保护的功能,即允许处理器向之前那些具有只读属性的内存页上写数据。WP位为1表示开启写保护的功能,即不允许处理器修改具有只读属性的内存页。因此只要将cr0中的第16位置为0就可以禁用写保护。
4)进行系统调用劫持工作,在步骤2和步骤3的基础上,使用自己的函数地址替换掉想要劫持的系统调用的地址。到此完成了系统调用的劫持工作。
5)利用消息服务模块进行系统调用的分发以及不同模块之间的交互,即消息服务模块的主要工作过程,消息的发送和接收者是两个进程:process1和process2。
5.1)process1发送消息的工作步骤如下:
5.1.1)准备消息体,不同被隔离模块的消息体格式一样,根据隔离模块的不同,消息体中所存放的指针所指向的回掉函数不同,即给消息结构体中的成员变量赋值;
5.1.2)检查1号消息管理容器是否已经被占用,根据Msglock机制,如果被占用,将该进程加入到锁链表中等待,直到前一个占用1号消息管理容器的进程释放了该容器;如果没有被占用,则依然将自己加入到锁链表中,获取到1号消息管理容器的使用权;
5.1.3)在获取到1号消息管理容器的使用权后,开始将5.1.1中准备的消息体按照一定的规则存放在1号消息管理容器中;
5.1.4)存放完成后释放被占用的1号消息管理容器,如果该进程有后继进程(锁链表中的后继节点),则将1号消息管理容器交给链表中自己的后继进程,将自己从锁链表中删除。如果该进程是最后一个进程,则直接将链表设置为空即可;
5.1.5)将自己存放到一个睡眠队列,让出cpu,等待被唤醒,至此process1发送消息完成;
5.2)process2进程接收消息的工作步骤如下:
5.2.1)准备存放消息的结构体;
5.2.2)重复5.1.2-5.1.4过程,其中5.1.3是存放消息,这里是取出消息,将取出的消息存放在5.2.1准备的消息的结构体中;
5.2.3)解析消息内容,执行任务,直至需要将任务的结果或者需要process1帮助自已完成的任务发送给process1为止。
5.3)process2进程发送消息的工作步骤如下:
5.3.1)重复5.1.1-5.1.4过程,不同的是所操作的不是1号消息管理容器,而是2号消息管理器;
5.3.2)在完成5.3.1的过程后,触发核间中断,核间中断的中断处理函数为唤醒之前睡眠的process1,至此process2完成消息的发送。
5.4)process1进程接收消息的工作步骤如下:
5.4.1)process1接收消息的前提是被唤醒,即5.3.2的过程,然后重复5.2.1-5.2.2的
过程,不同的是所操作的不是1号消息管理容器,而是2号消息管理器;
5.4.2)解析消息内容,如果消息标志位为1,表示这是最后一个消息,则拿到消息内容后返回到用户态,至此一个系统调用的交互过程结束;否则重复5.1-5.4的过程。
综上所述,本发明解决了在利用内存页表的不可见性将内核模块隔离后,被隔离模块之间不能直接交互的问题。通过对内核模块进行解耦,设计消息管理机制,进程状态的改变方式以及进程通知机制,成功连接了被解耦的隔离模块,使得被隔离模块之间可以通过消息服务模块正常交互。目前本发明已经成功应用于文件系统隔离和驱动隔离中。
本发明提供了一种支持内核模块隔离的消息服务模块的设计方案,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。

Claims (9)

1.一种支持内核模块隔离的消息服务模块的设计方案,其包括以下几个步骤:
步骤1,提出对内核不同模块之间交互关系进行解耦,并提出借助消息服务模块完成解耦模块之间交互的方法;
步骤2,设计了进程之间消息交互的消息管理机制,以及保证消息存放的正确性和有效性方法;
步骤3,针对多个进程并发访问消息队列的情况,提出了不同于内核自旋锁的进程间同步方法,即Msglock方法;
步骤4,针对消息接收方设计了消息通知机制,提出了适合内核模块隔离的消息通知方式。
2.根据权利要求1所述的设计方案,其特征在于,步骤1包括如下子步骤:
步骤1-1,划分内核模块,将内核模块根据功能的不同划分为四个模块:文件系统模块、进程管理模块、内存管理模块、其它模块;
步骤1-2,选取一个被隔离的模块,其它模块统一作为一个大的模块,解耦被隔离模块和其它模块之间的交互过程,此时被隔离模块除了自身的数据对象和代码之外,不能直接访问其它模块的数据对象和代码;
步骤1-3,利用消息服务模块连接步骤1-2中被解耦的模块,使得被隔离模块只能通过消息服务模块与其它模块进行数据的交互。
3.根据权利要求2所述的方法,其特征在于,步骤1-3包括以下子步骤:
步骤1-3-1,独立一个处理器作为专门处理被隔离模块的任务,该处理器上面绑定了特定的执行进程,用来处理被隔离模块的任务;
步骤1-3-2,修改系统调用表,其它模块进程将被隔离模块的系统调用通过消息服务模块交给被隔离模块进程处理;
步骤1-3-3,当被隔离模块进程在执行到被隔离模块中的某块需要调用其它模块的代码时,需要通过消息服务模块将需要执行其他模块代码的信息通过消息服务模块传递给其它模块进程,当该进程处理完消息中所带的任务后,将结果再通过消息服务模块返回给被隔离模块进程;
步骤1-3-4,重复步骤1-3-3,直至被隔离模块进程执行到系统调用任务的最后一行代码为止;
步骤1-3-5,被隔离模块进程将整个系统调用任务的结果通过消息服务模块返回给1-3-2中的其它模块进程,被隔离模块进程继续等待下一个任务的到来,然后重复1-3-2到1-3-5的步骤。
4.根据权利要求1所述的方法,其特征在于,步骤2包括以下子步骤:
步骤2-1,采用环形消息队列和共享内存组合的消息存储方法,根据消息大小来确定是否需要将消息体放在单独的共享内存中;若消息比较小,则直接将消息放到消息队列中,否则将消息体单独存放在共享内存中;一个消息队列有两个全局变量,一个是消息的队头指针,一个是消息的队尾指针;其中队头指针指的位置是下一个要取出消息的起始地址,队尾指针指的下一个要放入消息的起始地址;根据队头指针和队尾指针的关系,决定此时队列是否为空或为满;
步骤2-2,设计了一种通用的消息格式存储方法,消息格式存放一个进程控制块指针,一个cpu号,4个泛型指针;进程控制块指针保存发送消息进程的进程控制块,cpu号为该进程当前所在的cpu,泛型指针分别指向回调函数、参数、小块内存、大块内存。其中回调函数是消息接收方接收到消息后所要完成的操作,参数根据实际情况选择不同参数列表,小块内存可以用来存放一些小数据,比如返回值。大块内存可以用来存放大块数据,比如读写的文件内容;
步骤2-3,设计了可变的参数列表,根据研究内核代码发现函数参数的个数的范围在0~8,因此,本文的消息参数列表一共有9个,根据参数个数不同选择不同的参数列表来传递消息;步骤2-2中的一个泛型指针即是指向参数列表的。
5.根据权利要求4所述的方法,其特征在于,步骤2-3包括以下子步骤:
步骤2-3-1,每个参数列表采用宏定义的方式,第一个参数为函数返回值类型,第二个参数及其之后都为参数类型;
步骤2-3-2,宏定义的真正实现是一个Func_container_x的结构体,其中包括封装了步骤2-3-1中的四个参数;根据实际函数的不同以及参数的不同选择不同的宏定义来解析以及存放参数。
6.根据权利要求1所述的方法,其特征在于,步骤3包括以下子步骤:
步骤3-1,设计了加锁进程的排队方式,即使用单链表来将需要竞争资源的进程进行排队;
步骤3-2,设计了进程对竞争资源加锁的方法,采用的是先来先服务原则;
步骤3-3,设计了进程对竞争资源释放锁的方法,采用的是对锁队列进行特殊操作的方法。
7.根据权利要求6所述的方法,其特征在于,步骤3-2包括以下子步骤:
步骤3-2-1,msg_lock()尝试为加锁的进程创建一个对象,将其中的成员变量spin域设置为0(表示不是锁的持有者),然后通过原子操作将节点插入到锁队列中,并获得插入之前的队尾指针tail;
步骤3-2-2,如果tail为空,说明当前锁是空闲的,没有被任何线程占用,因此获得锁成功;如果tail指针不空,那么设置自己的前驱,然后循环直至它的前驱进程将自己的spin域置为1;当节点的spin域为1,那么该线程就变成锁的持有者了。
8.根据权利要求6所述的方法,其特征在于,步骤3-3包括以下子步骤:
步骤3-3-1,msg_unlock()释放锁的进程需要检查是否存在后继节点,如果存在后继节点,那么将它的后继节点的spin域设置为1即可,后继将结束循环,成功获得锁;
步骤3-3-2,不存在后继节点的情况有两种:其一:它是最后一个进程,将队列置为空即可;其二:它不是最后一个进程,即此时存在另外一个进程在进行加锁操作,尝试加锁的进程已经成功设置了新的队尾指针,但是还没有设置其前驱,因此需要等待该进程的前驱被设置了,当前释放锁的进程才可以释放锁并设置后继进程的spin域为1。
9.根据权利要求1所述的方法,其特征在于,步骤4包括以下子步骤:
步骤4-1,设计了进程状态的转变方式,对于消息服务模块,为了减少cpu的消耗,发送消息的进程在发送完消息后不能一直占用处理机等待结果(接收方拿到消息处理后返回结果),这样对于多进程并发的情况,处理机的功耗就特别的高。因此在实际中当发送方发送完消息后或者发送方此时没有任务需要做,需要将自己放入到睡眠队列中睡眠,直到消息队列中返回结果需要自己处理时才从睡眠队列中被唤醒并从睡眠队列中移除;
步骤4-2,设计了唤醒进程的方式,即采用核间中断的方式唤醒指定进程;由于在隔离后的各个模块之间无法直接使用其他模块的代码和数据对象,且相互通信的两个进程处于两个不同的模块中,因此采用核间中断的方式唤醒进程;核间中断的发起者是发送消息的进程所在的核,接收者是特定核;核的中断处理函数为唤醒指定进程。
CN201710350406.6A 2017-05-15 2017-05-15 一种支持内核模块隔离的消息服务模块的设计方案 Pending CN108875381A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710350406.6A CN108875381A (zh) 2017-05-15 2017-05-15 一种支持内核模块隔离的消息服务模块的设计方案

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710350406.6A CN108875381A (zh) 2017-05-15 2017-05-15 一种支持内核模块隔离的消息服务模块的设计方案

Publications (1)

Publication Number Publication Date
CN108875381A true CN108875381A (zh) 2018-11-23

Family

ID=64320571

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710350406.6A Pending CN108875381A (zh) 2017-05-15 2017-05-15 一种支持内核模块隔离的消息服务模块的设计方案

Country Status (1)

Country Link
CN (1) CN108875381A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109901880A (zh) * 2019-02-28 2019-06-18 福州瑞芯微电子股份有限公司 一种spinlock硬件电路及电子设备
CN110083460A (zh) * 2019-03-25 2019-08-02 华东师范大学 一种利用事件总线技术的微内核架构的设计方法
CN111813579A (zh) * 2020-07-17 2020-10-23 济南浪潮数据技术有限公司 一种通信方法、装置及可读存储介质,一种文件系统
CN112328412A (zh) * 2020-11-13 2021-02-05 重庆航天工业有限公司 一种基于linux平台下用户层的ipc通信方法
CN114546599A (zh) * 2022-02-25 2022-05-27 科东(广州)软件科技有限公司 一种容器操作系统

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109901880A (zh) * 2019-02-28 2019-06-18 福州瑞芯微电子股份有限公司 一种spinlock硬件电路及电子设备
CN109901880B (zh) * 2019-02-28 2020-11-20 瑞芯微电子股份有限公司 一种spinlock硬件电路及电子设备
CN110083460A (zh) * 2019-03-25 2019-08-02 华东师范大学 一种利用事件总线技术的微内核架构的设计方法
CN111813579A (zh) * 2020-07-17 2020-10-23 济南浪潮数据技术有限公司 一种通信方法、装置及可读存储介质,一种文件系统
CN112328412A (zh) * 2020-11-13 2021-02-05 重庆航天工业有限公司 一种基于linux平台下用户层的ipc通信方法
CN112328412B (zh) * 2020-11-13 2024-05-07 重庆航天工业有限公司 一种基于linux平台下用户层的ipc通信方法
CN114546599A (zh) * 2022-02-25 2022-05-27 科东(广州)软件科技有限公司 一种容器操作系统
CN114546599B (zh) * 2022-02-25 2023-01-06 科东(广州)软件科技有限公司 一种容器操作系统

Similar Documents

Publication Publication Date Title
CN108875381A (zh) 一种支持内核模块隔离的消息服务模块的设计方案
US9467460B1 (en) Modularized database architecture using vertical partitioning for a state machine
Liskov et al. Promises: Linguistic support for efficient asynchronous procedure calls in distributed systems
US5918248A (en) Shared memory control algorithm for mutual exclusion and rollback
CN103765387B (zh) 便携式计算装置中的分布式资源管理
US8266577B2 (en) RFID enhanced operating system (EOS) framework
CN103970603B (zh) 一种基于多级反馈队列的事件注入引擎的任务调度方法
CN100465899C (zh) 基于虚拟内核对象的Linux程序检查点用户级实现方法
Arcangeli et al. Using Read-Copy-Update Techniques for System V IPC in the Linux 2.5 Kernel.
WO2004077262A2 (en) Systems and methods utilizing a workflow definition language
CN109359005B (zh) 一种跨进程的数据采集处理方法
CN112015563B (zh) 消息队列切换方法、装置、电子设备及存储介质
CN113835851A (zh) 一种实时操作系统定时器实现方法
CN113296872B (zh) 容器状态查询方法、装置、设备、存储介质和系统
CN100535864C (zh) 一种系统进程调度下无效超时消息的方法及消息发送方法
Zhao et al. Deterministic scheduling for multithreaded replicas
Wang et al. Improved time bounds for linearizable implementations of abstract data types
US20090249343A1 (en) System, method, and computer program product for receiving timer objects from local lists in a global list for being used to execute events associated therewith
CN106598708B (zh) 一种时间触发的嵌入式任务通讯装置与方法
Züpke Deterministic fast user space synchronization
Harbour Real-time posix: an overview
McKendry et al. Time-driven orphan elimination
CN116932210A (zh) 任务执行方法、装置和存储介质及电子设备
Kim et al. Asynchronous event handling in the real-time specification for Java
US9053227B2 (en) Concurrent assertion

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20181123