一种实现进程支持的方法、装置和多线程系统的制作方法

文档序号:6618857阅读:194来源:国知局
专利名称:一种实现进程支持的方法、装置和多线程系统的制作方法
技术领域
本发明涉及一种实现进程支持的方法、装置和多线程系统,属于数据 通信技术领域。
背景技术
嵌入式系统是一种完全嵌入受控器件内部,为特定应用设计的专用电 脑系统。该系统主要适用于对功能、可靠性、成本、体积、功耗有严格要 求的应用领域。随着嵌入式系统的发展,嵌入式软件的复杂度越来越高,因此在嵌入 式系统软件开发中引入了嵌入式操作系统。嵌入式操作系统是一种支持嵌 入式系统应用的操作系统软件,能够有效管理越来越复杂的系统资源,对 嵌入式软件模块提供多任务运行环境,使得程序开发更加容易,便于维护, 同时能够提高系统的稳定性和可靠性。在大部分嵌入式操作系统中,多任务是以多线程的形式实现的。目前此类操作系统的代表产品是实时多任务操作系统Nucleus PLUS、实时操作 系统VxWorks、硬实时操作系统ThreadX和实时多处理系统RTEMS等。在 这类操作系统中,"任务(Task)"和"线程(Thread)"是同一个概念。 从这类系统的角度看,线程是竟争系统资源的最小运行单位。线程可以使 用或等待中央处理器(Central Process Unit ,简称CPU)、输入/输出 (1叩ut/0utput,简称I/O)设备及内存等系统资源,并独立于其他线程, 与它们一起并发运行。我们称此类操作系统为多线程操作系统。在多线程操作系统中,最关键的部分就是线程调度器(Scheduler)。 线程调度器根据一定的调度策略将处理器资源分配给合适的线程,得到了5处理器资源的线程就称为该线程被"调度运行"了。在嵌入式操作系统中 调度的混合调度策略,即多优先级轮转调度。在这种调度策略下,线程根据其功能和性能要求确定自己的两个关键调度参数优先级和时间片。准 备好可以运行的线程就成为"就绪"的线程,调度器将所有就绪线程按照 优先级的高低排在不同优先级的调度等待队列中等待分配处理器资源。具 有高优先级的线程能够优先获得处理器资源,而线程的时间片则决定了 一 个线程获得处理器资源后能够使用处理器的时间。 一旦线程的时间片用 完,调度器就会剥夺这个线程的处理器资源,并将这个线程重新排到对应 优先级队列的尾部重新排队,这就是同级之间时间片轮转的调度策略。在嵌入式系统中,硬件设备(如网络接口、温度传感器等)会以电子 信号的形式请求软件处理发生在硬件设备中的事件。这种电子信号就被称 为"中断,,。当处理器接收到中断时就会暂时停止运行当前正在使用处理 器的线程并转入操作系统提供的中断服务程序中进行中断响应处理,这就 称为该线程被中断打断了 。在大多数情况下操作系统在完成中断响应处理 后会把处理器资源还给之前被中断打断的线程恢复执行。但是在某些情况 下中断响应处理过程中,系统可能会让具有更高优先级的线程准备好运 行,并加入调度等待队列。这时调度器在完成中断响应处理后就会将处理 器资源分配给这个新就绪的更高优先级线程而不是之前被打断的线程。这 就称为高优先级线程抢占了低优先级线程的处理器资源,而这种调度策略 就是抢占式调度策略。操作系统使用一种被称为线程控制块(Thread Control Block)或任 务控制块(Task Control Block)的数据结构来跟踪和维护与某个线程相 关的信息,包括线程的堆栈、调度参数、运行状态和代码等。每次线程被 剥夺处理器资源时操作系统会暂停线程运行,并将线程的运行状态信息直 接或间接地保存在线程控制块中。下次将处理器资源重新分配给这个线程时操作系统就会从该线程的线程控制块中取出上次保存的状态信息,将该 线程恢复到暂停之前的状态继续正常运行。随着嵌入式系统的发展,嵌入式系统的功能越来越强大,软件系统也 越来越复杂,可靠性要求也越来越高。如网络通信设备等嵌入式系统通常 具有高度复杂的软件代码和较为苛刻的可靠性要求。但在多线程操作系统 中所有的线程都在同一个资源空间中运行,即所有的线程共同使用全局 共享的内存资源、文件资源和设备资源等系统资源。只要任何一个线程出 现故障都可能导致全局资源被破坏,致使整个系统崩溃。因此出于故障隔 离和高可靠性的需要,越来越多的这类复杂嵌入式系统需要引入原本通常 在个人电脑或大型计算机中使用的进程来弥补多线程操作系统的不足。进程相对于线程其最主要的区别就是进程拥有自己独立的资源空间。例如每个进程都拥有自己的内存空间和文件资源空间等,进程只能操作属于自己的资源。因此如果进程发生了故障,故障就被严格隔离在进程自 己的资源空间内,而不会波及其他进程以及系统的其他软件模块。操作系进程的故障并不会导致整个系统的崩溃。所以采用进程技术有利于提高嵌 入式系统的可靠性,目前较新的一些嵌入式操作系统也开始支持多进程技术,如实时操作系统QNX和一些嵌入式Linux系统等。在多进程操作系统中,调度器通常是专门的多进程调度器,只能调度 进程。而线程作为一种特殊的进程参与调度,如Linux中线程就是一种特 殊的"轻量级进程"。和多线程操作系统类似,多进程操作系统也使用一 种叫做进程控制块(Process Control Block)的凄丈据结构来跟踪和维护 与某个进程相关的信息。进程控制块所包含的内容除了进程的堆栈、调度 参数、运行状态和代码以外,还包含进程独立的资源空间信息。进程的资 源空间中主要包括进程文件空间、内存空间和设备空间等,其中最重要的 是进程的内存空间。进程运行时所需的代码(Code)、动态堆(Heap)和用户栈(Stack)等关键数据都必须位于进程的内存空间内。每次发生进 程切换时,进程调度器必须先切换到准备调度运行的进程的资源空间去, 然后才能恢复该进程的运行状态并开始运行位于进程内存空间中的进程 代码。
通常对于新设计的嵌入式系统来说,我们可以根据具体需求选择合适 的多进程操作系统进行软件开发。然而在实际情况中,我们常常要对一个 原有的嵌入式系统进行改造,使之具备进程支持能力以便适应当前新的高 可靠性要求,延长这类原有系统的生命期。对于原有的基于多线程操作系 统的嵌入式系统,业界一般采取两种技术方案使之支持进程。 一种技术方 案是将原有的多线程操作系统更换为多进程操作系统,然后对其他软件模 块进行重构,即在不改变原软件模块功能的情况下对软件模块进行重新 开发和编码,使之能够在新的多进程操作系统上运行。另一种技术方案是 修改原有系统中的多线程操作系统,将其改造为多进程操作系统。同时对 其他软件模块进行修订,使之能够适应改造过的操作系统。
第一种现有技术方案的问题在于对于嵌入式系统来说,软件模块往往 与嵌入式操作系统紧密结合。通常更换了嵌入式操作系统就意味着整个系 统的调度行为、操作系统的应用编程接口 (Application Programming Interface,简称API)(即操作系统对外提供的一组函数接口 ,其他软件 模块可以通过这组接口使用操作系统提供的各种功能)和各种系统服务 (如中断服务、设备驱动、进程/线程间通讯、文件系统等)都发生了彻 底的变化。这种变化之大往往不得不通过彻底改写相关软件模块的途径来 解决。然而对于一些复杂的嵌入式系统(如网络通信类系统)来说,其软 件可能由数百万行代码构成,需要多名技术人员经过多年的开发和测试才 能完成。对这些代码进行彻底的改写所耗费的人力、物力、财力和时间即 使对大型企业来说也是一个非常沉重的负担, 一般的中小型企业根本无法 承受。
8第二种现有技术方案则存在两个主要问题。第 一个问题是对于某些源 代码不开放的商业嵌入式操作系统来说,由于没有操作系统源代码,根本 没有办法对其进行修改,无法实施该技术方案。另一个问题是即使能够对 原操作系统进行修改,并且即使在修改过程中可以尽量保持原操作系统的 API接口和系统服务等主要机制不发生改变。但由于修改后的操作系统对 软件模块呈现的运行环境将由多线程环境变为多进程环境的缘故,所有原 有软件模块中与线程相关的部分也必须进行相应的修改转而支持进程,以 适应新的多进程运行环境。然而对于一些已经开发和使用了很长时间的原 有系统来说,由于其规模庞大、开发周期长,并且在其投入应用以后始终 处于长期和持续不断的维护过程当中,软件代码不断地引入新的修改。在 如此漫长的过程中可能由于开发人员的人事变动,或是由于在开发和维护 原有系统时没有使用现代软件工程方法进行管理致使文档不足等缘故,造 成有大量原有系统的代码无法被当前的软件开发人员完全理解。在这种情 况下对原有软件代码进行修改的风险极大,可能在修改过程中引入更多的 软件故障,降低软件的质量和系统的可靠性。

