首页 > 其他分享 >微机原理(二)

微机原理(二)

时间:2023-04-17 14:44:06浏览次数:34  
标签:总线 地址 overline 微机 指令 寄存器 原理 CPU

第二章:微处理器与总线

微型计算机组成

传统电子计算机由五大部分组成:运算器、控制器、存储器(内部存储器、外部存储器)、输入设备、输出设备。

外部设备:外部存储器、输入出设备。

主机:运算器、控制器、、内部存储器。

(微处理器)中央处理器(CPU):运算器、控制器。

微处理器(CPU)

简称\(\mu P\),内部集成了控制器、运算器和若干高速存储单元(寄存器)。

控制器 运算器(ALU) 寄存器
指令寄存器+指令译码器+控制电路
主要负责指令译码和执行 主要负责算术或逻辑运算及位移操作 主要用来存放经常使用的数据
存储器

该处存储器主要指内存:用来存放数据与程序;每个内存单元规定存放8位二进制数,每个内存单元都用一个地址来标识。

读操作:image-20230111093334388

CPU发送地址信息\(\Rightarrow\)地址总线传输地址信息到存储其译码电路\(\Rightarrow\)译码后选中对应存储单元\(\Rightarrow\)CPU发送读控制命令\(\Rightarrow\)选中内容被读出并传输到数据总线上。

写操作:

image-20230111093756107

CPU发送地址信息\(\Rightarrow\)地址总线传输地址信息到存储其译码电路\(\Rightarrow\)译码后选中对应存储单元\(\Rightarrow\)CPU发送写控制命令\(\Rightarrow\)通过数据总线将数据写入对应存储单元

I/O接口

CPU与I/O设备间的连接信息交换不能直接进行,必须通过中间部件作为两者之间的桥梁,即I/O接口。

总线

按传送方向:

单向总线 双向总线
只能向一个方向传送信息 在两个方向传送信息

按传送信息:

地址总线(AB) 数据总线(DB) 控制总线(CB)
用于传送CPU发送地址信息(单向) 传送数据信息(双向) 传送控制信号、时序信号、状态信息。
目的指明与CPU信息交换的内存单元或I/O设备 数据总线宽度与CPU处理数据字长相同
微型计算机

以微处理器为核心,配上存储器、输出入接口电路以及总线组成的计算机。

单片机:微处理器、存储器、输入出接口集成到一块芯片上。

微型计算机系统

image-20230111101526981

微处理器基本结构

image-20230111141015904
运算器

(Arithmetic Logic Unit)ALU逻辑运算单元:主要负责算术逻辑运算及位移操作。

ALU有两输入两输出

累加器A(输入) 内部数据总线(输入)
总线内容可老子数据寄存器(DR)也可来自寄存器阵列(RA)中的某个寄存器
内部数据总线(输出) 标志寄存器(FR)
将运算结果送回内部总线,再送回累加器A(在A中暂存) 传输运算结果特征的标志信息
控制器

由指令寄存器、指令译码器、定时及产生各种控制信号的控制逻辑单元组成。

指令寄存器(IR):用于存放从存储器取出的要指令的指令。
指令译码器(ID):对IR的指令进行译码,以确定该指令要执行的操作。
可编程逻辑阵列(PLA):又称定时与控制电路,用于产生取指令和执行指令所需的各种微操作控制信号。
寄存器阵列

通常包括若干通用寄存器或专用寄存器。

累加器(A):与ALU配合完成各种算术逻辑运算,运算前作为ALU的输入,运算后用来保存结果;指令操作下,可对累加器中的内容进行位移、比较及各种运算。CPU对I/O接口的读写一般也通过累加器进行。
数据寄存器(DR):用于暂存数据或指令,(读存储器时若读出为指令,先暂存入DR再由内部数据总线送到IR;若读出为数据,通过内部总线送到有关寄存器或运算器)
程序计数器(PC):又称指令地址寄存器,用于存放正待取出的指令地址。PC总指向下一条指令。 改变程序为非顺序执行称为转移。
地址寄存器(AR):用于存放正要取出的指令或操作数地址。(取指令时,将PC中存放的指令地址送到AR中,再根据此地址取指令)(取操作数时,操作数地址通过内部数据总线送到AR,再根据此地址从存储器中取操作数)
标志寄存器(FR):用于存放运算产生的进位、溢出、全零、符号及奇偶性等状态变化。

