当前位置:文档之家› 一种支持同时多线程的VLIWDSP架构

一种支持同时多线程的VLIWDSP架构

一种支持同时多线程的VLIWDSP架构
一种支持同时多线程的VLIWDSP架构

一种支持同时多线程的VLIW DSP 架构

沈 钲,孙义和

(清华大学微电子研究所,清华信息科学与技术国家实验室,北京100084)

摘 要: 本文提出了一种支持同时多线程的动态分发超长指令字(V LIW)数字信号处理器(D SP)架构.该D SP 架构上可以同时运行多个线程,功能单元可以执行来自多个线程的指令,有效地提高D SP 的指令吞吐率.为了使多个线程的指令更有效地调度分发到功能单元,该D SP 架构还支持指令动态分发,由硬件分发单元而不是编译器来完成多线程指令的动态分配.实验结果表明,相比于单线程而言,本文提出的V LIW DSP 架构可以提高功能单元利用率,隐藏存储器访问时延,使处理器的指令吞吐率平均提高约26189%.

关键词: 同时多线程;超长指令字;数字信号处理器

中图分类号: TP30211 文献标识码: A 文章编号: 037222112(2010)022*******

Architecture Design of Simul ta neous Mul tithrea ding VLIW DSP

S HEN Z heng,S U N Yi 2he

(Ins titute o f Microe lectronics,Ts inghua Universit y ,Ts inghua National Laboratory o f Information and Technology,B ei jing 100084)

A bstract: A novel simultaneous multithreading (SMT)VLIW DSP architecture with dynamic dispatch mechanis m was pre 2sented.The SMT technology exploits the unused instructio n slots by converting the thread-level parallelis m to the instruction 2level parallelis m,improving the efficiency.Wi th the dy namic dispatch mechanism,the processor issues instructions to functional unit at run 2time rather than at compile 2time,such that the issue conflicts among multiple threads are reduced significantly.The results s how that the DSP architecture can effectively increase the functional u nit utilization,hide the memory access latency,such that the pro 2cessor throughput is improved by 26.89%with respect to single thread architecture.

K e y words: simultaneous multithreading;VLIW architecture;digital signal processor

1 引言

超长指令字架构(ve ry long instruc tion word,简称VLI W)采用多个功能单元实现指令级并行,从而有效地提升数字信号处理性能[1],被广泛用于数字信号处理器(digital signal processor,简称DSP)中.然而,由于缓存扑空导致的存储器访问时延以及单个程序中有限的指令并行度的限制,使得VLI W 架构的计算资源无法被充分地利用.由于缓存扑空,在存储器访问时会产生数十周期的时延,处理器需要处于停顿状态来等待数据,这使得处理器中所有的功能单元都处于空闲等待而造成浪费.另一方面,单个应用程序中的指令并行度受到很多因素的限制.有研究表明,在硬件资源无限的情况下,单个程序的指令并行度仅能达到7[2,3],而在资源受限的条件下,指令并行度只能达到4左右[4].单个应用程序中有限的指令并行度导致了VLIW DSP 中的功能单元无法被充分地利用.

同时多线程(Si multaneous Multithreading,简称S M T)

技术可以克服上述因素导致的功能单元利用率低的问题.同时多线程技术在同一处理器上虚拟多个逻辑处理

器,在每个逻辑处理器上运行一个程序线程,所有线程共享一套执行部件[5].同时多线程技术可以往那些空闲的功能单元发射其他线程的指令,从而将线程级并行度转换为指令级并行度,有效提高处理器的指令吞吐率,提高功能单元的利用率.同时多线程技术已经在采用超标量架构的通用处理器领域获得成功应用,并越来越受到研究人员的关注[6].

然而,VLI W 架构和同时多线程技术间的融合存在一些亟待解决的矛盾.顺序执行的VLI W 架构本质上是一种独立架构[1].编译器认为在同一个执行包(execu 2tion 2pac ket,简称EP)中的指令之间不存在任何依赖关系,需要被同时发射并被同时执行.而在同时多线程技术中,为了充分地利用功能单元,处理器硬件需要有能力将一个VLI W 指令执行包拆开,将同一执行包中的指令分多个时钟周期发射到相应的处于空闲状态的功能单元.而这和VLIW 架构的设计初衷是相矛盾的,将同

收稿日期:2009201220;修回日期:2009209217

第2期2010年2月电 子 学 报AC TA ELEC TRONICA SINIC A Vol.38 No.2

Feb. 2010

一执行包中的指令分多个周期发射会在指令之间引入额外的数据依赖关系,从而导致的执行结果错误.这就需要引入一些额外的机制来维持原有的数据依赖关系不变.

另一方面,即使同时多线程VLI W架构可以将多个线程的指令分多个周期分发到相应的功能单元,现有VLI W架构的静态分发机制还是会限制指令分发的灵活性而导致线程之间产生大量的分发冲突.在VLIW架构中,编译器在编译阶段已经将指令分配给相应的功能单元[14].假设这么一种情况,两个线程在同一周期将加法指令分发给功能单元A,即使此刻另一个可以执行加法指令的功能单元B正处于空闲状态,但由于指令分配在编译阶段已经完成,两个线程的加法指令都被分发给A单元,并产生一次分发冲突.其中一个线程需要停止发射加法指令直到A单元处于空闲状态.由于这种分发冲突是在多线程程序运行的时候产生的,所以无法通过编译器在编译阶段解决.同时多线程架构执行过程中的分发冲突是不可避免的.分发冲突限制了吞吐率的提高,需要一些机制尽可能减少其产生.

为了解决上述提到的问题,本文提出了一种支持同时多线程的VLIW数字信号处理器架构.该VLIW DSP架构有以下特点

(1)该VLIW DS P架构引入了一组专门的寄存器用于维持同时多线程架构中原有的数据依赖关系.同一执行包内部的指令可以分多个时钟周期发射到相应的功能单元而不影响指令的执行结果.

(2)该VLIW DS P架构采用动态分发机制来降低多线程指令分发冲突.由硬件分发单元在执行阶段动态地完成指令分配,可以将指令分发到任何可以执行该指令且处于空闲状态的功能单元.

为了验证并评估该架构的效率,基于该架构,论文设计并实现了一个采用动态分发机制的双线程VLIW DSP.实验结果证明了本文提出的架构可以提高VLIW DSP的功能单元利用率,隐藏存储器访问时延,提高指令吞吐率,从而有效提升数字信号处理性能.

2相关工作

Ka xiras等人[7]在S tarCore VLI W DS P平台上研究实现同时多线程技术,而Stephan等人[8]则是将多线程技术应用于Tri media DSP架构.在这两个VLI W DS P架构中,在同一时钟周期,处理器的只能分发来自一个线程的指令.当一个线程由于缓存扑空或中断而停顿时,另一个线程的指令才能获得执行.这种多线程技术通常被称为块多线程(block multithreading,简称B M T).

