タグ

2010年2月20日のブックマーク (3件)

  • jpn.ph

    This domain may be for sale!

  • GCC拡張インラインアセンブラ構文 - kikairoya’s diary

    Twitterでうっかり"GCCインラインアセンブラ拡張構文の解説でもするか"と発言したら、二人くらいに期待ageされたので、とりあえずCPUIDを例にインラインアセンブラの解説をします。 環境はi486(x86,IA-32)上のGCCが動く環境を想定しています。80386はCPUIDが無いのでごめんなさい。 x86_64(x64,AMD64)の人もそのまま遊べます。MIPSやPPC動かしている人は回れ右。今回はOSは関係ありません。 コンパイラは当然GCC(gcc/g++)です。3.2以降または4.0以降で動くと思います。MSVCやdmdの人は回れ右。最適化は特記の無い限りしてもかまいません。 単純な例から。 とりあえずcpuid命令を発行してみます。 int main() { asm volatile ( "xor %eax, %eax\n\t" "cpuid" ); return 0

    GCC拡張インラインアセンブラ構文 - kikairoya’s diary
  • タスク状態セグメント - 詳解Linuxカーネル Wiki*

    3.3.2 タスク状態セグメント タスク状態セグメント(TSS) - 80x86アーキテクチャで用意されているハードウェアコンテキスを格納するためのセグメント。 LinuxではTSSの初期化はしているが、ハードウェアコンテキストの切り替えには使用していない。 [質問] Q1. なぜTSSを使用しないのか? A1. 複数のCPUに対応していないため Q2. 使用しないTSSをなぜ初期化するのか? A2. TSSの役割はハードウェアコンテキストだけではない。 = カーネルモードのスタックの読み込み = I/Oパーミッションビットマップ TSSの実装 init_tss配列 - CPUの数だけtss_struct構造体の要素数を持つ配列 tss_struct構造体 - TSSの実体 TSSD( Task State Segment Descriptor ) - 8byte長のディスクリプタ inc

    タスク状態セグメント - 詳解Linuxカーネル Wiki*