10.2-控制单元CU的微程序设计

【README】

1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;

2.微指令1条微指令就是多个bit位,如8个bit,每个bit位表示一种微操作;

一条机器指令对应一个微程序;
一个微程序由多条微指令组成;
一条微指令由多个微操作组成;
(因为微指令表示为多个bit位,如01000010,bit位=1表示微操作有效)

  • 一个时钟周期或节拍执行一条微指令; 这也很好解释了执行一条机器指令需要多个时钟周期的原理

3.微程序介绍,转自 Wikipedia

https://zh.wikipedia.org/wiki/%E5%BE%AE%E7%A8%8B%E5%BA%8Fhttps://zh.wikipedia.org/wiki/%E5%BE%AE%E7%A8%8B%E5%BA%8F

微指令(英语:microcode),又称微码,是在CISC结构下,执行一些功能复杂的指令时,所分解一系列相对简单的指令。相关的概念最早在1947年开始出现。

微指令的作用是将机器指令与相关的电路实现分离,这样一来机器指令可以更自由的进行设计与修改,而不用考虑到实际的电路架构(而组合逻辑设计就是硬件组合方式,电路复杂)。与其他方式比较起来,使用微指令架构可以在降低电路复杂度的同时,建构出复杂的多步骤机器指令。撰写微指令一般称为微程序设计(microprogramming),而特定架构下的处理器实现中,微指令有时会称为微程序(microprogram)。

现代的微指令通常由CPU工程师在设计阶段编写,并且存储在只读存储器(ROM, read-only-memory)或可编程逻辑数组(PLA, programmable logic array)中。然而有些机器会将微指令存储在静态随机存取存储器(SRAM)或是闪存(flash memory)中。它通常对普通程序员甚至是汇编语言程序员来说是不可见的,也是无法修改的。与机器指令不同的是,机器指令必须在一系列不同的处理器之间维持兼容性,而微指令只设计成在特定的电路架构下执行,成为特定处理器设计的一部分。


【1】微程序设计思想的产生

  • 设计比较容易,修改也比较简单的控制器的设计方法——微程序设计;这种设计方式,非常适合指令集扩展;

【背景】

在指令执行过程中,不同节拍要发出不同的操作(或微操作);节拍间是有先后顺序的;
安排在不同的微操作,也是有先后顺序的;每个节拍发出的控制命令实际上就是一个电信号或几个电信号(如果微操作命令可以并行操作的话);由这些电信号去控制响应的部件进行操作;

1)微程序的设计思想定义(也可见本文开始部分的wikipedia内容):微操作命令组合为1条微指令,每个节拍对应一条微指令,多个节拍对应多条微指令,多条微指令就构成微程序;

【例】微指令bit位的含义:(1条微指令就是多个bit位,如8个bit,每个bit位表示一种微操作)
微指令 10100000 指的是:2个1的位置表示在这个节拍中,相对应的两个微操作,它的控制信号要在这个节拍中产生;并且由这两个1去控制相应部件去进行操作;(微指令中每个bit位表示了一种微操作命令);

微指令间也是有先后顺序的;这些微指令构成了微程序,由微程序去控制去完成一条指令的执行过程;

2)机器指令,微程序,微指令,微操作四者间的关系一条机器指令对应一个微程序,一个微程序对应多条微指令;一条微指令包含一个或多个微操作命令(控制信号);

  • 2.1)微指令间的先后顺序:就是微操作在执行过程中的先后顺序;
  • 2.2)存入ROM:把这些微指令或微程序(多个bit位)存入ROM只读存储器中;执行的时候,把微指令从ROM中读出,根据读出的微指令中有效的控制信号的个数(bit=1的个数)(或有效控制信号的位置),发出相应的控制信号,让计算机执行相应的操作;这种方式称为存储逻辑的方式;把逻辑信号存储在存储器中,从存储器中读出微指令,由这些信号控制相关的部件进行操作;

【2】微程序控制单元框图及工作原理

【2.1】机器指令对应的微程序

内存地址M:保存了取指令所需要的微操作以及微操作间的先后顺序,如微指令bit位;
即取指微程序保存在以控制存储器M地址开头的存储单元中;
M,M+1,M+2 3个存储单元保存了取指微程序,因为取指周期需要3个节拍(时钟周期)来完成;每个节拍对应一条微指令,完成了那个节拍里产生控制命令的工作;


