CN101251792B - 用于受应用管理的线程单元的结构化异常处理 - Google Patents
用于受应用管理的线程单元的结构化异常处理 Download PDFInfo
- Publication number
- CN101251792B CN101251792B CN2007103062758A CN200710306275A CN101251792B CN 101251792 B CN101251792 B CN 101251792B CN 2007103062758 A CN2007103062758 A CN 2007103062758A CN 200710306275 A CN200710306275 A CN 200710306275A CN 101251792 B CN101251792 B CN 101251792B
- Authority
- CN
- China
- Prior art keywords
- thread
- thread units
- instruction
- operating system
- user
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 claims abstract description 122
- 230000008569 process Effects 0.000 claims description 55
- 238000012545 processing Methods 0.000 claims description 45
- 230000004044 response Effects 0.000 claims description 21
- 230000005856 abnormality Effects 0.000 claims description 18
- 238000012546 transfer Methods 0.000 claims description 13
- 238000003860 storage Methods 0.000 claims description 12
- 230000005540 biological transmission Effects 0.000 claims 2
- 230000002159 abnormal effect Effects 0.000 claims 1
- 230000007246 mechanism Effects 0.000 description 25
- 238000007726 management method Methods 0.000 description 23
- 238000010586 diagram Methods 0.000 description 13
- 230000009466 transformation Effects 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 208000032826 Ring chromosome 3 syndrome Diseases 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 230000002547 anomalous effect Effects 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 238000002955 isolation Methods 0.000 description 4
- 238000011282 treatment Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 2
- 238000013523 data management Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 241001147665 Foraminifera Species 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000008278 dynamic mechanism Effects 0.000 description 1
- 238000011221 initial treatment Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
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/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
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
- Document Processing Apparatus (AREA)
- Stored Programmes (AREA)
Abstract
提供了用于在多线程系统中对用户级线程进行结构化异常处理的方法、数据结构、指令和技术。可以将已注册过滤例程分派到不受操作系统(OS)管理的线程单元。可以通过使受OS管理的线程单元(代理)代表隔离的线程单元来调用由OS提供的结构化异常处理服务(包括分派程序)而发生所述分派。作为选择,受OS管理的线程单元可以包括分派代码,并且可以无需OS干预就将过滤例程分派到隔离的线程单元。还描述和声明了其它实施例。
Description
技术领域
本公开总体上涉及信息处理系统,更具体地,涉及用于多线程系统中用户级线程的结构化异常处理。
背景技术
为了提高诸如那些包括微处理器的信息处理系统的性能,已经采用了硬件和软件的多线程技术。多线程逐渐得到硬件上的支持。例如,在一种方式中,多处理器系统(诸如单芯片多处理器(“CMP”)系统)中的处理器每个都可以并发地运行多个软件线程中的一个。在被称为并发多线程(“SMT”)的另一种方式中,对于操作系统和用户程序而言,单个物理处理器看起来像是多个逻辑处理器。对于SMT,在单个处理器上,多个软件线程可以同时是活动的并可以同时执行,而无需切换。也就是,每个逻辑处理器维护完整的一组架构状态,但是该物理处理器的许多其它资源都是共享的,比如高速缓存、执行单元、分支预测器、控制逻辑和总线。因此,对于SMT来说,来自多个软件线程的指令并发地在每个逻辑处理器上执行。
对于诸如SMT和/或CMP系统这样的支持多个软件线程的并发执行的系统而言,操作系统应用程序可以控制(多个)线程执行资源上软件线程的调度和执行。然而,不受操作系统控制的其它线程执行资源对于程序员来说也可以是可用的并且可以由用户级代码来控制。普通操作系统并未提供数据结构来维护用于可在这些资源上执行的用户级线程的本地数据。
发明内容
根据本发明的一个方面,提供了一种实现用于与操作系统隔离的线程单元的异常处理的方法,包括:在与操作系统隔离的第一线程单元上执行将导致异常的指令;触发将控制转移到不与所述操作系统隔离的第二线程单元;响应于在所述第二线程单元上执行所述指令,启动对用户级异常处理程序代码的分派处理;以及将控制返回到所述第一线程单元,所述第一线程单元执行所述分派处理并且还执行异常处理程序代码。
根据本发明的另一个方面,提供了一种实现用于不受操作系统管理的线程单元的异常处理的方法,包括:在受用户应用而不是操作系统管理的第一线程单元上执行指令,其中,该执行导致出现满足架构定义的场景的处理器状态;响应于所述场景得到满足,将控制传递到第二线程单元,所述第二线程单元是受所述操作系统管理的;从所述第二线程单元上启动用户级异常处理例程的分派;以及在所述第一线程单元上执行所述处理例程。
根据本发明的再一个方面,提供了一种实现用于与操作系统隔离的线程单元的异常处理的装置,包括:执行模块,用于在与操作系统隔离的第一线程单元上执行将导致异常的指令;触发模块,用于触发将控制转移到不与所述操作系统隔离的第二线程单元;启动模块,用于响应于在所述第二线程单元上执行所述指令,启动对用户级异常处理程序代码的分派处理;以及返回模块,用于将控制返回到所述第一线程单元,所述第一线程单元执行所述分派处理并且还执行异常处理程序代码。
根据本发明的又一个方面,提供了一种实现用于不受操作系统管理的线程单元的异常处理的装置,包括:指令执行模块,用于在受用户应用而不是操作系统管理的第一线程单元上执行指令,其中,该执行导致出现满足架构定义的场景的处理器状态;传递模块,用于响应于所述场景得到满足,将控制传递到第二线程单元,所述第二线程单元是受所述操作系统管理的;启动模块,用于从所述第二线程单元上启动用户级异常处理例程的分派;以及处理例程执行模块,用于在所述第一线程单元上执行所述处理例程。
根据本发明的另一个方面,提供了一种实现用于不受操作系统管理的线程单元的异常处理的系统,包括:用于存储操作系统(OS)的存储器系统;以及受所述OS管理的第一线程单元和不受所述OS管理的第二线程单元,所述第二线程单元用于执行对OS透明的用户级线程,所述用户级线程与由所述OS创建的原生线程相关联;每个线程单元具有指令集架构,所述指令集架构包括用于响应于异常而触发将控制异步转移到用户级处理程序代码的指令;所述存储器进一步包括所述用户级处理程序代码,所述用户级处理程序代码包括用于进行以下功能的指令,即响应于所述异常而从所述第一线程单元调用已注册过滤例程的分派以便由所述第二线程单元执行。
附图说明
参考下列附图,可以理解本发明的实施例,在附图中相似的单元用相似的数字标明。这些附图并不是要进行限制,而是用来说明用于多线程系统中的用户级线程的结构化异常处理的数据结构和技术的选定实施例。
图1是说明多定序器(multi-sequencer)系统的各种实施例的框图。
图2是展示用于多定序器系统的一般并行编程方法的图形表示的框图。
图3是说明对于用户级多线程的至少一个实施例,在线程和用户级线程之间的共享存储器和状态的框图。
图4是说明用来在多线程系统中维护线程特有的本地数据的机制的至少一个实施例的块数据流程图。
图5是说明结构化异常处理所利用的数据结构的至少一个实施例的框图。
图6是说明用来为包括一个或多个隔离的定序器的多线程系统维护shred特有的本地数据的机制的框图。
图7是说明结构化异常处理的方法的至少一个实施例的数据流程图,对于在与操作系统隔离的线程单元上发生的异常,该方法绕过了该操作系统。
图8是说明结构化异常处理的第一种方法的至少一个实施例的数据流程图,其中,一个线程单元作为代理来调用系统资源,以用于在与操作系统隔离的线程单元上发生的异常。
图9是说明能够执行所公开的技术的系统的至少一个实施例的框图。
具体实施方式
以下论述描述了对于既非由操作系统创建也非由其进行管理、而是由用户级代码创建和管理的用户级线程,提供结构化异常处理的方法、系统、数据结构、装置和机制的选定实施例。
这样的用户级线程(在这里有时被称作共享资源线程(sharedresource thread)或“shred”)是程序员可以基于用户级代码中的指令而使其执行的指令序列。多个shred可以与同一个由OS生成的或“原生的(native)”线程相关联并且可以并发地执行。对于至少一个实施例而言,shred被进行调度以运行在可用的硬件资源上(例如,通过软件库中的或存在于用户空间中的调度程序(scheduler)来进行),而无需操作系统的干预。在此所述的实施例可以被用于单核或多核的多线程系统。
如这里所使用的,线程单元(在此还可互换地被称作硬件线程上下文(context)或“定序器”)可以是能够执行线程或shred的任何物理或逻辑单元。
在以下说明中,阐述了诸如处理器类型、多线程环境、系统配置、数据结构以及特定操作系统和结构化异常处理过程这样的大量具体细节,以提供对于本发明的实施例更为彻底的理解。然而,本领域技术人员将意识到,本发明可以无需这些具体细节来实现。另外,没有详细示出一些公知的结构、电路等,以免不必要地使本发明变得晦涩。
图1是说明支持线程的用户级控制的多定序器系统的实施例310、350的选定硬件特征的框图。图1说明了单核多定序器多线程环境310的选定硬件特征。图1还说明了多核多线程环境350的选定硬件特征,在该环境中每个定序器是单独的物理处理器核心。
在单核多线程环境310中,对于操作系统和用户程序来说,单个物理处理器304被看作是多个逻辑处理器(未示出),在此被称作LP1至LPn。每个逻辑处理器LP1至LPn分别维护完整的一组架构状态AS1-ASn。对于至少一个实施例而言,架构状态312a、312b可以包括数据寄存器、段寄存器、控制寄存器、调试寄存器和大多数模型特有的寄存器。
逻辑处理器LP1-LPn共享物理处理器304的大多数其它资源,诸如高速缓存、执行单元、分支预测器、控制逻辑和总线。虽然可以共享这些特性,但是多线程环境310中的每个线程上下文能够独立生成下一个指令地址(并且例如从指令高速缓存、执行指令高速缓存或轨迹高速缓存中进行读取(fetch))。
因此,处理器304包括用于每个线程上下文的逻辑上独立的下一指令指针和读取逻辑320,即使在单个物理读取/解码单元322中可以实现多个逻辑定序器也是如此。下一指令指针和读取逻辑320用于确定对于给定线程或shred的要执行的下一个指令。
对于单核实施例,定序器因而可以是逻辑线程单元。在此情况下,术语“定序器”至少包括用于一个线程上下文的下一指令指针和读取逻辑320、以及用于该线程上下文的至少一些相关架构状态AS 312。应当注意的是,单核多线程系统310的定序器不需要是对称的。例如,用于同一个物理核心304的两个逻辑定序器在它们每个所维护的架构状态信息量上可以是不同的。
单核多线程系统能够实施任意多线程方案,包括并发多线程(SMT)、事件切换多线程(SoeMT)和/或时间复用多线程(TMUX)。当来自多于一个硬件线程上下文(或逻辑处理器)的指令在任意特定时间点上在处理器中并发运行时,称作SMT。否则,单核多线程系统可以实施SoeMT,其中在多个硬件线程上下文之间复用处理器管道,但是在任意给定时间,仅有来自一个硬件线程上下文的指令可以在所述管道中执行。对于SoeMT而言,如果线程切换事件是基于时间的,则其为TMUX。
因此,对于至少一个实施例而言,多定序器系统310是支持并发多线程的单核处理器304。对于这样的实施例而言,虽然单个处理器核心304的相同执行资源可以在并发执行的线程之间共享,从而同一个核心304执行并发线程的所有指令,但是每个定序器是一个逻辑处理器,其具有自己的下一指令指针和读取逻辑320以及自己的架构状态信息312。
图1还说明了多核多线程系统350的至少一个实施例。这样的系统350包括两个或更多单独的物理处理器304a-304n,其每个都能够执行不同的线程/shred,以使得可以同时进行不同线程/shred的至少部分的执行。每个处理器304a到304n均包括物理独立的读取单元322,用来读取其各自的线程或shred的指令信息。对于其中每个处理器304a-304n执行单个线程/shred的实施例而言,读取/解码单元322实现了单个下一指令指针和读取逻辑320。
然而,对于至少一个实施例而言,每个处理器304a-304n支持多个线程上下文;也就是说,每个处理器304a-304n可以是如实施例310中所示的多线程单核处理器。对于这样的实施例而言,系统350中的每个核心304的读取/解码单元322对于每个所支持的线程上下文,实现了不同的下一指令指针和读取逻辑320,并且每个线程上下文维护架构状态(AS)的单独拷贝。多处理器环境350中附加的下一指令指针和读取逻辑320以及架构状态的附加拷贝的可选特性由图1中的虚线所表示。
对于图1所示的多核系统350的至少一个实施例而言,每个定序器可以是一个处理器核心304,而在单芯片封装360中存在多个核心304a-304n。如以上刚刚所述的,每个核心304a-304n可以是单线程或多线程的处理器核心。在图1中由虚线表示的芯片封装360指示出,所说明的多核系统350的单芯片实施例仅仅是说明性的。对于其它实施例而言,多核系统的处理器核心可以存在于分离的芯片上。也就是说,所述多核系统可以是多插槽(multi-socket)对称多处理系统。
为了便于讨论,以下讨论聚焦于多核系统350的实施例。然而,该聚焦不应当被看作是限制性的,其中以下所述的机制可以在多核或单核多定序器环境中执行。
图2是说明多定序器多线程系统上的并行编程方法的图形表示的框图。共享存储器的多处理范例可以被用在被称作并行编程的方法中。根据该方法,应用程序员可以通过要并发运行的多个线程而在软件程序(有时被称作“应用”或“进程”)中表现并行性。同一软件程序(“进程”)的所有线程共享公共的存储器逻辑示图。
图2说明了对于操作系统(“OS”)140可见的进程100、103、120。这些进程100、103、120可以是不同的软件应用程序,例如字处理程序、图形程序和电子邮件管理程序。一般来说,每个进程运行在不同的虚拟地址空间中。
操作系统(“OS”)140一般负责管理一个进程的用户定义任务。虽然每个进程具有至少一个任务(例如,见由附图标记100和103分别表示的进程0和进程2),而其它进程可以具有多于一个的任务(例如,由附图标记120表示的进程1)。图2所示的进程数目以及每个进程的用户定义任务的数目不应当被看作是限制性的。这样的说明仅仅是出于解释的目的。
图2说明了可以由操作系统140来创建用于与进程120相关联的每个用户定义任务的不同线程125、126,并且操作系统140可以将线程125、126映射到线程执行资源。类似地,可以由操作系统140来创建用于与进程103相关联的用户定义任务的线程127;以及用于与进程0(100)相关联的用户定义任务的线程124。
OS 140一般负责对这些线程124、125...126、127进行调度以在执行资源上执行。与同一进程相关联的线程具有相同的虚拟存储器地址空间。
由于OS 140负责创建、映射和调度线程,所以线程124、125...126、127对于OS 140是“可见的”。此外,本发明的实施例包括对OS 140不可见的附加的用户级线程130-139。也就是说,OS 140并不创建、管理或另外控制这些附加的用户级线程130-139。
不由OS 140创建和控制、并且可以被调度以便彼此并发执行的这些附加线程在这里有时被称作“shred”130-139,以将它们与OS可见线程进行区别,并且进一步将它们与针对同一个OS可见线程的不能彼此并发执行的其它用户级线程进行区别。也就是说,与同一个OS可见线程相关联的多个shred可以彼此并发执行。
shred由用户级程序(被称作“shred化程序(shredded program)”)创建和管理,并且可以被调度以在与操作系统隔离的定序器上运行。隔离的定序器不由操作系统来管理,而是由用户级应用代码来管理。例如,图2所示的受OS管理的线程125可以在对于OS可见的一个定序器(未示出)上执行,而每个活动shred 130-132可以在其它的、与OS隔离的、不受OS管理的定序器(例如,分别见图3的“seq 1”-“seq 4”)上执行。对于与OS隔离的定序器而言,由用户级调度程序来调度指令流以用于执行。由此,与OS隔离的定序器由用户级应用而不是OS来管理,因此在此被称作“受应用管理的定序器”或“AMS”。
图2说明了与一个受OS调度的线程127相关联的一个进程103,还说明了与两个或更多线程125-126相关联的另一个进程120。此外,每个进程103、120还可以分别与一个或多个shred 137-139、130-136额外相关联。图2中使用虚点线和省略号来表示可选的附加shred。
进程1(120)的两个线程125、126和四个shred130-136的表示以及进程2(103)的一个线程127和两个shred 137、139的表示仅仅是说明性的,而不应当被看作是限制性的。本发明的实施例无需为与一个进程相关联的线程或shred数目施加上限或下限。至于线程的下限,图2说明了在给定时间运行的每个进程与至少一个线程相关联。
然而,线程根本无需与任何shred相关联。因此,没有为shred施加下限。例如,图2中所示的进程0(100)被示出为在图2所示的特定时间上运行时,有一个线程124,而没有任何shred。
至于上限,与一个进程相关联的OS可见线程的数目可以由OS程序来限定。然而,对于至少一个实施例而言,与一个进程相关联的shred的累积数目的上限仅由在执行期间特定时间上可用的shred执行资源的数目(例如,定序器的数目)来限定。
图2说明了与进程120相关联的第二线程126可以具有与其相关联的、与第一线程125不同数目(n)的shred。附加的shred的可选特性在图2中由省略号和虚线来表示。
与程序或进程的所有线程相关联的存储器公共逻辑示图可以在此被称作“应用图像”。对于本发明的实施例而言,该应用图像也由与一个进程相关联的shred所共享。
图3是说明了在进程、线程和shred之间的共享存储器状态的一个例子的框图。图3示出了图2所示的进程120、线程124、125、126,和shred 130-132的图形表示。同样参照图2,在下面讨论图3。
图3说明了,由与特定进程120相关联的所有线程125、126共享存储器的特定逻辑视图200。与OS隔离的定序器维护与OS可见的定序器上一样的一组ring 0状态。典型地,这些共享的ring-0架构状态负责支持在OS可见的定序器和与OS隔离的定序器之间的公共的共享存储器地址空间。例如,对于基于IA-32架构的实施例而言,CR0、CR2、CR3和CR4是这些共享的ring-0架构状态中的一些。因此,shred共享为与同一个进程相关联的线程创建的同样的执行环境(虚拟地址映射)。
图3说明了,每个线程125、126分别具有其自己的应用和系统状态202a、202b。图3说明了,线程125、126的应用和系统状态202由与该特定线程相关联的所有shred(例如,shred 130-132)所共享。例如,对于至少一个实施例而言,与特定shred相关联的所有shred可以共享ring 0状态以及至少部分与特定线程相关联的应用状态。
因此图3说明,用于本发明至少一个实施例的系统可以支持OS可见线程(例如线程125)和与该线程相关联的shred 130-132(其对于OS不可见)之间的一对多关系。程序员(而非OS)可以采用用户级技术来创建、同步以及另外管理和控制shred的操作,就这方面而言,这些shred对于OS(见140,图2)是不“可见的”。虽然OS 140知道并管理一个或多个线程125...126,但是OS 140不知道并且不管理或控制这些shred。如这里所使用的,术语“线程”和“shred”至少包括这样的概念,即其为要与一个进程的其它线程和/或shred并发执行的一组指令。如这里所使用的,线程(其是受OS控制的)与shred(其对于操作系统是不可见的并且由用户所控制)均为指令流,它们之间的区别点在于在如何管理各自的线程和shred指令流的调度和执行上的不同。响应于对OS的系统调用而生成线程。OS生成该线程并且分配资源来运行该线程。为线程分配的这些资源可以包括操作系统用来控制和调度所述线程的数据结构。
相比之下,shred的至少一个实施例是通过用户级软件“原语(primitive)”所生成的,所述用户级软件“原语”调用一种独立于OS的机制,其用于生成和调度OS不知道的shred。因此,可以响应于用户级软件调用而生成shred。对于至少一个实施例而言,用户级软件原语可以包括用户级(ring-3)指令,所述用户级指令调用硬件或固件来创建shred。这些指令可以被定义为处理器的指令集架构(ISA)的一部分。
这样所创建的shred可以由硬件和/或固件和/或用户级软件来调度。所述独立于OS的机制可以是位于用户空间(比如软件库)中的软件代码。因此,无需依赖操作系统来管理线程单元硬件和shred之间的映射,用户空间中的调度程序逻辑可以管理所述映射。可以在名为“A Mechanism For Instructions Set-Based Thread Execution on aPlurality of Instruction Sequencers”的共同未决专利申请美国专利序列号No.11/173326中找到用户级shred指令的进一步讨论。
应当注意的是,能够执行这里所公开的技术的实施例的系统的定序器无需是对称的。定序器可以以任意方式而不同,包括影响计算质量的那些方面。例如,所述定序器可以在功耗、计算执行速度、功能特征等方面有所不同。
在以下部分给出了关于受OS管理的线程的结构化异常处理的背景信息。其后给出根据本发明的用于shred的结构化异常处理的所选实施例。
图4是说明现有技术的对运行在受OS管理的定序器上的受OS管理的线程的数据管理机制的框图。受OS管理的定序器430在此被称作“OMS”。
图4说明了线程环境块或“TEB”545a、545b,其是由操作系统(例如,见图2的140)所创建和维护的数据结构,用于多线程应用中。对于特定系统而言,TEB 545a、545b可以被称作其它名称,例如线程信息块或线程控制块。为了便于讨论,结构545a、545b在这里被称作TEB,但是本领域技术人员将认识到,结构545a、545b的表示旨在包含任何相似结构,而不管特定系统的命名方式。
对于至少一些普通系统而言,诸如结构化异常处理这样的关键操作系统服务依赖于每个线程的TEB数据结构545a、545b的存在。
结构化异常处理(SEH)是OS提供的服务,补充以来自编译器的支持,用于处理在程序执行期间发生的异常事件。控制被反映回到其中发生异常事件的应用,以使得由所述应用而不是OS对异常进行处理。例如,这些异常事件可以包括:在非特权模式中时试图执行特权指令(一般保护故障)、除0错误、空指针访问(页面故障)等。应用可以依靠结构化异常处理工具以帮助调试在执行期间发生的致命事件,以在未预料到的终止事件中清理重要数据结构,并且适当地从故障状况中恢复以继续执行。此外,一些应用甚至可以将SEH工具用作正常操作的一部分;例如,Java虚拟机可以使用SEH工具对客户应用的字节代码进行动态优化。
图5说明了用于运行在OMS 430上的受OS管理的线程(例如,“T”)的结构化异常处理记录的至少一个普通实施例。如上所述,应用程序员可以在代码中利用结构化异常处理,来促进用户提供的对于在用户模式中执行所述代码时发生的某些异常事件的处理,而不是依靠操作系统140运行默认处理程序(handler)来处理所述异常。
通常,为了调用结构化异常处理,应用程序员可以在代码中包括指令,所述指令向OS 140注册了一个过滤例程。继而,OS 140在所述代码的执行期间遇到用户模式中的异常时分派(dispatch)所述过滤例程,从而允许用户模式应用自己来处理在该应用执行时发生的异常。应用可以通过注册和注销不同过滤例程,选择处理或“捕获(catch)”在执行过程期间的不同异常。用于管理这些异常的准确机制依赖于操作系统140和编译器(未示出)的特定实现。一种处理这些异常的普通实现方式是由微软的WINDOWS操作系统所提供的结构化异常处理工具。虽然以下的讨论基于微软WINDOWS SEH工具,但是本领域技术人员将认识到,以下所讨论的机制还可以被应用于其它的用户级异常处理机制。
图5说明了,TEB 545的字段之一可以是指向一个或多个异常注册记录1050的指针1045。所述异常注册记录可以是单个记录,或多个记录1055a、1055b...1055n的结构(表格、阵列、链表)。对于至少一个实施例而言,注册记录1050可以是记录1055的链表1060,每个记录1055指向一个异常处理例程。多个记录1055a、1055b...1055n中的每一个可以包括指向一个异常过滤例程的指针580和下一记录指针585,以及一些附加的元数据575。
操作系统140提供基本的SEH工具,但是依赖于应用程序和编译器来定义和注册过滤例程。所述编译器可以提供语法(syntax),所述语法可以由应用程序员使用来注册与“被看护的(guarded)”代码块相关联的异常过滤例程。例如,一些编译器提供“_try{}”子句来描绘可能引起异常的代码块,并且提供对应的“_except{}”子句来关联在所描绘的代码内发生异常时应当执行的用户级异常处理程序。应用程序员可以使用编译器的try/except语法将异常过滤程序(filter)插入或“注册”到由TEB 545所指向的链表1060中。
一旦遇到异常,操作系统调用其所有注册的过滤程序的列表中的第一个异常过滤程序。该异常过滤程序使应用具有第一个机会来校正所述异常的起因、或者开始清理重要的数据结构。从异常过滤程序的返回将OS指向以下三个路径之一:在故障/陷阱处继续执行,继续在你的列表中查找适合的异常过滤程序,或执行异常处理程序。
由try/except语法所指定的该注册处理被变换为直接从TEB 545读取以及向其写入。一旦遇到异常,OS 140的SEH服务就搜索用户提供的异常处理程序的链表1060,来确定下一个动作过程。
因此,应用和系统库可以协作来维护用于每个线程的异常注册记录1055的列表1060。编译器140可以将应用的_try和_except语句翻译为向/从列表1060插入/去除异常注册记录1055的代码。线程的异常注册记录列表1060的表头(head)(见1055a)涉及当前活跃的记录,并且被所述线程的TEB 545所指向(见1045)。
将新的异常注册记录1055插入列表1060包括,将新记录的下一记录指针585指向列表1060的表头(1055a),将新记录1055添加到堆栈(未示出),并接着将TEB 545中的列表1045的表头更新为指向新记录1055。
从列表1060中去除异常注册记录1055包括,将TEB 545中的列表(1045)的表头更新为指向列表1060中的下一记录(1055b)。
其实,异常记录1055的列表1060表示嵌套的(nested)过滤例程,其中列表1060的表头涉及当前活跃的异常注册记录1055,而每个后续记录1055是前一个记录的父记录(parent)。为了简单,术语“异常注册记录”和“注册记录”在此可互换使用。
简要地回到图4,其示出了在计算系统的至少一些实施例上操作系统140如何管理TEB数据结构545。图4示出分别为每个原生线程(线程1和线程2)创建唯一的TEB结构545a、545b。处理器的一个寄存器440指向当前执行的线程的TEB结构545。例如图4所示,假设线程1是当前执行的线程。一旦发生上下文切换,490,OS(见140,图5)令寄存器440指向第二个线程的TEB 545b。图4还示出了指针1045,其指向用于每个线程(线程1和线程2)的SEH异常注册记录列表1060的表头;该指针包含在TEB数据结构内。
现在回到图5。由此,图5所示的结构化异常处理机制510是OS支持的动态机制,其允许注册一过滤处理例程,该例程要被调用以将控制从操作系统140转移到用户级异常处理程序。然而,由于OS 140并不为在与OS隔离的定序器460上运行的shred提供TEB545,所以图5所示的机制510不支持用于shred的SEH。
也就是说,图5所示的TEB 545已经被操作系统140分配用于主线程T。然而,图5还说明了,操作系统140没有为在隔离的定序器460(分别是“Seq 1”和“Seq 2”)上运行的两个shred(S1和S2)中的任何一个分配TEB,原因在于它们对于OS 140是不可见的。
现在参考图6,它是说明用于多shred系统410中的shred本地数据的数据管理机制的至少一个实施例的框图。图6所示的多shredding系统410的实施例包括一个或多个OMS定序器430,它们对于操作系统140是可见的并且由操作系统140所控制。
图6说明了,多shredding系统410还包括一个或多个与操作系统140隔离的定序器(Seq 1、Seq 2)。隔离的定序器(Seq 1、Seq 2)在图6中被统称作受应用管理的定序器(“AMS”)460。
因此,系统410可以包括可由应用开发人员的软件代码管理的多个定序器460,其处于操作系统控制之外。开发人员可以在其代码指令中进行利用,所述代码指令能够导致在隔离的定序器460上创建和并发执行指令流或“shred”。运行在与OS隔离的定序器460上的shred一般不能访问有效的TEB实例545,原因在于操作系统140典型地仅在创建原生线程时保存TEB 545的实例,但是对于shred并不如此。
对于至少一个实施例而言,图6所示的定序器430、460在功能上可以有所不同。图6所示的功能不对称的示例示出,至少一个定序器430对于OS 140可以是可见的,并且由此能够执行“ring 0”操作,例如执行系统调用、为页面故障提供服务等。
在另一方面,一个或多个其它定序器460可以与OS 140隔离,并且由此不能够执行ring 0操作。然而,这仅仅是功能不对称的一个示例。多定序器系统410中的定序器430、460还可以以任何其它的方式有所不同,例如尺寸、字和/或数据路径大小、拓扑、存储器、功耗、功能单元数目、通信架构(多点总线vs.点对点互连)、或者任何其他关于功能性、性能、覆盖区(footprint)的度量等。
对于图6所示的示例实施例而言,每个隔离的定序器460被初始化为能够执行与一个线程相关联的shred(例如,S1和S2)。图6所示的示例示出了已经由运行在OS可见的定序器430上的线程T所生成的两个shred S1和S2。shred S1和S2已经被调度,以分别在隔离的定序器Seq 1和Seq 2上执行。
因为图6所示的系统410允许程序员管理shred S1和S2在操作系统140控制之外的AMS定序器Seq 1、Seq 2上的执行,所以系统410包括一种机制,其创建和管理数据结构442来维护用于shred S1、S2的shred本地数据。这样的数据结构在此被称作shred环境块(“SEB”)442(1)、442(2)。
对于shred环境块442的结构、组织和管理有许多选择。对于在此所述的实施例,设计所述结构、组织和管理,带有所关注的一些特定目标。
第一个目标是,设计了在此所述的SEB 442的实施例的结构,以便模仿公知的TEB 545结构的设计。以这种方式,熟悉TEB 545的程序员无需大量的额外努力就可以理解SEB 442的结构。因此,SEB442中每个字段的位置均模仿TEB 545中这些字段的组织。
第二个目标是,设计了在此所述的SEB 442的实施例,以便支持对用户级shred的结构化异常处理。图6说明了,SEB结构442可以包括一个字段,以便以与上面结合图5所讨论的相类似的方式来支持结构化异常处理。SEB结构442在一个具有与TEB结构545中相同偏移的字段中可以包括指向用于该shred的一个或多个异常注册记录765的指针745。应用程序可以直接从SEB 442读取以及向其写入,来维护注册记录的列表。如前所述,编译器所提供的try/except语法还可以被程序用来将异常处理程序插入或“注册”到由SEB 442中的指针745所指向的记录765。由try/except语法所指定的该注册处理被变换为直接从SEB 442读取以及向其写入。
当发生异常时,OS 140的SEH服务144搜索用户提供的异常处理程序的链表来确定下一个动作过程。{应当注意的是,对于至少一个实施例而言,OS 140的SEH服务144运行于用户级的特权级别,例如ring 3}。以这种方式,SE B 442维护可以被用来支持用于用户级shred的结构化异常处理的数据。
以下部分所公开的是可以被用来支持用于shred的SEH的两种不同方法的实施例。以下所讨论的第一种方法绕过OS并且完全在用户空间中执行用于shred的SEH。以下所讨论的第二种方法利用了代理执行,以调用OS从而代表与该OS隔离的AMS来执行特定的SEH处理。
图7是说明方法700的至少一个实施例的流程图,所述方法用于对在隔离的AMS上发生的异常调用结构化异常处理,其中所述处理完全绕过操作系统。图7进一步说明了用于处理用户级异常的方法780。对于至少一个实施例而言,调用方法700可以由运行在受应用管理的定序器(AMS)上的应用来执行,处理方法780可以由运行在受OS管理的定序器(OMS)上的处理例程790来执行。
图7说明了,用于调用基于应用的结构化异常处理的方法700可以开始于框701,并进行到框702。在框702,执行运行在AMS上的shred的下一指令。
如果所述指令将导致从用户特权级别(例如ring 3)转变到受限特权级别(例如ring 0),则在框704,可以检测到可能的转变。ring级别的转变仅仅是可以触发结构化异常处理的事件类型的一个示例,并且不应当被认为是限制性的。其执行会触发异常的任何指令均可以导致框704的判定框被评价为“是”。
对于至少一个实施例而言,在框702执行指令会导致可能满足一个场景(scenario,以下解释)的处理器状态,其继而会触发将控制异步转移到处理程序代码790。如果在框704检测到可能的特权级别转变或其它异常,则处理进行至框706,在那里控制被转移(见转移“1”)到用于所检测的特定场景状况的适当处理程序代码790。如果满足特定的状况(场景)集合,则可以响应于一个或多个实现控制转移的指令来转移这样的控制。如果没有,则处理返回框702,并且方法700继续,直至到达shred的末尾。
关于“场景”,假定对于至少一个实施例而言,执行方法700的AMS支持用户级的异步信号通知。这样的信号通知机制的特定实施例进一步在共同未决的申请序列号11/395884,“A ProgrammableEvent-Driven Yield Mechanism”以及11/134687,“A ProgrammableEvent Driven Yield Mechanism Which May Activate Service Threads”中描述。
用户级异步硬件机制可以直接向运行在微处理器上的用户级线程报告特定的事件或状态、或者事件或状态的组合(在这里被称作“场景”),而无需传统的由操作系统进行干预。(见框704的用户级线程的事件检测)。
这样的用户级中断或用户级异常基于一种硬件机制,所述硬件机制保存关于线程的当前状态的充分信息并且使所述线程改变为执行“处理程序”代码790的预定块来响应事件。(见框706)。作为处理程序代码790的一部分,所述线程能够执行其希望进行的任何工作并且接着返回其在事件之前所在的执行路径(见控制788的返回)。作为选择,所述处理程序代码可以选择不返回所述执行路径,而是继续进行完全不同的任务集合。
这样,图7说明了在框706,在检测到异常704时控制被转移(见转变“1”)到处理程序代码790,所述异常包括执行需要ring转变的指令。处理程序代码790对应于在框704所检测的特定异常。对于至少一个实施例而言,处理程序代码790可以存在于不同的定序器上,而不是存在于调用该处理程序的那个定序器上。
图7说明了,在处理程序代码790中提供结构化异常处理的方法780的处理过程开始于框712,其被归为处理程序代码指令的一部分,在此被称作处理程序代码790的开场部分(prologue)710。在框712,处理程序代码790开始执行处理,所述处理也可能由用于一些普通系统的OS来执行。
在框712,处理程序代码790保存OMS的状态。处理过程从框712进行到框714。
在框714,处理程序代码790执行操作(EREAD)来确定故障信息,并且还确定AMS在异常点的状态信息。对于至少一个实施例而言,在框714执行的操作可以是执行一架构指令(EREAD),所述指令用于读取通道寄存器的内容以便确定AMS的状态信息以及确定故障信息。
作为框714的结果而返回的AMS状态可以接着被处理程序代码790保存到系统定义的数据结构中,以由异常过滤程序所使用。在框714,处理程序代码790还可以保存其它的OS提供的关于异常的元数据。处理过程从框714进行到框716。
在框716,处理程序代码790通过第一次调用异常分派程序(dispatcher)逻辑来启动异常处理。所述异常分派程序是游历异常注册记录链表并决定下一步走到哪里的逻辑。对于图7所示的方法780的至少一个实施例而言,异常分派和过滤逻辑由AMS在框717a执行。如以下所解释的,作为选择,异常分派和过滤逻辑可以部分或全部由OMS在框717b执行。因此,在图7中利用虚线来指示由OMS进行的分派执行717b的可选特性。
对于这样的实施例而言,分派逻辑因此由AMS在框717a执行。AMS因此对异常进行分派以便于结构化异常处理,这与OS将会(在许多普通系统中)调用的异常分派例程非常类似。对于至少一个实施例而言,在框716a执行的分派代码匹配由OS提供的分派例程的语义,包括遍历注册记录列表以搜索适当的处理程序,以及一旦找到适当的处理程序则展开(unwinding)注册记录列表,并且恢复在异常过滤例程中可能已经改变的AMS上下文。
对于这样的实施例而言,在框716,通过在异常分派程序逻辑的第一个指令重新开始AMS,而将控制转移到AMS(见转变“2”)。接着,AMS执行所分派的处理例程(框708)。[请注意,对于这样的实施例而言,不执行可选框717b]。在框708执行所分派的处理例程之后,AMS将控制流程返回到异常生成前其所执行的指令流(见回到框702的转变“3”)。
对于以上刚刚讨论的框716的处理的至少一个可选实施例而言,应当理解的是,所述异常分派逻辑可以部分或全部在OMS上执行,而不是在AMS上执行。对于这样的实施例而言,在发生异常时通知OMS(转变1),但是OMS在框716启动异常分派逻辑的执行。在异常处理之前的任何点或其完成时,OMS将控制转移(见转变“2”)回到AMS。对于这样的实施例而言,任何剩余的分派或过滤处理717a在AMS上发生。如上所述,在框708,处理过程在AMS上进行。
从框716,处理过程在OMS上进行到处理程序代码790的一组指令,其在此被称作收尾部分(epilogue)720。在收尾部分720期间,在框724,处理程序代码790恢复在框712所保存的上下文。
处理过程从框724进行到框726。在框726,执行返回函数以使得OMS返回到执行在调用处理程序代码790前其所执行的任何代码。
这样,图7说明了,异常处理程序代码790可以直接从处理程序代码790本身启动异常分派处理,而不是调用OS的结构化异常处理例程。以这种方式,可以完全在该应用内处理异常,而绕过OS控制以及系统提供的用于管理结构化异常处理的部分或全部例程。
图8说明了用于为发生在隔离的受应用管理的定序器(“AMS”)上的异常提供结构化异常处理的机制的替代实施例。对于图8所示的实施例而言,利用代理执行机制来使得现有的由OS提供的SEH构架为隔离的AMS定序器提供结构化异常处理。对于图8所示方法的至少一个实施例而言,假设OMS和AMS均采用一种机制,其在定序器之间进行控制的用户级异步转移。
图8所示的方法利用了这样的事实,即有助于SEH的大多数OS代码几乎完全在用户空间(在图8中示为“ring 3”)中执行。图8说明了,可以执行三种方法800、850和880,以便经由现有的OS支持的SEH构架为AMS提供结构化异常处理。用于在检测到异常时调用结构化异常处理的方法800可由AMS执行。代理执行850可以由OMS执行,以便代表AMS调用操作系统功能。最后,OMS的OS可以执行方法880来分派适当的处理程序。这些方法800、850、880中的每一个均在下面作进一步详细讨论。
图8说明了,用于从AMS调用结构化异常处理的方法800开始于框801并进行到框802。在框802,执行在AMS上运行的shred的下一指令。如果所述指令会导致异常,则可以在框804检测到所述异常。对于至少一个实施例而言,在框804检测到的异常的类型包括从用户特权级别(例如,ring 3)转变到受限特权级别(例如,ring 0)。如上所述,所述异常可以导致出现一处理器状态,该状态满足定义了特权转变的场景,其可以继而触发将控制异步转移到处理程序代码890。如果在框804检测到异常,则处理进行到框806,在那里控制被异步转移到用于所检测的特定故障或状况的适当处理程序代码890(见图8的转变“1”)。如果没有,则处理返回框802,并且方法800继续直至到达所述shred的末尾。
用于在处理程序代码890中执行代理执行的方法850的处理开始于框812,其处于处理程序代码890的被称作开场部分810的部分中。对于至少一个实施例而言,响应于控制的异步用户级转移(见框806和转变“1”)而在OMS上执行处理程序代码890。
在开场部分810中,在框812和814,沿前面结合图7所讨论的开场部分处理过程712和714的路线执行初始处理。通常,在框812,保存OMS的状态,以及在框814,确定AMS状态信息以及故障信息。
处理过程从框814进行到框816。在框816,OMS再次执行指令,该指令之前在框802执行于AMS上时生成异常(例如,见指令执行802和转变检测804)。所述指令的该再次执行816生成调用OS的异常830(见图8的转变“2”)。也就是说,因为现在是在对OS可见的OMS上发生异常,所以由于异常830而调用所述OS。
这样,处理过程进行到框882,这是由OS为了启动用于结构化异常处理的异常分派处理而执行的方法880的第一个所示框。
在框882,OS取得OMS的当前状态的快照(snapshot)并且将当前的OMS上下文保存到特定的数据结构(CONTEXT)中。接着所述OS调用由系统提供的异常分派例程。对于至少一个实施例而言,所述分派例程可以存在于用户空间库中。
因此,图8说明了,来自OS的分派(见转变“3”)导致控制转移到框822,这是在此被称作“收尾部分”820的一组指令的第一个所示处理框,所述收尾部分是OMS处理,该处理过程是在其作为代理调用OS异常处理之后发生的。收尾部分820的指令的执行可以构成由OMS所执行的方法850的附加处理。
因为OMS不是实际执行所分派的处理程序代码的定序器,所以在框822,该OMS使得控制转移到AMS(见转移“4”)。对于至少一个实施例而言,作为执行用户级的、同步的、架构定义的(例如,部分ISA)控制转移指令的结果而执行该转变,所述控制转移指令诸如shred转移(“SXFR”)指令。对于至少一个实施例而言,在框822,OMS在其执行控制转移之前将当前OMS上下文返回到AMS。
OMS处理接着进行到框824,在那里处理程序代码890恢复在框812所保存的OMS上下文。
处理过程从框824进行到框826。在框826,执行返回函数以使得所述OMS返回到执行在处理程序代码被调用之前所执行的任何代码。
图8说明了,在框808,响应于由OMS在框822所引发的控制转移(见转变“4”),AMS开始执行分派逻辑。由于几乎所有的异常处理逻辑都在用户级(Ring 3)执行,所以AMS现在可以通过系统的正常控制流程对异常进行处理。在分派的处理程序代码的终点,控制返回(见转变“5”)到所述AMS在发生异常前所执行的指令流的下一指令。
图8说明了收尾部分820中的可选处理框,框821。因为允许操作系统改变OMS的段寄存器值,所以在CONTEXT数据结构(由OS生成并且被传送到异常过滤程序)中保存的这些值可能变得与原AMS的段寄存器值不一致。为了正确性,所述OMS可以可选地对CONTEXT数据结构中所包含的段寄存器的值进行校正,所述CONTEXT数据结构是由于在OMS上发生异常而保存的(见830)。图8说明了,可以在导致异常之后从OS返回时,在框821执行所述段寄存器值的该可选校正。对于不执行该可选步骤处理的实施例而言,AMS处理并未受消极影响,原因在于AMS维护着正确的段寄存器值。
这样,图8说明了,异常处理程序代码890作为一个代理,代表对于OS不可见的AMS来调用所述OS的结构化异常处理例程。以这种方式,尽管AMS对于操作系统是不可见的,但是AMS可以执行需要系统资源的代码。本领域技术人员将认识到,在控制在822返回AMS之前,可以在OMS而不是AMS上执行部分或全部的异常分派和过滤逻辑808。
图9说明了能够执行所公开的技术的计算系统1300的至少一个示例实施例。计算系统1300包括n个处理器核心1304a-1304n以及存储器系统1340。存储器系统1340可以包括较大而相对较慢的存储装置502,以及一个或多个较小而相对快的高速缓存,例如指令高速缓存1344和/或数据高速缓存1342。虽然没有单独示出,但是每个核心1304a-1304n可以具有其自己的指令高速缓存1344和/或数据高速缓存1342。
存储器系统1340意指存储器的一般化表示,并且可以包括多种形式的存储器,例如硬盘驱动器、CD-ROM、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪速存储器以及相关电路。存储器系统1340可以存储可由处理器1304执行的、由数据信号所表示的指令1310和/或数据1312。指令1310和/或数据1312可以包括用于执行任何或全部这里所论述的技术的代码和/或数据。
指令1310可以包括主线程代码1350。主线程代码1350可以包括用于初始化一个或多个OS不可见的shred的指令。在由定序器执行时,主线程代码1350的初始化指令可以使得OS不可见的定序器执行shred指令流,同时共享主(原生)线程的逻辑执行环境。
指令也可以包括操作系统(OS)代码1361。此外,对于至少一个实施例而言,指令1310还可以包括一个或多个处理例程1360来使得一个定序器(未隔离的)分派要由隔离的定序器所执行的已注册过滤例程。处理例程1360可以包括分别执行图7和8所示的方法780、850中的至少一个的指令,以支持用于隔离的定序器的结构化异常处理。
对于至少一个实施例而言,指令1310可以包括一个或多个用于通知特权转变的指令,所述特权转变如前面结合图7的框704和706以及图8的框804和806所讨论的。也就是说,指令1310可以包括ISA指令,其响应特权转变或其它异常而触发将控制异步转移到处理程序代码。
处理器1304a-1304n无需是对称的,但是其中每一个可以包括向执行核心1330供应指令信息的前端1320。所取出的指令信息可以被缓存在高速缓存225中,以等待由执行核心1330执行。前端1320可以以程序顺序向执行核心1330供应指令信息。对于至少一个实施例而言,前端1320包括确定将要执行的下一指令的读取/解码单元322。对于系统1300的至少一个实施例而言,读取/解码单元322可以包括单个的下一指令指针和读取逻辑320。然而,在其中每个处理器1304a-1304n支持多个线程上下文的实施例中,该读取/解码单元322为每个所支持的线程上下文实现了不同的下一指令指针和读取逻辑320。多处理器环境中额外的下一指令指针和读取逻辑320的可选特性在图13中以虚线来表示。
这里所述的方法的实施例可以用硬件、硬件仿真软件或其它软件、固件、或这样的实现方式的组合来实现。可以为一个可编程系统实现本发明的实施例,该系统包括至少一个处理器、数据存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。为了该应用,处理系统包括具有处理器的任意系统,所述处理器例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
程序可以被存储在通用或专用可编程处理系统可读的存储介质或设备(例如,硬盘驱动器、软盘驱动器、只读存储器(ROM)、CD-ROM设备、闪速存储器设备、数字多用盘(DVD)、或其它存储设备)上。当处理系统读取存储介质或设备时,可由该处理系统中的处理器访问的指令用于配置和运行该处理系统,以执行这里所述的过程。本发明的实施例也可以被认为是被实现为有形的机器可读存储介质,其被配置为与处理系统一起使用,其中这样配置的存储介质使得该处理系统以特定和预定方式操作以执行这里所述的功能。
示例系统1300代表基于英特尔公司提供的PentiumPentiumPro、PentiumII、PentiumIII、Pentium4和Itanium以及Itanium2微处理器的处理系统,但是也可以使用其它系统(包括具有其它微处理器的个人计算机(PC)、工程工作站、个人数字助理和其它手持设备、机顶盒等)。对于一个实施例,示例系统可以执行微软公司提供的一个版本的WindowsTM操作系统,但是例如也可以使用其它操作系统和图形用户界面。
尽管已经示出和描述了本发明的特定实施例,但是对于本领域技术人员来说显而易见的是,可以进行许多变化和修改,而不会背离所附权利要求的范围。例如,虽然以上将寄存器440和443作为用于存储与shred环境块相关的指针或索引的装置来论述,但是本领域技术人员应当理解,包括锁存器、存储单元或其它存储机制在内的任何存储装置都可以取代寄存器来使用。
因此,本领域技术人员将认识到,可以进行许多变化和修改,而不会在较宽方面上背离本发明。由此,本领域技术人员将认识到,在此所描述的实施例的特征可以被应用到其它环境,而不会背离以下所附权利要求的范围。所附权利要求旨在将落入本发明的真正范围内的所有这些变化和修改都包含在其范围之内。
Claims (28)
1.一种实现用于与操作系统隔离的线程单元的异常处理的方法,包括:
在与操作系统隔离的第一线程单元上执行将导致异常的指令;
触发将控制转移到不与所述操作系统隔离的第二线程单元;
响应于在所述第二线程单元上执行所述指令,启动对用户级异常处理程序代码的分派处理;以及
将控制返回到所述第一线程单元,所述第一线程单元执行所述分派处理并且还执行异常处理程序代码。
2.如权利要求1所述的方法,其中:
所述异常是特权级别转变。
3.如权利要求1所述的方法,其中,所述触发进一步包括:
执行架构指令,以将控制异步转移到所述第二线程单元。
4.如权利要求1所述的方法,其中:
所述分派处理是由所述操作系统启动的。
5.一种实现用于不受操作系统管理的线程单元的异常处理的方法,包括:
在受用户应用而不是操作系统管理的第一线程单元上执行指令,其中,该执行导致出现满足架构定义的场景的处理器状态;
响应于所述场景得到满足,将控制传递到第二线程单元,所述第二线程单元是受所述操作系统管理的;
从所述第二线程单元上启动用户级异常处理例程的分派;以及
在所述第一线程单元上执行所述处理例程。
6.如权利要求5所述的方法,进一步包括:
执行所述分派无需调用操作系统。
7.如权利要求6所述的方法,其中,所述分派进一步包括:
遍历已注册异常过滤程序的链表。
8.如权利要求7所述的方法,其中:
由不受所述操作系统管理的用户级线程环境块指向所述已注册异常过滤程序的链表。
9.如权利要求5所述的方法,进一步包括:
响应于所述传递控制,保存所述第二线程单元的上下文状态。
10.如权利要求9所述的方法,进一步包括:
在所述分派之后,恢复所述上下文状态。
11.如权利要求5所述的方法,其中:
所述分派是由所述第二线程单元执行的。
12.如权利要求5所述的方法,其中:
所述分派是由所述第一线程单元执行的。
13.一种实现用于与操作系统隔离的线程单元的异常处理的装置,包括:
执行模块,用于在与操作系统隔离的第一线程单元上执行将导致异常的指令;
触发模块,用于触发将控制转移到不与所述操作系统隔离的第二线程单元;
启动模块,用于响应于在所述第二线程单元上执行所述指令,启动对用户级异常处理程序代码的分派处理;以及
返回模块,用于将控制返回到所述第一线程单元,所述第一线程单元执行所述分派处理并且还执行异常处理程序代码。
14.如权利要求13所述的装置,其中,所述触发模块进一步包括:
用于执行架构指令,以将控制异步转移到所述第二线程单元的模块。
15.如权利要求14所述的装置,其中:
所述分派处理是由所述操作系统启动的。
16.一种实现用于不受操作系统管理的线程单元的异常处理的装置,包括:
指令执行模块,用于在受用户应用而不是操作系统管理的第一线程单元上执行指令,其中,该执行导致出现满足架构定义的场景的处理器状态;
传递模块,用于响应于所述场景得到满足,将控制传递到第二线程单元,所述第二线程单元是受所述操作系统管理的;
启动模块,用于从所述第二线程单元上启动用户级异常处理例程的分派;以及
处理例程执行模块,用于在所述第一线程单元上执行所述处理例程。
17.如权利要求16所述的装置,其中,所述分派进一步包括:
遍历已注册异常过滤程序的链表。
18.如权利要求17所述的装置,其中:
由不受所述操作系统管理的用户级线程环境块指向所述已注册异常过滤程序的链表。
19.如权利要求16所述的装置,进一步包括:
用于响应于所述传递控制,保存所述第二线程单元的上下文状态的模块。
20.如权利要求19所述的装置,进一步包括:
用于在所述分派之后,恢复所述上下文状态的模块。
21.如权利要求16所述的装置,其中:
所述分派是由所述第二线程单元执行的。
22.如权利要求16所述的装置,其中:
所述分派是由所述第一线程单元执行的。
23.一种实现用于不受操作系统管理的线程单元的异常处理的系统,包括:
用于存储操作系统(OS)的存储器系统;以及
受所述OS管理的第一线程单元和不受所述OS管理的第二线程单元,所述第二线程单元用于执行对OS透明的用户级线程,所述用户级线程与由所述OS创建的原生线程相关联;
每个线程单元具有指令集架构,所述指令集架构包括用于响应于异常而触发将控制异步转移到用户级处理程序代码的指令;
所述存储器进一步包括所述用户级处理程序代码,所述用户级处理程序代码包括用于进行以下功能的指令,即响应于所述异常而从所述第一线程单元调用已注册过滤例程的分派以便由所述第二线程单元执行。
24.如权利要求23所述的系统,其中:
所述存储器进一步包括用于保存所述用户级线程的本地数据的存储区域。
25.如权利要求23所述的系统,其中,所述存储器系统进一步包括:
DRAM。
26.如权利要求23所述的系统,其中:
所述用户级处理程序代码进一步包括一个或多个指令,该一个或多个指令用于代表所述第二线程单元来调用所述操作系统的结构化异常处理服务。
27.如权利要求23所述的系统,其中:
所述第一线程单元的指令集架构包括指令,该指令用于使所述第一线程单元从所述第二线程单元读取关于所述异常的上下文信息和异常信息。
28.如权利要求23所述的系统,其中:
所述第一和第二线程单元的指令集架构包括一个或多个指令,该一个或多个指令用于使所述第一线程单元引发向所述第二线程单元的同步控制转移。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/642,384 | 2006-12-19 | ||
US11/642,384 US8689215B2 (en) | 2006-12-19 | 2006-12-19 | Structured exception handling for application-managed thread units |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101251792A CN101251792A (zh) | 2008-08-27 |
CN101251792B true CN101251792B (zh) | 2010-07-21 |
Family
ID=39186849
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007103062758A Expired - Fee Related CN101251792B (zh) | 2006-12-19 | 2007-12-19 | 用于受应用管理的线程单元的结构化异常处理 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8689215B2 (zh) |
EP (2) | EP2428892A3 (zh) |
CN (1) | CN101251792B (zh) |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8516484B2 (en) * | 2008-02-01 | 2013-08-20 | International Business Machines Corporation | Wake-and-go mechanism for a data processing system |
US8145849B2 (en) | 2008-02-01 | 2012-03-27 | International Business Machines Corporation | Wake-and-go mechanism with system bus response |
US8171476B2 (en) * | 2008-02-01 | 2012-05-01 | International Business Machines Corporation | Wake-and-go mechanism with prioritization of threads |
US8341635B2 (en) * | 2008-02-01 | 2012-12-25 | International Business Machines Corporation | Hardware wake-and-go mechanism with look-ahead polling |
US8316218B2 (en) | 2008-02-01 | 2012-11-20 | International Business Machines Corporation | Look-ahead wake-and-go engine with speculative execution |
US8788795B2 (en) | 2008-02-01 | 2014-07-22 | International Business Machines Corporation | Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors |
US8880853B2 (en) * | 2008-02-01 | 2014-11-04 | International Business Machines Corporation | CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock |
US8612977B2 (en) * | 2008-02-01 | 2013-12-17 | International Business Machines Corporation | Wake-and-go mechanism with software save of thread state |
US8312458B2 (en) * | 2008-02-01 | 2012-11-13 | International Business Machines Corporation | Central repository for wake-and-go mechanism |
US8452947B2 (en) | 2008-02-01 | 2013-05-28 | International Business Machines Corporation | Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms |
US8127080B2 (en) | 2008-02-01 | 2012-02-28 | International Business Machines Corporation | Wake-and-go mechanism with system address bus transaction master |
US8732683B2 (en) * | 2008-02-01 | 2014-05-20 | International Business Machines Corporation | Compiler providing idiom to idiom accelerator |
US8725992B2 (en) | 2008-02-01 | 2014-05-13 | International Business Machines Corporation | Programming language exposing idiom calls to a programming idiom accelerator |
US8640141B2 (en) | 2008-02-01 | 2014-01-28 | International Business Machines Corporation | Wake-and-go mechanism with hardware private array |
US8386822B2 (en) | 2008-02-01 | 2013-02-26 | International Business Machines Corporation | Wake-and-go mechanism with data monitoring |
US8250396B2 (en) * | 2008-02-01 | 2012-08-21 | International Business Machines Corporation | Hardware wake-and-go mechanism for a data processing system |
US8225120B2 (en) * | 2008-02-01 | 2012-07-17 | International Business Machines Corporation | Wake-and-go mechanism with data exclusivity |
DE102008010943A1 (de) * | 2008-02-25 | 2009-09-03 | Fujitsu Siemens Computers Gmbh | Verfahren zur Behandlung von Unterbrechungsaufforderungen bei einem Prozessor |
CN101854311A (zh) * | 2009-03-31 | 2010-10-06 | 国际商业机器公司 | 在web服务器上传递上下文信息的方法和装置 |
US8886919B2 (en) * | 2009-04-16 | 2014-11-11 | International Business Machines Corporation | Remote update programming idiom accelerator with allocated processor resources |
US8145723B2 (en) | 2009-04-16 | 2012-03-27 | International Business Machines Corporation | Complex remote update programming idiom accelerator |
US8082315B2 (en) * | 2009-04-16 | 2011-12-20 | International Business Machines Corporation | Programming idiom accelerator for remote update |
US8230201B2 (en) | 2009-04-16 | 2012-07-24 | International Business Machines Corporation | Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system |
CN101923508B (zh) * | 2009-06-12 | 2012-12-19 | 中兴通讯股份有限公司 | 一种嵌入式系统中的异常处理方法及装置 |
US8356130B2 (en) * | 2009-08-14 | 2013-01-15 | Advanced Micro Devices, Inc. | Mechanism for recording undeliverable user-level interrupts |
US8122366B2 (en) * | 2009-09-16 | 2012-02-21 | Georgia Tech Research Corporation | Systems and methods for visualization of exception handling constructs |
US9239732B2 (en) | 2011-02-16 | 2016-01-19 | Microsoft Technology Licensing Llc | Unrolling aggregation operations in asynchronous programming code having multiple levels in hierarchy |
CN103136047B (zh) * | 2011-11-30 | 2016-08-17 | 大唐联诚信息系统技术有限公司 | 一种多线程管理方法及架构 |
US9195497B2 (en) * | 2012-03-21 | 2015-11-24 | Microchip Technology Incorporated | Microcontroller with context switch |
US20140095847A1 (en) * | 2012-09-28 | 2014-04-03 | Doron Orenstein | Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading |
US9251042B2 (en) | 2013-03-14 | 2016-02-02 | International Business Machines Corporation | Managed runtime enabling condition percolation |
US9235497B2 (en) * | 2013-03-27 | 2016-01-12 | Intel Corporation | Method and system for detecting concurrency programming errors in kernel modules and device drivers |
US9830206B2 (en) * | 2013-12-18 | 2017-11-28 | Cray Inc. | Cross-thread exception handling |
US9542254B2 (en) | 2014-07-30 | 2017-01-10 | International Business Machines Corporation | Application-level signal handling and application-level memory protection |
CN104217163B (zh) * | 2014-09-10 | 2017-04-26 | 珠海市君天电子科技有限公司 | 一种检测结构化异常处理攻击的方法及装置 |
CN105094974B (zh) * | 2015-08-14 | 2019-12-20 | 上海斐讯数据通信技术有限公司 | 一种突发信号处理方法及系统 |
US20210026950A1 (en) * | 2016-03-07 | 2021-01-28 | Crowdstrike, Inc. | Hypervisor-based redirection of system calls and interrupt-based task offloading |
CN107015910A (zh) * | 2017-04-06 | 2017-08-04 | 上海云轴信息科技有限公司 | 保证异步程序健壮性的方法及设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101317155A (zh) * | 2005-12-27 | 2008-12-03 | 英特尔公司 | 本地用户级线程数据的数据结构和管理技术 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5305455A (en) * | 1990-12-21 | 1994-04-19 | International Business Machines Corp. | Per thread exception management for multitasking multithreaded operating system |
US5432795A (en) * | 1991-03-07 | 1995-07-11 | Digital Equipment Corporation | System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program |
US5901312A (en) * | 1994-12-13 | 1999-05-04 | Microsoft Corporation | Providing application programs with unmediated access to a contested hardware resource |
US6006320A (en) * | 1996-07-01 | 1999-12-21 | Sun Microsystems, Inc. | Processor architecture with independent OS resources |
US6292820B1 (en) * | 1996-07-29 | 2001-09-18 | At& T Corp. | Porting POSIX-conforming operating systems to Win32 API-conforming operating systems |
US6173248B1 (en) * | 1998-02-09 | 2001-01-09 | Hewlett-Packard Company | Method and apparatus for handling masked exceptions in an instruction interpreter |
US6289369B1 (en) * | 1998-08-25 | 2001-09-11 | International Business Machines Corporation | Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system |
US6895583B1 (en) * | 2000-03-10 | 2005-05-17 | Wind River Systems, Inc. | Task control block for a computing environment |
US7383587B2 (en) * | 2002-11-18 | 2008-06-03 | Arm Limited | Exception handling control in a secure processing system |
US7849465B2 (en) | 2003-02-19 | 2010-12-07 | Intel Corporation | Programmable event driven yield mechanism which may activate service threads |
US7418585B2 (en) * | 2003-08-28 | 2008-08-26 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US7913226B2 (en) * | 2003-10-01 | 2011-03-22 | Hewlett-Packard Development Company, L.P. | Interposing a virtual machine monitor and devirtualizing computer hardware at runtime |
US20050149711A1 (en) * | 2003-12-30 | 2005-07-07 | Zimmer Vincent J. | Method and system for firmware-based run time exception filtering |
US9189230B2 (en) * | 2004-03-31 | 2015-11-17 | Intel Corporation | Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution |
US7810083B2 (en) * | 2004-12-30 | 2010-10-05 | Intel Corporation | Mechanism to emulate user-level multithreading on an OS-sequestered sequencer |
US8719819B2 (en) | 2005-06-30 | 2014-05-06 | Intel Corporation | Mechanism for instruction set based thread execution on a plurality of instruction sequencers |
US8607235B2 (en) | 2004-12-30 | 2013-12-10 | Intel Corporation | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
US8516483B2 (en) * | 2005-05-13 | 2013-08-20 | Intel Corporation | Transparent support for operating system services for a sequestered sequencer |
US8028295B2 (en) * | 2005-09-30 | 2011-09-27 | Intel Corporation | Apparatus, system, and method for persistent user-level thread |
US7487341B2 (en) * | 2006-06-29 | 2009-02-03 | Intel Corporation | Handling address translations and exceptions of a heterogeneous resource of a processor using another processor resource |
US7768518B2 (en) * | 2006-09-27 | 2010-08-03 | Intel Corporation | Enabling multiple instruction stream/multiple data stream extensions on microprocessors |
US8074274B2 (en) * | 2006-12-29 | 2011-12-06 | Intel Corporation | User-level privilege management |
US8074060B2 (en) * | 2008-11-25 | 2011-12-06 | Via Technologies, Inc. | Out-of-order execution microprocessor that selectively initiates instruction retirement early |
-
2006
- 2006-12-19 US US11/642,384 patent/US8689215B2/en not_active Expired - Fee Related
-
2007
- 2007-11-30 EP EP11009588A patent/EP2428892A3/en not_active Ceased
- 2007-11-30 EP EP07254666A patent/EP1936500A3/en not_active Withdrawn
- 2007-12-19 CN CN2007103062758A patent/CN101251792B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101317155A (zh) * | 2005-12-27 | 2008-12-03 | 英特尔公司 | 本地用户级线程数据的数据结构和管理技术 |
Also Published As
Publication number | Publication date |
---|---|
CN101251792A (zh) | 2008-08-27 |
EP1936500A2 (en) | 2008-06-25 |
EP2428892A2 (en) | 2012-03-14 |
EP2428892A3 (en) | 2013-03-13 |
US8689215B2 (en) | 2014-04-01 |
US20080148259A1 (en) | 2008-06-19 |
EP1936500A3 (en) | 2009-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101251792B (zh) | 用于受应用管理的线程单元的结构化异常处理 | |
CN101160565B (zh) | 无操作系统干预情况下调度os隔离定序器上的线程的机制 | |
Xu et al. | A practical verification framework for preemptive OS kernels | |
CN101317155A (zh) | 本地用户级线程数据的数据结构和管理技术 | |
US10013391B1 (en) | Architecture emulation in a parallel processing environment | |
CN101261577B (zh) | 微处理器以及在微处理器中存储数据的方法 | |
CN100388199C (zh) | 使用微代码引擎的java硬件加速器 | |
JP3546678B2 (ja) | マルチos構成方法 | |
CN101833475B (zh) | 用于执行指令原子块的方法和装置 | |
CN102981808B (zh) | 用于持续性用户级线程的设备、系统和方法 | |
CN105051680A (zh) | 使用硬件指针的simd核心中的发散分支解决方案 | |
CN103842959A (zh) | 在计算机系统中维持操作数活性信息 | |
CN108345547A (zh) | 乱序加载的基于锁的和基于同步的方法 | |
Theobald et al. | Overview of the Threaded-C language | |
KR20010078088A (ko) | 컴퓨터 처리 시스템에서 스택 레퍼런스를 변경하는 방법 | |
CN105074657A (zh) | 并行管道中的发散分支的硬件和软件解决方案 | |
Shivers | Continuations and threads: Expressing machine concurrency directly in advanced languages | |
US20090063881A1 (en) | Low-overhead/power-saving processor synchronization mechanism, and applications thereof | |
JP2020027591A (ja) | 高位合成マルチプロセッサシステム等 | |
von Tessin | The clustered multikernel: an approach to formal verification of multiprocessor operating-system kernels. | |
Dally et al. | Mechanisms for parallel computers | |
Mejia-Alvarez et al. | Handling of Interrupts as Threads | |
Goddard | Division of labor in embedded systems | |
JP2014016773A (ja) | レジスタレスアーキテクチャによるキャッシュレスマルチプロセッサ | |
Matsui et al. | Multithread Implementation of an Object-Oriented Lisp, EusLisp |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100721 Termination date: 20211219 |