问答题
某计算机字长为16位,主存地址空间大小为128KB,按字编址。采用单字长指令格式,指令各字段定义如下:
问答题
该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器?存储器地址寄存器(MAR)和存储器数据寄存器(MDR)至少各需多少位?
【正确答案】因为采用单字长指令格式,操作码字段占4位,所以最多有16条指令;指令中通用寄存器编号占3位,所以最多有8个通用寄存器;因为主存地址空间大小为128KB,按字编址,故共有64K个存储单元,因而地址位数为16位,所以MAR至少为16位;因为字长为16位,所以MDR至少为16位。
【答案解析】
问答题
转移指令的目标地址范围是多少?
【正确答案】因为地址位数和字长都为16位,所以PC和通用寄存器的位数均为16位,两个16位数据相加其结果也为16位,即转移目标地址位数为16位,因而能在整个地址空间转移,即目标转移地址的范围为0000H~FFFFH。
【答案解析】
问答题
若操作码0010B表示加法操作(助记符为add),寄存器R4和R5的编号分别为100B和101B,R4的内容为1234H,R5的内容为5678H,地址1234H中的内容为5678H,地址5678H中的内容为1234H,则汇编语句“add(R4),(R5)+”(逗号前为第二源操作数,逗号后为第一源操作数和目的操作数)对应的机器码是什么(用十六进制表示)?该指令执行后,哪些寄存器和存储单元的内容会改变?改变后的内容是什么?
【正确答案】要得到汇编语句“add(R4),(R5)+”对应的机器码,只要将其对应的指令代码各个字段拼接起来即可。显然,add对应OP字段,为0010B;(R4)的寻址方式字段为001B,R4的编号为100B;(R5)+的寻址方式字段为010,R5的编号为101B;所以,对应的机器码为0010 001100 010 101B,用十六进制表示为2315。
指令“add(R4),(R5)+”的功能为M[R[R5]]←M[R[R5]]+M[R[R4]],R[R5]←R[R5]+1。已知R[R4]=1234H,R[R5]=5678H,M[1234H]=5678H,M[5678H]=1234H,因为1234H+5678H=68ACH,所以5678H单元中的内容从1234H改变为68ACH,同时R5中的内容从5678H变为5679H。
【答案解析】
问答题
今有3个并发进程R、M和P,互斥使用一个可循环使用的缓冲区B,缓冲区B共有n个单元(n>0)。进程R负责从输入设备读信息,每读一个字符后,把它们存放在缓冲区B的一个单元中,进程M负责处理读入字符,若发现读入的字符中有空格,则把它改变成“;”;进程P负责把处理后的字符取出并打印输出。当缓冲区单元中的字符被进程P取出后,又可用来存放下一次读入的字符。请添加必要的信号量和P、V(或wait()、signal())操作,实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。
【正确答案】本题还是一个生产者-消费者的变型,与2009年真题不同之处在于,2009年真题是一个生产者,对应两个消费者;本题是生产者-消费生产者-消费者类型,其实质是两个生产者-消费者关系。R是生产者,M是对应消费者,同时M也充当生产者,P是对应的消费者。把这些进程间的关系理清楚,是解题的基础。
本题的缓冲区B可描述为
char bufferB[n];
(1)缓冲区是-互斥资源,因此设互斥信号量mutex。
(2)上述进程的同步问题,需设置3个信号量,其中empty对应空闲的缓冲单元,初值为n;full_1对应缓冲区中待M处理的字符,初值为0;full 2对应缓冲区中已经处理过而待打印输出的字符,初值为0。另外,还需定义3个整型变量in、out 1、out 2,分别用来指示下一个可存放字符的缓冲单元、下一个待M处理的缓冲单元及下一个待打印输出的缓冲单元,它们的初值均为0。过程如下:
char bufferB[n] //缓冲区字符数组
semaphore empty=n; //空闲缓冲单元数
semaphore full_1=0; //待M处理的字符数
semaphore full_2=0; //待P取出打印字符数
semaphore mutex=1; //缓冲区的互斥访问信号量
int in=0; //指示可存放字符的缓冲单元
int out_1=0; //指示下一个待M处理的缓冲单元
int out_2=0; //指示下一个待P取出打印的缓冲单元
R()
{
char ch;
whiie(1)
{ 从输入设备读取一个字符到ch中;
P(empty); //检查缓冲区是否有可以存放新读入字符的缓冲单元
P(mutex); //申请访问缓冲区
bufferB[in]=ch; //存放新读入字符的缓冲单元
V(mutex); //释放缓冲区
V(full_1); //待M处理的字符数增1
in=(in+1)%n; //in指针后移,遇末循环到0单元
}
}
M() //读者可参照R()自行写出注释
{
while(1)
{
P(full_1);
P(mutex);
if(bufferB[out_1]==' ')
buffer[out_1]=';';
V(mutex);
V(full_2);
out_1=(out_1+1)%n;
}
}
P() //读者可参照R()自行写出注释
{
char ch
while(1)
{
P(full_2);
P(mutex);
ch=bufferB[out_2];
V(mutex);
V(empty);
out_2=(out_2+1)%n; 将字符ch打印输出;
}
}
【答案解析】[解析] 同步和互斥的解题思路为
(1)分清哪些是互斥问题(互斥访问临界资源的),哪些是同步问题(具有前后执行顺序要求的)。
(2)对互斥问题要设置互斥信号量,不管具有互斥关系的进程有几个或几类,通常都只设置一个互斥信号量,且初值为1,代表一次只允许一个进程对临界资源访问。
(3)对同步问题要设置同步信号量,通常同步信号量的个数与参与同步的进程种类有关,即同步关系涉及几类进程,就有几个同步信号量。同步信号量表示该进程是否可以开始或该进程是否已经结束。
(4)在每个进程中用于实现互斥的PV操作必须成对出现;用于实现同步的PV操作也必须成对出现,但可以分别出现在不同的进程中;在某个进程中如果同时存在互斥与同步的P操作,则其顺序不能颠倒,必须先执行对同步信号量的P操作,再执行对互斥信号量的P操作,但V操作的顺序没有严格要求。