Bharath Iyer等人[9]提出了一种扩展拆分发射(ex2 tended split issue,简称XS I)机制,在VLIW DS P上实现同时多线程技术.XS I机制将执行过程拆分成两级:E1、E2.在E1级中,执行结果暂时写入一个延时寄存器堆,而在整个执行包分发结束时由E2级将延时寄存器堆中的结果写入架构寄存器堆中.XSI机制维持了原有的数据依赖关系,使得执行包中的指令可以分多个周期进行分发.但是由于改变了执行过程,而改变了原有处理器的流水线结构,同时也改变了功能单元的执行时延.另一方面,由于仍然采用静态分发机制,硬件分发单元只能根据编译器分配的结果将指令分发到功能单元,而无法减少分发冲突.

3同时多线程VLIW DSP架构

311同时多线程技术

在同时多线程架构中,在同一处理器上虚拟多个逻辑处理器,每个逻辑处理器上运行一个程序线程,但它们同时共享一套执行部件.编译器可以将同时多线程处理器作为多个虚拟的处理器进行处理,而并不需要专门对应用程序进行调整.针对单线程处理器开发的应用代码也不需要进行任何改动就可以直接移植到同时多线程处理器中.

procedure foreground thre ad

begin

for each execution2packet do

for each instuc t ions in the e xecution pac ket do

begin

dispatc h to any f unc tional unit can exec ute this

instrution;

turn this fuc tional unit state to busy;

end

end

procedure bac kground thread

begin

for each exection2packet do

for each f unc t ional unit can execute this instruc tion do

begin

if this functional unit sta te is a vailable then

begin

dispatch instruction to this f unc tional unit turn this

f unc tional unit state to busy

end

else

chec k next functional unit

end

end

图1同时多线程算法伪码

除了共享执行单元之外,同时多线程处理器需要保持所有线程的执行状态,而需要复制通用寄存器堆,

353

第2期沈钲:一种支持同时多线程的V LIW D SP架构

控制寄存器堆以及其他的控制部件.其他主要的执行部件,如功能单元,指令缓存以及数据缓存都可以被多个线程共享.每个周期,指令获取单元都可以从一个线程获取一个指令包,每个线程的指令被存放在各自的指令池中,取指单元会根据各个线程指令池的填充情况动态地选择获取各个线程的指令.分发单元将各个指令池中的指令分发到相应的功能单元,分发出去的指令都会被打上一个线程标签.功能单元根据线程标签将执行结果存放到相应线程的寄存器堆.

在实时数字信号处理应用中,虽然整个系统的吞吐率是衡量系统整体性能的一个指标,但是实时系统更加关注单任务执行性能.在本文提出的架构中,为所有的线程分配了不同级别的优先级,具有最高优先级的线程被称为前台线程.图1描述了在该架构中实现的同时多线程算法伪码,该算法中,前台线程可以访问所有功能单元,使用所有计算资源.和在单线程处理器中运行一样,前台线程可以达到最高性能.具有较低优先级的线程被称为后台线程.后台线程可以使用那些没有被更高优先级线程占用的功能单元,只有当执行该指令的功能单元处于空闲状态的时候,后台线程的指令才会被发射.为了有效地填充空闲的功能单元,需要将后台线程的执行包拆分成多个周期发射.

然而,在VLI W架构中,同一执行包中的指令是相互独立、互不依赖的,需要被同时发射并执行[1].而在同时多线程技术中,为了充分利用空闲的功能单元,处理器硬件需要根据功能单元的占用情况,将一个VLIW 执行包中的指令分多个时钟周期发射到空闲的功能单元.这可能会引入额外的数据依赖关系,而导致错误的执行结果.

图2描述了在VLI W架构中一个指令序列的执行情况,其中,ADD,S UB以及S HIF T指令的时延是1个时钟周期,M UL指令的时延是2个时钟周期.执行包1(图中标注为EP1)包含2条指令:ADD和M UL.图2(b)描述了在单线程VLI W架构中指令的执行情况,在时钟周期1,EP1中的ADD和M UL指令被同时发射,ADD和M UL之间不存在依赖关系.然而,如图2(c)所示,在多线程架构中,假如EP1进行分发的时候,乘法单元已经被更高优先级的线程所占用而此刻加法单元处于空闲状态,那么EP1就会被拆分成两个周期发射:周期1发射ADD,周期2发射M UL.在周期2,当M UL从R3获取操作数时,就会得到周期1ADD产生的结果数据,这并不是程序所期望的.拆分EP1之后,EP1内部指令之间的依赖关系就被引入到执行过程中,从而导致错误的执行结果.这种同一执行包中内部指令之间的依赖关系被称为水平依赖,而不同执行包之间的依赖关系则被称为是垂直依赖.为了可以拆分执行包并同时维持原有的依赖关系,本文提出的架构引入一组水平依赖消除(horiz ontal dependency elimination简称HDE)寄存器.图2(d)描述了引入HDE寄存器的多线程VLIW架构中指令的执行情况.在周期1,由于ADD所在执行包EP1并没有被发射完全,ADD的执行结果写入HDE寄存器中,而并不更新R3寄存器中的数据.那么,在周期2,同一执行包中的M UL操作就能获取正确的操作数.周期2,EP1中的所有指令都已经被分发时,HDE寄存器中暂存的执行结果就可以写入R3寄存器.由于引入了HDE 寄存器,同一个执行包中的指令可以分多个周期进行发射而不会影响程序的依赖关系.

图3描述了HDE寄存器在电路中的实现.如果执行包中还有指令未被分发,功能单元先将指令执行结果暂存在HDE寄存器.而当执行包中的所有指令都被分发完成,HDE寄存器中的执行结果被写入到架构寄存器堆中.如果功能单元所执行的指令为其所在执行包中最后一条分发的指令,那么当这条指令执行完成时,功能单元通过旁路路径将其执行结果直接写到寄存器堆中.这样在不改变流水线的结构同时也不会改变指令执行时延.由于HDE寄存器并不位于处理器的关键路径,而只需要在处理器数据通道中增加了一个二选一选择器,HDE寄存器的实现并不影响处理器的工作频率.在VLIW架构中,功能单元的时延对于编译器是可见的,如果功能单元的执行级采用了多个流水级实现,那么每个功能单元的每个执行流水级都需要一个HDE寄存器用于暂存执行结果.

354电子学报2010年

312 动态分发机制

当多个线程的指令同时分发给同一个功能单元时,在这一周期就会产生一个分发冲突.论文引入了分发冲突率(issue conf lict ra te,简称IC R)对分发冲突进行量化,计算方式如表达式(1)所示,式中T c onf lic t 是指在运行过程中有分发冲突产生的周期数,T t ota l 指总的运行周期数.

I CR=T co nfli ct /T t ota l (1

)

VLIW 编译器通常在编译阶段就将指令分配给功能单元,并在指令码中通过功能单元选择位嵌入功能单元分配信息.图4描述了两种分发机制之间的区别.在图4(a)描述的静态分发机制中,根据指令码中的功能单元选择位,分发单元将该M UL 指令分发给M 1单元.即使在架构中存在多个可以执行该指令且处于空闲状态的M 单元,由于编译器在编译过程中已经完成指令分配,该M UL 指令只能分配给M 1执行.如果此刻M 1单元被具有更高优先级的线程占据,那么就会产生一次分发冲突,分发单元只能停止分发M UL 指令直到M 1单元处于空闲状态.图4(b )描述了本文架构所支持的动态分发机制.在动态分发机制中,编译器不再负责指令和功能单元之间的分配而是将指令根据指令类型进行编码分类.分发单元根据从指令码中提取的指令类型来分发指令.在图4(b )示例中,分发单元通过对指令操作码进行预解码,判断该指令是M UL 指令,可以由M 单元执行.那么,即使M 1单元被其他线程占用,分发单元也可以将该指令分发到其他M 单元.只有当所有M 单元都被更高优先级线程占用时,才会产生一次分发冲突.动态分发机制可以显著的降低分发冲突率,从而更有效地提高功能单元利用率,提高指令吞吐率.