8086微处理器

内部结构

image-20230112105734436
总线接口部件(BIU)

由段寄存器(CS,DS,SS,ES),指令指针寄存器(IP),地址加法器,指令队列缓冲器,总线控制电路组成。

主要任务:

  1. 形成访问存储器或I/O端口的物理地址。
  2. 从内存的代码段中取指令送到指令队列缓冲器中。
  3. 读取操作参数参加EU运算或存放运算结果到指定地址。

指令队列缓冲器:(8086为6个字节)(8088为4个字节),在EU执行指令的同时,会从内存中取下指令,并采用(先进先出)FIFO原则,操作原则如下。

  1. 指令队列缓冲器中存满1条指令后,EU立即开始执行。
  2. 指令队列缓冲器中只要空出(2个->8086)(1个->8088)是BIU自动执行取指令操作,直到填满为止。
  3. EU执行的指令需要对存储器或I/O设备存取数据时,BIU在执行完当前总线周期的下一周期对指定内存单元或I/O设备进行存取操作,数据经BIU交由EU处理。
  4. 当EU执行完转移、跳转(如Jump)指令时,要消除指令队列缓冲器,并要求BIU从新的地址重新开始取指令,新取得第一条指令直接经过指令队列送去EU执行,后取的填入指令队列缓冲器。

地址加法器和段寄存器

作用是形成20位的物理地址(把逻辑地址变换为物理地址,采用"段加偏移"技术),以便访问1MB的存储单元。

总线控制电路

将8086/8088CPU的内部总线与外部总线相连,包括16条数据总线,20条地址总线和若干条控制总线。

执行部件EU

EU主要由算术逻辑部件(ALU)、通用寄存器组(AX,BX,CX,DX,SP,BP,DI,SI)、状态寄存器(F)、EU控制电路组成,且与外部总线无联系。

主要任务:

  1. 从BIU的指令队列缓冲器中取指令进行译码、执行。
  2. 负责所有算术、逻辑运算及16位偏移地址计算。
  3. 向BIU提供指令的执行结果和16位偏移地址。

算术逻辑运算单元(ALU)

完成16位或8位的二进制运算,运算结果通过内部总线送到BIU的内部寄存器,等待写入存储器。

16位暂存器用来暂存参加运算的操作数,把ALU运算的结果特征(进位、溢出等)置入标志寄存器F中。

EU控制电路

是控制、定时、状态逻辑电路,接收从BIU中指令队列取来的指令,经过指令译码形成各种定时控制信号,对EU的各个部件实现特定的定时操作。

寄存器组

image-20230112142155378
通用寄存器

数据寄存器:4个16位寄存器AX,BX,CX,DX,又可以拆分位低八位和高八位寄存器。

特定用途:

AX(Accumulater):作累加器
BX(Base Register):作基址寄存器(用来存放一个数据区的基地址(首地址))
CX(Count Register):作计数寄存器(用来存放数据串元素的个数)
DX(Data Register):作数据寄存器(可在除法中存放余数)

指针寄存器和变址寄存器

SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):堆栈基址指针寄存器
SI(Source Index):指源变址寄存器
DI(Destination Index):目的变址寄存器
段寄存器
CS(Code Segment):代码段寄存器,用于存放当前代码段的段地址
DS(Data Segment):数据段寄存器,用于存放当前数据段的段地址
SS(Stack Segment):堆栈寄存器,用于存放当前堆栈段的段地址
ES(Extra Segment):附加段寄存器,用于存放当前附加段的段地址

控制寄存器

指令指针寄存器(IP):用于存放BIU要取出的下一条要执行指令的段内偏移地址,实现对代码段指令的跟踪。

标志寄存器(F):image-20230115140934758

状态标志位

CF(Carry Flag):进位标志,产生进位时CF=1,计算方法CF=最高位进位XORSUB(减法SUB=1,加法SUB=0)
PF(Parity Flag):奇偶标志,结果的低八位“1”的个数为偶数时,PF=1
AF(Auxiliary Carry Flag):辅助进位标志,D3位向D4位有进位或借位时AF=1
ZF(Zero Flag):零标志,表示一个算术或逻辑运算的结果是否为0
SF(Sign Flag):符号标志,运算结果的最高位为1,则SF=1,反之SF=0
OF(Overflow Flag):溢出标志,带符号数运算时是否产生了算术溢出(超出计算机表示数的范围)。补码运算OF=最高位进位XOR次高位

