CN106874072B - 一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断的处理方法 - Google Patents
一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断的处理方法 Download PDFInfo
- Publication number
- CN106874072B CN106874072B CN201510933748.1A CN201510933748A CN106874072B CN 106874072 B CN106874072 B CN 106874072B CN 201510933748 A CN201510933748 A CN 201510933748A CN 106874072 B CN106874072 B CN 106874072B
- Authority
- CN
- China
- Prior art keywords
- interrupt
- partition
- current
- interrupt processing
- virtual
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4818—Priority circuits therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明设计了一种基于PowerPC处理器的操作系统分区虚拟中断实现方法。PowerPC处理器中断处理的机制导致在操作系统的中断处理中,不同分区的中断处理均依赖于处理器唯一的中断入口,进而致使不同分区的中断处理在设计实现上出现了耦合。本发明提出了一种虚拟中断的实现方法,能够使基于PowerPC处理器的嵌入式操作系统中不同分区的中断处理解藕,从而使每个分区对的中断处理不会影响到其他分区,同时各分区拥有完整的中断控制能力以及在用户态下对中断的处理能力。此方法为嵌入式操作系统实现各分区之间相互独立,互不干扰提供了必要的技术支撑,降低了分区内的软件设计与验证复杂性。
Description
技术领域
本发明属于嵌入式操作系统领域涉及一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断处理方法。
背景技术
嵌入式实时操作系统的分区是指运行在同一个处理器上,但是在执行时间和存储空间上相互隔离的代码段。操作系统内核对各个分区按照一定的调度规则循环调度,每个分区在自己的执行时间内独占处理器资源。同时,通过内存配置,各分区拥有自己的内存空间,分区相互之间无法直接访问,分区间的通信必须通过内核来进行。嵌入式操作系统的分区为不同功能组、不同安全级别、不同执行周期、不同触发方式的任务集成在同一个处理器中运行提供了便捷,由于各分区之间相互隔离,运行于不同分区上的程序互不影响,因此各分区内运行的软件的变动不会直接影响其他分区,某个分区内的软件错误不会向其他分区扩散,从而可以极大的减少软件升级或变动造成的验证时间和成本。
为了实现分区间在空间上相互隔离,同时也为了保证分区内运行的软件的错误不会对其他分区和整个操作系统造成影响,各分区需要运行于处理器的用户态,这时分区的内的软件只能访问特定的一些寄存器,相对应的,操作系统的内核运行与内核态,可以访问全部的寄存器。当一个分区的运行时间用完时,操作系统内核会切换其他分区进入处理器,这时处理器会经历从用户态切换到内核态,最后再回到用户态的过程。
一般情况下,上述过程可以保证嵌入式操作系统各分区的独立性,但是,由于PowerPC处理器响应外部中断时需要进入内核态,这时运行的程序可以访问全部寄存器和内存地址空间,因此,操作系统各分区互不干扰的特性被破坏,这表现在两个方面:首先是一个分区内的软件错误可能会扩散至其他分区,例如某个分区的外部中断处理函数中出现堆栈溢出时,就有可能修改了其他分区的数据或代码,造成不可预计的错误;其次,由于多个分区可能对同一个外部中断源有不同的处理逻辑,但按照PowerPC处理器提供的中断方式,所有的外部中断都在同一个入口点进行处理,这时就需要在该入口进行分区的判断,根据不同分区号进入不同处理流程,因此各分区的外部中断处理程序在这里出现了耦合,这与分区相互独立的思想是违背的,同时也增加了各分区中断处理程序的测试与验证复杂度。
在此条件下,需要提出一种方法,使嵌入式操作系统的各分区能够在处理器的用户态下,在各自分区的上下文环境中,独立的控制和响应外部中断信号,实现对中断的开关、锁存、循环嵌套、优先级抢占、中断函数调用等功能。
发明内容
本发明的目的是,能够使基于PowerPC处理器的嵌入式操作系统中不同分区的中断处理解藕,从而使每个分区对的中断处理不会影响到其他分区,同时各分区拥有完整的中断控制能力以及在用户态下对中断的处理能力。此方法为嵌入式操作系统实现各分区之间相互独立,互不干扰提供了必要的技术支撑,降低了分区内的软件设计与验证复杂性。
本发明提供了一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断机制,其特征在于:发生硬件中断时,当前正在运行的分区可以按照本分区的中断配置策略依次完成以下步骤,以实现对中断的控制和在用户态下的中断处理:
步骤1):处理器进入内核态,跳转到硬件中断入口,保存当前硬件中断的上下文,然后判断当前分区的虚拟中断控制器是否打开,如果没有打开则直接转到外部中断出口,重新恢复上下文并退出中断,继续在用户态下运行当前分区的程序,否则进入步骤2);
步骤2):判断当前分区的虚拟中断控制器是否屏蔽了当前中断位,若屏蔽了该中断位,则锁存当前中断并转到外部中断出口,否则进入步骤3);
步骤3):判断当前中断的优先级,如果比正在执行的虚拟中断优先级低,则将当前中断锁存起来,并进入外部中断出口;否则复制上下文到当前分区的堆栈内,并进入步骤4);
步骤4):将SRR0寄存器的值改为当前中断在本分区内的虚拟中断处理函数的入口地址,然后退出中断,跳转到相应的虚拟中断处理函数,在用户态下对当前中断进行处理,然后进入步骤5);
步骤5):通过系统调用进入内核态,判断是否有仍然锁存且未处理的中断。如果有锁存未处理的中断,则将优先级最高的锁存中断作为当前待处理中断,然后跳转到步骤4);如果没有锁存未处理的中断则将保存在当前分区堆栈内的上下文恢复到寄存器中。退出系统调用,重新回到用户态,并在中断前的上下文中继续运行程序。
处理器的硬件中断发生后,会自动进入内核态,并且在中断堆栈中保存中断现场的上下文,如步骤1)所述。在判断当前分区的虚拟中断开关打开后,仅需要将之前保存在中断堆栈的上下文复制到分区的堆栈内,并释放中断堆栈相应空间,如步骤3)所述。
各分区的虚拟中断控制器需要在分区初始化的时候进行配置,在每次切换分区的同时也切换相应的虚拟中断控制器。每个分区可以指定自己的虚拟中断控制器的开关状态,各中断的屏蔽状态,是否支持中断嵌套。每个虚拟中断控制器提供16个中断优先级,在分区初始化阶段可以按照硬件的优先级配置虚拟中断的优先级,高优先级的中断可以抢占当前正在运行的低优先级中断。
此方法中,处理器的外部中断入口,外部中断出口,虚拟中断入口和出口程序都是相同的,并且对操作系统的用户透明,用户只需要在操作系统的分区初始化时按照自己的需求对虚拟中断控制器进行相应配置。
本发明具有的优点和有益效果:本发明是一种基于PowerPC处理器的虚拟中断处理方法,通过这种方法,可以使嵌入式操作系统各分区的中断处理过程相互解藕,互不影响,提高了分区的独立性。
附图说明
图1是原始的外部中断处理流程示意图;
图2是使用本发明的分区虚拟中断流程示意图;
具体实施方式
下面结合说明书附图对本发明做详细说明,图1显示的是原始的中断处理流程,外部中断发生时,程序自动跳转到外部中断入口地址,当前处理器状态也随之进入内核态。在外部中断入口程序中,对中断上下文进行保存,然后按照中断向量号查找并跳转到相应中断处理程序。
使用本方法后,当发生硬件中断时,操作系统进入内核态,SRR0寄存器自动保存中断发生时要执行的下一条指令地址,SRR1寄存器自动保存中断发生时的处理器状态,指令指针跳转到外部中断处理入口地址。在该入口程序中,对当前上下文进行保存,并判断是否进入虚拟中断处理流程,如步骤S1所示。
如果当前分区的虚拟中断控制器的开关是打开的,则进一步判断当前类型的中断是否被屏蔽,如果被屏蔽则将当前中断锁存起来,如步骤S2所示。中断锁存可以有多种实现方法,例如用一个整型变量记录一种类型中断的发生次数,每次锁存该中断时相应变量做自加操作,每次处理该中断时该变量做自减操作。
若当前中断没有屏蔽,则进一步判断当前中断的优先级是否比分区内正在处理的中断的优先级高,如果分区内没有正在处理的中断或当前中断比正在处理的中断优先级高,则将中断栈中保存的中断上下文转存到当前分区的堆栈中,如步骤3所示。
将SRR0寄存器的值修改为分区内配置当前中断所对应的虚拟中断处理函数的入口地址,然后退出中断,则处理器进入用户态,并且开始运行虚拟中断处理函数处理当前中断,如步骤4所示。
在虚拟中断处理结束后,判断是否还有锁存未处理的中断,如果有则找出当前锁存的所有中断中优先级最高的一个进行处理,否则恢复中断上下文并退出中断,如步骤5所示。
通过以上步骤,各分区可以实现用户态下的虚拟中断处理。
在具体应用场景中:在PowerPC755处理器上,运行嵌入式分时分区操作系统,使用处理器外部中断,实现并验证操作系统各分区的中断处理过程。该操作系统共分两个分区,按时间规划轮流调度,并且共享两个定时器中断作为中断源。定时器1的优先级高于定时器2。其中分区A在定时器1的中断处理函数中通过串口打印字符串“A1”,在定时器2的中断处理函数中循环打印字符串“A2”;分区B在定时器1的中断处理函数中,先屏蔽了该分区的虚拟中断控制器的定时器1中断,然后通过串口打印字符串“B1”,在定时器2的中断处理函数中,先屏蔽了该分区虚拟中断控制器的定时器2中断,然后循环打印字符串“B2”。两个分区对定时中断的实现各不相同,而且分区B屏蔽定时中断后没有打开,如果采用原始的中断处理方式,在分区B执行中断处理后,分区A将无法再接收到定时中断信号。
此时,即可使用本发明的方法,具体步骤如下:
首先,在操作系统的初始化阶段,分别打开分区A和分区B的虚拟中断控制器,使能定时器1和定时器2的中断位,并且为各自的定时器中断配置中断处理函数。
分区A运行时,若定时中断发生,则按照虚拟中断处理流程,在用户态下调用相应的中断处理函数。由于定时器2的中断处理函数中要循环多次打印字符串“A2”,所需时间较长,如果中间出现定时器1中断,则定时器1的中断会抢占定时器2中断,打印字符串“A1”后,又回到定时器2的中断处理函数中继续运行,一直到完成循环次数后,退出中断处理。
分区B的运行和分区A结果类似,但是由于分区B的中断处理中屏蔽的自己的虚拟中断控制器中的定时器中断,而且在退出中断处理时没有重新使能该中断,因此定时器1和定时器2的中断处理函数只会执行一次。但是由于分区B对本分区虚拟中断控制器的配置不会影响到真实硬件中断,因此,该操作不会影响分区A的中断处理结果。
本发明还可以有其它多种实施例,在不背离本发明精神和实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (1)
1.一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断处理方法,其特征在于:发生硬件中断时,当前正在运行的分区按照本分区的中断配置策略依次完成以下步骤,以实现对中断的控制和在用户态下的中断处理:
步骤1):处理器进入内核态,跳转到硬件中断入口,保存当前硬件中断的上下文,然后判断当前分区的虚拟中断控制器是否打开,如果没有打开则直接转到外部中断出口,重新恢复上下文并退出中断,继续在用户态下运行当前分区的程序,否则进入步骤2);
步骤2):判断当前分区的虚拟中断控制器是否屏蔽了当前中断位,若屏蔽了该中断位,则锁存当前中断并转到外部中断出口,否则进入步骤3);
步骤3):判断当前中断的优先级,如果比正在执行的虚拟中断优先级低,则将当前中断锁存起来,并进入外部中断出口;否则复制上下文到当前分区的堆栈内,并进入步骤4);
步骤4):将SRR0寄存器的值改为当前中断在本分区内的虚拟中断处理函数的入口地址,然后退出中断,处理器进入用户态,跳转到相应的虚拟中断处理函数,在用户态下开始运行虚拟中断处理函数处理当前中断,然后进入步骤5);
步骤5):通过系统调用进入内核态,判断是否有仍然锁存且未处理的中断;如果有锁存未处理的中断,则将优先级最高的锁存中断作为当前待处理中断,然后跳转到步骤4);如果没有锁存未处理的中断则将保存在当前分区堆栈内的上下文恢复到寄存器中;退出系统调用,重新回到用户态,并在中断前的上下文中继续运行程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510933748.1A CN106874072B (zh) | 2015-12-14 | 2015-12-14 | 一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510933748.1A CN106874072B (zh) | 2015-12-14 | 2015-12-14 | 一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断的处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106874072A CN106874072A (zh) | 2017-06-20 |
CN106874072B true CN106874072B (zh) | 2020-12-29 |
Family
ID=59238472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510933748.1A Active CN106874072B (zh) | 2015-12-14 | 2015-12-14 | 一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106874072B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107526622B (zh) * | 2017-08-16 | 2020-04-07 | 北方工业大学 | Linux的快速异常处理方法及装置 |
CN110502348B (zh) * | 2019-07-23 | 2023-10-27 | 中国航空无线电电子研究所 | 基于服务的gpu指令提交服务器 |
CN114003365A (zh) * | 2021-11-01 | 2022-02-01 | 浙江大学 | 用于risc-v架构的快速中断系统 |
CN116382856B (zh) * | 2023-06-02 | 2023-09-26 | 麒麟软件有限公司 | 基于虚拟化嵌套增强系统实时性的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089341B2 (en) * | 2004-03-31 | 2006-08-08 | International Business Machines Corporation | Method and apparatus for supporting interrupt devices configured for a particular architecture on a different platform |
CN103034558A (zh) * | 2012-12-13 | 2013-04-10 | 中国航空无线电电子研究所 | PowerPC系统控制器 |
CN103207782A (zh) * | 2013-03-27 | 2013-07-17 | 北京航空航天大学 | 基于multi-kernel MOS 的分区系统构建方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7000051B2 (en) * | 2003-03-31 | 2006-02-14 | International Business Machines Corporation | Apparatus and method for virtualizing interrupts in a logically partitioned computer system |
CN100347676C (zh) * | 2005-03-04 | 2007-11-07 | 清华大学 | 基于PowerPC处理器的车用操作系统中断管理方法 |
CN1783020A (zh) * | 2005-09-12 | 2006-06-07 | 浙江大学 | 基于PowerPC体系结构的嵌入式操作系统的中断管理方法 |
CN103049318B (zh) * | 2011-10-11 | 2017-10-17 | 北京科银京成技术有限公司 | 分区操作系统的虚拟中断方法 |
CN103676727A (zh) * | 2013-11-27 | 2014-03-26 | 南京国电南自美卓控制系统有限公司 | 基于嵌入式芯片的可抢占、可嵌套中断控制方法 |
-
2015
- 2015-12-14 CN CN201510933748.1A patent/CN106874072B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089341B2 (en) * | 2004-03-31 | 2006-08-08 | International Business Machines Corporation | Method and apparatus for supporting interrupt devices configured for a particular architecture on a different platform |
CN103034558A (zh) * | 2012-12-13 | 2013-04-10 | 中国航空无线电电子研究所 | PowerPC系统控制器 |
CN103207782A (zh) * | 2013-03-27 | 2013-07-17 | 北京航空航天大学 | 基于multi-kernel MOS 的分区系统构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106874072A (zh) | 2017-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106874072B (zh) | 一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断的处理方法 | |
CN108196946B (zh) | 一种微内核操作系统的分区多核方法 | |
JP2002268914A (ja) | 特権命令の実行を監視する方法 | |
US7526579B2 (en) | Configurable input/output interface for an application specific product | |
EP1080422A1 (en) | Software configurable technique for prioritizing interrupts in a microprocessor-based system | |
CN102567090A (zh) | 在计算机处理器中创建执行线程的方法和系统 | |
US5551051A (en) | Isolated multiprocessing system having tracking circuit for verifyng only that the processor is executing set of entry instructions upon initiation of the system controller program | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
US7111089B2 (en) | Programmable scheduler for digital signal processor | |
US9841994B2 (en) | Implementation of multi-tasking on a digital signal processor with a hardware stack | |
US8909835B2 (en) | Computer system and method of controlling computer system | |
CN107526622B (zh) | Linux的快速异常处理方法及装置 | |
CN110968876A (zh) | 基于mils架构的安全操作系统 | |
US10572300B2 (en) | Apparatus and method for configuring a microcontroller system | |
CN114003365A (zh) | 用于risc-v架构的快速中断系统 | |
US7516311B2 (en) | Deterministic microcontroller context arrangement | |
US8910181B2 (en) | Divided central data processing | |
US20060168373A1 (en) | Configurable application specific standard product with configurable I/O | |
CN114489941B (zh) | 运行在宿主模式用户态的虚拟机管理方法及系统 | |
CN115248726A (zh) | 中断处理方法、装置、计算机设备及存储介质 | |
US10803007B1 (en) | Reconfigurable instruction | |
Moisuc et al. | Hardware event handling in the hardware real-time operating systems | |
CN117251393B (zh) | 处理器的中断响应方法、装置、芯片、计算机设备和介质 | |
CN111788555B (zh) | 数据处理装置和方法 | |
Reber et al. | Checkpoint/restore in user-space with open mpi |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |