中国科学院软件研究所 一九九四年招收硕士学位研究生入学考试试题答案 试题名称:软件基础 操作系统部分: 一.填空 1.重名。 2.先进先出,最短作业优先,最高响应比优先。 3.操作系统。 4.界地址,存储键。 5.保持和请求,环路。 6.避免将被淘汰段不必要地写回外存,减少信息传输量。 7.执行,就绪,封锁(阻塞),进程调度。 二.判断 1.√ 2.× 3.× 4.× 5.× 三. 分页式 分段式  1 单一连续地址空间  三维地址空间  2 页是信息的物理单位  段是信息的逻辑单位  3 页的大小固定,由系统 划分,对用户透明  段长度不定,且可变, 用户可见  4 (不具有右边特点)  便于动态连接、存储保护, 便于增长、修改和共享  5 分配页面大小的空间  分配段大小的空间,为此 采用拼接技术   四.① P(S1) ② V(S1) ③ P(S2) ④ P(S1) ⑤ V(S1) S1是(消息链)互斥信号量,初值为1。 S2是(记录消息个数)同步信号量,初值为0。 语言与编译部分: 一. 二.拓广文法,加入新开始符号S’和产生式S’ S。 S’ S print(S.num) S (L) S.num:=L.num+1 S a S.num:=0 L L1,S L.num:=L1.num+S.num L S L.num:=S.num 三.必须有S aSb型的产生式,以保证b的个数不少于a的个数。还要 有S Sb或S bS型的产生式,以保证b的个数多余a的个 数。句子前缀中的a和后缀中的b的配对方式不同导致不同性质的文法。 二义文法: S aSb|Sb|b 例: ← 一种方式 ←另一种方式 LR(1)文法: S Sb|S’b S’ aS’b|ε 例: ←取前面的b 与a配对 非LR(1)且非二义文法:S aSb|S’ S’ S’b|b 例: ←取后面的b 与a配对 ∟若只向前看一个 符号,不知后面还有多少个b。因此不能确定是做S’ 到S的归约呢,还是移进b再做S’b到S’的归约。 四.按FORTRAN77的语义,子程序SUB的第一次执行输出10,第二次输出的值 不确定。FORTRAN语言的实现一般都采用静态存储分配,变量和存储单元 的结合(binding)是静态决定的,在程序运行期间不会改变,因此SUB的 两次执行的输出分别是10,100。 程序设计和数据结构部分 A: f E: p↑.next B: p↑.next F: g:=g↑.next C: f:=f↑.next G: p↑.next:=g D: g H: p↑.next:=f program MAXL(input,output) var len,m,n,l,j:integer; A:array[1..100] of integer; //假定N为100 begin for j:=1 to 100 do read(A[j]); len:=1; l:=1; for m:=2 to 100 do begin if A[m] = A[m-1] then l:=l+1 else l:=1; if l>len then len:=l; end; if len=1 then writeln(‘not have’) else begin l:=1; for m:=2 to 100 do begin if A[m] = A[m-1] then l:=l+1 else l:=1; if l=len then begin n:=m+1-l; write(n,m) end end end end. program powerset(input,output); var m,n,i,j,k : integer; begin read(n); m:=1; for i:=1 to n do m:=m*2; m:=m-1; // m= for i:=0 to m do begin write(‘{‘); j:=i; k:=0; while (j<>0) do begin if j mod 2 <>0 then write(k:5); k:=k+1; j:=j div 2 end; //数据间没有逗号 writeln(‘}’) end end. 若明白下面的对应关系,程序不难编出: 二进制: 0 十进制: 0 集合: {} 1 1 {0} 10 2 {1} 11 3 {0,1} 100 4 {2} 101 5 {0,2} 110 6 {1,2} 111 7 {0,1,2}