控制标志位

DF(Direction Flag):方向标志,用于字符串处理指令操作。DF=1变址寄存器地址自动递减,DF=0时变址寄存器自动递增。
IF(Interrupt-enable Flag):中断允许标志,用于控制CPU可屏蔽中断。IF=1允许中断,IF=0禁止中断。
TF(Trap Flag):单步陷阱标志(单步工作标志),用于控制单步中断。TF=1,CPU进入单步工作模式,TF=0时CPU正常执行程序。

引脚信号及功能

8086与8088之间的差别:8086有16个地址/数据复用引脚,8088只有8个地址/数据复用引脚。

最大模式:系统中通常含有两个或多个微处理器,除了8086/8088以外的处理器可以是协处理器或I/O处理器。

最小模式:系统中只有8086/8088一个微处理器。

image-20230115161308313

括号内为最大模式下重定义的名称。

\(AD_0-AD_{15}\)分时复用的地址/数据总线,传输地址时以三态输出,传输数据时以双向三态输入/出
\(A_{19}/S_6-A_{16}/S_3\)分时复用的地址/状态总线,T1状态输出最高4位,T2-T4状态输出状态信息
\(\overline{BHE}/S_7(Bus-High-Enable/Status)\):高8位数据总线允许/状态复用引脚
\(\overline{RD}(Read)\):读信号\(\overline{RD}=0\)时表示CPU将要执行一个对存储器或I/O端口的读操作(取决于\(M/\overline{IO}\))
\(READY\):输入(高电平有效),准备就绪信号,解决CPU与慢速存储器或I/O的同步问题,在总线周期的\(T_3\)周期开始采样\(READY\)引脚,,若为低电平,在\(T_3\)结束后加入若干\(T_W\)个等待周期
\(\overline{TEST}\):输入(低电平有效),与WAIT指令结合使用,CPU执行WAIT指令时每隔5个时钟对此引脚进行测试,引脚为高电平时继续执行WAIT指令,反之为低电平时执行WAIT的下一条指令
\(INTR(Interrupt-Request)\):可屏蔽中断请求信号,输入(电平触发,高电平有效),为高电平时代表外部设备向CPU申请中断,当中断允许为IF=1时,触发中断
\(NMI(Non-Maskable-Interrupt)\):非屏蔽中断请求信号,输入(边沿触发,高电平有效),不受中断允许标志位IF的限制
\(RESET\):复位信号,输入(高电平有效),高电平至少保持4个时钟周期
\(CLK\)时钟信号,8086/8088时钟频率为5MHZ
\(MN/\overline{MX}\)最小/最大模式控制信号,接5VCPU处于最小模式,反之为最大模式

最小模式部分引脚

\(\overline{INTA}\) :中断响应信号,输出(低电平有效),表示CPU响应了外设的可屏蔽中断
\(ALE\):地址锁存允许信号,(输出高电平有效)提供给锁存器8282/8283的控制信号,表示\(AD_0-AD_{15}\)输出的为地址信息
\(\overline{DEN}\):数据允许信号,\(\overline{DEN}=1\)时不能传送数据,DMA工作方式设置为高阻态。
\(DT/\overline{R}\):数据发送/接收控制信号,用于控制8286/8287(数据总线收发器)的传输方向,高电平数据发送,低电平数据接收,DMA工作方式设置为高阻态。
\(\overline{WR}\):三态输出,低电平有效,低电平时表示CPU进行存储器或I/O写操作,具体对象由\(M/\overline{IO}\)决定。
\(M/\overline{IO}\):三态输出,高电平表示CPU与存储器之间进行数据传输,低电平表示CPU与IO间进行数据传输
\(HOLD\):总线请求信号(输入,高电平有效),除CPU以外的其他主控部件要求占用总线时,通过此引脚向CPU发送一个高电平信号,若CPU允许让出总线控制线,在当前总线周期操作完成后,\(HLDA\)引脚送出一个高电平信号。
\(HLDA\):总线请求响应信号

\(A_{19}/S_6-A_{16}/S_3\):

访问I/O端口时,不使用这四条引线(A19A16=0),**状态信息S6=0用于表示8088/8086与总线相连**,故T2T4状态时S6=0,S5表示中断允许标志位IF的当前设置

