はじめに
2022 SA 午前II
01-08: http://127.0.0.1:4000/archives/191
09-15: http://127.0.0.1:4000/archives/192
16-20: http://127.0.0.1:4000/archives/193
21-25: http://127.0.0.1:4000/archives/194
この5問の難易度はまあまあかな。解き終わったときは自信満々だったんだけど、午後の論述問題(論文)をちらっと見たら、一気に自信をなくしちゃったよ :cry:
ひとりごと
人生について考えるなんてのは、確かに暇な人がすることだよね。忙しくなるとそんなこと考えてる暇もなくなっちゃうし。まあ忙しすぎても、逆に考えちゃうかもしれないけど。
今思うと、自分には足りないところが2つあった気がする。1つは「いつでも復習できる」と思い込んでいたこと。もう1つは「学びに終わりなし(学無止境)」という考え方の誤用だね。
まずは「学びに終わりなし」から。この言葉自体は正しいんだけど、僕の理解がちょっと偏っていたんだ。知識は無限だから、何事も完全にマスターするのは不可能だと思い込んで、そのせいで「自分は何もできない」っていうマインドセットになっちゃってた。実際には知識は無限だけど、実務で使うにはその分野のすべてを極める必要はないんだよね。一部をマスターするだけで、仕事やタスクをこなすには十分なことも多い。
例えば、試験に合格した後でも「自分はまだ何も知らないし、関連する仕事なんてできない」って感じることがよくあった。でも客観的に見れば、必要な部分さえ押さえていれば、タスクを完了する能力は備わっているはずなんだ。この考え方は、昔受けてきた教育のせいかもしれない。「世界は広い」「学びは全然足りない」「本当のプロはもっとすごい」みたいな言葉をよく聞いてきたから。それが学習のモチベーションになることもあるけど、自分の欠点ばかりに目が向いて、自信を失う原因にもなっていたんだと思う。
今の学生たちも「自分には何もできない」って言っているのをよく耳にするけど、もしかしたらこの考え方の副作用なのかもしれないね。
次は「いつでも復習できる」という考え。復習というよりは、「いつでも調べられる」という依存心に近いかな。以前日本語のN2の勉強をしていたときに、文字を持たない人々がどうやって学ぶか、という文章を読んだんだ。文字の記録がないから、授業などで知識を得るチャンスは一生に一度しかなくて、だから死ぬ気ですべてを覚えなきゃいけない。その文章には、現代の僕たちがネットが便利すぎて物を覚えようとせず、検索で見つかるものを自分の知識だと思い込んでいることも書かれていた。もしネットが使えなくなったら、実際には何も知らないのと同じ。本当に自分の知識と言えるのは、記憶として内面化されたものだけなんだ。
自分の状況に当てはめてみると、Linuxのコマンドやアルゴリズムのコードなんかを「いつでも見られる」と思って覚えないようにしていた。そのせいで「できるつもり」になっているけど、いざ使うときに書けない。これは実際には「できない」の範疇に入るんだよね。こういう経験を繰り返すことで、さっき言った「何もできない」という感覚がさらに強まってしまった。
まとめると、まずは「覚えていないことは、できないこと」だと自覚すること。そして、ある作業をこなしたり、ある役割を担ったりするために必要な知識には境界があるから、すべてを完璧に極めようとしなくてもいい、ということだね。
書いていることと伝えたいことがちょっとズレている気がするけど、文章力がないしChatGPTも使ったから、まあこんな感じかな。
21
容量が a M バイトでアクセス時間がxナノ秒の命令キャッシュと、容量が b M バイトでアクセス時間がyナノ秒の主記憶をもつシステムにおいて、CPUからみた、主記憶と命令キャッシュとを合わせた平均アクセス時間を表す式はどれか。ここで、読み込みたい命令コードが命令キャッシュに存在しない確率をrとし、キャッシュ管理に関するオーバヘッドは無視できるものとする。
$$ \begin{align} ア &\frac{(1-r)\cdot a}{a+b} \cdot x +\frac{r \cdot b}{a+b} \cdot y \\ イ &(1-r) \cdot x + r \cdot y \\ ウ &\frac{r \cdot a}{a+b} \cdot x + \frac{(1-r) \cdot b}{a+b} \cdot y \\ エ &r \cdot x + (1-r) \cdot y \end{align} $$解説:
- キャッシュにヒットする場合の時間は $(1-r) \times x$
- キャッシュにヒットせず、主記憶を読み込む時間は $r \times y$
よって、答えは イ。
22
データベースサーバのクラスタリング技術の特徴のうち、シェアードエブリシングはどれか。
ア クラスタリング構成にして可用性を高めることによって、故障発生時に担当していた範囲のデータを待機系のサーバに引き継ぐことができる。
イ サーバごとに管理する対象データが決まっているので、1台のサーバに故障が発生すると故障したサーバが管理する対象データを処理できなくなり、システム全体の可用性が低下する。
ウ データを複数の磁気ディスクに分割配置し、更にサーバと磁気ディスクが1対1に対応しているので、複数サーバを用いた並列処理ができる。
エ 負荷を分散し、全てのサーバのリソースを有効活用できることに加えて、データを共有することによって1台のサーバに故障が発生したときでも処理を継続することができる。
解説: Shared Everything(共有ディスク)は、すべてのサーバが同じデータストレージを共有するデータベースクラスタ構成のこと。これにより、どのサーバのリソースからでもデータベース内のすべてのデータにアクセスして処理できるため、システムの冗長性と耐障害性が高まる。1台のサーバが故障しても、他のサーバがそのタスクを引き継ぐことができるので、システム全体が使えなくなることはない。よって、答えは エ。
ア はアクティブ/スタンバイ構成、イ は Shared Nothing 構成、ウ は各サーバが専用ディスクを持つ構成(Shared Nothingに近い)の説明だね。
23
幾つかのサブシステムから成るシステムの信頼性に関する記述のうち、適切なものはどれか。
ア あるサブシステムで発生したフォールトの影響が他のサブシステムに波及することを防ぐフォールトマスキングは、システムのMTBFは変化させないが、MTTRの短縮につながる。
イ サブシステムにフォールトが検出されたとき、再試行すると正しい結果が得られる場合もあるので、再試行はシステムのMTBFの向上とMTTRの短縮につながる。
ウ サブシステムの稼働中に行われるフォールトの検出は、システムを停止せず行われるので、システムのMTTRは変化させないが、MTBFの向上につながる。
エ フォールトが発生したあるサブシステムを切り離して、待機系のサブシステムに自動で切り替えるフェールオーバーは、システムのMTBFは変化させないが、MTTRの短縮につながる。
解説: 信頼性は通常、MTBF(平均無故障間隔)とMTTR(平均修理時間)によって決まる。
Fault Masking(フォールトマスキング)は、故障の影響が他に広がらないようにするもの。故障したサブシステムの特定や修復には役立つかもしれないけど、故障そのものを防ぐわけではないからMTBFには直接影響しない。
再試行(リトライ)は偶発的なエラーへの対処法だけど、これは耐障害(フォールトトレラント)メカニズムであって、システム全体のMTBFを向上させるものではない。根本的な故障が減るわけではないからね。
稼働中の故障検出はMTBFを直接向上させるものではない(故障は発生している)。
Failover(フェールオーバー)は、故障したシステムを即座に待機系に切り替える。これにより復旧時間が大幅に短くなるから、MTTRの短縮に直結する。一方で、故障の発生頻度(MTBF)自体には影響しない。
ア と エ で迷うかもしれないけど、答えは エ。フェールオーバーの方が復旧時間の短縮という意味でより直接的だね。
24
$t_{1} \sim t_{10}$ の時刻でスケジュールされたトランザクション $T_1 \sim T_4$ がある。時刻 $t_{10}$ で $T_1$ が commit を発行する直前の、トランザクションの待ちグラフを作成した。a に当てはまるトランザクションはどれか。ここで、select(X) は共有ロックを掛けて資源 X を参照することを表し、update(X) は専有ロックを掛けて資源 X を更新することを表す。これらのロックは、commit された時にアンロックされるものとする。また、トランザクションの待ちグラフの矢印は、$T_i \rightarrow T_j$ としたとき、$T_j$ がロックしている資源のアンロックを、$T_i$ が待つことを表す。
(トランザクションのスケジュール$t_1$)
| 時刻 | $T_1$ | $T_2$ | $T_3$ | $T_4$ |
|---|---|---|---|---|
| $t_1$ | select(A) | |||
| $t_2$ | select(B) | |||
| $t_3$ | select(B) | |||
| $t_4$ | select(A) | |||
| $t_5$ | update(B) | |||
| $t_6$ | select(C) | |||
| $t_7$ | select(C) | |||
| $t_8$ | update(C) | |||
| $t_9$ | update(A) | |||
| $t_{10}$ | commit |
(トランザクションの待ちグラフ)

