六本木 Linux カーネル読書会 0.1.0 documentation

Linux システムコール読書会 第一回 プロセス管理編1 〜 getpid 〜

«  六本木 Linux カーネル読書会   ::   Contents   ::   第(1+1)回 六本木 Linux カーネル読書会 〜 プロセス管理 ロード第一章 〜  »

Linux システムコール読書会 第一回 プロセス管理編1 〜 getpid 〜

申し込みは connpass から。

スライドは こちら

togetter は こちら

内容まとめ

  • この勉強会の趣旨: Linuxシステムコールを通して、カーネルの仕組みを勉強する
    • システムコール == カーネルのAPI。プログラマにとって馴染みやすそう
  • 本日のお題「getpid」
  • 実際にサンプルコードを動かしてみる
    • プロセスIDが表示される。そりゃそうだ。
  • 実際にソースコードを追ってみる
  • syscallの定義
    • include/linux/unistd.h => include/asm/unistd.h
    • __SYSCALL - arch/c6x/kernel/sys_c6x.c:51
      • キーがsyscall numberで値がsyscallを呼び出す関数のテーブルを作ってる
  • kernel/timer.cに定義されているらしいので飛んでみる
  • SYSCALL_DEFINE0(getpid) - kernel/timer.c:1405
    • SYSCALL_DEFINED0はシステムコールを定義するマクロ(引数0)
    • currentの型はtask_struct構造体 - include/linux/sched.h:1264
      • #define current get_current() - include/asm/current.h:17
        • asm-generic は architecture specific ではない時の実装
      • プロセスの情報を表わす構造体
      • current変数は現在のプロセスの情報を保持している
      • 参考: プロセスとtask_struct構造体
      • task_struct の pid が今回目的のプロセス ID
  • 「もっとABIとかsystem callの深い所に潜ってみようぜ!」

    • ABI = Application Binary Interface
  • arch/x86/kernel/entry_32.S

  • sys_call_tableはどこに定義されているの? - const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] - arch/x86/kernel/syscall_32.c:18

    • [0 ... __NR_syscall_max] = &sys_ni_syscall, #include <asm/syscalls_32.h>
      • [N ... N’] は C99で追加された文法らしい
      • 0から__NR_syscall_maxのシステム例外を返すsys_ni_syscallで初期化
      • その後 asm/syscalls_32.h で後から上書き
        • asm/syscall_32.hはコンパイル時にarch/x86/syscall/syscalltbl.shを使って生成
  • glibc-2.16/sysdeps/unix/sysv/linux/i386/sysdep.h

    • INTERNAL_SYSCALL
      • kernel への割り込みを実際に発生させている所
  • 三種類のシステム命令

    • int 80
      • 昔からあった命令。メモリにアクセスするのでオーバーヘッドが高い
    • sysenter
      • pen2 以降で追加した命令。レジスタだけで完結するので速い
    • syscall
      • AMDがK6で導入した命令(らしい)
  • 今後の話

    • プロセス,スケジュール,ネットワーク,メモリ
      • プロセス、スケジューリング回りをベースに本を呼んでいくのはどう?
      • minixを見るのとかはどう?
      • プロのためのLinuxシステム10年効く技術

参考リンク

«  六本木 Linux カーネル読書会   ::   Contents   ::   第(1+1)回 六本木 Linux カーネル読書会 〜 プロセス管理 ロード第一章 〜  »