こんぶにのブログ

エンジニアという職業を通して学んだことを発信するブログです。

【2024/2/8】応用情報学習メモ

ページング

プログラムがページに収まってる。 それを仮想アドレス空間に割り当てる(持ってくる)
実際に使う時には主記憶にページを持ってくる。
で、実際にPCがプログラム使いたいよ~って時に主記憶にないと、「ページフォールト」 が発生する。
これは仮想アドレス空間からページを持ってくる割り込み処理のこと。
ページサイズというのはプログラムを収められる量のこと。
これが減れば当然プログラムが入る量も減る。ただし、無駄がなくなる

リアルタイムOSの割り込み

組み込み用途向けのOS。
組み込みっていうのは、何よりも最優先に行いたい処理(安全装置的な)なので、タスクの順番待ちとかできない。する暇ない。
割り込み処理は最優先に行われる。
割り込み禁止の場合はそれすらも禁止されるが、タスク切り替え禁止は無視される。
割り込みを禁止するのは親で、タスク切り替え禁止は自分でやってるから権限ないみたいなイメージ。

ロールフォワード、ロールバック、チェックポイント

DBMSは定期的にバックアップを取っている。(DBまるごと。そのまま復帰できる。)
でも常時バックアップを取っているわけではない。
じゃあ、バックアップ取ったあとに障害が発生したら、バックアップ~障害間のデータはどうなるの?
ここはなんと、ジャーナルファイルというのが活躍してくれる。
ジャーナルファイルは何かデータを更新するたびに「こういうのを書き込みましたよ~」「ちなみに書き込む前はこんなんですよ~」というのを記録してくれる。 前者を「更新後ジャーナル」、後者を「更新前ジャーナル」と呼ぶ。

ロールフォワード

フォワードの名の通り、前に進める。
どっから前に?その答えはバックアップ時点から。
例えば、バックアップを取ってからしばらくして障害が起きたとする。
すると、そのバックアップを取ってから障害の間までのデータが消える。
そこで、ジャーナルファイルが出てくる。この場合は「更新後」の方。
バックアップをまず復旧させる。
そのあとにバックアップ後から「更新後」ジャーナルに刻まれたデータを全て反映させれば、バックアップ~障害間のデータが全て失われることなく復旧する。

ロールバック

バックの名の通り、戻る。
どこから?データ更新後から。
正確にはトランザクションが失敗した場合、中途半端に登録したデータを全て消して、そのトランザクションをなかったことにするためのもの。
で、そのトランザクション実行前の状態に戻るには「更新前ジャーナルファイル」の出番だ。
そこにトランザクション実行前の状態が刻まれているはずなので、それを参考にDBの状態を戻すこと。これをロールバックと呼ぶ。

チェックポイント

データを登録するときに、ひとつひとつ登録しにいくのでは効率が悪いので、ある程度溜まったらまとめて登録しよう!というのをバッファという。
DBは補助記憶(外付けHDD的な?)にあるのだが、そこにデータを転送するのは遅い。だが主記憶なら早い。
だったら、主記憶にある程度溜めて、一定以上溜まったら補助記憶にまとめて登録しに行けばいいじゃないか。という思想。
その登録しに行く(いった)時点をチェックポイントと呼ぶ。
ただ、これでは主記憶に溜まってる状態のまま主記憶がぶっ壊れたとかが起きた時に、データが消えてしまう。(ただ貯めてるだけで実際には登録してないから)
そんなときも大丈夫。
何故ならジャーナルファイルがあるから。
チェックポイントのあとで障害が起きたとする。
例えばチェックポイント時点でコミット済みなら、何の問題もなく復旧できる。
チェックポイントの途中でトランザクションしてたなら、チェックポイントの途中から始めて、更新後ジャーナルを参考にトランザクションを続けることが出来る。
チェックポイント後にトランザクションを開始して、その途中で障害が起きたなら、更新前ジャーナルを参考に、ロールバックするしかない。