shigemk2スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。鍵管理ユーザレベルアプリケーションはUDPやTCPなどのトランスポートプロトコルを扱うような方法でIPSecを利用することが出来ないIPSecで使用する鍵の自動配布はインターネット鍵交換(IKE)プロトコルによって行うデーモンの話はしないユーザーレベルアプリケーションはPF_KEYの型を持つソケットを使ってセキュリティデータベースにアクセスSAの期限切れなど、セキュリティデータベースの状態が変化すると、アプリケーションはその情報をKEYソケットからメッセージとして読みだすデータベースに対するコマンドを送るアドレスプロトコルファミリを指定してデータを送信するとルーティングソケットを通すROUTINGソケットを通すと暗号化されるという話だろうか突然鍵の話出てきたけど暗号化の話が出てきたからではなかろうか。関係ごとに別々のアルゴリズムを設定したりするかもsadbはセキュリティアソシエーションデータベースの略。過剰な抽象化パケットを処理する関数を管理するためにいくつかの関数テーブルをもっているtdb_xformなどいろいろなテーブルがあるけど、実際の処理を隠蔽するため保守のためにこれらのインタフェースは継承するよういなった新しいプロトコルや暗号関数の追加が簡単に。復号化をやるチップがNICに載っているどこかしらにタグが保存されているカーネルが受信したIPv4パケットip_input()で処理そこで2つの検査を行うパケットがトンネルの一部かどうか(中継の間だけIPSecで)パケットを転送するときに行う(ルータは転送するパケットに関するセキュリティポリシーを実装することが出来る)おーけーだったらポリシー関数に渡して処理。関数を最後まで実行して戻るのではなく、2つあるいはソレ以上の関数がお互いを呼び合いながら協調的に動作するプログラミングのスタイル。同じ関数が2回呼ばれるから情報を共有しないといけない。その情報がタグなので、タグがないといまどういうステータスなのか分からないここでは、ペイロードにそういう情報を入れるのだろうかTCPのしたにIPv4?IPv4のうえにIPSecのうえにTCP?このあたりはパケットを読まないとわからないかも。→暗号記述子を要求できる記述子の準備ができるとcrypto_dispatch()関数を使って暗号サブシステムに渡して処理のキューに投入。作業をバッチ化するかどうかを決めて、しない場合はキューによる処理を完全にバイパスして直接コールバック関数を呼ぶ負荷が軽い暗号処理についてはキューを使わずに直接実行(crypto_req_qキューをバイパスして最適化)cryptoはクリプトと読む。ソースコードにはcrp_ret_qはあるけど。計算機の電源が投入されたばかりの状態ではCPUは何も実行していない。バイナリイメージを記憶装置からメモリにロード。概要とはいってもカーネルは単なるプログラムファイルシステム上にバイナリイメージがファイルとして保管されているルートファイルシステムbootという名前のついた特別なプログラムをロードして実行する実行を開始したbootプログラム/boot/kernel/kernelをロードしてカウントダウンコンソールを通してユーザーにコマンド行インタプリタのプロンプトを表示してユーザーの入力を受け付けるカーネルはbootコマンドを実行することで起動ながれ。初期化作業をおこなう機種非依存の設定を終了すると、システムは実行可能な状態になる。メモリのE8000にROMがあって、それがBIOS。多段ロケットのイメージForthはbootが解釈できるインタプリタ。bootのなかにForthが入っている。Forthは誰も書かないから、Luaになるかも?みたいな流れはあるUEFIから直接bootを起動できるので、BIOSを使わずにUEFIアプリケーションをごにょごにょする界隈があったりする。GRUBGRUBはbootに該当するbootはカーネルをロードする。bootはファイルシステムを解釈しているUEFIはそれ用のアプリケーションがあって最低限のことができるライブラリが用意されているMBRにGRUBのコードを読ませて実行させる(512bに収まるようなものではない)GRUBからvmlinuz(カーネルをgzip圧縮しているやつ)を読み込んで実行するマルチブートプロトコルGRUBからFreeBSDを起動したいときはPBRからbootの位置を特定してFreeBSDのカーネルを起動するというひと手間が必要。WindowsもFreeBSDのbootプログラムに相当するものがあって、仕組みは一緒。初期のBSDにおいてはハードウェアの初期化は完全に専用に書かれたコードによって行われていた。系統的というのは枝分かれしている意味合い。基本サービスカーネルのサブシステムが使用する基本サービスを立ち上げないといけない以下が基本サービス。初期化の処理を分離している。基本サービスの実行が始まるとカーネルのCPUに関する準備作業は終了。割り込みサポートとか他のCPUの存在確認とかここまでやったらCPUそのものを起動。残された初期化作業をやるstartrtclock()関数で実時間クロックをスタートバッファシステムの起動FreeBSDは安定記憶に強く依存しているので、早期にスワッピングとかメモリのページングとかの資源にアクセスできるようにバッファシステムはブートシステムの初期段階で設定する。SMPシステムはAPICやCPUモジュールよりもあとにスタートされるcpu_mpモジュールのSYSINITのorder引数はSI_ORDER_SECONDAPICはSMPシステムに絶対不可欠mp_start()を実行することでSMPシステム上のすべてのプロセッサが実行可能な状態になる起動周りでコメント依存関係がいろいろあることくらいわかるかなっていうマルチCPUのことを考えると面倒かもAPICモジュール→CPUモジュール→SMPモジュールの順番でモジュールが起動されるCPUモジュールによって2番め以降のコアが使えるようになる。広告プロフィールid:shigemk2web系エンジニアの速記的備忘録。メモ書き故、中身については保証致しません。実在している団体等とは一切関係ありません。Blog|ブログを報告する。