发明内容
本发明的目的是提供一种实现进程支持的方法、装置和多线程系统, 可以在不需要对原有多线程系统的操作系统和各软件模块做任何修改的 情况下有效实现对进程的支持。
为实现上述目的,本发明提供了一种在多线程系统中实现进程支持的
方法,所述方法包4舌
创建进程;
创建所述进程对应的代理线程;
当所述代理线程获得调度器分配的处理器资源后,将所述处理器资源转 让给所述代理线程对应的进程。为了实现上述目的,本发明还提供了 一种在多线程系统中实现进程支持
的装置,所述装置包括创建模块、进程模块、代理线程模块和资源分配模块; 所述创建才莫块用于创建进程,以及所述进程对应的代理线程; 所述进程模块与创建模块连接,用于维护进程相关信息; 所述代理线程模块与创建模块连接,用于维护代理线程相关信息; 所述资源分配模块与创建模块、进程模块和代理线程模块连接,用于在
所述代理线程获得调度器分配的处理器资源后,将所述处理器资源转让给所
述代理线程对应的进程。
为了实现上述目的,本发明又提供了 一种实现进程支持的多线程系统,
包括上述装置,还包括调度器模块和原有中断服务模块;
所述调度器模块用于进行代理线程的调度和处理器资源分配;' 所述原有中断服务模块用于进行线程中断响应。 ' 本发明通过代理线程将获得的处理器资源分配给所述代理线程对应的进
程,实现了在原有多线程系统中实现对进程的支持。原有多线程系统的调度
器仍然只需要负责多线程调度而不需要进行任何修改,系统中原有线程的调
度行为也不会发生任何变化,因而对原有多线程系统改动很小。