【2.2】微程序控制单元的基本框图 

控制存储器:存储微指令的存储器;
CMAR:控制存储器地址寄存器,Control Memory Address Register;(区别于 MAR,存储器地址寄存器)
CMDR:控制存储器数据寄存器,Control Memory Data Register;(区别于 MDR,存储器数据寄存器)

0)微程序,微操作命令(微指令)都保存在控制存储器(非主存)中(它是一个ROM只读存储器);从控制存储器中取出微指令,就需要知道微指令的地址;微指令地址保存在CMAR寄存器中

1)微指令基本格式:操作控制bit位 + 顺序控制bit位;如:

01000010
操作控制顺序控制
  • 1.1)操作控制:由一系列的0和1组成;每个bit位都代表了微操作控制信号;为1,则该微操作有效,且该微操作对应的部件去做操作;
  • 1.2)顺序控制:给出了下一条微指令的地址;

2)微程序执行步骤:

  • 步骤1:指令寄存器IR的操作码部分(机器指令的操作码)送入微地址形成部件(进行译码);该部件形成微程序(微指令)在控制存储器的地址;
  • 步骤2:微程序地址送入顺序逻辑,以便在多个微指令地址当中进行选择;选择一个正确地址送入控制存储器地址寄存器CMAR;
  • 步骤3:控制存储器地址寄存器CMAR的微指令地址经过地址译码,送入控制存储器;
  • 步骤4:从控制存储器中读出微指令到CMDR(控制存储器数据寄存器)中;这时CMDR就保存了一条微指令;
  • 步骤5:CMDR寄存器把微指令的下一地址送入顺序逻辑;以便顺序逻辑选择下一条微指令地址;(顺序逻辑或者存储了微程序首地址,或者存储了下一条微指令地址)
  • 步骤6:CMDR的操作控制部分(控制信号),送入CPU内部和系统总线;  

LDA微程序:取数机器指令对应的微程序;(把数据从内存取出,送入寄存器)
STA微程序:存数机器指令对应的微程序;(把寄存器中的数据送入内存)

3)微程序中多个微指令全部的微操作执行完成后,就会完成某一个特定操作,如取指操作,间址操作,执行操作或中断周期操作;

M地址的微指令的下地址部分(顺序控制部分)是M+1;
M+1地址的微指令的下地址部分(顺序控制部分)是M+2;
M+2地址的微指令的下地址部分,情况有所不同,其下一条微指令地址未知;看下面的例子;

【例】假设取指之后,马上执行;
以上取指周期的3条微指令,完成了取指操作;但这条指令是什么指令,要经过指令译码才知道
指令译码后才知道去执行哪一个微程序(或者加法或者写数);这个过程是由微地址形成部件来做的;
微地址形成部件根据指令的操作码,形成这条指令在执行阶段所属微程序在控制存储器中的存储单元地址;


【2.3】 微程序控制单元工作原理

【例】 假设主存中保存了4条用户程序,看下微程序如何执行? 


【2.3.1】取指微程序工作原理

取指微程序(注意是取指,还没有到执行阶段) ,步骤如下:

步骤

取指微指令

描述

1

M->CMAR

取指微程序首地址地址M(第一条微指令地址)送入CMAR;

2

CM(CMAR)->CMDR

从控存中CMAR指定地址上读取微指令到CMDR;

微指令bit位:100…001

对应2个微操作为:PC->MAR 和 1 -> R;

3

AD(CMDR) ->CMAR

把CMDR中的下地址部分送入CMAR;

形成下一条微指令地址M+1

4

CM(CMAR)->CMDR

从控存中CMAR指定地址M+1上读取微指令到CMDR;

微指令bit位:010…010

对应2个微操作为:M(MAR)->MDR  (PC)+1 -> PC;

5

AD(CMDR) ->CMAR

把CMDR中的下地址部分送入CMAR;

形成下一条微指令地址M+2

6

CM(CMAR)->CMDR

从控存中CMAR指定地址M+2上读取微指令到CMDR;

微指令bit位:001…000

对应1个微操作为:M(MDR)->IR

7