4 设计实现

基于本文提出DSP 架构,论文设计并实现了一款

支持同时多线程的VLI W DS P.该DSP 基于一个6发射,32位定点,10级流水线的VLIW 架构,支持两个线程同时运行.图5描述了该DSP 架构的框图,该处理器具有6个功能单元,包括2个A 单元,2个M 单元和2个D 单元.其中,A 单元执行所有算术逻辑指令以及所有移位/旋转指令;M 单元执行所有乘法指令以及部分算术指令;D 单元负责执行所有存储器访问操作,流程控制指令,比较指令以及部分算术指令.

采用了动态分发机制,该DSP 的分发单元可以根据指令类型将指令动态分发到相应的功能单元.图6列举了该DS P 所支持的指令类型以及指令的执行时延.根据执行指令的功能单元类型可以将所有指令分成4类:(1)可以被所有功能单元执行;(2)只可以被A 单元执行;(3)只可以被M 单元执行;(4)只可以被D 单元执行.

架构中主要的执行部件,如功能单元,指令缓存以及数据缓存被两个线程共享.而为了保持两个线程的执行状态,需要复制该DS P 的某些架构部件.为了储存来自两个线程的指令,架构中包含了两个指令池,取指单元将不同线程的指令存储在各个指令池中.为了维护每个线程的控制流程,架构中包含了两套程序计数器(Pro gra m Counter,简称P C)控制单元.而为了保持线程的计算结果,该架构中包含了两份通用寄存器堆以及控制寄存器堆.

355

第 2 期沈 钲:一种支持同时多线程的V LIW D SP 架构

指令类型执行功能单元指令时延(周期)分发类型

Integer/Logic AL U A,M ,D 1X B it Permutation

A,M ,D 1X NOP A,M ,D 1X Shift/Rotate A 1A Vector S UM A 1A Mul tiply/Mac M 2M Dot Product M 2M C ompare D 1D Load/Store D 4D Pus h/Pop D 4D B ranc h/Jump D 5D C all/Return

D

5

D D

图6 指令类型及指令时延

图7给出了该DSP 中各部分的硬件开销所占比重.采用0113L m 工艺库进行综合的结果表明,在最坏情况下,该DS P 频率可以达到200M Hz ,而工作于峰值频率时的功耗约为70m W.该DSP 的规模约为35万等效二输入与非门,在其所有硬件开销中,功能单元逻辑占了约2219%,缓存逻辑占了约4816%.而约有1218%的硬件资源被用于支持同时双线程,其中包括寄存器堆,HDE

寄存器,以及同时多线程控制逻辑.

5 实验结果及分析

511 评估实验平台

为了评估本文提出的同时多线程技术对VLIW DS P 指令吞吐率的影响,设计并采用了数字信号处理基准程序对该DS P 架构进行评估.论文将仿真器配置成不同的架构模型,其中包括(1)基本的单线程架构模型;(2)上文第二节中所描述的块多线程(B M T)架构[7,8];c)扩展拆分发射(XSI)[9]架构.其中B M T 模型和XSI 模型都配置成支持两个同时多线程

论文所采用的评估程序包括数字信号处理基准算法以及一些媒体应用程序.数字信号处理算法选自B D TI DS P 基准程序包[10],而媒体应用程序则选择部分常用音视频编解码程序[11,12].为了保证程序执行性能,所有程序都采用手写汇编优化,尽可能提高程序的指令级并行度,提高程序的执行效率.512 提高处理器指令吞吐率

本文采用每周期执行指令数(Instruction per cycle,简称IPC)对提出的同时多线程DS P 架构以及其他架构模型对指令吞吐率的影响进行比较(如图8).与基本的单线程DS P 架构相比,所有双线程模型都有利于I PC 百分比的提升.在只访问片内存储器的情况下,如果程

序的指令级并行度越低,同时多线程技术可以获得的IPC 提升百分比越高.而在访问片内缓存的情况下,由于多线程可以有效的隐藏存储访问时延,同时多线程技术可以更显著地提升I PC.如图8所示,在只访问片内缓存的情况下,相比于单线程架构,可使数字信号处理程序的I PC 平均提高约26.89%.

356

电 子 学 报2010年

513减少分发冲突

采用动态分发机制,分发单元可以在指令执行期间动态地将指令分发到功能单元.指令可以由任意一个可以执行该指令且处于空闲状态的功能单元执行.图9描述了本文提出的采用动态分发机制的同时多线程DS P架构与采用静态分发机制的XS I架构之间分发冲突率的比较.从图中可以发现,分发冲突率随着程序指令并行度的提高而增加.采用动态分发机制可以将将数字信号处理程序执行过程的分发冲突减少约34160%.动态分发机制给分发单元提供了更多自由度,分发单元可以根据指令类型进行指令分发,降低了分发冲突率,从而可以进一步提高处理器的吞吐率.

6结论

本论文提出了一种支持同时多线程的动态分发VLIW DSP架构.该DS P架构引入了一组HDE寄存器用于消除由于执行包拆分引入的执行包内部指令之间的依赖关系,而使DSP硬件可以将同一执行包内部的指令分多个时钟周期发射到相应的功能单元,并维持指令执行结果.为了降低多线程之间的分发冲突,该DS P 架构还采用动态分发机制,由硬件分发单元而不是编译器来完成指令的分配.基于该DS P架构,论文设计并实现了一款支持2个同时多线程的VLI W DSP.采用0113L m工艺库进行综合的结果表明,在最坏情况下,该DSP可以工作于200M Hz,而工作于峰值频率时的功耗约为70mW.该DS P的规模约为35万等效二输入与非门,在所有硬件开销中,仅需要1218%的硬件资源用于支持同时双线程.实验结果证明,针对数字信号处理,本文提出的双线程DS P架构可以将IPC提高约26189%,将分发冲突减少约34160%,从而有效的提高处理器性能.

参考文献:

[1]Rau B,Fisher J.Instruction2Lev el Parallel Processing:History,

Overview,and Per s pective[J].Journal of Supercompu ting.

1993,7(21):9-50.

[2]Wall D W.Limits of instruction2level parallelism[A].In Pro2

ceedings of the4th International Conference on Architectural Support for Programming Languages and Operating Systems

[C].Santa Clara,United States,1991,26(4):176-189.

[3]Lam M S.Limits of control flow on parallelis m[A].In Pro2

ceedings of the18th Internatio nal Symposium o n Computer Ar2 chitecture[C].Queensland,Australia,1992,20(2):46-57. [4]Butler M.Single ins truction stream parallelism is greater than

two[A].In Proceedings of the18th International Symposium on Computer Architecture[C].Toronto,Canada,1991.276-286.

[5]Tullsen D M.Simultaneous multithreading:maximizing onchip