图1为本发明一种在多线程系统中实现进程支持的方法实施例一示意

图2为本发明一种在多线程系统中实现进程支持的方法实施例二示意

图3为本发明 一 种在多线程系统中实现进程支持的方法实施例三示意

图4为本发明一种在多线程系统中实现进程支持的方法实施例四示意

10图5为本发明一种在多线程系统中实现进程支持的方法实施例五示意

图6为本发明一种在多线程系统中实现进程支持的装置实施例一示意

图7为本发明 一 种在多线程系统中实现进程支持的装置实施例二示意

图8为本发明一种在多线程系统中实现进程支持的装置实施例三示意

图9为本发明一种在多线程系统中实现进程支持的装置实施例四示意

图10为本发明一种实现进程支持的多线程系统实施例示意图
具体实施例方式
本发明提供了一种实现进程支持的方法、装置和多线程系统,可以在 不需要对原有多线程系统的操作系统和各软件模块做任何修改的情况下 有效实现对进程的支持。下面结合附图对本发明进行详细的说明。
图1给出了本发明 一种在多线程系统中实现进程支持的方法实施例一 示意图,所述方法包括以下步骤
步骤Sl,创建进程;
步骤S2,创建所述进程对应的代理线程;
代理线程可以是一类具有特殊功能的线程,它可以帮助对应的进程在调 度器的调度队列中排队等待处理器的使用权,并在得到处理器使用权以后将 其转让给对应进程。
步骤S3,当所述代理线程获得调度器分配的处理器资源后,将所述处理 器资源转让给所述代理线程对应的进程。
从原有系统调度器的角度看来,代理线程和系统中的其他线程并无任何区别。因此调度器按照与调度其他线程完全相同的策略对代理线程进行调度, 为其分配处理器资源。只要代理线程位于调度器的调度队列中,调度器总会 在某个时刻选中这个代理线程并将处理器资源分配给它。通过代理线程将获 得的处理器资源分配给所述代理线程对应的进程,实现了在原有多线程系统 中实现对进程的支持。原有多线程系统的调度器仍然只需要负责多线程调度 而不需要进行任何修改,系统中原有线程的调度行为也不会发生任何变化, 因而对原有多线程系统改动4艮小。
图2给出了本发明一种在多线程系统中实现进程支持的方法实施例二
示意图,本实施例除了包括方法实施例一的步骤外,步骤S3中将所述处 理器资源分配给所述代理线程对应的进程具体还包括 步骤S31,查找所述代理线程对应的进程;
步骤S32,切换到所述进程的进程资源空间;具体可以从进程的进程控 制块中获取进程相关信息,从而切换到所述进程的进程资源空间。
进行切换时,代理线程应当使用某种进程资源隔离切换技术,如进程 内存页表、进程文件表等技术实现进程资源空间的隔离与切换。
步骤S33,恢复所述进程的运行状态;具体可以从进程的进程控制块中 获取进程相关信息,从而恢复进程的运行状态。
步骤S34,执行所述进程的代码。
由上述步骤可见,代理线程分配处理器资源给对应进程并没有通过调度 器,所以调度器无法知道进程的存在,实现了调度过程中进程对原有系统调 度器的屏蔽。 '
图3给出了本发明一种在多线程系统中实现进程支持的方法实施例三 示意图,本实施例除了包括方法实施例一的步骤外,还包括
步骤S41,在接收到中断时,检查当前运行的是进程还是线程,如果是 线程则执行步骤S44,如果是进程则执行步骤S42;
所述检查当前运行的是进程还是线程具体可以根据以下方法判断检查中断到达时处理器保存的中断返回地址,该地址就是处理器在中断产生的时 刻正在执行的指令的地址,如果该地址位于进程的进程内存空间范围之外, 则认为当前被中断的是线程,进程内存空间可以在创建进程时产生,也可以
在进程执行的过程中根据需要产生,具体由进程资源隔离切换技术,如进
程内存页表、进程文件表等技术实现进程内存空间的分配、隔离与切换。
步骤S42,将当前进程的运行状态保存到所述进程的进程控制块中; 步骤S43,将进程使用的处理器资源转让给所述进程对应的代理线程; 步骤S44,执行多线程系统的中断服务程序。
由上述步骤可见,本发明可以在进入原有系统的中断月良务程序之前先将 处理器资源从进程还给了代理线程。因此原有系统的中断服务程序也无法知 道进程的存在,仍然认为被当前中断打断的是代理线程。所以原有系统的中 断服务程序也不需要进行任何修改。
本实施例除了可以在方法实施例一的基础上进行上述扩展外,还可以在 方法实施例二的基础上进行上述扩展。
图4给出了本发明一种在多线程系统中实现进程支持的方法实施例四 示意图,本实施例除了包括方法实施例三的步骤外,还包括
步骤S51,在接收到杀死进程的命令后,查找所述进程对应的代理线程;
步骤S52,终止所述代理线程;
步骤S53,删除所述代理线程;
步骤S54,删除与所述进程相关的信息;
具体在创建进程的时候可以生成进程列表存储进程相关信息,删除进程 时需要删除进程列表中的相关表项。
步骤S55,释^L所述进程占用的资源。
本实施例除了可以在方法实施例三的基础上进行上述扩展外,还可以在 方法实施例一或方法实施例二的基础上进行上述扩展。
图5给出了本发明 一种在多线程系统中实现进程支持的方法实施例五示意图,本实施例除了包括方法实施例二的步骤外,还包括
所述步骤S1之后还包括步骤S11:对所述进程分配进程编号,并在进程 列表中记录所述进程与进程编号的对应关系;
系统在创建进程后可以将进程;故入一个进程列表,并对每个进程进行编 号,进程一旦创建就被赋予一个唯一的编号,系统可以通过这个编号找到对 应的进程。在该进程整个生命周期内,即进程从创建到消亡的这段时间内, 这个编号始终不会改变,我们称这个编号为进程编号(Process ID,简称PID)。 所述步骤S2之后还包括步骤S21:所述代理线程记录所述进程的进程编
号;
所述步骤S31具体为根据进程编号查找所述代理线程对应的进程。
每个代理线程都记录着其所服务的进程的PID。当调度器将处理器资 源分配给某个代理线程后,该代理线程就可以根据进程的PID在进程列表 查找对应的进程,然后将自己的处理器资源转让给该进程,该进程获得处 理器使用权并开始运行。
本实施例除了可以在方法实施例二的基础上进行上述扩展外,还可以在 方法实施例三或方法实施例四的基础上进行上述扩展。
本发明的核心思想在于通过创建代理线程的方式由线程代替进程参加 调度活动,使得原有系统的调度器仍然只需要负责多线程调度,因而不需要 对调度器进行任何修改。同时由于调度器没有变化,系统中原有线程的调度 行为也不会发生任何改变,原有软件模块仍然在多线程环境下运行。因此原 有系统中各软件模块也不需要因为进程的引入而做任何修改。这样就达到了 在不改动原有系统的前提下实现进程支持的目的,对原系统影响最小。
系统可以将所有的已创建进程放入一个进程列表中,并对每个进程进行 编号。进程一旦创建就被赋予一个唯一编号,该编号类似手现实生活中人的 身份证号,可以唯一标识一个进程,系统可以通过这个编号找到对应的进程。 在该进程整个生命周期内,即进程从创建到消亡的这段时间内,这个编号始终不会改变,我们称这个编号为进程的进程编号PID。
在系统中为每个进程各创建一个线程作为该进程的调度代理,我们称这 种线程为进程的代理线程。代理线程是一类具有特殊功能的线程,它可以帮 助对应的进程在调度器的调度队列中排队等待处理器的使用权,并在得到处 理器使用权以后将其转让给对应进程。代理线程的调度参数必须与对应进程 完全相同,例如两者的调度优先级和时间片必须相同。
从原有系统调度器的角度看来,代理线程和系统中的其他线程并无任何
为其分配处理器使用权。只要代理线程位于调度器的调度队列中,调度器总 会在某个时刻选中这个代理线程并将处理器资源分配给它。
每个代理线程都记录着其所服务的进程的PID。当调度器将处理器资源 分配给某个代理线程后,该代理线程就会查找进程列表,找到PID所对应的 进程后就将自己的处理器资源转让给该进程。则该进程获得处理器使用权并 开始运行。
代理线程采用如图2所述的步骤S31至步骤S34将自己的处理器资源转 让给进程。步骤S32进行进程资源空间切换时,代理线程可以使用某种进程 资源隔离切换技术,如进程内存页表、进程文件表等技术实现进程资源空 间的隔离与切换。
由此可见该处理器使用权转让完全在代理线程与对应进程之间进行,并 没有通过调度器。所以调度器无法知道进程的存在,实现了调度过程中进程 对原有系统调度器的屏蔽。
在嵌入式操作系统中,每次中断到达时,调度器都会强制收回处理器资 源以便进行中断处理和处理器资源再分配,即调度器可能重新选择最高优先 级的线程调度运行。因此需要在调度器收回处理器资源之前先把处理器资源 从进程还给对应的代理线程。这个处理必须在中断服务程序中进行,其处理 过程为处理器在接收到由硬件设备或定时器发来的中断时,将自动跳转到一个特定的指令地址去。位于该指令地址的代码就称为中断服务程序。
本发明中通过一个新的代理中断服务程序来替换原有系统的中断服务程
序,代理中断服务程序将做如下处理
步骤IOI,检查当前被中断打断的是进程还是线程。如果是线程则跳到 步骤104,否则执行步骤102;
步骤102,将当前进程的运行状态保存到该进程的进程控制块中,以便 下次代理线程可以重新恢复运^f该进程;
步骤103,将处理器资源分配给当前进程所对应的代理线程;
步骤104,跳转到原有系统的中断服务程序,继续中断响应过程,通常 该中断服务程序会将处理器资源再转移到调度器。
可见,本发明的代理中断服务程序在进入原有系统的中断服务程序之前 先将处理器资源从进程还给了代理线程。因此原有系统的中断服务程序也无 法知道进程的存在,仍然认为被当前中断打断的是代理线程。所以原有系统 的中断服务程序也不需要进行任何修改。
从上面的描述可知,本发明完全在原有系统的调度器和中断服务程序之 外扩展实现了进程支持。对原有系统的其他部分来说,进程是不可见的,而 原有系统的调度行为也没有任何变化。原有系统中的各软件模块和操作系统 均无需做任何修改,只需要按照本发明中所述方案实现一进程支持模块即可 在旧有系统的基础上扩展对进程的支持,能够支持基于进程开发的新应用软 件模块。
本发明使用代理线程代替进程参与旧有系统中的调度活动。由于代理线 程的存在,进程对原有系统完全屏蔽不可见,原有系统中的原有部分不需要 做任何修订,使得本发明实施起来工作量小、风险低,因而易于实施。而由 于代理线程的调度活动仍然由原有系统的调度器实施,本发明实施时也不需 要关心原有系统的调度策略,因此可以适用于任何嵌入式多线程操作系统, 通用性好。由代理线程负责将其获得的处理器资源转让给进程,实现进程的处理器 资源分配,从进程的角度来看,进程也感知不到代理线程的存在。因此本发 明对进程屏蔽了原有系统的线程调度细节,呈现给进程的仍然是一个传统意 义上的多进程运行环境,对进程端的软件开发没有特殊要求,兼容性好。
下面再通过一个较优实施例对本发明进行进一步说明。本实施例可以对
Nuc 1 eus PLUS操作系统进行扩展实现了进程支持。Nuc 1 eus PLUS操作系统是 为实时嵌入式应用而设计的一个抢先式多线程嵌入式操作系统,广泛应用于 网络通信等嵌入式产品中。
在本实施例中按照如下步骤创建进程
步骤201,初始化进程,为进程分配PID。并在进程列表中记录进程PID 与该进程的进程控制块之间的关系;
步骤202,调用Nucleus PLUS操作系统提供的TCCE—Create—Task () API 接口创建一个代理线程,并向该代理线程传入步骤201中分配的PID值。该 代理线程的调度优先级和时间片配置值均与新进程的相同;
步骤203,完成代理线程创建后Nucleus PLUS才喿作系统的 TCCE-Create-Task() API接口会返回代理线程的线程控制块的指针,将该指 针保存在新进程的进程控制块中。
该代理线程被Nucleus PLUS操作系统的调度器调度运行时将进行如下操