CMDR发出命令读取内地地址为XXX的指令;

 最后一条微指令的下地址部分是XXX;说明下一条微指令的地址不能由下地址给出,而是进入间址或进入执行阶段;
如果进入到执行阶段,则根据IR中的操作码opcode通过微地址形成部件来形成下一条微指令在控制存储器的地址;


【2.3.2】执行LDA微程序工作原理

LDA取数(送到ACC累加器)微程序的步骤如下:

步骤

微指令

描述

1

OP(IR) -> 微地址形成部件-> CMAR

把IR存储的指令的操作数形式地址部分送入CMAR

2

CM(CMAR)->CMDR

从控存读取微指令到CMDR;

微指令bit0001…001

对应2个微操作:Ad(IR)->MAR  1 -> R

3

AD(CMDR) ->CMAR

把CMDR中的下地址部分P+1送入CMAR;

形成下一条微指令地址;

4

CM(CMAR)->CMDR

把下一条微指令取出并送入到CMDR;

微指令bit0100…000

对应1个微操作:MMAR->MDR

5

AD(CMDR) ->CMAR

把CMDR中的下地址部分P+2送入CMAR;

形成下一条微指令地址;

6

CM(CMAR)->CMDR

把下一条微指令取出并送入到CMDR;

微指令bit0000001…000

对应1个微操作:MDR-> ACacc寄存器);

7

AD(CMDR) ->CMAR

把CMDR中的下地址部分M送入CMAR;

形成下一条微指令地址;

地址M是取指微程序首地址;


【2.3.3】取指阶段:执行取指微程序

每条指令的执行过程,都需要执行取指微程序,执行微程序;循环往复;
取指微程序把微指令从控制存储器中取出;执行微程序完成了这条微指令所需要的全部微操作命令;

1)微指令的格式: 操作控制(bit位)_顺序控制;

  • 微操作是由微指令的操作控制部分给定的;
  • 微操作顺序是由微指令的顺序控制部分给定的(下一条微指令的地址);

2)微指令的取指过程:实际上是把这些微指令从控制存储器中读出来;
3)微程序的执行过程:根据微指令的bit位的有效微操作(bit=1),给出相应控制信号,做相应操作就可以了;

4)用微程序设计控制器有2个关键问题

  • 问题1: 微指令的操作控制字段如何形成微操作命令;
  • 问题2: 微指令的后续地址(下一条微指令地址)如何形成?;

【3】微指令的编码方式(控制方式)

【3.1】直接编码方式(重点)

直接编码(直接控制)方式:在微指令的操作控制字段中,每一位都代表一个微操作命令;某位为1表示该控制信号有效;

【3.2】字段直接编码方式(显式编码)

字段直接编码方式(显式编码): 把微操作分为若干组(段),然后组内编码(每组或段译码后发出控制信号);这种方式缩短了微指令字长,但增加了译码时间;

 上图有3组,组内控制信号互斥,组间不互斥,可以并行执行;

【3.3】字段间接编码方式(隐式编码)

字段间接编码方式(隐式编码):本组的控制信号还依赖于其他组的控制信号;


【4】微指令的下地址如何形成

 

1)微指令序列地址的形成

  • 方法1: 微指令的下地址给出;
  • 方法2: 根据机器指令的操作码形成(根据操作码获取微指令);
  • 方法3: 增量计数器;
  • 方法4: 分支转移(微指令的转移);
  • 方法5:通过测试网络;
  • 方法6: 由硬件产生微程序入口地址;

【4.7】后续微指令地址形成方式及原理图

 步骤1:多路选择部件选择下一条微指令地址;来源有5种,如下:

  • 1)上一条微指令的下地址;
  • 2)机器指令的操作码部分(注意是机器指令而不是微指令)经过微地址形成部件生成微指令地址;
  • 3)CMAR加1;
  • 4)硬件产生的微程序入口地址;
  • 5)转移指令的分支逻辑;

步骤2:多路选择部件生成下一条微指令地址,送入CMAR;
步骤3:CMAR把微指令地址送入地址译码器;经过译码把微指令地址送入控制存储器;
步骤4:把CMAR指定的控制存储器存储单元的微指令读取到CMDR寄存器中;
步骤5CMDR根据微指令的操作控制部分(01bit位)发出控制信号(微操作控制信号),控制计算机部件完成操作;

