SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
システムコール
            とみたまさひろ
              2011-03-19



システムコール           Powered by Rabbit 0.9.2
自己紹介
    ✓ とみた まさひろ
    ✓ プログラマー
    ✓ mailto:tommy@tmtm.org
    ✓ http://d.hatena.ne.jp/tmtms
    ✓ http://twitter.com/tmtms
                                            1/34
システムコール                          Powered by Rabbit 0.9.2
自己紹介


    ✓ 日本Rubyの会
    ✓ 日本MySQLユーザ会
    ✓ 長野ソフトウェア技術者グループ


                               2/34
システムコール             Powered by Rabbit 0.9.2
自己紹介




          こんな本書きました

                                 3/34
システムコール               Powered by Rabbit 0.9.2
NSEG

    ✓ #1 Rubyの黒魔術
    ✓ #3 はじめてのRuby拡張ライブラ
      リ
    ✓ #6 Ruby紹介
    ✓ #11 RSpecとCucumber
                                      4/34
システムコール                    Powered by Rabbit 0.9.2
今回は初
  非Ruby
                     5/34
システムコール   Powered by Rabbit 0.9.2
システム
  コール                6/34
システムコール   Powered by Rabbit 0.9.2
カーネルの機
   能を直接使う
   ためのインタ
    フェース
システムコール
                     7/34
          Powered by Rabbit 0.9.2
スクリプト言語
  やVMやブラウ
  ザ上の言語か
  らは使えない             8/34
システムコール   Powered by Rabbit 0.9.2
C的には普通の関数



          int fd = open("/etc/passwd", O_RDONLY);




                                                        9/34
システムコール                                      Powered by Rabbit 0.9.2
これはライブラリ関数



          FILE *fp = fopen("/etc/passwd", "r");




                                                   10/34
システムコール                                    Powered by Rabbit 0.9.2
man のセクション


    ✓ 2 - システムコール
    ✓ 3 - ライブラリ関数


                               11/34
システムコール                Powered by Rabbit 0.9.2
違い
    ✓ システムコール
          ✓ カーネルの機能を直接使う
            (open, read, ...)

    ✓ ライブラリ関数
          ✓ カーネルの機能を使わない
            (sqrt, sprintf, ...)
          ✓ 間接的にカーネルの機能を使う
            (fopen, printf,...)
                                           12/34
システムコール                            Powered by Rabbit 0.9.2
違い




                       13/34
システムコール        Powered by Rabbit 0.9.2
違い


    例: コマンドを実行
    ✓ system(3)
    ✓ fork(2), exec(2), wait(2)


                                          14/34
システムコール                           Powered by Rabbit 0.9.2
カーネルの機能
    ✓ ファイル操作
    ✓ プロセス処理
    ✓ ネットワーク
    ✓ デバイスアクセス
    ✓ 端末制御
    ✓ etc...
                             15/34
システムコール              Powered by Rabbit 0.9.2
ファイル操作
    ✓ open, read, write, close
    ✓ stat, pipe
    ✓ chmod, chown
    ✓ link, symlink, unlink
    ✓ rename, mkdir, rmdir
                                         16/34
システムコール                          Powered by Rabbit 0.9.2
プロセス処理
    ✓ fork
    ✓ exec
    ✓ wait
    ✓ kill
    ✓ exit
                              17/34
システムコール               Powered by Rabbit 0.9.2
ネットワーク

    ✓ socket
    ✓ bind, listen, accept
    ✓ connect
    ✓ shutdown

                                     18/34
システムコール                      Powered by Rabbit 0.9.2
その他

    ✓ chdir
    ✓ getuid, setuid
    ✓ getpid, getppid
    ✓ その他、 man syscalls 見て

                                     19/34
システムコール                      Powered by Rabbit 0.9.2
strace


    ✓ システムコールのトレース
    ✓ コマンドの処理を追う
    ✓ プロセスの状態を見る


                             20/34