parallelism[A].In Proceedings of the22nd Annual Internation2 al Symposium on Co mputer Architecture[C].Barcelona,Spain, 1995.392-403.

[6]Bayoumi M A.Parallel Algorithms and Architectures for DSP

Applications[M].Kluwer Academic Publishers,Norwell,USA, 1991.352-369.

[7]Kaxiras https://www.doczj.com/doc/bf10752357.html,pari ng Power Consumption of an SMT and a

CMP DSP for Mobile Phone Wo rkloads[A].In Proceedings of

357

第2期沈钲:一种支持同时多线程的V LIW D SP架构

the International Conference on Co mpilers,Architecture,and Synthesis fo r Embedded Systems[C].Atlanta,USA,2001.211 -220.

[8]Suijkerbuijk S,Juurlink.Implementing Hardware Mul tithreading

i n a VLIW Processor[A],In Proceedi ngs of the17th Interna2

tional Conference on Parallel and Distributed Computing and Systems[C].Las Vegas,USA,2005.674-679.

[9]Bharath Iyer.Ex tended Split-Issue:Enabling Flexibility in the

Hardware Implementation of NUAL VLIW DSPs[A].In Pro2 ceedings of the31nd Annual International Symposium on Com2 puter Architecture[C].Munchen,Germany,2004,32(2):364 -369.

[10]BDTI Benchmark Results[OL].https://www.doczj.com/doc/bf10752357.html,,

2005.

[11]A MR Speech Codec[OL].https://www.doczj.com/doc/bf10752357.html,/ftp/

Specs/html2info/262series.htm,2009.

[12]The IT U2T specification for H.263[OL].http://www.itu.

int/rec/T-REC-H.263,2009.作者简介:

沈钲男,1982年生,浙江省绍兴市人.

2000年9月考入清华大学电子工程系电子科学

与技术专业.2004年7月本科毕业并获得工学学

士学位.2009年7月获得电子科学与技术专业工

学博士学位.主要研究方向:可配置数字信号处

理器结构设计,并行处理器结构.

E2m ail:s henz heng00@https://www.doczj.com/doc/bf10752357.html,

孙义和男,1945年生,安徽省合肥市人,

教授,博士生导师,中国电子学会高级会员.1970

年清华大学自动控制系毕业,后留校任教.长期

从事微电子学和超大规模集成电路的教学、科

学研究工作.主要研究方向:LSI/VLSI测试方法

学和可测性设计,多媒体VLSI设计技术,网络和

数据安全VLSI结构.

E2m ail:s unyh@tsi https://www.doczj.com/doc/bf10752357.html,

358电子学报2010年

微服务框架的设计与实现

