コンピュータ・システム概論 期末試験(2011年1月28日)

コンピュータ・システム概論 期末試験 解答(122 点満点)
2015 年 2 月 4 日 9:00~10:30
解答状況
総合平均87.3/122点(正答率 72.1%)
最高 120点
最低 34点
各問題にあるこの色の文章は採点時の講評である
問題1: [コンピュータの概念] (各 1 点, 計 16 点
10.1(63.4%))
用語を埋める問題はそれなりに出来が良かったと思う。
数値を埋める問題では、同じような間違いをしている人が多く、
比較的出来が悪かったように思える。
コンピュータの概念、構成に関して 1~16 にあてはまる語句を答えよ。
(ア)
(イ)
(ウ)
(エ)
(オ)
(カ)
(キ)
(ク)
番号
1
2
3
4
5
6
7
8
9
10
11
コンピュータの5大構成要素は、制御装置、(1)、(2)、入力装置、出力装置である。
n ビットの整数がある時、この数を符号付きと見た時は、最小値は(3)で最大値は(4)である。
一方符号無しと見た時、最小値(5)で、最大値(6)である。
コンピュータプログラムは、C 言語や FORTRAN のような高級言語でかかれるが、これをコンパイ
ルすることで、計算機で実行可能な命令と一対一に対応する(7)に翻訳できる。これは、さらに、
二進数で表した(8)に翻訳できる。
LW $2,100($3) (ただし 100 は 16 進数で、$2,$3 の内容はそれぞれ 16 進数で、0x200、0x300 だと
する)と言う命令は、データメモリの(9)番地から(10)バイトのデータを読み出し、レジスタ(11)
に書き込む命令である。
データの合流点に置かれ、どちらのデータを選択するかと言うスイッチの役割を果たすものを(1
2)という。
命令の処理をプロセッサ内で複数のステージに細分化し、複数の命令を並列に実行することを
(13)という。
BEQ $4,$5,-3 と言う命令が 0x2000 番地にある時、レジスタ$4、$5 が等しい時、この命令の次
に実行するのは 0x(14)番地であり、等しくない時は 0x(15)番地である。
コンピュータでは2進数で整数を表現するが、負数を表現するために(16)を用いる。
解答
演算装置
記憶装置
-2n-1
2n-1-1
0
2n-1
アセンブリ言語
機械語
0x400
4
$2
12
13
14
15
16
マルチプレクサ
並列処理,パイプライン処理
0x1FF8
0x2004
2 の補数
問題2: [2 進数] (各 1 点、計 10 点 17.5(87.3%))
ほとんどの人ができていましたが、
16 進数への変換が苦手な人が多い印象を受けました。
下の 2 進数の計算の太枠内を埋めよ。2 進数は符号付き 8 ビットとする。なお、数値が符号付き8
ビットで表現できる範囲を越えている場合は×を記入すること。
10 進
2進
16 進
A
99
0110 0011
0x63
B
88
0101 1000
0x58
-B
-88
1010 1000
0xA8
A-B
0000 1011
0x0B
A+B
×
×
問題3: [浮動小数点] (各 0.5 点、計 9 点、端数切り上げ 7.8(86.8%))
全体的によくできていたと思います。
計算ミスが少し目立ちました。
次の表を埋めよ。なお、「X」の部分は全体を16進数、「10 進数値」の所は10進数で表記し、それ以外の
場所は2進数で記述すること。 M に関しては「...」にて2個以上の0の羅列を表しても良い。
10進数値
例
1
2
3
-0.75
6.375
-6.375
-5.625
2進固定小数点
表記
-0.11
110.011
-110.011
-101.101
2進数(正規化した科
学記数法)
-1.1x2-1
1.10011x22
-1.10011x22
-1.01101x22
付録:単精度・倍精度浮動小数点の形式
単精度
N = (-1)s2(E-127)(1.M)
単精度浮動小数点表記
S
1
E
01111110
M
1000...
X
0xBF400000
S
0
E
10000001
M
10011000...
X
0x40CC0000
S
1
E
10000001
M
10011000...
X
0xC0CC0000
S
1
E
1000 0001
M
011010...
X
0xC0B40000
問題4: [アセンブリ言語] (各 2 点, 計 16 点
13.6(85.2%))
概ね良く出来ていました。間違いが多かったのは以下の通りです
・lw $t0,0($t1) で0を忘れているもの(1点減点)
・lw を sw 命令で書いたもの(昨年度問題を丸暗記?)
・addi $t0,1 のようにオペランドが足りないもの(1点減点)
・add を addi、又はその逆のもの(1点減点)
C 言語で記述すると以下のようになる、メモリにある配列の4個の要素の合計を計算するプログラムをア
センブリ言語で作る.
int i, data[4]={0x10,0x20,0x30,0x40}, n = 4, sum = 0;
for(i = 0; i < n; i++){
sum += data[i];
}
アセンブリプログラムの空欄を埋めて完成させよ。ただし各レジスタは以下のように用いるものとする。
(各レジスタは C 言語と違い、int 型の値もアドレスもどちらでも持つ事が出来る)
$t0
$t1
$t2
$t3
$t4
ループカウンタ (i)
配列 data の i 番目の要素のアドレス (&data[i])
ループの回数を保持する変数 (n)
配列 data の i 番目の要素の値 (data[i])
合計(sum)
なお、int 型の変数の大きさは4バイトとする。このアセンブリプログラムでは C 言語とは異なりループの判
定を末尾で行う。アセンブリ言語の命令には例えば以下の様なものがある:
add, addi, beq, ble, blt, bne, jal, jr, ori, sll, sra, srl, sub, sw, la, li, la, lw
data:
main:
loop:
.data
.word 0x10,0x20,0x30,0x40
.text
.globl main
#
#
#
#
データセグメント
4 個の整数配列
テキストセグメント
メイン関数をグローバルで宣言
li $t0,0 (or,ori などでも可能)
# ループカウンタ i を 0 で初期化
la $t1,data
# 配列 data の先頭アドレスの値を
$t1 に代入
li $t2,4
# ループの回数 n を 4 で初期化
li $t4,0
#合計 sum を 0 で初期化
lw $t3,0($t1)
# $t1 のアドレスから data[i]を読
み$t3 に代入
add $t4,$t4,$t3
# sum += data[i]
addi $t1,$t1,4
# 配列の次の要素にアクセスするた
めに$t1 の値を 4 増加
addi $t0,$t0,1
# ループカウンタの値を 1 増加
blt $t0,$t2,loop
# ループカウンタの値がループ回数
未満なら loop に分岐する
問題5: [乗算] (各 1 点, 計 11 点 9.4(85.3%))
乗算の問題であったために、
最初から間違いがある人については
最後までほぼ出来ていなかった。
しかし全体的な出来につきましては
割りと出来が良かったと感じます。
下のフローチャートに示される、4ビット乗算アルゴリズムに従って 1001×1010 の計算を行うとする。乗数
と被乗数をそれぞれ4ビット、積を8ビットとするとき、太枠中に数字を入れて下の表を完成させよ。ただし
表中の下矢印(↓)は上の欄と同じ値が入ることを示す。尚、表中のステップの欄は、フローチャート内の
番号と対応している。
開始
1.乗数の
最下位
bitの値を
判定
最下位bit = 1
最下位bit = 0
1a. 被乗数を積レジスタの左半分
に加え、結果を積レジスタの左半
分に収める
2. 積レジスタを1ビット右にシフト
3.乗数レジスタを1ビット右にシフト
繰り返し
回数判定
4回未満
4回
終了
処理サイクル
ステップ
乗数
被乗数
積
0
初期値
1010
1001
0000 0000
1
1010
↓
0000 0000
2
↓
↓
0000 0000
3
0101
↓
↓
1
↓
↓
1001 0000
2
↓
↓
0100 1000
3
0010
↓
↓
1
↓
↓
0100 1000
2
↓
↓
0010 0100
1
2
3
4
3
0001
↓
↓
1
↓
↓
1011 0100
2
↓
↓
0101 1010
3
0000
↓
↓
問題6: [アドレッシング] (各 1 点、計 10 点 5.1(51.4%))
あまり出来ていない。
点数の低い人では、解答を書いて間違えている場合よりも、空欄のケースが多く見られました。
MIPS アーキテクチャでは、複数のアドレッシング形式(アドレッシングモード)が用意されている。このアド
レッシングモードに関して、下記の空欄を埋めよ。
(1) 命令のオペランドで指定されたレジスタ番号でアドレッシングする方法を、( ア )アドレッシングモード
と呼ぶ。この具体例として、( イ )命令などがある。
(2) 命令のオペランドで指定された定数(即値)とレジスタの和によって、メモリのアドレスを示す方法を、
( ウ )アドレッシングモードと呼ぶ。この具体例として、( エ )命令などがある。特定のレジスタにプログ
ラムの先頭アドレスを入れておき、そこからの相対的な変位を定数(即値)で指定することにより、プログラ
ムがメモリ内のどの位置に置かれても実行できる。この機能を、( オ )という。この特定のレジスタを英語
で( カ )レジスタという。また、相対的な変位を、英語で( キ )という。
(3) PC(プログラムカウンタ)と命令のオペランドで指定した定数(即値)との和によってアドレスを示す方
法を、( ク )アドレッシングモードと呼ぶ。この具体例として、( ケ )命令などがある。
(4)命令中に指定した定数をオペランドとするアドレッシング形式を、( コ )アドレッシングモードと呼ぶ。
この具体例として、addi命令やli命令などがある。
記号
解答
(ア)
レジスタ
(イ)
Add、sub、加算、減算など
(ウ)
ベース相対
(エ)
lw、sw、ロード、ストアなど
(オ)
リロケータブル
(カ)
Base、ベース
(キ)
オフセット、offset
(ク)
PC 相対
(ケ)
beqなど、条件分岐は可、
(無条件分岐、j,jr などは含めな
い)
(コ)
即値
問題7: [コンピュータの構成]
(各 0.5 点、計 12 点、端数切り上げ 9.8(81.6%))
出来ているの人はほぼ満点でした.
そうでない人は,
ヤマ勘で解答していたようです.
教科書で学んだ下図の MIPS インストラクション・アーキテクチュアの命令 add, beq, lw の制
御信号“0”、“1”、“x”、”COND”を○で囲んで示せ。なお、④演算指示は、「add」「sub」
「and」「or」「x」のいずれかを、⑤拡張指示には、「0 拡張」か「符号拡張」を記入すること。ま
た、“x”はいずれにも無関係であることを示す。
⑧ PCSrc
0
4
1
加
算
PC
加
算
命令アドレス
⑤
拡張指示
命令フィールド
命令
メモリ
Rt
Rd Rs
1 0
imm
x4
拡
張
BusA
入力データ
⑥
RegWrite
COND
ALUOp ④
①
Rw
Ra Rb
R
R
R
32 32-bit
Register
②
BusB
Write Enable
A
L
U
1
データ
アドレス
読み出し
データ
データ
メモリ
結果
入力データ
Write Enable
0
③
⑦ MemWrite
0
1
・・・
add rd、rs、rt
op
rs
rt
beq
op
rs
rt
imm
op
rs
rt
imm
lw
rt, rs,
rt,
add の場合の制御ポイント値
rd
beq の場合の制御ポイント値
lwの場合の制御ポイント値
1
0
・
1
・
X
0
・
1
・
X
0
・
1
・
X
2
0
・
1
・
X
0
・
1
・
X
0
・
1
・
X
3
0
・
1
・
X
0
・
1
・
X
0
・
1
・
X
4
5
ADD ・ SUB ・ OR ・ AND
0拡張
・ 符号拡張 ・ X
ADD ・ SUB ・ OR ・AND
0拡張
・ 符号拡張 ・ X
ADD ・ SUB ・ OR ・AND
0拡張 ・ 符号拡張 ・ X
6
0
・
1
・
X
0
・
1
・
X
0
・
1
・
X
7
0
・
1
・
X
0
・
1
・
X
0
・
1
・
X
8
0
・
COND ・
X
0
・
COND ・
X
0
・
COND ・
X
問題8: [ALU,論理回路] (計 16 点 8.2(51.0%))
(1) は正解率が高かったです
(2) d0’,d1+d0’,(d1+d0’)’が書けていればそれぞれ1点ですが、いきなり最後の答えだけの物は0点としま
した
(3) 論理式は割りと合っていました。論理回路は以下の基準で採点しました。
(ア) 論理式が間違っているために回路が違った3点
(イ) and 記号と or 記号が間違っている2点
(ウ) その他惜しい物2点
(エ) 全くダメなもの参加賞で1点
(オ) 全く足りない物は0点
(4) 論理回路は上記(3)と同じで、惜しい度合いで点を出しています。問題8でこの問題の白紙率が一番高
かったです。
d1d0 と言う2ビットの入力信号をデコードして4のつ信号 ae,be,ce,de を出力するする論理回路を考える。真
理値表は以下の通り。
d1
d0
ae
be
ce
de
0
0
1
0
0
0
0
1
0
1
0
0
1
0
0
0
1
0
1
1
0
0
0
1
(1) be を d1,d0 を含む加法標準形論理式で表し、それを基に論理回路を作成せよ(各 2 点, 計 4 点)
be
= (
d1’・d0
)
論理回路
(2) ドモルガンの法則を使用し、(1)の論理式を変形すると、 be = (d1 + d0’)’ となる。これを(2)の論理式と
呼ぶ事にする。真理値表を用いて(1)と(2)の論理式が等しいことを証明せよ。欄は必ずしも全て使う必
要はない(3 点)
d1
0
0
1
1
d0
0
1
0
1
be(1)
0
1
0
0
d0’
1
0
1
0
d1+d0’
1
0
1
1
(d1+d0’)’
0
1
0
0
(3) 上記 d1d0,ae,be,ce,de を利用して、d1d0 がそれぞれ 00 の時 a、01 の時 b、10 の時 c、11 の時 d を選
択するマルチプレクサの論理式 m と論理回路を完成させよ。(1+4 点, 計 5 点)
m = ( d1’・d0’ )・a + ( d1’・d0
)・b + ( d1・d0’
)・c + ( d1・d0 )・d
(4) 上記4選択マルチプレクサ(図中の縦長丸)と全加算器と論理ゲートを利用して、2ビット入力 x1x0、
y1y0(それぞれ x1、y1 が上位ビット)の4種の演算を行う ALU の論理回路を記せ。なお、出力 z1z0 は
00 の時は、入力 x、y の加算、01 の時は、論理積、10 の時は、論理和、11 の時は、使用せずとする。
(4 点)
問題9: [性能] (各 1 点、計 12 点、Or 欄は2点 6.5(54.0%))
今年は、過去問より難易度を下げたので、多くの人ができていました。
ただ、言葉の説明はできているのに数式での定義ができていない人、逆に、数式ができているのに、
言葉の定義が、主語がないなどあいまいでわからな い人が散見されました。コンピュータの世界
では、言葉でわかり易く定義を伝え、しかも、数式やプログラムで正確に定義を表現する必要があ
ります。 自身の採点結果を見て、自己診断をしてみてください。
以下の性能に関連する D~Gの項目を、A~C の例にならって説明せよ。また、他の項目の記号(A~G)
を使用してその項目が数式で表される。カッコ内を埋めてその式を完成させよ。なお、回答欄の空欄には、
A~Gの記号をひとつだけ書くこと。二つ以上書くと間違いとする。また、「Or」のある欄は、2 通りの表現方
法を記載すること。CPI、MIPS については、その略号前の正式名称を英文で記載せよ。
記号
定義
A
クロック
サイクル時間(sec)
B
CPU実行時間
(sec)
C
説明
数式
クロックの一つのパルスの時間である。この
値が小さいほどコンピュータは高速に動作
する。
CPUがあるプログラムを実行するのに何秒
かかったかを示す。
Given
実行命令数
CPUがあるプログラムを実行するのに何命
令かかったかを示す。
Given
D
クロック周波数(Hz)
D=1/(A)
E
CPU
クロックサイクル数
クロックが一秒間に何個のパルスであるか
を示す指標である。この値が高いほどコンピ
ュータは高速に動作する。
CPUがあるプログラムを実行するのに何ク
ロックかかったかを示す。
F
CPI
命令当たり平均クロ
ックサイクル数
MIPS
CPUがあるプログラムを実行する時、1命
令に平均何クロックかかったかを示す。
F
定義(略号)
CPI
英文正式名称
Clock cycle Per Instruction
G
MIPS
Million Instructions Per Second
G
記号
CPUがあるプログラムを実行する時、1秒
間に平均何命令かかったかを示す。
Given
E=( B )/( A )
or
E=( B )×( D )
F=(E)/(C)
G=(D)/F/106
Or
G=(C)/B/106