2日連続でサボってしまいましたが再開です。今日は27日目。あとちょいですね。今日はLDT(Loca Descriptor Table)とライブラリの話です。
LDTの方はGDT(Global Descriptor Table)のローカルバージョンで、タスクに対してセグメントを分ける機構のことです。これはCPUで実装されていて、アプリ用のセグメントをLDTで設定すれば、他のタスクからはその領域を使えなくなります。なるほど、このへんの機構はCPUに実装されていたのですね。
そういえば今年の1月ごろにCPUの投機的実行を逆手に取って、カーネル空間を推測する手法が話題になりました。今までCPUについてはレジスタを演算するところといったくらいしかイメージがありませんでしたが、色々やっているんですねぇ。勉強になります。
続いてライブラリの話です。この辺は特に目新しい情報はありませんが、構造化プログラミングという考え方がないときは一つのデカイプログラムを作っていたという歴史のあたりは面白かったです。まあ、よく考えれば当たり前なんですが、最初から構造化があったわけではなく、小さいプログラムで構造を作った方が便利だと気づいた人達が時代を変えていったのですね。そして現在ではオブジェクト指向やマイクロサービスみたいな話につながっていく、と。
で、今までフラットに一つのディレクトリにまとめられていたソース群をキレイに整頓しています。makefileが多くなるのが個人的には好きではないですけど、やっぱりディレクトリ別に管理されていたほうが探しやすいですね。自分の環境だとそもそも高速にコンパイルできていたので気になりませんでしたが、これでちょっとした修正をコンパイルするのに差分でコンパイルできるので早くて便利ですね。
とりあえず今日の内容は理解できましたのでヨシとします。
LDTの方はGDT(Global Descriptor Table)のローカルバージョンで、タスクに対してセグメントを分ける機構のことです。これはCPUで実装されていて、アプリ用のセグメントをLDTで設定すれば、他のタスクからはその領域を使えなくなります。なるほど、このへんの機構はCPUに実装されていたのですね。
そういえば今年の1月ごろにCPUの投機的実行を逆手に取って、カーネル空間を推測する手法が話題になりました。今までCPUについてはレジスタを演算するところといったくらいしかイメージがありませんでしたが、色々やっているんですねぇ。勉強になります。
続いてライブラリの話です。この辺は特に目新しい情報はありませんが、構造化プログラミングという考え方がないときは一つのデカイプログラムを作っていたという歴史のあたりは面白かったです。まあ、よく考えれば当たり前なんですが、最初から構造化があったわけではなく、小さいプログラムで構造を作った方が便利だと気づいた人達が時代を変えていったのですね。そして現在ではオブジェクト指向やマイクロサービスみたいな話につながっていく、と。
で、今までフラットに一つのディレクトリにまとめられていたソース群をキレイに整頓しています。makefileが多くなるのが個人的には好きではないですけど、やっぱりディレクトリ別に管理されていたほうが探しやすいですね。自分の環境だとそもそも高速にコンパイルできていたので気になりませんでしたが、これでちょっとした修正をコンパイルするのに差分でコンパイルできるので早くて便利ですね。