步骤301,将创建进程时传入的PID保存到自身线程控制块的tc_argv 字段中,即设置Nucleus PLUS操作系统的TCD—Current-Thread->tc—argv为 PID;
步骤302,调用return—to—process ()函数。 return—to—process ()函数的处理步骤如下
步骤401,从当前线程的线程控制块中取出PID值,即读取Nucleus PLUS 才喿作系统的TCD_Current-Thread-Hc-argvii;步骤402,查找进程列表,根据PID找到对应进程的进程控制块; 步骤403,从进程控制块中读取信息,使用某种进程资源隔离切换技术 切换到该进程运行所需的进程资源空间;
步骤404,从进程控制块中读取信息,恢复进程的运行状态; 步骤405,跳转到进程的代码中,将处理器资源转让给进程。 在系统的代理中断服务程序总入口处的处理步骤如下 步骤501,检查中断到达时处理器保存的中断返回地址,该地址就是处 理器在中断产生的时刻正在执行的指令的地址,如果该地址位于进程的进程 内存空间范围之外,则认为当前被中断的是线程,跳转到步骤504,否则执 行步骤502;进程内存空间可以在创建进程时产生,也可以在进程执行的过 程中根据需要产生,具体由进程资源隔离切换技术,如进程内存页表、进 程文件表等技术实现进程内存空间的分配、隔离与切换。
步骤502,将当前进程的运行状态保存到该进程的进程控制块中; 步骤503,将中断返回地址修改为return—to—process ()函数的地址,这 样有两个目的
a) 步骤4中Nucleus PLUS操作系统的中断服务程序在处理中断时,会以 为当前中断打断的是代理线程;
b) Nucleus PLUS #:作系统的调度器在下次将处理器资源重新分配给代理 线程后,代理线程会从return—to-process()函数开始扭4行,重新将处理器 资源转让给进程。
步骤504,跳转到Nucleus PLUS操作系统的中断服务程序,继续中断响 应过程。
本发明按照如下步骤杀死一个进程
步骤601,在该进程的进程控制块中找到该进程对应的'代理线程; 步骤602,调用Nucleus PLUS操作系统的TCCE—Terminate—Task () API 接口终止该代理线程;步骤603,调用Nucleus PLUS操作系统的TCCE—Delete_Task () API接 口删除该代理线程;
步骤604,从进程列表中删除与该进程相关的表项; 步骤605,释放该进程占用的所有资源。
图6给出了本发明一种在多线程系统中实现进程支持的装置实施例一 示意图,所述装置包括创建模块M1、进程模块M2、代理线程模块M3和资源 分配模块M4;
所述创建才莫块Ml用于创建进程,以及所述进程对应的代理线程;
所述进程模块M2与创建模块Ml连接,用于维护进程相关信息;
所述代理线程;漠块M3与创建模块M1连接,用于维护代理线程相关信息;
所述资源分配模块M4与创建模块Ml、进程模块M2和代理线程模块M3 连接,用于在所述代理线程获得调度器分配的处理器资源后,将所述处理器 资源转让给所述代理线程对应的进程。
图7给出了本发明一种在多线程系统中实现进程支持的装置实施例二 示意图,本实施例除了包括装置实施例一的结构特征外,所述资源分配模 块NM还包括进程查找单元M41、资源空间切换单元M42、运行状态恢复单元 M43和代码才丸4亍单元M44;
所述进程查找单元M41用于在所述代理线程获得调度器分配的处理器资 源后,查找所述代理线程对应的进程;
所述资源空间切换单元M42与进程查找单元M41连接,用于切换到所述 进程的进程资源空间;
所述运行状态恢复单元M4 3与进程查找单元M41和资源空间切换单元M4 2 连接,用于恢复所述进程的运行状态;
所述代码执行单元M44与进程查找单元M41和资源空间切换单元M42连 接,用于执行所述进程的代码。
图8给出了本发明 一种在多线程系统中实现进程支持的装置实施例三示意图,本实施例除了包括装置实施例一的结构特征外,还包括代理中断
服务模块M5,与进程模块M2和代理线程模块M3连接,用于在接收到中断时, 检查当前运行的是进程还是线程,如果是钱程则执行多线程系统的中断服务 程序,如果是进程则将当前进程的运行状态保存到所述进程的进程控制块中, 将进程使用的处理器资源转让给所述进程对应的代理线程,并执行多线程系 统的中断服务程序。
所述检查当前运行的是进程还是线程具体可以根据以下方法判断检查 中断到达时处理器保存的中断返回地址,该地址就是处理器在中断产生的时 刻正在执行的指令的地址,如果该地址位于进程的进程内存空间范围之外, 则认为当前被中断的是线程,进程内存空间可以在创建进程时产生,也可以 在进程执行的过程中根据需要产生,具体由进程资源隔离切换技术,如进 程内存页表、进程文件表等技术实现进程内存空间的分配、隔离与切换。
本实施例除了可以在装置实施例一的基础上进行上述扩展外,还可以在 装置实施例二的基础上进行上述扩展。
图9给出了本发明一种在多线程系统中实现进程支持的装置实施例四 示意图,本实施例除了包括装置实施例三的结构特征外,还包括进程结束 模块M6,与进程模块M2和代理线程模块M3连接,用于在接收到杀死进程的 命令后,查找所述进程对应的代理线程;终止所述代理线程;删除所述代理 线程;删除系统中与所述进程相关的表项;释放所述进程占用的资源。
本实施例除了可以在装置实施例三的基础上进行上述扩展外,还可以在 装置实施例一或装置实施例二的基础上进行上述扩展。 '
图IO给出了本发明一种实现进程支持的多线程系统实施例示意图,包括 上述装置实施例一至装置实施四例所述的任一装置,还包括调度器模块M7和 原有中断服务模块M8;
以所述多线程系统包括装置实施例四为例,
所述调度器模块M7与资源分配模块M4和代理中断服务模块M5连接,用于进行代理线程的调度和处理器资源的分配;
所述原有中断服务模块M8与代理中断服务模块M5和调度器模块M7连 接,用于进行线程中断响应。
本发明通过创建代理线程的方式由线程代替进程参加调度活动,使得原 有系统的调度器仍然只需要负责多线程调度,因而不需要对调度器进行任何 修改。同时由于调度器没有变化,系统中原有线程的调度行为也不会发生任 何改变,原有软件模块仍然在多线程环境下运行。因此原有系统中各软件模 块也不需要因为进程的引入而做任何修改。这样就达到了在不改动原有系统 的前提下实现进程支持的目的,对原系统影响最小。
本发明使用代理线程代替进程参与旧有系统中的调度活动。由于代理线 程的存在,进程对原有系统完全屏蔽不可见,原有系统中的原有部分不需要 做任何修订,使得本发明实施起来工作量小、风险低,因而易于实施。而由 于代理线程的调度活动仍然由原有系统的调度器实施,本发明实施时也不需 要关心原有系统的调度策略,因此可以适用于任何嵌入式多线程操作系统, 通用性好。
由代理线程负责将其获得的处理器资源转让给进程,实现进程的处理器 资源分配,从进程的角度来看,进程也感知不到代理线程的存在。因此本发 明对进程屏蔽了原有系统的线程调度细节,呈现给进程的仍然是一个传统意 义上的多进程运行环境,对进程端的软件开发没有特殊要求,兼容性好。
本发明可以在不更改原有系统原有软件代码的基础上为原有系统的 多线程操作系统添加进程支持功能。且本发明提出的方案可以适用于目前 所有主流多线程嵌入式操作系统,如Nucleus PLUS、 VxWorks等,通用性 好。具体实施时改动工作量小、风险低、成本低。并且能够完整保留原有 系统原有代码,极大地延长了旧有系统的生命周期。
最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其 限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的才支术方案进4亍修改,或 者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技
术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
1.一种在多线程系统中实现进程支持的方法,其特征在于,所述方法包括创建进程;创建所述进程对应的代理线程;当所述代理线程获得调度器分配的处理器资源后,将所述处理器资源转让给所述代理线程对应的进程。
2. 根据权利要求1所述的方法,其特征在于,所述将所述处理器资源分 配给所述代理线程对应的进程具体为查找所述代理线程对应的进程; 切换到所述进程的进程资源空间; 恢复所述进程的运行状态; 执行所述进程的代码。
3. 根据权利要求1或2所述的方法,其特征在于,还包括 在接收到中断时,检查当前运行的是进程还是线程,如果是线程则执行多线程系统的中断服务程序,如果是进程则将当前进程的运行状态保存到所 述进程的进程控制块中,将进程使用的处理器资源转让给所述进程对应的代 理线程,并执行多线程系统的中断服务程序。
4. 根据权利要求3所述的方法,其特征在于,还包括在接收到杀死进 程的命令后,查找所述进程对应的代理线程;终止所述代理线程;删除所述 代理线程;删除与所述进程相关的信息;释放所述进程占用的资源。
5. 根据权利要求2所述的方法,其特征在于,所述创建进程之后还包括对所述进程分配进程编号,并在进程列表中 记录所述进程与进程编号的对应关系;所述创建所述进程对应的代理线程之后还包括所述代理线程记录所述进程的进程编号;所述查找所述代理线程对应的进程具体为根据进程编号查找所述代理 线程对应的进程。
6. —种在多线程系统中实现进程支持的装置,其特征在于,包括创建模 块、进程模块、代理线程模块和资源分配模块;所述创建模块用于创建进程,以及所述进程对应的代理线程; 所述进程模块与创建模块连接,用于维护进程相关信息; 所述代理线程模块与创建模块连接,用于维护代理线程相关信息; 所述资源分配模块与创建模块、进程模块和代理线程;漠块连接,用于在所述代理线程获得调度器分配的处理器资源后,将所述处理器资源转让给所述代理线程对应的进程。
7. 根据权利要求6所述的装置,其特征在于,所述资源分配模块包括进 程查找单元、资源空间切换单元、运行状态恢复单元和代码执行单元;所述进程查找单元用于在所述代理线程获得调度器分配的处理器资源 后,查找所述代理线程对应的进程;所述资源空间切换单元与进程查找单元连接,用于切换到所述进程的进 程资源空间;所述运行状态恢复单元与进程查找单元和资源空间切换单元连接,用于 恢复所述进程的运行状态;所述代码执行单元与进程查找单元和资源空间切换单元连接,用于执行 所述进程的代码。
8. 根据权利要求6或7所述的装置,其特征在于,还包括代理中断服务 模块,与进程模块和代理线程模块连接,用于在接收到中断时,检查当前运 行的是进程还是线程,如果是线程则执行多线程系统的中断服务程序,如果 是进程则将当前进程的运行状态保存到所述进程的进程控制块中,将进程使 用的处理器资源转让给所述进程对应的代理线程,并执行多线程系统的中断服务程序。
9. 根据权利要求8所述的装置,其特征在于,还包括进程结束模块,与 进程模块和代理线程模块连接,用于在接收到杀死进程的命令后,查找所述进程对应的代理线程;终止所述代理线程;删除所述代理线程;删除系统中 与所述进程相关的表项;释放所述进程占用的资源。
10. —种实现进程支持的多线程系统,其特征在于,包括权利要求6-9 所述的任一装置,还包括调度器模块和原有中断服务模块;所述调度器模块用于进行代理线程的调度和处理器资源的分配; 所述原有中断服务模块用于进行线程中断响应。
全文摘要
本发明提供了一种实现进程支持的方法、装置和多线程系统。所述方法包括创建进程;创建所述进程对应的代理线程;当所述代理线程获得调度器分配的处理器资源后,将所述处理器资源分配给所述代理线程对应的进程。本发明可以在不需要对原有多线程系统的操作系统和各软件模块做任何修改的情况下有效实现对进程的支持。
文档编号G06F9/46GK101556545SQ200910084359
公开日2009年10月14日 申请日期2009年5月22日 优先权日2009年5月22日
发明者丁兆杰 申请人:北京星网锐捷网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1