ア $T_1$
イ $T_2$
ウ $T_3$
エ $T_4$
解説: データベースの排他制御(共有ロック S と専有ロック X)についてだね。
共有ロック(S)同士は競合しないけど、専有ロック(X)は他のロックと競合する。
- 時刻 $t_5$:$T_4$ が B に専有ロック(update)をかけようとする。でも B は $T_2$ と $T_3$ が共有ロック(select)をかけているので、ここで $T_4$ は $T_2$ と $T_3$ の解放待ちになる。グラフで2つの矢印を受けている b か c が $T_4$ になる。
- 時刻 $t_8$:$T_2$ が C に専有ロックをかけようとする。でも C は $T_1$ が共有ロックをかけているので、$T_2$ は $T_1$ の解放待ちになる。グラフで1つの矢印を出している a が $T_2$、待ち先の d が $T_1$ と推測できる。
- 時刻 $t_9$:$T_3$ が A に専有ロックをかけようとする。でも A は $T_1$ と $T_4$ が共有ロックをかけているので、$T_3$ は $T_1$ と $T_4$ の解放待ちになる。
これらを整理すると:
- $T_2$ (a) $\rightarrow T_1$ (d)
- $T_4$ (b) $\rightarrow T_2$ (a), $T_3$ (c) (※ $T_4$ は $T_2$ と $T_3$ を待つ)
- $T_3$ (c) $\rightarrow T_1$ (d), $T_4$ (b) (※ $T_3$ は $T_1$ と $T_4$ を待つ)
a に当てはまるのは $T_2$。よって答えは イ。
25
図は、既存の電話機とPBXを使用した企業内の内線網を、IPネットワークに統合する場合の接続構成を示している。図中の $a \sim c$ に該当する装置の適切な組合せはどれか。

| - | a | b | c |
|---|---|---|---|
| ア | PBX | VoIPゲートウェイ | ルータ |
| イ | PBX | ルータ | VoIPゲートウェイ |
| ウ | VoIPゲートウェイ | PBX | ルータ |
| エ | VoIPゲートウェイ | ルータ | PBX |
解説: 従来の電話システムを IP ネットワークに統合するために必要なデバイスの役割を考えよう。
- PBX (Private Branch Exchange):企業の拠点内で内線電話を交換するための装置。電話機が直接つながる (a)
- VoIP ゲートウェイ:電話の音声信号を IP パケットに変換(またはその逆)して、IP ネットワークとつなぐための装置 (b)
- ルータ:IP ネットワーク上でパケットを転送するための装置 (c)
したがって、a = PBX、b = VoIP ゲートウェイ、c = ルータ となる。答えは ア。