image-20230117145113136

\(\overline{BHE}/S_7(Bus-High-Enable/Status)\)

\(\overline{BHE}\)在总线周期的\(T_1\)状态时输出,\(S_7\)在T2~T4时输出。\(\overline{BHE}/S_7\)输出\(\overline{BHE}\)信号时,表示总线高8位\(AD_{15}-AD_8\)上数据有效,同时可与A0一起产生存储器的选择逻辑信号。

\(RESET\)过程:CPU内部各寄存器被设置为初值(CS初始化为FFFH,其他寄存器均被初始化为0000H)

总线结构及总线周期时序

锁存器、总线控制器、收发器

8282/8283地址锁存器
image-20230125163259269
\(DI_0-DI_7\):数据输入端口 \(DO_0-DO_7\)数据输出端口
\(\overline{OE}\)三态输出的允许信号,低电平允许数据输出 \(STB\)选通脉冲,下降沿实现数据锁存
8288总线控制器

最大模式下8086/8088不直接产生总线控制信号

8288将8086送来的状态信号\(\overline{S_0}\)、\(\overline{S_1}\)、\(\overline{S_2}\),进行译码后,与输入控制信号\(\overline{AEN}、CEN、IOB\)结合产生总线命令和控制信号。

8288由状态译码器、命令信号发生器、控制信号发生器及控制逻辑四部分组成。

8288产生的ALE及DEN信号与最小模式方式时相同,但DEN信号的极性相反。

image-20230125165717607image-20230125165547907

引脚功能

8286/8287总线收发器
image-20230125165855043

引脚功能

\(T\)传送方向控制信号 \(\overline{OE}\)输出允许信号 状态
x 1 两个方向均不能传送数据
1 0 \(A_0-A_7\)输入端,\(B_0-B_7\)输出端
0 0 \(B_0-B_7\)输入端,\(A_0-A_7\)输出端

\(T\)引脚与8086数据收发信号\(DT/\overline{R}\)相连(\(DT/\overline{R}\)=1,数据写,\(DT/\overline{R}\)=0数据读)

\(\overline{OE}\)与数据允许信号\(\overline{DEN}\)相连(当CPU与存储器或者IO进行数据交换时\(\overline{DEN}\)=0)

总线收发器可以提高数据总线的负载能力。

系统总线结构

时钟周期(状态周期):CPU处理动作最小时间单位。

时钟信号作为CPU工作最小单位,所有功能以此为基准,8086/8088时钟信号频率为5MHZ,时钟周期T=200ns

总线周期(机器周期):CPU通过总线对存储器(I/O)端口进行一次读(或一次写)操作所需要的时间称为总线周期,一个基本总线周期由4个时钟周期组成。

image-20230125102113580

指令周期:一条指令从存储器取出到执行所需的时间称为指令周期(至少包含一个总线周期)。指令不同,指令周期也不同。

8086最小模式的系统总线结构

image-20230125142959495 image-20230126135409580
\(T_1\) 前半周期CPU将要访问的地址(存储器或外设)放入\(AD_0-AD_{15},S_3-S_6\),并将\(\overline{BHE}\)置为低电平(表示\(S_3-S_6\))允许使用;同时\(ALE\)置为高电平,在\(T_1\)的后半周期变为低电平。下降沿触发锁存器\(STB\)实现数据锁存。
\(T_2\) 前半周期结束地址输出,\(AD_0-AD_{15}\)变为高阻态,\(S_3-S_6,\overline{BHE}\)输出周期状态信息,持续到\(T_4\);\(\overline{RD}\)置低指示本周期进行读操作,\(\overline{DEN}\)置低数据允许传输,上述两个引脚持续到\(T_4\)开始
\(T_3\) 无变化
\(T_4\) 前半周期CPU从数据总线取走数据(\(T_3-T_4\)开始这段时间,从存储器或外设读出的数据应放在数据总线上,若数据未准备就绪,使CPU的\(READY\)线拉低,在\(T_3-T_4\)间插入若干个\(T_w\),直到数据准备就绪,使\(READY\)拉高,进入\(T_4\)周期)

\(M/\overline{IO}\):用于指示CPU对存储器/外设进行操作,在读总线周期内该引脚四个时钟周期内不发生变化。