注意:是CMDR控制存储器数据寄存器根据微指令的操作码bit位(bit=1)发出控制信号,以完成微指令的微操作;


【5】微指令格式

微指令格式:

  • 1)水平型微指令:一次能定义并执行多个并行操作(重点);  
  • 2)垂直型微指令:一次只能定义一个操作;由微操作地址码字段规定微指令的功能;

水平型微指令与垂直型微指令比较


【6】静态微程序设计和动态微程序设计

【7】毫微程序设计

静态微程序设计:微程序无需改变,采用ROM随机只读存储器;(指令集无法修改);
动态微程序设计:可以修改或扩展计算机系统的指令集,如增加新指令;有利于指令仿真,采用EPROM


 【8】串行微程序控制和并行微程序控制(微指令流水线-非常重要)

串行微程序控制和并行微程序控制:
串行微程序控制: 一次只能执行一条微指令;
并行微程序控制: 微程序流水线,1个指令周期可以执行多个微指令(微指令流水线技术,非常重要)


 【9】微程序设计举例

【9.1】机器指令对应的微操作

【9.1.1】取指阶段微操作分析

取指阶段的3条微指令:

时钟周期

微指令对应的微操作命令

T0

PC->MAR  1->R

T1

M(MAR) -> MDR  (PC)+1 -> PC

T2

MDR -> IR   OP(IR) -> 微地址形成部件


【9.1.2】取指阶段微操作及节拍安排

时钟周期

微指令对应的微操作命令

微指令地址

T0

PC->MAR  1->R

微程序的首地址(微指令),由硬件PC给出;

执行微指令,即2个微操作;

在执行的同时,把下一条微指令读到CDMR;

T1

Ad(CDMR) -> CMAR

把CMDR中的微指令的下地址部分送入 CMAR

(先保存下一条微指令地址,然后再执行本条微指令,即T2)

T2

M(MAR) -> MDR

(PC)+1 -> PC

执行微指令,即2个微操作;

在执行的同时,把下一条微指令读到CDMR;

T3

Ad(CMDR) -> CMAR

把CMDR中的微指令的下地址部分送入 CMAR

(先保存下一条微指令地址,然后再执行本条微指令, 即T4)

T4

MDR -> IR OP(IR) -> 微地址形成部件

执行微指令,即2个微操作;

在执行的同时,把下一条微指令读到CDMR;

T5

OP(IR)-> 微地址形成部件 -> CMAR

进行到执行阶段,我们要执行的微指令在控存中的地址单元是什么;

IR中的指令操作码部分送给微地址形成部件,由微地址形成部件确认这条指令是微指令集的哪条指令?


【9.1.3】执行阶段的微操作及节拍安排

需要考虑:执行阶段的微程序的最后一条微指令的下地址是M(取指微指令,或取指微程序入口地址); 

Ad(CMDR) -> CMAR :是为了取下一条微指令(非常重要);
ADD :加法指令;
STA: 存数指令;
LDA: 取数指令;

小结:控制器CU在 T0 T2 T4 执行微指令(微操作)的同时在读取下一条微指令(下一条微指令地址由蓝色指令给出,T1 T3 T5)

【小结】
以上10条指令,共计20种微操作,共计有38条微指令;
如果采用水平编码,20种微操作就需要20个bit;
而微指令的地址码大小(下地址部分)需要寻址,所以与控制存储器的大小相关;我们微指令有38条,则控制存储器38个单元就够了;


【9.2】那应该如何确定微指令的格式呢?

2.1)微指令的编码方式:

  • 采用直接编码;1个bit位代表一种微操作;

2.2)后续微指令的地址形成方式:

  • 由机器指令的操作码通过微地址形成部件给出;
  • 由微指令的下地址字段给出;

2.3)微指令字长 :

  • 由20个微操作,确定操作控制字段,最少20位;因为每个bit位代表一种操作控制信号;
  • 由38条微指令:需要寻址,所以微指令的下地址字段需要6位;
  • 所以微指令字长为 20+6 = 26个bit位;

2.4)微指令字长的确定

38条微指令中,关于生成后续(下一条)微指令地址的微指令,即 Ad(CMDR)-> CMAR 有19条;
若把 Ad(CMDR) 直接送入控制存储器的地址线,省去了送入 CMAR的时间,省去了 CMAR
同理: OP(IR) -> 微地址形成部件 -> 控存地址线

