easy!テキストの70ページ本文inodeが指すブロックは、割り当てられていなければならない。xv6のブロックアロケータは、ディスク上の空きビットマップ(1ビットが1ブロックに対応する)を維持する。0ビットは、対応するブロックが空いているということを示す。1ビットは、対応するブロックが利用中であるということを示す。ブートセクタやスーパーブロックやinodeブロックやビットマップブロックに対応するビット群は、常に1がセットされている。ブロックアロケータは、2つの機能を提供する。balloc関数は、新たなディスク上のブロックを割り当て、bfree関数はブロックを解放する。balloc関数は、readsb関数の呼び出しから開始し、ディスク(もしくはバッファキャッシュ)からスーパーブロックを読み込み、変数sbに格納する。balloc関数は、(BBLOCKマクロを使って)ブートセクタやスーパーブロックやinodeブロックによって消費されているブロックがいくつあるか計算する事によって、どのブロックがそのデータブロックの空きビットマップを保持するか決定する。ループでは、ブロック0からsb.sizeまで各ブロックを走査する。ビットマップのビットが0の部分に対応するブロック、つまり空きであると示されているブロックを探す。balloc関数がそのようなブロックを見つけた場合、ビットマップを更新し、そのブロックを返す。効率のため、ループは2つの部分からなる。外側のループは、各ビットマップブロックのビットを読み取る。内側のループは、ひとつのビットマップブロックにあるBPBビットを全て調べる。2つのプロセスが同時にブロックを割り当てようとして起こる可能性がある競合は、バッファキャッシュが一度に一つのプロセスだけを通すという事実によって防がれる。brelse(bp);}bfree関数は、対応するビットマップブロックを探し、対応するビットをクリアする。こちらもまた、bread関数やbrelse関数によって暗黙的に排他処理されるので、bfree関数自体には排他のためのロックは必要ない。厳密にはまだinodeレベルの話ではなく、ブロックレベルの話のようです。inodeの割り当てなどで直接このあたりを使うんでしょう。前回の投稿から間が空きました。1Gに移行してました。安くて、性能もなかなか。16を使うようにしたんですが、新しいsystemdの使い方を調べたり、NetworkManagerの不具合っぽい症状に悩まされたり、使ってたフレームワークのメジャーバージョンを上げたら互換性がなくてアプリの修正が必要になったり、元々気になってたアプリ性能を改善するためにgroongaを入れてそれを使うようにしたりと、移行のついでに思い切ってやりすぎたおかげで時間がかかってしまいました。勉強になったのでよしとします。systemdは慣れると、いろんなアプリケーションのサービス化が楽だし、groongaは正直まだ使いづらい(特にPythonからは。今のところrubyの方がライブラリが整備されてるみたい。)けど性能は素晴らしいの一言に尽きます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。...774Fedexアカウント取得後にオンラインで手続きすれ...NETこういうのずっと見てしまう気持ちがよくわかります(...BINGEブログを拝見させていただきました・・・。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。