コンピュータサイエンス入門 第二章 超個人的解答

コンピュータサイエンス入門 という本の練習問題を自分で解いてみる - Mattari Memo

注意

 公開する解答は、超がつくほど個人的に解いた解答です。解答の正確性は定かではありません。何かしらの参考にする場合は、調べなおすなどの注意を図ってください。

お知らせ

2008/05/12 19:15

とりあえず、解答一覧を公開。
次からは、公開場所をWikiにしようと思っています。そのほうが気がついた人が自由に編集できると思うので。
それにしても、Googleのすばやい適応にびっくりしましたが、「ICやLSIの駆動電圧」とか「真空管からシリコン」と検索する人が意外といたことにびっくりしました。問題自体をそのまま検索に投げるとは・・・
ちなみに、問題の文章を5文字程度投げると大体の確立で上位にこのサイトが来るように・・・

2008/05/11 19:15〜2008/05/12 10:25

月曜前になる前に公開してしまいした。こちらのミスです。
このままでは、無断で丸写しされた場合、こちらの本位ではないことになります。すっかり忘れていました。関係の方々に申し訳ないです。
方針しては、月曜の夜以降の更新でしたので、現在は、内容は削除しています。
ただしGogleキャッシュには存在してしまっています。ですが、一部の内容は間違っているものがあります。ご注意ください。既に時間が時間なので、削除などの対処はしません。
課題提出用として修正したものは2008/05/12の夜に公開したいと思います。もちろん解答の正確性は大してありません。参考程度にお願いします。
なお、公開方針は上のリンクで参照できます。どうかご一読ください。

2008/05/11までに第二章の解答を見てくださった方に

提出期限の前日に解答が公開されることは、今回限りとさせていただきます。

 解答のWEBへの共有は、レポート自体の共有というものが本位ではなく、解答の共有でよりよい答えを導き出しだしたいという考えで公開させていただいてます。(こういう場合はWikiでやったほうがいいのかなと思ったので、ちょっと考えている最中ですが)

 参考にされてもらえるのは大変うれしいです。
より良い解答に導く物になるのなら、公開しても良いかと思っていました。
ですが、既に友人に見つかったり、丸写しされそうになったりと、今回のことで何か影響があるのではないかと考え、公開方針を決めなおして運用を始めました。

コンピュータサイエンス入門 という本の練習問題を自分で解いてみる - Mattari Memo

ここで公開していた解答をどう使うかは、解答を見た方の判断に委ねたいと思います。
最後に、色々と混乱させてしまいまして申し訳ないです。

以下は過去の更新履歴

 ただいま解答中。一応全て埋めました。

2008/05/10 16:15

 個人的解答を細々と追加し始めた。

2008/05/11 10:54

 穴抜けがまだありますが、一応の回答を載せました。
2.1.2と2.7.2がわかりません・・・
→2.7.2はわかった気がする。で2.1.2は質問の意味がよくわからないんだよね・・・

2008/05/11 15:47

→2.1.2に無理やり答えを付けました。
4種類というので、ビットの表現を当てはめて、4ビットの場合で適応させるとこうですか?わかりません><
 一番最後の問題は、Javascriptで一覧を出しました。といっても、特に難しい話ではなくて、ASCIIコードの番号を二進数に直しただけです。コード一覧表は探せばすぐに見つかります。
aは97、Aは65からスタートです。26文字までループさせればすぐに出来ます。といいながら午前中をコードいじるのでつぶしましたが(pythonでやろうとしたら面倒すぎてやめたw)
 それにしても、どの問題も合っているかは相変わらずにわかりませんね。どうしましょ。全部間違ってたら・・・

解答一覧

2.1

1.ICやLSIの駆動電圧(動作するときの電源電圧)をインターネットで調べてください。

・IC
 NECエレクトロニクスのICであるデジタル ソース・ドライバIC (CMOS I/F)、uPD16640Tの駆動電圧は3.0〜3.6Vである。
 SIIセイコーインスツル)が開発したS-882Zシリーズは、0.3Vという電圧で動作をする。
LSI
 NECエレクトロニクスが開発した、USB2.0対応機能を内蔵した32ビットオールフラッシュ・マイコンは、1.5Vという電圧で動作する。

  • インターネットで公開されているものを適当に集めています。
2.2ビットの0と1の並びで10進数の正負の値を表現すると−2、−1、0、1の4種類になるものとします。同じ規則で4ビットで表現できる正負の値の範囲を指定してください。

 正負の値の表現をそれぞれ
00:-2
01:-1
10:0
11:1
とする。
4ビットの場合は、0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111のような並びが出来る。
先ほどの例を当てはめると
0000:-2
0001:-1
0010:0
0011:1
0100:2
0101:3
0110:4
0111:5
1000:6
1001:7
1010:8
1011:9
1100:10
1101:11
1110:12
1111:13
という表現が出来る。