这样可以省去19条微指令,2条微操作;
所以 38-19=19条微指令(5位可以寻址)  ; 20-2-=18条微操作;

虽然只有18个操作控制信号,19条微指令(5位bit寻址即可),但我们可以进行扩展;
如 18位扩展到24位操作控制信号,5位扩展到6位微指令地址寻址,共计30位
;剩余的操作控制信号和微指令留给未来使用;


【9.3】 编写微指令码点

 1)取指阶段各bit表示:

  • 取指阶段00(第1个节拍或时钟周期):0号bit的微操作表示PC-> MAR ;1号bit的微操作表示 1 -> R ;(所以0号和1号微操作的bit位等于1)
  • 取指阶段01(第2个节拍或时钟周期):2号bit的微操作表示 M(MAR) -> MDR ; 3号bit的微操作表示 (PC) + 1 -> PC ;
  • 取指阶段10(第3个节拍或时钟周期):4号bit的微操作表示 MDR -> IR ;

2)执行指令:
CLA : 清零;
COM: 取反;
ADD : 加法指令包括3个微指令;

  • 微指令1(2个微操作):IR的操作数有效地址送入MAR ;并发出读信号给主存(行10 1号bit和10号bit等于1)
  • 微指令2(1个微操作):从MAR指定的内存单元读出操作数,并送入MDR(行11 2号bit等于1)
  • 微指令3(1个微操作): 将两个操作数相加,结果存入ACC寄存器;

LDA:把数据从内存取出,送入寄存器;

  • 微指令1:IR中指令的地址码部分送入MAR; 并发出读信号给主存;(行16 1号bit和10号bit等于1)
  • 微指令2: 把内存单元数据取出,送入MDR;所以2号微指令的bit位等于1;(行17 1号bit等于1)
  • 微指令3: 把MDR数据送入ACC寄存器; 所以某号微指令的bit位等于1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务的误读与误解

微服务确实很受欢迎,但是对于微服务的误解也是事实,本文对这些误解一一来介绍下: 一、微服务不够“微”? 尽管微服务定义的很明确,但是开发者社区对它的解释却颇有争议,主要的一些问题如下: 1.它是否是单体架构的代表…

Hibernate注解(二)之映射简单的属性

翻译自 Hibernate Annotations2. 映射简单的属性 2.1.声明基本的属性映射每个非静态非瞬态属性(取决于访问类型的字段或方法)都被认为是持久性的,除非您将其注释为Transient。没有为您的财产注释等同于适当的 Basic注释。该Basic 注释允许…

进程与服务的签名_苹果app签名需要注意哪几点

现在部分的智能手机系统设备和工作一个应用软件,都需求证书的签名认证。未经任何签名的程序是不能在智能手机上设备和工作的。验证签名的底子进程则:智能手机操作系统或软件渠道对收到的原始数据选用相同的杂凑运算得到消息摘要,将与被签署时分的消息摘要…

8.4-中断系统

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2.采用一问一答的方式对中断进行总结(中断7问题),refer2 8.4-中断系统小结&…

ASP.NET Core的配置(1):读取配置信息

提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置信息定义在这两个文件之中。到了.NET Core的时候,很多我们…

EL调用java方法

一、jstl函数 jstl函数自定义二、调用方法的值成变量 第一种使用request对象 <% request.setAttribute(“isOperate”,isShowOperate()); %> 第二种使用标签变量 <c:set var"isOperate" value"<%isShowOperate()%>" />转换成变量使用<…

wordcloud python3.7_[原创]win7/64位系统+python3.7.2下安装wordcloud库失败之解决——一个莫名其妙的方法...

当前环境&#xff1a;win7/64位系统python3.7.2pip-19.2.1使用pip install wordcould安装时出现错误&#xff0c;提示&#xff1a;尝试方法①&#xff1a;考虑更换其他安装源提示没有变化&#xff0c;仍然提示没有找到分发版本-----------强行插入的分割线-------------------(…

1-计算机系统概论

【README】 本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1.1】计算机软硬件概念 【1.2】计算机层次结构 【2】计算机基本组成 【2.1】冯诺依曼计算机特点&#xff08;重要*&#…

JetBrains 加入 .NET 基金会

