阅读以下关于数据采集与处理系统的说明,回答下列问题。
[说明] 某公司承接了一个数据采集与处理系统的项目,由刘工负责系统的方案设计,刘工的设计方案如图1所示。该方案是基于PCI总线的多功能处理系统,PCI设备1是以太网,PCI设备2用于数据采集,PCI设备3、PCI设备4用于和该系统中的其他处理模块进行互联,LEGACY设备1、LEGACY设备2用于处理系统中一些慢速设备。
1、在以下描述PCI总线的基本概念中,正确的表述有______、______、______、______、______、______。 A.PCI总线是一个与处理器有关的高速外围总线 B.PCI总线的基本传输机制是猝发式传送 C.PCI设备一定是主设备 D.PCI的物理地址与其他总线一样,是由内存地址空间和I/O地址组成 E.PCI设备的地址译码不能对配置空间直接寻址 F.PCI设备识别主要是对开发商代码和设备代码进行识别 G.访问配置空间时,PCI桥应提供IDSEL信号以选择PCI设备 H.系统中只允许有一条PCI总线 I.PCI总线是高速串行总线 J.PCI总线有3种桥,即HOST/PCI桥,PCI/PCI桥,PCI/LEGACY桥 K.PCI桥是可以把一条总线的地址空间映射到另一条总线的地址空间
2、PCI设备2和主CPU之间采用双口RAM方式交换数据,双口RAM是常见的共享式多端口存储器,其最大的特点是存储数据共享。它允许两个独立的CPU或控制器同时异步访问存储单元。既然数据共享,就必须存在访问仲裁控制,否则就会出现错误或冲突。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配;信令交换逻辑(例如中断信号)等。 两个端口对同一内存操作有4种情况: A.两个端口同时对同一地址单元读出数据; B.两个端口同时对同一地址单元写入数据; C.两个端口不同时对同一地址单元存取数据; D.两个端口同时对同一地址单元,一个写入数据,另一个读出数据。 在上述情况下,两个端口的存取不会出现错误的是______和______,会出现写入错误的是______,会出现读出错误的是______。
3、PCI设备2和主CPU之间通过双端口存储器进行数据交换。刘工设计了环形队列的实现方式。设备2向环形队列写入数据,主CPU从环形队列读取数据。环形队列是一个首尾相连的FIFO数据结构,采用数组存储,到达尾部时将转回到0位置,该转回是通过取模操作来实现的。因此环形队列逻辑上是将数组元素q[0]与q[MAX-1]连接,形成一个存放队列的环形空间。
为了方便读写,还要用数组下标来指明队列的读写位置,其中head指向可以读的位置,tail指向可以写的位置,环形队列如图2所示。
使用环形队列时需要判断队列为空还是为满。当tail追上head时,队列为满,当head追上tail时,队列为空。
通常判断环形队列为空/为满有两种判断方法。
(1)附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1;
(2)限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间。队列空:head==tai;队列满:(tail+1)%MAXN==head。 如果采用第一种方法(即附加标志实现算法),则环形队列的结构定义如下: typedef struct ringg { int head; /*头部,出队列方向*/ int tail; /*尾部,入队列方向*/ int tag; int size; /*队列总尺寸*/ int space[RINGQ_MAX]; /*队列空间*/ }RINGQ; RINGQ p, *q; q=&p; 初始化环形队列的C语言代码为: q->head=q->tail=q->tag=0; q->size=RINGQ_MAX; 判断队列为空的C语言代码为______。 判断队列为满的C语言代码为______。 入队操作时,如果队列不满,则入队后更新尾指针的C语言代码为q->tail=______。出队操作时,如果队列不空,则出队后更新头指针的C语言代码为q->head=______。如果采用第二种方法,还采用上述数据结构,初始化环形队列的C语言代码为: q->head=q->tail=0; q->size=RINGQ_MAX; 判断队列为空的C语言代码为______。 判断队列为满的C语言代码为______。 入队操作时,如果队列不满,则入队后更新尾指针的C语言代码为q->tail=______。 出队操作时,如果队列不空,则出队后更新头指针的C语言代码为q->head=______。