システムコール              Powered by Rabbit 0.9.2
strace ls

          % strace ls
          execve("/bin/ls", ["ls"], [/* 41 vars */]) = 0
          ...
          open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
          ...
          getdents64(3, /* 8 entries */, 32768) = 264
          getdents64(3, /* 0 entries */, 32768) = 0
          close(3)                                = 0
          ...
          write(1, "MyBooks.jpg SystemCall.rd Syst"..., 62) = 62
          ...




                                                                                 21/34
システムコール                                                                 Powered by Rabbit 0.9.2
strace cp

          % strace cp a b
          execve("/bin/cp", ["cp", "a", "b"], [/* 41 vars */]) = 0
          ...
          stat64("b", 0xbfd726c0)                 = -1 ENOENT (No such file or directory)
          stat64("a", {st_mode=S_IFREG|0644, st_size=96324, ...}) = 0
          stat64("b", 0xbfd724e0)                 = -1 ENOENT (No such file or directory)
          open("a", O_RDONLY|O_LARGEFILE)         = 3
          fstat64(3, {st_mode=S_IFREG|0644, st_size=96324, ...}) = 0
          open("b", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4
          fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
          read(3, "177ELF11100000000020"..., 32768) = 32768
          write(4, "177ELF11100000000020"..., 32768) = 32768
          read(3, "610000020337023075l361"..., 32768) = 32768
          write(4, "610000020337023075l361"..., 32768) = 32768
          read(3, "00021124$350215303773771"..., 32768) = 30788
          write(4, "00021124$350215303773771"..., 30788) = 30788
          read(3, "", 32768)                      = 0
          close(4)                                = 0
          close(3)                                = 0



                                                                                            22/34
システムコール                                                                           Powered by Rabbit 0.9.2
第一部まとめ
    ✓ 今回はRubyじゃない
    ✓ システムコールで低レベルの制御
      が可能
    ✓ strace でプログラムの処理を調
      べられる
    ✓ スクリプト言語やVMばっかりじゃ
      なくて、Cからシステムコール使う
      のも楽しいよ          23/34
システムコール               Powered by Rabbit 0.9.2
mmap
                  24/34
システムコール   Powered by Rabbit 0.9.2
ファイルを
    メモリに
   マッピング
システムコール
                  25/34
          Powered by Rabbit 0.9.2
read
     通常は open して少しずつ read




                                26/34
システムコール                 Powered by Rabbit 0.9.2
mmap
     ファイル全体(または一部)をメモリにマップ




                               27/34
システムコール                Powered by Rabbit 0.9.2
mmap


    ✓ 速い
    ✓ メモリを食わない
    ✓ 大きなファイルで有用


                           28/34
システムコール            Powered by Rabbit 0.9.2
スクリプト言語からは使いにく
          い

    ✓ メモリを直接さわれない
    ✓ 文字列として扱う時はコピーが必
      要

                            29/34
システムコール             Powered by Rabbit 0.9.2
MmapScanner
    ✓ Ruby の拡張ライブラリ
    ✓ StringScanner の mmap 版
    ✓ mmap 領域から正規表現で取り
      出す
    ✓ 取り出したものも
      MmapScanner
                                   30/34
システムコール                    Powered by Rabbit 0.9.2
MmapScanner
     部分的に取り出しても同じメモリを
     共有




                                31/34
システムコール                 Powered by Rabbit 0.9.2
MmapScanner


          f = File.open("filename")
          m = MmapScanner.new(f)
          word = m.scan(/[a-z0-9_]+/i)
          word       # => MmapScanner
          word.to_s # => String

                                           32/34
システムコール                            Powered by Rabbit 0.9.2
課題

    ✓ 速くない
    ✓ ASCII-8BIT only
    ✓ 明に munmap できない
    ✓ 徐々に改善予定

                                33/34
システムコール                 Powered by Rabbit 0.9.2
第二部まとめ


    ✓ MmapScanner 作ってみた
    ✓ やっぱりRubyか


                                  34/34
システムコール                   Powered by Rabbit 0.9.2

Más contenido relacionado

La actualidad más candente

[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェルYuto Takei
 
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御Yuto Takei
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 sandai
 
Linuxカーネル解読室輪講@はてな 第6章
Linuxカーネル解読室輪講@はてな 第6章Linuxカーネル解読室輪講@はてな 第6章
Linuxカーネル解読室輪講@はてな 第6章Kazki Matsumoto
 
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理Yuto Takei
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 sandai
 
Python Kyoto study LT
Python Kyoto study LTPython Kyoto study LT
Python Kyoto study LTNaoya Inada
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 sandai
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話LINE Corporation
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 sandai
 
HDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13wHDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13wCloudera Japan
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門sandai
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublicT2C_
 
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTetsuyuki Kobayashi
 
systemdでよく使うサブコマンド
systemdでよく使うサブコマンドsystemdでよく使うサブコマンド
systemdでよく使うサブコマンドKazuhiro Nishiyama
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiTakashi Hoshino
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門sandai
 
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみようRyu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみようMasaru Oki
 

La actualidad más candente (20)

[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
 
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
Linuxカーネル解読室輪講@はてな 第6章
Linuxカーネル解読室輪講@はてな 第6章Linuxカーネル解読室輪講@はてな 第6章
Linuxカーネル解読室輪講@はてな 第6章
 
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
 
Python Kyoto study LT
Python Kyoto study LTPython Kyoto study LT
Python Kyoto study LT
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
 
HDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13wHDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13w
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
 
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
 
systemdでよく使うサブコマンド
systemdでよく使うサブコマンドsystemdでよく使うサブコマンド
systemdでよく使うサブコマンド
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
 
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみようRyu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみよう
 

Similar a システムコール

#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門Takashi Takizawa
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell scriptMasami Hiramatsu
 
DTrace for biginners part(1)
DTrace for biginners part(1)DTrace for biginners part(1)
DTrace for biginners part(1)Shoji Haraguchi
 
Parquetはカラムナなのか?
Parquetはカラムナなのか?Parquetはカラムナなのか?
Parquetはカラムナなのか?Yohei Azekatsu
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御Toshiharu Harada, Ph.D
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
SELinux_Updates_PoC_20170516
SELinux_Updates_PoC_20170516SELinux_Updates_PoC_20170516
SELinux_Updates_PoC_20170516Kazuki Omo
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりYuya Rin
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会Yoshihisa Ozaki
 

Similar a システムコール (20)

#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell script
 
DTrace for biginners part(1)
DTrace for biginners part(1)DTrace for biginners part(1)
DTrace for biginners part(1)
 
Parquetはカラムナなのか?
Parquetはカラムナなのか?Parquetはカラムナなのか?
Parquetはカラムナなのか?
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御CaitSith 新しいルールベースのカーネル内アクセス制御
CaitSith 新しいルールベースのカーネル内アクセス制御
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
Snapdragon-SCORER
Snapdragon-SCORERSnapdragon-SCORER
Snapdragon-SCORER
 
SELinux_Updates_PoC_20170516
SELinux_Updates_PoC_20170516SELinux_Updates_PoC_20170516
SELinux_Updates_PoC_20170516
 
d-kami x86-1
d-kami x86-1d-kami x86-1
d-kami x86-1
 
d-kami x86-2
d-kami x86-2d-kami x86-2
d-kami x86-2
 
Minix Learning
Minix LearningMinix Learning
Minix Learning
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
Open VZ
Open VZOpen VZ
Open VZ
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
 
Gingerbread
GingerbreadGingerbread
Gingerbread
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 

Más de Masahiro Tomita

Más de Masahiro Tomita (20)

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろ
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわい
 
CSV
CSVCSV
CSV
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
 
Ruby24
Ruby24Ruby24
Ruby24
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
MySQLを拡張する
MySQLを拡張するMySQLを拡張する
MySQLを拡張する
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
 
MyNAができるまで
MyNAができるまでMyNAができるまで
MyNAができるまで
 
文字化け
文字化け文字化け
文字化け
 
Crystal
CrystalCrystal
Crystal
 
メールの暗号化
メールの暗号化メールの暗号化
メールの暗号化
 
文字化け
文字化け文字化け
文字化け
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライト
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Último (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

システムコール

  • 1. システムコール とみたまさひろ 2011-03-19 システムコール Powered by Rabbit 0.9.2
  • 2. 自己紹介 ✓ とみた まさひろ ✓ プログラマー ✓ mailto:tommy@tmtm.org ✓ http://d.hatena.ne.jp/tmtms ✓ http://twitter.com/tmtms 1/34 システムコール Powered by Rabbit 0.9.2
  • 3. 自己紹介 ✓ 日本Rubyの会 ✓ 日本MySQLユーザ会 ✓ 長野ソフトウェア技術者グループ 2/34 システムコール Powered by Rabbit 0.9.2
  • 4. 自己紹介 こんな本書きました 3/34 システムコール Powered by Rabbit 0.9.2
  • 5. NSEG ✓ #1 Rubyの黒魔術 ✓ #3 はじめてのRuby拡張ライブラ リ ✓ #6 Ruby紹介 ✓ #11 RSpecとCucumber 4/34 システムコール Powered by Rabbit 0.9.2
  • 6. 今回は初 非Ruby 5/34 システムコール Powered by Rabbit 0.9.2
  • 7. システム コール 6/34 システムコール Powered by Rabbit 0.9.2
  • 8. カーネルの機 能を直接使う ためのインタ フェース システムコール 7/34 Powered by Rabbit 0.9.2
  • 9. スクリプト言語 やVMやブラウ ザ上の言語か らは使えない 8/34 システムコール Powered by Rabbit 0.9.2
  • 10. C的には普通の関数 int fd = open("/etc/passwd", O_RDONLY); 9/34 システムコール Powered by Rabbit 0.9.2
  • 11. これはライブラリ関数 FILE *fp = fopen("/etc/passwd", "r"); 10/34 システムコール Powered by Rabbit 0.9.2
  • 12. man のセクション ✓ 2 - システムコール ✓ 3 - ライブラリ関数 11/34 システムコール Powered by Rabbit 0.9.2
  • 13. 違い ✓ システムコール ✓ カーネルの機能を直接使う (open, read, ...) ✓ ライブラリ関数 ✓ カーネルの機能を使わない (sqrt, sprintf, ...) ✓ 間接的にカーネルの機能を使う (fopen, printf,...) 12/34 システムコール Powered by Rabbit 0.9.2
  • 14. 違い 13/34 システムコール Powered by Rabbit 0.9.2
  • 15. 違い 例: コマンドを実行 ✓ system(3) ✓ fork(2), exec(2), wait(2) 14/34 システムコール Powered by Rabbit 0.9.2
  • 16. カーネルの機能 ✓ ファイル操作 ✓ プロセス処理 ✓ ネットワーク ✓ デバイスアクセス ✓ 端末制御 ✓ etc... 15/34 システムコール Powered by Rabbit 0.9.2
  • 17. ファイル操作 ✓ open, read, write, close ✓ stat, pipe ✓ chmod, chown ✓ link, symlink, unlink ✓ rename, mkdir, rmdir 16/34 システムコール Powered by Rabbit 0.9.2
  • 18. プロセス処理 ✓ fork ✓ exec ✓ wait ✓ kill ✓ exit 17/34 システムコール Powered by Rabbit 0.9.2
  • 19. ネットワーク ✓ socket ✓ bind, listen, accept ✓ connect ✓ shutdown 18/34 システムコール Powered by Rabbit 0.9.2
  • 20. その他 ✓ chdir ✓ getuid, setuid ✓ getpid, getppid ✓ その他、 man syscalls 見て 19/34 システムコール Powered by Rabbit 0.9.2
  • 21. strace ✓ システムコールのトレース ✓ コマンドの処理を追う ✓ プロセスの状態を見る 20/34 システムコール Powered by Rabbit 0.9.2
  • 22. strace ls % strace ls execve("/bin/ls", ["ls"], [/* 41 vars */]) = 0 ... open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 ... getdents64(3, /* 8 entries */, 32768) = 264 getdents64(3, /* 0 entries */, 32768) = 0 close(3) = 0 ... write(1, "MyBooks.jpg SystemCall.rd Syst"..., 62) = 62 ... 21/34 システムコール Powered by Rabbit 0.9.2
  • 23. strace cp % strace cp a b execve("/bin/cp", ["cp", "a", "b"], [/* 41 vars */]) = 0 ... stat64("b", 0xbfd726c0) = -1 ENOENT (No such file or directory) stat64("a", {st_mode=S_IFREG|0644, st_size=96324, ...}) = 0 stat64("b", 0xbfd724e0) = -1 ENOENT (No such file or directory) open("a", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=96324, ...}) = 0 open("b", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4 fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 read(3, "177ELF11100000000020"..., 32768) = 32768 write(4, "177ELF11100000000020"..., 32768) = 32768 read(3, "610000020337023075l361"..., 32768) = 32768 write(4, "610000020337023075l361"..., 32768) = 32768 read(3, "00021124$350215303773771"..., 32768) = 30788 write(4, "00021124$350215303773771"..., 30788) = 30788 read(3, "", 32768) = 0 close(4) = 0 close(3) = 0 22/34 システムコール Powered by Rabbit 0.9.2
  • 24. 第一部まとめ ✓ 今回はRubyじゃない ✓ システムコールで低レベルの制御 が可能 ✓ strace でプログラムの処理を調 べられる ✓ スクリプト言語やVMばっかりじゃ なくて、Cからシステムコール使う のも楽しいよ 23/34 システムコール Powered by Rabbit 0.9.2
  • 25. mmap 24/34 システムコール Powered by Rabbit 0.9.2
  • 26. ファイルを メモリに マッピング システムコール 25/34 Powered by Rabbit 0.9.2
  • 27. read 通常は open して少しずつ read 26/34 システムコール Powered by Rabbit 0.9.2
  • 28. mmap ファイル全体(または一部)をメモリにマップ 27/34 システムコール Powered by Rabbit 0.9.2
  • 29. mmap ✓ 速い ✓ メモリを食わない ✓ 大きなファイルで有用 28/34 システムコール Powered by Rabbit 0.9.2
  • 30. スクリプト言語からは使いにく い ✓ メモリを直接さわれない ✓ 文字列として扱う時はコピーが必 要 29/34 システムコール Powered by Rabbit 0.9.2
  • 31. MmapScanner ✓ Ruby の拡張ライブラリ ✓ StringScanner の mmap 版 ✓ mmap 領域から正規表現で取り 出す ✓ 取り出したものも MmapScanner 30/34 システムコール Powered by Rabbit 0.9.2
  • 32. MmapScanner 部分的に取り出しても同じメモリを 共有 31/34 システムコール Powered by Rabbit 0.9.2
  • 33. MmapScanner f = File.open("filename") m = MmapScanner.new(f) word = m.scan(/[a-z0-9_]+/i) word # => MmapScanner word.to_s # => String 32/34 システムコール Powered by Rabbit 0.9.2
  • 34. 課題 ✓ 速くない ✓ ASCII-8BIT only ✓ 明に munmap できない ✓ 徐々に改善予定 33/34 システムコール Powered by Rabbit 0.9.2
  • 35. 第二部まとめ ✓ MmapScanner 作ってみた ✓ やっぱりRubyか 34/34 システムコール Powered by Rabbit 0.9.2