微服务框架的设计与实现① 张晶1, 黄小锋2, 李春阳3 1(北京中电普华信息技术有限公司, 北京100192) 2(中国电建集团国际工程有限公司, 北京100048) 3(国网信息通信产业集团有限公司, 北京100031) 摘 要: 相对于传统单块架构, 微服务框架具有技术选型灵活, 独立部署, 按需独立扩展等优点, 更适合当前互联网时代需求. 但微服务架构的使用引入了新的问题, 如服务注册发现、服务容错等. 对微服务框架引入的问题进行分析, 并给出了微服务框架的一种实现方案, 在框架层面解决服务注册发现、服务容错等共性问题, 使业务系统开发人员专注于业务逻辑实现, 简化系统开发的难度, 提高开发效率. 关键词: 微服务框架; 服务注册; 服务发现; 服务容错 Design and Implementation of Microservice Architecture ZHANG Jing1, HUANG Xiao-Feng2, LI Chun-Yang3 1(Beijing China Power Information Technology Co. Ltd., Beijing 100192, China) 2(PowerChina International Group Limited, Beijing 100048, China) 3(State Grid Information & Telecommunication Industry Group Co. Ltd., Beijing 100031, China) Abstract: Compared with traditional single block architecture, microservice architecture has many advantages, such as flexible technology selection, independent deployment, and independent scalability more suitability for the current needs of the internet age, etc. But microservice architecture also introduces new problems such as service registration, service discovery, service fault tolerance. On the basis of the analysis for problems mentioned above, this paper proposes one implementation of microservice framework, which can solve service registration, service discovery, service fault tolerance and other common problems. Based on this, developers only need to focus on the development of business functions, so that it can simplify the difficulty of system development and improve development effectiveness. Key words: microservice architecture; service registration; service discover; fault tolerance 传统信息化系统的典型架构是单块架构(Monolithic Architecture), 即将应用程序的所有功能都打包成一个应用, 每个应用是最小的交付和部署单元, 应用部署后运行在同一进程中. 单块架构应用具有IDE友好、易于测试和部署等优势, 但是, 随着互联网的迅速发展, 单块架构临着越来越多的挑战, 主要表现在维护成本高、持续交付周期长、可伸缩性差等方面[1]. 微服务架构(Microservices)的出现以及在国内外的成功应用, 成为系统架构的一种新选择. 很多大型宝等都已经从传统单块架构迁移到微服务架构[2]. 微服务架构提倡将单块架构的应用划分成一组小的服务, 互联网公司如Twitter、Netflix、Amazon 、eBay、淘服务之间互相协调、互相配合, 为用户提供最终价值. 1 微服务架构 微服务架构是一种架构模式, 采用一组服务的方式来构建一个应用, 服务独立部署在不同的进程中, 不同服务通过一些轻量级交互机制来通信, 例如RPC、HTTP等, 服务可独立扩展伸缩, 每个服务定义了明确的边界, 不同的服务甚至可以采用不同的编程语言来实现, 由独立的团队来维护[3]. 相对于传统的单体应用架构, 微服务架构具有单个服务易于开发、理解和维护; 复杂度可控; 技术选 ①收稿时间:2016-09-18;收到修改稿时间:2016-11-03 [doi: 10.15888/https://www.doczj.com/doc/bf10752357.html,ki.csa.005796]

Java多线程习题

Java 多线程习题 知识点: Java 的多线程,实现多线程的两种方法,线程控制、调度方法 一、选择题 1、什么原因可导致线程停止执行。 ( ) A. 线程调用了wait()方法; B. 线程调用了yield()方法; C. 线程调用了pause()方法; D. 线程调用了sleep() 方法。 2、哪个方法是实现Runnable 接口所需的? A. wait() B . run() C . stop() D . update() E . resume() 3、以下代码的调试结果为?( ) public class Bground extends Thread{ public static void main(String argv[]){ Bground b = new Bground(); b.run(); } public void start(){ for (int i = 0; i <10; i++){ System.out.println("Value of i = " + i); } } } A. 编译错误,没有定义线程的run方法; B. 由于没有定义线程的run方法,而出现运行错误; C. 编译通过,运行输出values 0 to 9 D. 编译通过,运行无输出 4、有关线程的叙述正确的有: ( ) A. 通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。 B. 可以获得对任何对象的互斥锁定。 C. 线程通过调用对象的synchronized 方法可取得对象的互斥锁定。 D. 线程调度算法是平台独立的。 5、以下哪个是线程类的方法? A. yield() B. sleep(long msec) C. go() D. stop() 6、以下哪个最准确描述synchronized 关键字?

java多线程试题答案

多线程 一.选择题 1.下列说法中错误地一项是() A.线程就是程序.线程是一个程序地单个执行流 B.多线程是指一个程序地多个执行流.多线程用于实现并发 2.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态() A.等待阴塞状态下地线程被()唤 B.等待阻塞状态下地纯种被()中断 C.等待时间到 D.等待阻塞状态下地线程调用()方法 3.下列哪个方法可以使线程从运行状态进入其他阻塞状态() A. 4.下列说法中错误地一项是() A.一个线程是一个类地实例 B.线程从传递给纯种地实例()方法开始执行 C.线程操作地数据来自实例 D.新建地线程调用()方法就能立即进入运行状态 5.下列关于类提供地线程控制方法地说法中,错误地一项是() A.在线程中执行线程地()方法,则线程等待直到执行完成 B.线程通过调用()方法来中断其阻塞状态 C.若线程调用方法()返回值为,则说明正在执行中 D.()方法返回当前线程地引用 6.下列说法中,错误地一项是() A.对象锁在()语句执行完之后由持有它地线程返还 B.对象锁在()语句中出现异常时由持有它地线程返还 C.当持有锁地线程调用了该对象地()方法时,线程将释放其持有地锁 D.当持有锁地线程调用了该对象地构造方法时,线程将释放其持有地锁 7.下面地哪一个关键字通常用来对对象地加锁,从而使得对对象地访问是排他地 A. 二.填空题 . 在操作系统中,被称做轻型地进程是线程 . 多线程程序设计地含义是可以将一个程序任务分成几个并行地任务 . 在程序中,()方法地实现有两种方式:实现接口和继承类.多个线程并发执行时,各个线程中语句地执行顺序是确定地,但是线程之间地相对执行顺序是不确定地 中地对象锁是一种独占地排他锁 .程序中可能出现一种情况:多个线种互相等待对方持有地锁,而在得到对方地锁之前都不会释放自己地锁,这就是死锁b5E2R。 .线程地优先级是在类地常数和之间地一个值 .处于新建状态地线程可以使用地控制方法是()和(). .一个进程可以包含多个线程 三.简答题

操作系统习题答案

内存1通常情况下,在下列存储管理方式中,()支持多道程序设计、管理最简单,但存储碎片多;()使内存碎片尽可能少,而且使内存利用率最高。 Ⅰ.段式;Ⅱ.页式;Ⅲ.段页式;Ⅳ.固定分区;Ⅴ.可变分区 正确答案:Ⅳ;Ⅰ 2为使虚存系统有效地发挥其预期的作用,所运行的程序应具有的特性是()。正确答案:该程序应具有较好的局部性(Locality) 3提高内存利用率主要是通过内存分配功能实现的,内存分配的基本任务是为每道程序()。使每道程序能在不受干扰的环境下运行,主要是通过()功能实现的。Ⅰ.分配内存;Ⅱ.内存保护;Ⅲ.地址映射;Ⅳ.对换;Ⅴ.内存扩充;Ⅵ.逻辑地址到物理地址的变换;Ⅶ.内存到外存间交换;Ⅷ.允许用户程序的地址空间大于内存空间。 正确答案:Ⅰ;Ⅱ 4适合多道程序运行的存储管理中,存储保护是 正确答案:为了防止各道作业相互干扰 5下面哪种内存管理方法有利于程序的动态链接()? 正确答案:分段存储管理 6在请求分页系统的页表增加了若干项,其中状态位供()参考。 正确答案:程序访问 7从下面关于请求分段存储管理的叙述中,选出一条正确的叙述()。 正确答案:分段的尺寸受内存空间的限制,但作业总的尺寸不受内存空间的限制

8虚拟存储器的特征是基于()。 正确答案:局部性原理 9实现虚拟存储器最关键的技术是()。 正确答案:请求调页(段) 10“抖动”现象的发生是由()引起的。 正确答案:置换算法选择不当 11 在请求分页系统的页表增加了若干项,其中修改位供()参考。 正确答案:换出页面 12 虚拟存储器是正确答案:程序访问比内存更大的地址空间 13测得某个请求调页的计算机系统部分状态数据为:CPU利用率20%,用于对换空间的硬盘的利用率97.7%,其他设备的利用率5%。由此断定系统出现异常。此种情况下()能提高CPU的利用率。 正确答案:减少运行的进程数 14在请求调页系统中,若逻辑地址中的页号超过页表控制寄存器中的页表长度,则会引起()。 正确答案:越界中断 15 测得某个请求调页的计算机系统部分状态数据为:CPU利用率20%,用于对换空间的硬盘的利用率97.7%,其他设备的利用率5%。由此断定系统出现异常。此种情况下()能提高CPU的利用率。 正确答案:加内存条,增加物理空间容量 16 对外存对换区的管理应以()为主要目标,对外存文件区的管理应以()

医院网络架构设计与实现

医院网络架构设计与实现 [摘要]随着医院信息化进程的深入,医院信息平台的运行将越来越依赖基础网络的建设。网络成为医院各种关键数据的信息进行交互和传递的重要途径。多种网络架构拥有各自的优势与不足,下面就我对其的认识作出阐述和选择一种合适的网络基础架构。 [关键字] 内外网融合,内外网分离,结合 医院的网络基础架构发展至今,主要分为三种架构,分别是内外网融合的网络架构、内外网分离的网络架构、以及最近几年刚刚兴起的基于业务的无线网络平台架构,这是和医疗信息化的发展阶段分不开的。(内网外网的概念为逻辑上的划分,两种实际的物理架构中,逻辑上均包含内网和外网两部分。划分主要根据业务系统的对内对外服务属性,医疗核心业务相关度等特性来进行。) 首先先来简单认识一下内外网融合的网络架构、内外网分离的网络架构和无线网络平台架构和基于业务的无线网络平台架构以及他们的优缺点比较。 内外网融合的物理架构:就是医院的内网业务以及办公业务都在一张基础网络上运行,在这一网络架构之上,无论是数据的类型、重要程度,还是对网络的要求,以及数据流方向都不尽相同,使得网络数据复杂度提高而可控性下降。从介绍可知,所有业务都在一张基础网上,缺点明显可知,两网仅逻辑隔离,外网对设备的攻击可能引起

内外网络全面瘫痪。优点则是:可以保护投资,并且可以根据需要让某部分终端可以同时访问两个区域,而且内外网融合所需设备相对较少,在维护和购买设备方面都很大程度上减少了成本。 内外网分离的网络架构:就是将医院的内网和外网业务分别放在一张单独建立的网络上来运行,两网物理隔离,最大限度的保障内网业务及数据的安全。内网主要承载医疗核心业务,如HIS、PACS 等。外网作为行政办公、对外发布、互联网医学资料查询的主要平台,对于稳定性和保密的性的要求低于内网,并且接入终端及数据流特点也更为复杂。优点:内外网无共用设备和链路,两网之间互不影响。此种网络架构设计,能够最大程度保证内网安全。缺点:由于内外网完全物理隔离,两张网络单独建设,投资规模增大;灵活性稍弱,一台终端只属于一张网,不能同时对两网资源进行访问,也不能自由切换;需要管理两张网络,增加管理成本 无线网络与上述两种相比大大不同,它是采用无线传输媒介的计算机网络,结合了最新的计算机网络技术和无线通信技术。首先,无线局域网是有线局域网的延伸。使用无线技术来发送和接收数据,减少了用户的连线需求。由于采用无线信号通讯,在网络接入方面就更加灵活了,只要有信号就可以通过无线网卡完成网络接入的目的;同时网络管理者也不用再担心交换机或路由器端口数量不足而无法完成扩容工作了。但是无线网络初次建设成本较高,很多条件不是很好的医院都无法实现;部署时需要改动现有网络结构,对原网络进行调整,增加初次部署复杂度,随着无线网络带宽以及传输数据

操作系统相关题目(附上答案)

一.选择题 1.操作系统是对____进行管理的软件。() A.软件 B.硬件 C.计算机资源 D.应用程序 2.在操作系统中,并发性是指若干事件发生。() A.在同一时刻 B.一定在不同时刻 C.某一时间间隔内 D.依次在不同时间间隔内 3.操作系统的不确定性是指。() A.程序运行结果的不确定性 B.程序运行次序的不确定性 C.程序多次运行时间的不确定性 D.B和C 4.以下不是程序在并发系统内执行的特点() A.程序执行的间断性 B.相互通信的可能性 C.产生死锁的必然性 D.资源分配的动态性 5.在操作系统中,负责对进程的调度() A.处理器管理 B.作业管理 C.高级调度管理 D.存储和设备管理 6.以下不属于衡量操作系统性能指标的是。() A.作业的大小 B.资源利用率 C.吞吐量 D.周转时间 7.在单处理器系统中,可并行的是。() I.进程与进程II.处理器与设备III.处理器与通道IV.设备与设备 A. I,II和III B. I,II和IV C. I,III和IV D. II,III和IV 8.一个多道批处理系统中仅有P1和P2两个作业,P2比P1晚5ms到达,它们的计算和I/O操作顺序如下: P1:计算60ms,I/O 80ms,计算20ms P2:计算120ms,I/O 40ms,计算40ms 若不考虑调度和切换时间,则完成两个作业需要的时间最少是。() A.240ms B.260ms C.340ms D.360ms 9.下列选项中,在用户态执行的是。() A.命令解释程序 B.缺页处理程序 C.进程调度程序 D.时钟中断处理程序 10.下列选项中,不可能在用户态发生的事件是。() A.系统调用 B.外部中断 C.进程切换 D.缺页 11.下列选项中,操作系统提供给应用程序的接口是。() A.系统调用 B.中断 C.库函数 D.原语 12.并发进程指的是() A.可并行执行的进程 B.可同一时刻执行的进程 C.可同时执行的进程 D.不可中断的进程 13.当一个进程处于这样的状态时,,称为阻塞状态。() A.它正等着输入一批数据 B.它正等着进程调度 C.它正在等着分给它一个时间片 D.它正等着进入内存 14.下列选项中,降低进程优先级的合理时机是。() A.进程的时间片用完 B.进程刚完成I/O,进入就绪队列 C.进程长期处于就绪队列中 D.进程从就绪状态转为运行态 15.若一个用户进程通过read系统调用读取一个磁盘文件中的数据,则下列关于此过程

DSRC通信系统架构设计与实现

DSRC通信系统架构设计与实现 【摘要】本文通过对DSRC系统的架构分析,设计了车车与车路信息交互平台的通信软件与MFC通信显示界面,在平台架构基础上进行了实车传输车身信号数据测试,试验结果表明,所设计的通信系统平台架构合理,并且能够满足包括车辆安全所需求的通信标准。 【关键词】DSRC;MFC;socket;车路通信 0 引言 21世纪将是公路交通智能化的世纪,人们将要采用的智能交通系统,是一种先进的一体化交通综合管理系统。ITS是智能交通系统(Intelligent Transportation System)的简称,是未来交通系统的发展方向,它是将先进的信息技术、数据通讯传输技术、电子传感技术、控制技术及计算机技术等有效地集成运用于整个地面交通管理系统而建立的一种在大范围内、全方位发挥作用的,实时、准确、高效的综合交通运输管理系统[1-2]。 DSRC 采用专为车间通信的WA VE规范以及根据IEEE802.11标准修改制定的IEEE 802. 11p 标准。目前许多文献针对DSRC所进行的研究主要集中在对通信协议或者交通系统某一项参数设置不同时所得出的通信系统实时性与延迟性的研究,但是并没有针对整个ITS系统的架构角度来考虑对DSRC通信系统的实现。 本文针对DSRC在ITS环境下的系统架构,提出了智能通信平台的整个设计,对于DSRC系统的通信软件架构的编写与实车试验,揭示了DSRC在ITS 道路环境下架构设计流程与实车通信效果。 1 DSRC通信平台系统架构设计与仿真 1.1 DSRC系统架构之间的关系 DSRC系统主要包括三个部分:车载单元(OBU)、路边单元(RSU)以及专用短程通信协议。通过车载OBU收发器与路侧RSU收发器,可实现车辆与道路之间的信息交互。DSRC协议是在OSI的基础上提出的三层协议结构,即物理层、数据链路层(LLC与MAC子层)、应用层,如图1所示。 图1 调制方式系统架构的关系 Fig.1 Relationship between the modulation and system architecture 1.2 智能交互系统平台通信socket编写(物理层与数据链路层)

第5章-多线程-补充案例

第五章补充案例 案例5-1继承Thread类创建多线程 一、案例描述 1、考核知识点 编号:00105002 名称:继承Thread类创建多线程 2、练习目标 ?掌握如何通过继承Thread类实现多线程的创建。 ?掌握Thread类中run()方法和start()方法的使用。 3、需求分析 在程序开发中,会遇到一个功能需要多个线程同时执行才能完成的情况。这时,可以通过继承线程类Thread,并重写Thread类中的run()方法来实现。为了让初学者熟悉如何创建多线程,在案例中将通过继承Thread类方式创建线程,并实现多线程分别打印0~99的数字的功能。 4、设计思路(实现原理) 1)自定义一个类Demo,使其继承Thread类。 2)在Demo类中重写run()方法,在run()方法内编写一个for循环,循环体内打印:“Demo:” +当前循环次数。 3)编写测试类Example01,在Example01类的main()方法中,创建一个Demo对象,并执 行其start()方法,接着编写一个for循环,循环体内打印:“main:”+当前循环次数。