2.2

1.フリップフロップとして機能する図2.8とは異なる回路をインターネットで調べて論理回路図で表現してください。

 図2.8の回路は、RS(リセットセット)型といわれている、このほかにも、JK型、D型、T型がある。
 <JK型の図>

 <D型の図>

 <T型の図>

2.図2.8のフリップフロップで、入力信号が0で制御信号が1の状態から、入力信号が1に変わったときの状態を示してください。

  • 図の2.9に乗っているものを写しただけです。

2.3

1.ノイマンシステムの主要な構成要素を3つ挙げてください。

中央処理装置(CPU)
メモリ
インプット/アウトプット(I/O)

2.自分が主に使っているマシンのCPUの種類を調べてください。

 AMDTurion 64 Mobile TK-53(AMD64

  • inspiron 1501利用時の場合

2.4

1.アドレスバスのサイズが8ビットと16ビットの場合にアクセス可能なメモリの量を計算してください。

 8ビットの場合、2^8(256B)、16ビットの場合2^16(65.536MB)のメモリ量が扱える

2.データバスとアドレスバスがそれぞれの役割を説明してください。

 データバスは、コンピュータシステムの中にあるさまざまな要素(CPUと、メモリやI/O)の間でデータを転送するために使うバスである。
 アドレスバスは、メモリの特定の位置への転送やI/Oデバイスを識別するために使う。

2.5

1.1MBのメモリに、123バイトのデータを保存する場合、最大でいくつ保存できるか計算してください。

 1MBをバイトにすると、1,048,576バイトとなる。123バイトのデータを保存する場合、1,048,576 / 123 = 8,525.00813で約8,525個のデータが保存できる。

2.16進数で7654という値をリトルエンディアンとビックエンディアンでそれぞれメモリに保存したときの状態を説明してください。

 リトルエンディアンの場合、上から54、76と保存する。
 ビックエンディアンの場合、上から76、54と保存する。

2.6

1.自分が使っているシステムのCPUのレジスタ構成を調べてください。

 AMD Turion 64 Mobile TK-53(AMD64)のレジスタ構成
汎用レジスタ:rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r8,r9,r10,r11,r12,r13,r14,r15
フラグレジスタ:rflags
命令ポインタ :rip
64 ビットメディアおよび浮動小数レジスタ
mmx0/st0,mmx1/st1,mmx2/st2,mmx3/st3,mmx4/st4,mmx5/st5,mmx6/st6,mmx7/st7
128 ビットメディアレジスタ
xmm0,〜,xmm15
セグメントレジスタ:cs,os,es,fs,gs,ss
fxsave , fxstor
モリーイメージ
制御ワード:fcw
ステータスワード:fsw
タグワード:ftw
最終 x87 オペコード:fop
64ビットオフセットからコードセグメントへ:frip
64ビットオフセットからデータセグメントへ:frdp
128メディア命令制御およびステータスレジスタ:mxcsr
mxcsr_mask のビットを設定し、mxcsr でサポートされる機能ビットを示すmxcsr_mask

2.フラグレジスタの役割を説明してください。

 フラグレジスタとは、プロセッサの現在の状況を表す一連のビット値を保持するレジスタである。たとえば、
 演算の結果が正か負か
 演算の結果、桁上がりがあったかどうか
 比較の結果
といったものを保持されている。

2.7

1.メモリ上の任意の場所にあるバイトが、プログラムであるかデータであるか認識する簡単な方法があるかどうか考えてください。

 命令を読み出す度に次の命令の番地にカウントアップされるカウンタが演算装置に組み込まれているが、これをプログラムカウンタという。
 プログラムカウンタ(インストラクションポインタ)に、データのアドレスの指示をすれば、そのアドレスのデータが命令であるとして認識されます。

2.プログラムの実行中に誤ってメモリ上のデータの場所にジャンプして姉妹、データをプログラムとして実行してしまったらどうなるか考察してください。

 誤ってデータが実行されると、実行可能な文章は行われてしまい、プログラムの暴走の原因になったり、これを利用して不正なプログラムを走らせることが可能である。コンピュータが命令(プログラム言語)として理解できない文章の場合はエラーが出ることがある。

2.8

1.600bpsのシリアル通信線で1分間に送ることが出来る最大のバイト数を計算してください。

 1分は60秒である。600bpsは1秒に600ビットのデータを送信できる。
 一分間で送れるバイト数は、600bps/60s=10ビット、バイトに直すと60/8=7.5バイト。よって最大7.5バイト送ることが出来る。

2.アルファベットを7ビットのASCIIコードで書いた後で、それぞれの文字を偶数パリティで送るときのパターンに変更してください。
  • 表にしたほうがいいかも?

 アルファベット(a-z,A-Z)のASCIIコードを進数に直す。そして偶数パリティを付ける。

AのASCIIコードを二進数で表すと1000001です。偶数パリティを付けると"10000010"
BのASCIIコードを二進数で表すと1000010です。偶数パリティを付けると"10000100"
CのASCIIコードを二進数で表すと1000011です。偶数パリティを付けると"10000111"
DのASCIIコードを二進数で表すと1000100です。偶数パリティを付けると"10001000"
EのASCIIコードを二進数で表すと1000101です。偶数パリティを付けると"10001011"
FのASCIIコードを二進数で表すと1000110です。偶数パリティを付けると"10001101"
GのASCIIコードを二進数で表すと1000111です。偶数パリティを付けると"10001110"
HのASCIIコードを二進数で表すと1001000です。偶数パリティを付けると"10010000"
IのASCIIコードを二進数で表すと1001001です。偶数パリティを付けると"10010011"
JのASCIIコードを二進数で表すと1001010です。偶数パリティを付けると"10010101"
KのASCIIコードを二進数で表すと1001011です。偶数パリティを付けると"10010110"
LのASCIIコードを二進数で表すと1001100です。偶数パリティを付けると"10011001"
MのASCIIコードを二進数で表すと1001101です。偶数パリティを付けると"10011010"
NのASCIIコードを二進数で表すと1001110です。偶数パリティを付けると"10011100"
OのASCIIコードを二進数で表すと1001111です。偶数パリティを付けると"10011111"
PのASCIIコードを二進数で表すと1010000です。偶数パリティを付けると"10100000"
QのASCIIコードを二進数で表すと1010001です。偶数パリティを付けると"10100011"
RのASCIIコードを二進数で表すと1010010です。偶数パリティを付けると"10100101"
SのASCIIコードを二進数で表すと1010011です。偶数パリティを付けると"10100110"
TのASCIIコードを二進数で表すと1010100です。偶数パリティを付けると"10101001"
UのASCIIコードを二進数で表すと1010101です。偶数パリティを付けると"10101010"
VのASCIIコードを二進数で表すと1010110です。偶数パリティを付けると"10101100"
WのASCIIコードを二進数で表すと1010111です。偶数パリティを付けると"10101111"
XのASCIIコードを二進数で表すと1011000です。偶数パリティを付けると"10110001"
YのASCIIコードを二進数で表すと1011001です。偶数パリティを付けると"10110010"
ZのASCIIコードを二進数で表すと1011010です。偶数パリティを付けると"10110100"

aのASCIIコードを二進数で表すと1100001です。偶数パリティを付けると"11000011"
bのASCIIコードを二進数で表すと1100010です。偶数パリティを付けると"11000101"
cのASCIIコードを二進数で表すと1100011です。偶数パリティを付けると"11000110"
dのASCIIコードを二進数で表すと1100100です。偶数パリティを付けると"11001001"
eのASCIIコードを二進数で表すと1100101です。偶数パリティを付けると"11001010"
fのASCIIコードを二進数で表すと1100110です。偶数パリティを付けると"11001100"
gのASCIIコードを二進数で表すと1100111です。偶数パリティを付けると"11001111"
hのASCIIコードを二進数で表すと1101000です。偶数パリティを付けると"11010001"
iのASCIIコードを二進数で表すと1101001です。偶数パリティを付けると"11010010"
jのASCIIコードを二進数で表すと1101010です。偶数パリティを付けると"11010100"
kのASCIIコードを二進数で表すと1101011です。偶数パリティを付けると"11010111"
lのASCIIコードを二進数で表すと1101100です。偶数パリティを付けると"11011000"
mのASCIIコードを二進数で表すと1101101です。偶数パリティを付けると"11011011"
nのASCIIコードを二進数で表すと1101110です。偶数パリティを付けると"11011101"
oのASCIIコードを二進数で表すと1101111です。偶数パリティを付けると"11011110"
pのASCIIコードを二進数で表すと1110000です。偶数パリティを付けると"11100001"
qのASCIIコードを二進数で表すと1110001です。偶数パリティを付けると"11100010"
rのASCIIコードを二進数で表すと1110010です。偶数パリティを付けると"11100100"
sのASCIIコードを二進数で表すと1110011です。偶数パリティを付けると"11100111"
tのASCIIコードを二進数で表すと1110100です。偶数パリティを付けると"11101000"
uのASCIIコードを二進数で表すと1110101です。偶数パリティを付けると"11101011"
vのASCIIコードを二進数で表すと1110110です。偶数パリティを付けると"11101101"
wのASCIIコードを二進数で表すと1110111です。偶数パリティを付けると"11101110"
xのASCIIコードを二進数で表すと1111000です。偶数パリティを付けると"11110000"
yのASCIIコードを二進数で表すと1111001です。偶数パリティを付けると"11110011"
zのASCIIコードを二進数で表すと1111010です。偶数パリティを付けると"11110101"

となる。