\(DT/\overline{R}\):高电平\(Data-Transmit\),低电平\(Read\),在读总线周期内该引脚四个时钟周期内不发生变化。

image-20230126144234347
\(T_1\) 前半周期将要写入的地址放入\(AD_0-AD_{15},S_3-S_6\),并将\(\overline{BHE}\)置为低电平(表示\(S_3-S_6\))允许使用;同时\(ALE\)置为高电平,在\(T_1\)的后半周期变为低电平。下降沿触发锁存器\(STB\)实现数据锁存。
\(T_2\) 前半周期结束地址输出,\(AD_0-AD_{15}\)变为高阻态,\(S_3-S_6,\overline{BHE}\)输出周期状态信息,持续到\(T_4\);\(\overline{WR}\)置低指示本周期进行读操作,\(\overline{DEN}\)置低数据允许传输,上述两个引脚持续到\(T_4\)开始
\(T_3\) 无变化
\(T_4\) 存储器应在(\(\overline{WR},\overline{DEN}\)拉低到\(T_4\)的前半周期)内将数据从数据总线取走,否则通过\(READY\)线使\(CPU\)插入等待周期\(T_W\)

存储器管理

基本概述

位(Bit):计算机存储的一位二进制信息(0或1)

字节(Byte):每八位二进制信息组组成一个字节

字(Word):一字为16位二进制信息,由两个字节组成,高八位为高字节,低八位为低字节

image-20230126171940824

地址:存储器内以字节为单位存储信息,为了正确的存放与存储信息每一个单元给予一个存储器地址。

地址从0开始编号顺序每隔一个单元顺序加1。(计算机中,地址用二进制表示且为无符号数)

存储容量:存储单元的数目称为存储容量,存储容量大小与地址总线根数有关。计算机内以KB,MB为存储容量的一种基本单位,\(2^{10}=1024B=1KB,1024KB=1MB\)

8086/8088的字长为16位,一个字存入存储器有以下规定

  1. 一个字存入存储器要占有相继两个存储单元
  2. 存放时低八位字节存入低地址单元,高八位字节存入高地址存储单元
  3. 存储器中两字节单元组成一个字单元,字单元的地址采用低八位字节存储单元单元

非规则存放:存放字时,低八位字节在奇数地址开始存放,按该方式存放的字未非规则字

规则存放:存放字时,高八位字节在偶数地址开始存放,按该方式存放的字未规则字

对8086CPU规则字的存取可用一个总线周期完成,非规则字的存取需要两个总线周期

image-20230127150856305

存储器分段技术

8086/8088CPU采用了段加偏移技术使寻址范围达到1M字节。

分段技术:8086系统将1M字节存储器空间划分为若干逻辑段(最多包含64KB长的连续存储单元,最大段10000H=64KB)。

每一段的起始地址(段基址)为能被16整除的地址(即段首址的地址码的最低4位二进制数均为0)。

另外,一段的首地址的高16位称为该段的段地址,段地址分别由CS、SS、DS、ES四个段寄存器给出。

偏移地址:任意相邻两个段地址相距16个字节的存储单元(如\(0200H-0201H\),为两个段地址,相差\(0001H\)可表示16个字节存储单元),因段内最多可包含\(2^{16}=64KB\)存储空间,故段内任一存储单元的地址可以用相对于段首址的16位偏移量来表示。

物理地址(实际地址):任意存储单元对应的唯一20位二进制地址码

逻辑地址:用段地址及偏移地址指明某一内存单元的内存单元的地址,格式为:段地址:偏移地址

逻辑地址->物理地址

\[物理地址=段地址*16+偏移地址 \]

或,段地址左移四位+偏移地址

当某个单元段地址不变时,偏移地址也不会变。

如:image-20230127175931277

代码段占有\(8KB=2^{13}=10,0000,0000,0000B=2000H\),CS段基址为\(02000H\),尾地址为\(02000H+2000h=04000H\)

数据段占有\(2KB=2^{11}=1000,0000,0000B=800H\),DS段紧接CS尾地址\(04000H\),则尾地址为\(04000H+800H=04800H\)

堆栈段只有\(1KB=2^{10}=100,0000,0000B=400H\),SS段基址为\(04800H\),尾地址为\(04800H+400H=04C00H\)

分段存储