二、案例实现 class Demo extends Thread { public void run() { for (int x = 0; x < 100; x++) { System.out.println("Demo:"+x); } } } public class Example01{ public static void main(String[] args) { Demo d = new Demo(); d.start(); for(int x=0; x<100; x++){ System.out.println("main:"+x); } } } 运行结果如图5-1所示。 图5-1运行结果 三、案例总结 1、通过继承Thread类,并重写Thread类中的run()方法可以实现多线程。 2、Thread类中,提供的start()方法用于启动新线程,线程启动后,系统会自动调用run()方法。 3、main()方法中有一条主线程在运行。

多线程练习题目

多线程练习题目

————————————————————————————————作者:————————————————————————————————日期:

多线程? 一、单项 1.下述哪个选项为真?() A.Error类是一个RoutimeException异常 B.任何抛出一个RoutimeException异常的语句必须包含在try块之内 C.任何抛出一个Error对象的语句必须包含在try块之内 D.任何抛出一个Exception异常的语句必须包含在try块之内 2.下列关于Java线程的说法哪些是正确的?( ) A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成 B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题 C.Thread类属于java.util程序包 D.以上说法无一正确 3.哪个关键字可以对对象加互斥锁?( ) A.transient B.synchronized C.serialize D.static 4.下列哪个方法可用于创建一个可运行的类?() A.public classXimplements Runable{ publicvoid run() {……}} B.public class XimplementsThread { public void run(){……} } C. public class X implements Thread { public int run() {……} } D.publicclass X implements Runable { protectedvoidrun(){……}} 5.下面哪个选项不会直接引起线程停止执行?( ) A.从一个同步语句块中退出来 B.调用一个对象的wait方法 C.调用一个输入流对象的read方法 D.调用一个线程对象的setPriority方法 6.使当前线程进入阻塞状态,直到被唤醒的方法是() A.resume()方法 B.wait()方法 C.suspend()方法D.notify()方法 7.运行下列程序,会产生的结果是( ) publicclassXextends Thread implements Runnable { public void run(){ System.out.println(“this is run()”); } publicstaticvoid main(String[] args) { Thread t=new Thread(newX()); t.start();

多线程练习题目

多线程 一、单项 1.下述哪个选项为真?( ) A.Error类是一个RoutimeException异常 B.任何抛出一个RoutimeException异常的语句必须包含在try块之内 C.任何抛出一个Error对象的语句必须包含在try块之内 D. 任何抛出一个Exception异常的语句必须包含在try块之内 2.下列关于Java线程的说法哪些是正确的?( ) A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成 B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题 C.Thread类属于java.util程序包 D.以上说法无一正确 3.哪个关键字可以对对象加互斥锁?( ) A.transient B.synchronized C.serialize D.static 4.下列哪个方法可用于创建一个可运行的类?() A.public class X implements Runable { public void run() {……} } B. public class X implements Thread { public void run() {……} } C. public class X implements Thread { public int run() {……} } D.public class X implements Runable { protected void run() {……} } 5.下面哪个选项不会直接引起线程停止执行?( ) A.从一个同步语句块中退出来 B.调用一个对象的wait方法 C.调用一个输入流对象的read方法 D.调用一个线程对象的setPriority方法 6.使当前线程进入阻塞状态,直到被唤醒的方法是( ) A.resume()方法 B.wait()方法 C.suspend()方法 D.notify()方法 7.运行下列程序,会产生的结果是( ) public class X extends Thread implements Runnable { public void run(){ System.out.println(“this is run()”); } public static void main(String[] args) { Thread t=new Thread(new X()); t.start(); } }

操作系统习题集-填空题版本教案资料

内存1通常情况下,(固定分区)支持多道程序设计、管理最简单,但存储碎片多;(段式)使内存碎片尽可能少,而且使内存利用率最高。 2为使虚存系统有效地发挥其预期的作用,所运行的程序应具有的特性是该程序应具有较好的局部性(Locality) 。 3提高内存利用率主要是通过内存分配功能实现的,内存分配的基本任务是为每道程序(分配内存)。使每道程序能在不受干扰的环境下运行,主要是通过(内存保护)功能实现的。 4适合多道程序运行的存储管理中,存储保护是为了防止各道作业相互干扰。 5(分段存储管理)方法有利于程序的动态链接 6在请求分页系统的页表增加了若干项,其中状态位供(程序访问)参考。 7关于请求分段存储管理的叙述中,正确的叙述(分段的尺寸受内存空间的限制,但作业总的尺寸不受内存空间的限制)。 8虚拟存储器的特征是基于(局部性原理)。 9实现虚拟存储器最关键的技术是(请求调页(段))。 10“抖动”现象的发生是由(置换算法选择不当)引起的。 11 在请求分页系统的页表增加了若干项,其中修改位供(换出页面)参考。 12 虚拟存储器是程序访问比内存更大的地址空间 13测得某个请求调页的计算机系统部分状态数据为:CPU利用率20%,用于对换空间的硬盘的利用率97.7%,其他设备的利用率5%。由此断定系统出现异常。此种情况下(减少运行的进程数)能提高CPU的利用率。14在请求调页系统中,若逻辑地址中的页号超过页表控制寄存器中的页表长度,则会引起(越界中断)。 15 测得某个请求调页的计算机系统部分状态数据为:CPU利用率20%,用于对换空间的硬盘的利用率97.7%,其他设备的利用率5%。由此断定系统出现异常。此种情况下(加内存条,增加物理空间容量)能提高CPU的利用率。 16 对外存对换区的管理应以(提高换入换出速度)为主要目标,对外存文件区的管理应以(提高存储空间的利用率)为主要目标。 17 在请求调页系统中,若所需的页不在内存中,则会引起(缺页中断)。 18 虚拟存储器一般都引入关联存储器技术,关联存储器是按内容寻址 19 在请求分页系统的页表增加了若干项,其中访问位供(置换算法)参考。 20 在动态分区式内存管理中,倾向于优先使用低址部分空闲区的算法是(首次适应算法);能使内存空间中空闲区分布得较均匀的算法是(循环首次适应算法(即Next fit));每次分配时,把既能满足要求,又是最小的空闲区分配给进程的算法是(最佳适应算法)。 21 某计算机采用虚拟页式存储技术,系统为每一个进程提供65536B的地址空间,页面大小为4096B,某一个进程的代码段有32768B,数据段16396B,堆栈段在进程创建时为1024B,运行中最大会增涨到15284B。那么这个进程能够创建到内存,运行过程中出错 22 在动态分区分配方案中,某一进程运行完成后系统收回其主存空间,若该内存空间前后有空闲区,则会与相邻空闲区合并,为此需修改空闲区表,那么造成空闲区数减一的情况是有上邻空闲区,也有下邻空闲区

多线程练习题

0、Java中多线程同步是什么? 在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个Java线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。 1、解释实现多线程的几种方法? Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。还可以使用线程池。 2、Thread.start()与Thread.run()有什么区别? Thread.start()方法(native)启动线程,使之进入就绪状态,当cpu分配时间该线程时,由JVM调度执行run()方法。 3、为什么需要run()和start()方法,我们可以只用run()方法来完成任务吗? 我们需要run()&start()这两个方法是因为JVM创建一个单独的线程不同于普通方法的调用,所以这项工作由线程的start方法来完成,start由本地方法实现,需要显示地被调用,使用这俩个方法的另外一个好处是任何一个对象都可以作为线程运行,只要实现了Runn able接口,这就避免因继承了Thread类而造成的Java的多继承问题。 4、什么是ThreadLocal类,怎么使用它? ThreadLocal是一个线程级别的局部变量,并非“本地线程”。ThreadLocal为每个使用该变量的线程提供了一个独立的变量副本,每个线程修改副本时不影响其它线程对象的副本(译者注)。 5、Sleep()、suspend()和wait()之间有什么区别? Thread.sleep()使当前线程在指定的时间处于“非运行”(Not Runnable)状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中。如果另一线程调用了interrupt()方法,它将唤醒那个“睡眠的”线程。 注意:sleep()是一个静态方法。这意味着只对当前线程有效,一个常见的错误是调用t.sl eep(),(这里的t是一个不同于当前线程的线程)。即便是执行t.sleep(),也是当前线程进入睡眠,而不是t线程。t.suspend()是过时的方法,使用suspend()导致线程进入停滞状态,该线程会一直持有对象的监视器,suspend()容易引起死锁问题。 object.wait()使当前线程出于“不可运行”状态,和sleep()不同的是wait是object的方法而不是thread。调用object.wait()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用object.notify(),这样将唤醒原来等待中的线程,然后释放该锁。基本上wait() /notify()与sleep() /interrupt()类似,只是前者需要获取对象锁。 6、在静态方法上使用同步时会发生什么事? 同步静态方法时会获取该类的“Class”对象,所以当一个线程进入同步的静态方法中时,线程监视器获取类本身的对象锁,其它线程不能进入这个类的任何静态同步方法。它不像实例方法,因为多个线程可以同时访问不同实例同步实例方法。 7、当一个同步方法已经执行,线程能够调用对象上的非同步实例方法吗?

经典多线程的练习题

java中有几种方法可以实现一个线程(jdk5.0之前)?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口。 用synchronized关键字修饰同步方法,反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。 suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志, 指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 sl eep() 和wait() 有什么区别? 答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 同步和异步有何异同,在什么情况下分别使用他们?举例说明。 答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

南昌航空大学操作系统-A-试卷

南昌航空大学20XX —20XX 学年第一学期期末考试 课程名称:操作系统 闭 卷 A 卷 120分钟 一、 单项选择题(共60分,每小题2分) 1. 系统为某进程分配了4个页框,该进程已访问的页号序列为2,0,2,9,3,4,2,8,2,3,8,4,5,若进程要访问的下一页的页号为7,依据LRU 算法,应淘汰页的页号是(B )。 A .2 B .3 C .4 D .8 2. 操作系的I/O 子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口,其合理的层次 组织排列顺序是( A )。 A. 用户级I/O 软件、设备无关软件、设备驱动程序、中断处理程序 B. 用户级I/O 软件、设备无关软件、中断处理程序、设备驱动程序 C. 用户级I/O 软件、设备驱动程序、设备无关软件、中断处理程序 D. 用户级I/O 软件、中断处理程序、设备无关软件、设备驱动程序 3. 在请求分页系统中,页面分配策略与页面置换策略不能组合使用的是( A )。 A .可变分配,全局置换 B .可变分配,局部置换 C .固定分配,全局置换 D .固定分配,局部置换 4. 某计算机处理器主频为50 MHz ,采用定时查询方式控制设备A 的I/O ,查询程序运行一次所用的时钟周期数至少为500。在设备A 工作期间,为保证数据不丢失,每秒需对其查询至少200次,则CPU 用于设备A 的I/O 的时间占整个CPU 时间的百分比至少是( C )。 A .0.02% B .0.05% C .0.20% D .0.50% 5. 下列选项中,满足短任务优先且不. 会发生饥饿现象的调度算法是( )。 A .先来先服务 B .高响应比优先 C .时间片轮转 D .非抢占式短任务优先 6. 下列选项中,在用户态执行的是( A )。 A .命令解释程序 B .缺页处理程序 C .进程调度程序 D .时钟中断处理程序 7. 在支持多线程的系统中,进程P 创建的若干个线程不. 能共享的是( D )。 A .进程P 的代码段 B .进程P 中打开的文件 C .进程P 的全局变量 D .进程P 中某线程的栈指针 8.用户程序发出磁盘I/O 请求后,系统的正确处理流程是( B )。 A .用户程序→系统调用处理程序→中断处理程序→设备驱动程序 B .用户程序→系统调用处理程序→设备驱动程序→中断处理程序

线程编程方面笔试题

线程编程方面java笔试题 60、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口 用synchronized关键字修饰同步方法 反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 61、sleep() 和 wait() 有什么区别? 答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 62、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 63、启动一个线程是用run()还是start()? 答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 64、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 答:不能,一个对象的一个synchronized方法只能由一个线程访问。 65、请说出你所知道的线程同步的方法。 答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。 sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉Interrupt edException异常。 notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。 66、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify

操作系统课后习题答案2

2. 进程和线程的管理 例题解析 例2.2.1 试说明进程和程序之间的区别和联系。 解进程和程序是既有区别又有联系的两个概念。 进程是动态的,程序是静态的。程序是一组有序的指令集合,是一个静态的概念;进程则是程序及其数据在计算机上的一次执行,是一个动态的集合。离开了程序,进程就失去了存在的意义,但同一程序在计算机上的每次运行将构成不同的进程。程序可看作是电影的胶片,进程可以看作电影院放电影的过程。 一个进程可以执行多个程序,如同一个电影院的一场电影可放映多部影片。 一个程序可被多个进程执行,如同多个影院同时利用一个电影的胶片放映同一部电影。 程序可以长期保存,进程只能存在于一段时间。程序是永久存在的,而进程有从被创建到消亡的生命周期。 例2.2.2 举例说明多道程序系统失去了封闭性和再现性。 解例如,有两个循环程序A和B,共享一个变量N。程序A每执行一次时,都要做N:=N+1操作;程序B则每执行一次时,都要执行print(N)操作,然后再将N的值置成“0”。程序A 和B在多道程序系统中同时运行。假定某时刻变量N的值为n,可能出现下述三种情况:N:=N+1 在print(N)和N:=0之前,此时得到N值变化过程为n+1、n+1、0; N:=N+1 在print(N)和N:=0之后,此时得到N值变化过程为n 、0 、1; N:=N+1 在print(N)之后和N:=0之前,此时得到N值变化过程为n、n+1、0。 所以,在A、B程序多次执行过程中,虽然其每次执行时的环境和初始条件都相同,但每次得到的结果却不一定相同。 例2.2.3 为什么将进程划分成执行、就绪和阻塞三个基本状态? 解根据多道程序执行的特点,进程的运行是走走停停的。因此进程的初级状态应该是执行和等待状态。处于执行状态的进程占用处理机执行程序,处于等待状态的进程正在等待处理机或者等待其它某种事件的发生。但是,当处理机空闲时,并不是所有处于等待状态的进程都能放到处理机上执行,有的进程即使分配给它处理机,它也不能执行,因为它的执行的条件没有得到满足。因此,将等待状态的进程分成两部分,一部分是放在处理机上就能立即执行,这就是就绪的进程;另一部分是仍需等某种事件发生的进程,即使放在处理机上也不能执行的进程,这就是阻塞进程。 例2.2.4 进程的挂起状态与进程的阻塞状态和就绪状态有何异同? 解相同点是它们都没有占用处理机。不同点是挂起状态的进程是处于一种静止状态,不会参与对资源的竞争,在解除挂起之前,进程不会有新的资源要求,也不会有占用处理机的机会;阻塞状态和就绪状态的进程均处于活动状态,它们都有获得处理机的机会,都可能有新的资源要求。 例2.2.5 两个并发进程P1和P2的程序代码在下面给出。其中,A、B、C、D和E均为原语。 P1: begin P2: begin A; D; B; E; C; end end 请给出P1、P2两个进程的所有可能执行的过程。

相关主题
文本预览
相关文档 最新文档