リスト構造に関する設問。
データ構造のキューで双方向リンクの特徴を問うている。
prevとnextが使える分、nextしか使えない単方向リンクより、リストの途中を指定しやすいと言う特徴がある。
ポインタが2個設定されるため、オーバヘッドは大きくなる。
単方向・双方向共に項目の追加・削除位置に制限はない。
故に「途中への挿入・取外しが容易に行える。」が正解。
リスト構造に関する設問。
データ構造のキューで双方向リンクの特徴を問うている。
prevとnextが使える分、nextしか使えない単方向リンクより、リストの途中を指定しやすいと言う特徴がある。
ポインタが2個設定されるため、オーバヘッドは大きくなる。
単方向・双方向共に項目の追加・削除位置に制限はない。
故に「途中への挿入・取外しが容易に行える。」が正解。
200ナノ秒×50万回+100ミリ秒=100000000ナノ秒+100ミリ秒=100ミリ秒+100ミリ秒=200ミリ秒
1秒/200ミリ秒=5回
故に1秒間に発生しうるページフォルトは最大5回。
スタック領域とヒープ領域に関する理解の問題。
PHPだと普段あんまり意識しないので、うーん…orz
スタック領域
→実行中サブルーチンの情報を記憶しておくメモリ領域
ヒープ領域
→プログラム上から動的に割り当てることのできるメモリ領域
なので回答は「サブルーチンからの戻り番地の退避にはスタック領域が,割当てと解放の順序に関連のないデータにはヒープ領域が使用される。」が正解。
システムの稼働状況は以下のようになる。
CPU :□□□■■■■■■■■■■■■
DISC:◯◯◯□□□□□□□◯◯◯◯◯■■■■■■■■■■
CPUの使用時間は3+12で15秒。
DISCの使用時間は7+10で17秒。
システムの稼働時間は3+12+10で25秒。
故にCPU使用率は15/25=0.6、DISCの使用率は17/25=0.68。
直列システムの稼働率
X×Y
並列システムの稼働率
1-(1-X)×(1-Y)
上記に基づいてAの稼働率を算出すると以下になる。
(1-(1-X)×(1-Y))×Z
(1-(1-X-Y+XY))×Z
(X+Y-XY)×Z
X×Z+Y×Z-X×Y×Z
同じくBの稼働率は以下。
1-(1-X×Z)×(1-Y)
1-(1-X×Z-Y+X×Z×Y)
X×Z+Y-X×Z×Y
式を比較すると、Bの稼働率の方がZを掛けられていない分、常に大きい。
(※XYZは必ず0以上1以下であるため)
故に「常にBの稼働率が高い。」が正解。
複数のサーバ機能を仮想化によって1台のサーバに統合したときの特徴。
・サーバの台数が少なくなるので物理的管理が簡易化できる。
・サーバの利用率が高くなり資源の有効利用ができる。
・1台のサーバに複数の機能を持たせるので、CPUのオーバーヘッドは高くなる。
管理はしやすくなるけど、負荷は上がるよってことだの。
ACID
データベースのトランザクション処理上の4つの性質(Atomicity・Consistency・Isolation・Durability)の頭文字。
NFS
Network File System。
UNIXのファイル分散システムまたはそれを提供するプロトコルのこと。
RPC
Remote Procedure Call。
実行中のプログラムと別のアドレス空間にあるサブルーチンや手続きを実行することを可能にする技術。
TCP/IP
ご存知、インターネットのプロトコル群です。
ということで。
「クライアントサーバシステムのクライアントにおいて、
遠隔サーバ内の手続をクライアントにある手続と同様の方法で呼び出すことを可能とした機能」は、RPC。
NFSかと思った。というか、知らんかったPRC。
キャッシュメモリの話。
セットアソシアティブ方式
主記憶のあるブロックを,キャッシュメモリの複数の特定ブロックを対応付ける方式。
フルアソシアティブ方式
主記憶のブロックがキャッシュメモリ上のどのブロックにも関連つけられる方式。
ダイレクトマッピング方式
主記憶のアドレスからキャッシュメモリのアドレスが一意に定まる方式。
ライトスルー方式
ライトスルー方式は、キャッシュメモリと主記憶の同期をとるための書き込み方式。
キャッシュメモリと同時に主記憶にも書き込む。
ということで、答えは「セットアソシアティブ方式」。
パリティビットって何さ…orz
ということで、wiki確認。
読んでみても概念がイマイチ…要するにビットの話なんだな!くらいしか…。
そもそも、ビットの誤りって何なの。
奇数パリティ
データを構成するビット全体の中でビット「1」の数が奇数になるようにパリティビットを付加する方式。
1ビットの誤りを検出。
水平パリティ
データの水平方向を対象としてパリティビットを付加する方式。
1ビットの誤りを検出。
チェックサム
データの合計値を検査用に付加し、誤りが発生しているかを検査する方式。
ハミング符号
情報ビットに検査ビットを付加することで2ビットの誤りを検出し、1ビットの誤りを訂正できる手法。
4つの単語とハミング符号だけ2ビットの誤りを検出できるってことがポイント?
そもそもメモリインタリープって何さ。
ってことで、とりあえず詳細はwiki。
要するに、メモリのデータ転送高速化技術の一つなんですね。
ポイントは「主記憶装置を複数のメモリバンクに分割」して「同時並行アクセスを可能」にし、「CPUの待ち時間を減らす」と言う辺りなのかな。
ということで、該当するのはエ。
他の選択肢の解説は以下。
「CPUと磁気ディスク装置との間に半導体メモリによるデータバッファを設けて,磁気ディスクアクセスの高速化を図る。」
→ディスクキャッシュ
「主記憶のデータの一部をキャッシュメモリにコピーすることによって,CPUと主記憶とのアクセス速度のギャップを埋め,メモリアクセスの高速化を図る。」
→キャッシュメモリ
「主記憶へのアクセスを高速化するため,アクセス要求,データの読み書き及び後処理が終わってから、次のメモリアクセスの処理に移る。」
→メモリの排他制御
内部割込み:
実行中のプログラムが原因で起こる割込み
外部割込み:
内部割込み以外の原因で起こる割込み
仮装記憶管理における存在しないページにアクセスしたときのページフォールト
→実行中のプログラムがページにアクセスしているので内部割り込み。
システム管理命令を一般ユーザモードで実行したときの特権命令違反
→システム管理命令を実行しているプログラムによる割り込みなので内部割り込み。
ハードウェア異常などによるマシンチェック
→実行中のプログラムではない割り込みなので外部割り込み。
浮動小数点演算命令でのオーバフローなどの演算例外
→演算中のプログラムが出している割り込みなので内部割り込み。
ということで、答えは「ハードウェア異常などによるマシンチェック」となる。
複数のデータに対して1個の命令で同一の操作を同時並列に行う方式とは何か、
ということで、Single Instruction Multiple Data = SIMD が答え。
ちなみに、方式には以下の4種がある。
SISD(Single Instruction Single Data)
単一の命令で単一のデータを処理する方式
SIMD(Single Instruction Multiple Data)
単一の命令で複数のデータを処理する方式。
MISD(Multiple Instruction Single Data)
複数の命令で単一のデータを処理する方式。(※理論上のみで実装例はない。)
MIMD(Multiple Instruction Multiple Data)
複数の命令で複数のデータを処理する方式。
ブロックを探すための平均比較回数と、
ブロック内で目的のデータを探すための平均比較回数の
2つの回数の合計値を取る。
ブロックを探すための平均比較回数は
(n÷m+1)÷2
ただし、mは十分に大きいのでnも十分に大きいものとなり、以下と近似値が成立する。
(n÷m)÷2
すなわちn/m2。
ブロック内で目的のデータを探すための平均比較回数は
mは十分に大きいので
m÷2
と近似値となる。
これらを合算して、「n/m2+m/2」が回答。
指定された値でプログラムをトレースするのみ。
コードを追いかけると、
comp(“11″,”101″)
からスタートして、一旦最後まで行って
comp(“1″,”01″)
となって、途中の
if len(A)≠0 and len(B)=0 then return -1;
で引っかかってreturnされる。
ので回答は-1。
aとbをそれぞれnだ割った際の余りが等しくなる時がぶつかる時なので。
a mod n = b mod n
a mod n – b mod n = 0
(a – b) mod n = 0
よって、(a – b)がnの倍数であればぶつかる。