SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
システムコール
            とみたまさひろ
              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

Mais conteúdo relacionado

Mais procurados

[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
 

Mais procurados (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の動きを見てみよう
 

Semelhante 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
 

Semelhante 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
 

Mais de Masahiro Tomita

Mais 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

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Último (8)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

システムコール

  • 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