代码段CS 指令代码存放区,取指令时物理地址为\(CS*16+IP\)
堆栈段SS 以"后进先出"原则进行数据操作,用于暂时存放一批需要保护的数据或地址,物理地址为\(SS*16+SP\)
数据段DS 物理地址\(DS*16+寻址方式对应的16为地址\)
附加段ES

标签:总线,地址,overline,微机,指令,寄存器,原理,CPU
From: https://www.cnblogs.com/DELE/p/17325800.html

相关文章

  • 深度学习的基本原理和常用框架介绍
    深度学习是一种基于人工神经网络的机器学习方法,它可以从大量的数据中学习抽象和复杂的特征,从而实现各种智能任务,如图像识别、自然语言处理、语音识别等。深度学习的基本原理是利用多层的神经网络结构,通过前向传播和反向传播的算法,不断调整网络中的参数,使得网络的输出能够逼近或优......
  • rem、vw、vh、em原理汇总
    1.rem: rem是根据根元素的font-size大小来设置的,比如设置htmlfont-size=100px,那么1rem=100px,之后所有的元素都可以使用这个基准值来设置大小2.vw:视口宽度单位  1vw=1/100视口宽度,宽度全屏就是100vw3.vh:视口高度单位1vh=1/100视口高度,高度全屏就......
  • 【深度思考】聊聊JDK动态代理原理
    1.示例首先,定义一个接口:publicinterfaceStaff{voidwork();}然后,新增一个类并实现上面的接口:publicclassCoderimplementsStaff{@Overridepublicvoidwork(){System.out.println("认真写bug……");}}假设现在有这么一个需求:在不......
  • .NET无侵入自动化探针原理和主流实现
    前言最近,我在微信公众号和博客园分享了一篇关于.NET微服务系统迁移至.NET6.0的故事的文章,引起了许多读者的关注。其中,许多人对基于OpenTelemetry.NET的观测指标和无侵入自动化探针颇感兴趣。事实上,我已计划抽出时间,与大家分享这方面的内容。巧合的是,在二月末,我收到了来自Op......
  • Stable Diffusion(一)Stable Diffusion 原理
    StableDiffusion原理此文为译文,原文见:https://stable-diffusion-art.com/how-stable-diffusion-work/StableDiffusion是一个深度学习模型,我们会深入解析SD的工作原理。 1.StableDiffusion能做什么直白地说,SD是一个text-to-image模型,通过给定textprompt(文本提示词),它可......
  • Tomcat长轮询原理与源码解析
    系列文章目录和关于我零丶长轮询的引入最近在看工作使用到的diamond配置中心原理,发现大多数配置中心在推和拉模型上做的选择出奇的一致选择了基于长轮询的拉模型基于拉模型的客户端轮询的方案客户端通过轮询方式发现服务端的配置变更事件。轮询的频率决定了动态配置获取的实......
  • 计算机组成原理—存储器
    计算机组成原理—硬件结构二、存储器1.概述存储器是计算机系统中的记忆设备,用来存放程序和数据1.1存储器的层次结构缓存-主存层次主要解决CPU和主存速度不匹配的问题,速度接近缓存主存-辅存层次主要解决存储系统的容量问题,容量接近与价位接近于主存2.主存储器2.1概述主......
  • git合并代码原理
    背景:最近在做体测,当我将prod-wmj合并到我新建的test-physical分支上的时候,出现超出我认知范围的现象,所以我认为git的原理我们没有搞懂,还要搞搞。merge的时候红色部分并不是我理解的目标分支的代码,那就让我们来想想吧~操作:1、首先提出来问题,代码更改有几种形式?git又是怎么做的?如果你......
  • 预训练模型-从BERT原理到BERT调包和微调
     一、BERT原理BERT取名来自BidirectionalEncoderRepresentationsfromTransformers。架构为:预训练+fine-tuning(对于特定的任务只需要添加一个输出层)。1、引言      通过预训练语言模型可显著提高NLP下游任务。限制模型潜力的主要原因在于现有模型使用的都是单......
  • JUC之阻塞队列BlockingQueue的实现原理
    1.阻塞队列首先它是一个队列,是队列就会遵循先进先出(FIFO)的原则,又因为它是阻塞的,故与普通的队列有两点区别:A.当一个线程向队列里面添加数据时,如果队列是满的,那么将阻塞该线程,暂停添加数据。B.当一个线程从队列里面取出数据时,如果队列是空的,那么将阻塞该线程,暂停取出数据。2......