在 BUILD 大会上&#xff0c;微软正式对外宣布&#xff0c;JetBrains 已经加入 .NET 基金会&#xff0c;详细情况可以查看 .NET Foundation 博客。 JetBrains 因为用户推荐、ReSharpe、ReSharper Ultimate 套件等原因&#xff0c;在 .NET 平台投入大量资源。而现在&#xff0c…

jstl中添加自定义的函数

转载自 jstl中添加自定义的函数由于jstl中提供的函数未必能够满足我们的要求&#xff0c;而我们又希望能够像jstl提供的函数那样能够轻松方便使用&#xff0c;那么可以通过自定义函数补充jsltl函数。给jstl添加自定义函数需要以下步骤&#xff1a;定义一个static的public的方…

多智能体强化学习_基于多智能体强化学习主宰星际争霸游戏

大家好&#xff0c;今天我们来介绍基于多智能体强化学习主宰星际争霸游戏这篇论文Grandmaster level in StarCraft II using multi-agent reinforcement learning​doi.org从Alphastar以后 利用强化学习的方法进行星际争霸2AI的又一大突破。Part1 前言游戏介绍(Introduction to…

2-计算机发展及应用

【README】 本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】计算机发展史 【1.1】计算机的产生和发展 【1.2】微型计算机的出现与发展 芯片上的晶体管的数量 与 cpu速度间 有没有关…

ASP.NET Core的配置(2):配置模型详解

在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式&#xff0c;其中涉及到三个重要的对象&#xff0c;它们分别是承载结构化配置信息的Configuration&#xff0c;提供原始配置源数据的ConfigurationProvider&#xff0c;以及作为“中间人”的ConfigurationBuilder。…

Mysql的安装与远程登录

一、安装 &#xff08;1&#xff09;linux版A.linux普通版http://www.jb51.net/article/104107.htmB.ubuntu版 1.安装 sudo apt-get install mysql-server apt-get isntall mysql-client sudo apt-get install libmysqlclient-dev2.设置密码cd /etc/mysql vi debian.cnf ,得…

sqlserver如何定义一个静态变量_[Bazel]自定义规则实现将多个静态库合并为一个动态库或静态库...

1 前言2 自定义规则实现2.1 规则功能2.2 实现规则的理论基础2.3 规则代码实现3 总结4 参考资料1 前言为了实现如标题所述的将多个静态库合并为一个动态库&#xff0c;内置的 Bazel 规则是没有这个功能的&#xff0c;Bazel C/C 相关的内置规则有&#xff1a;cc_binary &#xff…

(转)base64编码(严格说来,base64不算作加解密算法)

【README】 1.本文转自&#xff1a; Java base64加密解密 - xuwc - 博客园参考&#xff1a; https://www.cnblogs.com/luguo3000/p/3940197.html https://blog.csdn.net/jiahao1186/article/detailhttps://www.cnblogs.com/xuwc/p/14058183.htmlhttps://zh.wikipedia.org/wik…

JavaWeb的web.xml标签元素(一)

普通信息标签 &#xff08;1&#xff09;display-name 定义了WEB应用的名字,在servletContextConfig display-name* XML语法&#xff1a;<display-name>AppName</display-name> &#xff08;2&#xff09;description 可以使用description元素来提供有关部署描述符…

python3多线程第三方库_Python3 多线程

Python3 多线程多线程类似于同时执行多个不同程序&#xff0c;多线程运行有如下优点&#xff1a;使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人&#xff0c;比如用户点击了一个按钮去触发某些事件的处理&#xff0c;可以弹出一个进度条来显示…

采用MiniProfiler监控EF与.NET MVC项目

今天来说说EF与MVC项目的性能检测和监控&#xff0c;相对本篇文章&#xff0c;更推荐大家使用另一个类似组件 NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC MiniProfiler是Stack Ove…

(转)公钥,私钥和数字签名这样最好理解

转自&#xff1a; 公钥&#xff0c;私钥和数字签名这样最好理解_21aspnet的博客-CSDN博客_公钥签名还是私钥签名一、公钥加密 假设一下&#xff0c;我找了两个数字&#xff0c;一个是1&#xff0c;一个是2。我喜欢2这个数字&#xff0c;就保留起来&#xff0c;不告诉你们(私钥…