问答题 某计算机字长为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操作的顺序没有严格要求。