やっぱりやっぱり BSDBSD が好きが好き
ならず者技術屋ならず者技術屋
Hiroki “sabotage” MoriHiroki “sabotage” Mori
2015/x/x2015/x/x
なぜ BSD ?
• 四半世紀前にはじめての UNIX の仕事
が 4.3BSD でした
• 新人のころにコマンドのテストなどを
やらされ、 BSD が体に染みついていま
す
• 企業で作った SYSTEM V より Hacker
な感じがした
• 昔憧れの SUN も最初は BSD 系でした
• ペンギンよりもデーモンの方が可愛い
コンピューターって?
CPU
RAM
ハードディ
スク
ネットワー
ク
ディスプレ
イBUS
Bridge
USB
Flash ROM
OS の起動
• CPU がリセット後にフラッシュメモリ
からブートローダーを読み込みます
• ブートローダーがハードウエアの初期
化を行い、 OS の一部を読み込みます
• OS 本体がロードされて OS が起動し
ます
• UNIX はいったんシングルユーザまで
上がって、途中からマルチユーザにな
ります
• FreeBSD は数段階の処理に分かれてい
実行イメージ
Boot Loader
Kernel
Kernel Extension
Process
UCB BSD
• FreeBSD より前の時代です
• AT&T の UNIX をベースにカリフォル
ニア州立大学バークレー校で開発され
ました
• AT&T と控訴しあい 4.4 をベースに完
全に AT&T の権利が及ばないコードに
なりました
• Socket,select,bpf,tcpdump などは
BSD での成果です
そもそも UNIX って?
• AT&T の研究所で 1969 年に作られま
した
• Multics という OS があったのですが
、使いづらかったため自分で作ったと
いう感じのようです
• 当初はアセンブラで作れていましたが
、早い時期にほとんどを C に書き直さ
れました
• DEC の PDP-7 が最初のプラットフォー
ムでした
おじさんが tcsh な訳
• 私が UNIX な仕事を始めたころには
bash がまだ出始めで一般的ではありま
せんでした
• csh を拡張しコマンドラインの編集が
できる tcsh が便利で使い始めました
• 出所の不明な tcsh をプロダクトに入れ
て KABA の人に怒られました
• とは言え、スクリプトは sh で作ります
2038 年問題
• Unix の時間は 1970 年 1 月 1 日 0 時 0
分 0 秒からの秒で管理されています
• signed int(32bit) の上限 2G が 2038
年にオーバーフローします
• unsigned にしておけばかなり先まで大
丈夫だったんですが。。。
• JSON は 53 ビット幅だそうです
実行ファイル形式
• FreeBSD 2 以前は a.out(assembler
output) 形式でした
• FreeBSD 3 以降は ELF になりました
• Mac OS X では Next 由来の Mach-O と
いう形式です
• file コマンドで種類が表示されます
a.c: ASCII C program text
a.out: ELF 64-bit LSB executable, AMD x86-64, version 1 (FreeBSD),
dynamically linked (uses shared libs), not stripped
/rescue/zcat: ELF 64-bit LSB executable, AMD x86-64, version 1 (FreeBSD),
statically linked, stripped
ppctest: Mach-O universal binary with 2 architectures
ppctest (for architecture i386): Mach-O executable i386
ppctest (for architecture ppc): Mach-O executable ppc
ライセンスのこと
• Linux 系は GPL だったりします
• BSD 系は BSD ライセンスです
• 私は自由度の高い BSD ライセンスが好
きです
• GPL は自由を通り越して窮屈です
Linux と BSD
• 同じ UNIX 系の OS でほぼ同時期に開
発が始まったのにシェアーには差がで
ました
• Linux は重厚長大になってきており、
シンプル&軽量な FreeBSD が好きで
す
• VM 環境は FreeBSD かなり弱いです
閑話休題
dummynet
INTERNET
FreeBSD 7.4R amd64
WIFI
fxp0 fxp1
Bridge
FreeBSD 3 からサポートされました。
通信の遅延・帯域・パケットロスがシミュレート
できます。
http://d.hatena.ne.jp/jitsu102/20110827/1314458661
結果
pipe 1 config delay 100ms 1 回目 2 回目
Apache gzip 1128ms 797ms
Apache 611ms 603ms
Java 922ms 623ms
pipe 1 config bw 64Kbit/s 1 回目 2 回目
Apache gzip 323ms 299ms
Apache 576ms 623ms
Java 448ms 397ms
pipe 1 config plr 0.1 1 回目 2 回目
Apache gzip 3117ms 117ms
Apache 113ms 3107ms
Java 95ms 114ms
パケットロス
10%
帯域規制
64Kbit/s
通信遅延
100ms×2
kqueue
• FreeBSD 4 からサポートされた event
処理のためのシステムコールです
• Select では 32 のエントリーしか管理
できませんでしたが、 kqueue では大
量の Socket などのエントリーを処理
できます
• tail –f が kqueue で実装されています
jail
• chroot を使った半仮想化技術
• 細かい資源の制御は出来ないがシンプ
ルで便利
• 64bit 環境に 32bit 環境の構築も可能
• FreeBSD5 から使えるようになりまし
た
DTrace
• Sun で開発されて FreeBSD にポーテ
ィングされました
• FreeBSD 7 でカーネル、 8 でユーザラ
ンドのサポートが入りました
• Red Hat などにはライセンス (CDDL)
の関係でポーティングされていません
• Mac OS X 10.5 にもポーティングされ
ました
DTrace ってなに?
• デバッグコードやデバッガーを使わず
にカーネルやユーザランドのプロセス
をトレースする事が出来ます
• D 言語で記述します
• DTraceToolkit というユーティリティ
ツールも用意されています
関数の処理回数の確認
$ cat count.d
pid$target::$1:entry
{
@total = count();
}
$ sudo dtrace -s ./count.d -p 186 InputProc
dtrace: script './count.d' matched 1 probe
dtrace: pid 186 has exited
133
関数の処理時間の確認
$ cat time.d
pid$target::$1:entry
{
self->ts[probefunc] = timestamp;
}
pid$target::$1:return
{
@time[probefunc] = sum(timestamp - self->ts[probefunc]);
}
$ sudo dtrace -s time.d -p 115 InputProc
dtrace: script 'time.d' matched 2 probes
dtrace: pid 115 has exited
InputProc 257736003
ナノ秒なので 0.258 秒くらい
Grand Central Dispatch
• Apple が開発して FreeBSD 9 にもポー
ティングされ 11 で正式サポート予定
• FreeBSD では kqueue を使って実装さ
れています
• 処理ブロックを queue に乗せて適宜ス
レッド処理にすることができます
• Queue にのせると Core の数などによ
り最適なスレッドが生成され処理され
ます
• コンパイラーにもちょっと手が入って
サンプルコード
#include <dispatch/dispatch.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
dispatch_queue_t q;
dispatch_time_t t;
q = dispatch_get_main_queue();
t = dispatch_time(DISPATCH_TIME_NOW, 5LL * NSEC_PER_SEC);
// Print a message and exit after 5 seconds.
dispatch_after(t, q, ^{
printf("block_dispatchn");
exit(0);
});
dispatch_main();
return (0);
}
Apple のこと
Mac OS X とは
Mach OS
C
IOUSB…
C,C++
Cocoa
Objective C
Carbon
C
BSD
C
Application
CPU Memory I/O
IOKit
C,C++
Mach OS とは
• CMU で開発されたマイクロカーネル
OS
• メモリの管理とプロセスの管理が
kernel の管理することで、 IO やネッ
トワークは別に管理すべきであるとい
う思想に基づいています
• プロジェクトリーダは MS に転職
• OSF というプロジェクトでも利用され
ました
• Next が採用し、 Apple でも利用され
Mac OS の歴史
1.0 3.4 7.0 7.1 8.1 8.6 9.2.2
HFS
AppleEvent
AppleScript
Componet
Manager
QuickTime
PowerPC
Carbon
HFS+
PowerPC
EOL
10.0 10.4 10.5 10.7
Classic
EOL
Carbon
EOL
Intel
64Bit
Java
Support
EOL
10.6
DTrace
GCD
Rosetta
EOL
Copland
OpenTransport
7.5
• ハードをいじるときは OS を止めて、 OS
をいじるときはハードを止めます
• PowerPC 導入の時は、 MacOS 7.1 で止め
て PowerPC をリリースしました
• MacOS X 導入の時は PowerPC のままリリ
ースしました
• Intel 導入の時は MacOS X 10.4 をリリー
スしてからリリースしました
Apple のリリースポリシー
Apple の失敗
Copland
discoveryd
昔話いろいろ
OMRON のこと
• もともと社内で CAD などで使う SUN
が高かったので自分で作ろうというこ
とで始まった事業です
• 通産省の Σ プロジェクトに参加してま
した
• 途中から LUNA というブランド名でし
た
• BSD や Mach OS もポーティングしま
した
• Motorola の RISC チップ M88K も利用
シリコンバレーの想いで
Mt. Xinu
ISI
最後に
Programming Pearls
• 設計者が完全なものが得られたと思う
のは、もうこれ以上付け加えるものが
無いというときではなく、これ以上取
り除くものがないという時である - ア
ントワーヌ・ド・サン=テグジュペリ
• A designer knows he has achieved
perfection not when there is nothing
left to add, but when there is nothing
left to take away
青柳の小山さんも

Bsd suki

  • 1.
  • 2.
    なぜ BSD ? •四半世紀前にはじめての UNIX の仕事 が 4.3BSD でした • 新人のころにコマンドのテストなどを やらされ、 BSD が体に染みついていま す • 企業で作った SYSTEM V より Hacker な感じがした • 昔憧れの SUN も最初は BSD 系でした • ペンギンよりもデーモンの方が可愛い
  • 3.
  • 4.
    OS の起動 • CPUがリセット後にフラッシュメモリ からブートローダーを読み込みます • ブートローダーがハードウエアの初期 化を行い、 OS の一部を読み込みます • OS 本体がロードされて OS が起動し ます • UNIX はいったんシングルユーザまで 上がって、途中からマルチユーザにな ります • FreeBSD は数段階の処理に分かれてい
  • 5.
  • 6.
    UCB BSD • FreeBSDより前の時代です • AT&T の UNIX をベースにカリフォル ニア州立大学バークレー校で開発され ました • AT&T と控訴しあい 4.4 をベースに完 全に AT&T の権利が及ばないコードに なりました • Socket,select,bpf,tcpdump などは BSD での成果です
  • 7.
    そもそも UNIX って? •AT&T の研究所で 1969 年に作られま した • Multics という OS があったのですが 、使いづらかったため自分で作ったと いう感じのようです • 当初はアセンブラで作れていましたが 、早い時期にほとんどを C に書き直さ れました • DEC の PDP-7 が最初のプラットフォー ムでした
  • 8.
    おじさんが tcsh な訳 •私が UNIX な仕事を始めたころには bash がまだ出始めで一般的ではありま せんでした • csh を拡張しコマンドラインの編集が できる tcsh が便利で使い始めました • 出所の不明な tcsh をプロダクトに入れ て KABA の人に怒られました • とは言え、スクリプトは sh で作ります
  • 9.
    2038 年問題 • Unixの時間は 1970 年 1 月 1 日 0 時 0 分 0 秒からの秒で管理されています • signed int(32bit) の上限 2G が 2038 年にオーバーフローします • unsigned にしておけばかなり先まで大 丈夫だったんですが。。。 • JSON は 53 ビット幅だそうです
  • 10.
    実行ファイル形式 • FreeBSD 2以前は a.out(assembler output) 形式でした • FreeBSD 3 以降は ELF になりました • Mac OS X では Next 由来の Mach-O と いう形式です • file コマンドで種類が表示されます a.c: ASCII C program text a.out: ELF 64-bit LSB executable, AMD x86-64, version 1 (FreeBSD), dynamically linked (uses shared libs), not stripped /rescue/zcat: ELF 64-bit LSB executable, AMD x86-64, version 1 (FreeBSD), statically linked, stripped ppctest: Mach-O universal binary with 2 architectures ppctest (for architecture i386): Mach-O executable i386 ppctest (for architecture ppc): Mach-O executable ppc
  • 11.
    ライセンスのこと • Linux 系はGPL だったりします • BSD 系は BSD ライセンスです • 私は自由度の高い BSD ライセンスが好 きです • GPL は自由を通り越して窮屈です
  • 12.
    Linux と BSD •同じ UNIX 系の OS でほぼ同時期に開 発が始まったのにシェアーには差がで ました • Linux は重厚長大になってきており、 シンプル&軽量な FreeBSD が好きで す • VM 環境は FreeBSD かなり弱いです
  • 13.
  • 14.
    dummynet INTERNET FreeBSD 7.4R amd64 WIFI fxp0fxp1 Bridge FreeBSD 3 からサポートされました。 通信の遅延・帯域・パケットロスがシミュレート できます。 http://d.hatena.ne.jp/jitsu102/20110827/1314458661
  • 15.
    結果 pipe 1 configdelay 100ms 1 回目 2 回目 Apache gzip 1128ms 797ms Apache 611ms 603ms Java 922ms 623ms pipe 1 config bw 64Kbit/s 1 回目 2 回目 Apache gzip 323ms 299ms Apache 576ms 623ms Java 448ms 397ms pipe 1 config plr 0.1 1 回目 2 回目 Apache gzip 3117ms 117ms Apache 113ms 3107ms Java 95ms 114ms パケットロス 10% 帯域規制 64Kbit/s 通信遅延 100ms×2
  • 16.
    kqueue • FreeBSD 4からサポートされた event 処理のためのシステムコールです • Select では 32 のエントリーしか管理 できませんでしたが、 kqueue では大 量の Socket などのエントリーを処理 できます • tail –f が kqueue で実装されています
  • 17.
    jail • chroot を使った半仮想化技術 •細かい資源の制御は出来ないがシンプ ルで便利 • 64bit 環境に 32bit 環境の構築も可能 • FreeBSD5 から使えるようになりまし た
  • 18.
    DTrace • Sun で開発されてFreeBSD にポーテ ィングされました • FreeBSD 7 でカーネル、 8 でユーザラ ンドのサポートが入りました • Red Hat などにはライセンス (CDDL) の関係でポーティングされていません • Mac OS X 10.5 にもポーティングされ ました
  • 19.
  • 20.
    関数の処理回数の確認 $ cat count.d pid$target::$1:entry { @total= count(); } $ sudo dtrace -s ./count.d -p 186 InputProc dtrace: script './count.d' matched 1 probe dtrace: pid 186 has exited 133
  • 21.
    関数の処理時間の確認 $ cat time.d pid$target::$1:entry { self->ts[probefunc]= timestamp; } pid$target::$1:return { @time[probefunc] = sum(timestamp - self->ts[probefunc]); } $ sudo dtrace -s time.d -p 115 InputProc dtrace: script 'time.d' matched 2 probes dtrace: pid 115 has exited InputProc 257736003 ナノ秒なので 0.258 秒くらい
  • 22.
    Grand Central Dispatch •Apple が開発して FreeBSD 9 にもポー ティングされ 11 で正式サポート予定 • FreeBSD では kqueue を使って実装さ れています • 処理ブロックを queue に乗せて適宜ス レッド処理にすることができます • Queue にのせると Core の数などによ り最適なスレッドが生成され処理され ます • コンパイラーにもちょっと手が入って
  • 23.
    サンプルコード #include <dispatch/dispatch.h> #include <err.h> #include<stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { dispatch_queue_t q; dispatch_time_t t; q = dispatch_get_main_queue(); t = dispatch_time(DISPATCH_TIME_NOW, 5LL * NSEC_PER_SEC); // Print a message and exit after 5 seconds. dispatch_after(t, q, ^{ printf("block_dispatchn"); exit(0); }); dispatch_main(); return (0); }
  • 24.
  • 25.
    Mac OS Xとは Mach OS C IOUSB… C,C++ Cocoa Objective C Carbon C BSD C Application CPU Memory I/O IOKit C,C++
  • 26.
    Mach OS とは •CMU で開発されたマイクロカーネル OS • メモリの管理とプロセスの管理が kernel の管理することで、 IO やネッ トワークは別に管理すべきであるとい う思想に基づいています • プロジェクトリーダは MS に転職 • OSF というプロジェクトでも利用され ました • Next が採用し、 Apple でも利用され
  • 27.
    Mac OS の歴史 1.03.4 7.0 7.1 8.1 8.6 9.2.2 HFS AppleEvent AppleScript Componet Manager QuickTime PowerPC Carbon HFS+ PowerPC EOL 10.0 10.4 10.5 10.7 Classic EOL Carbon EOL Intel 64Bit Java Support EOL 10.6 DTrace GCD Rosetta EOL Copland OpenTransport 7.5
  • 28.
    • ハードをいじるときは OSを止めて、 OS をいじるときはハードを止めます • PowerPC 導入の時は、 MacOS 7.1 で止め て PowerPC をリリースしました • MacOS X 導入の時は PowerPC のままリリ ースしました • Intel 導入の時は MacOS X 10.4 をリリー スしてからリリースしました Apple のリリースポリシー
  • 29.
  • 30.
  • 31.
    OMRON のこと • もともと社内でCAD などで使う SUN が高かったので自分で作ろうというこ とで始まった事業です • 通産省の Σ プロジェクトに参加してま した • 途中から LUNA というブランド名でし た • BSD や Mach OS もポーティングしま した • Motorola の RISC チップ M88K も利用
  • 32.
  • 33.
  • 34.
    Programming Pearls • 設計者が完全なものが得られたと思う のは、もうこれ以上付け加えるものが 無いというときではなく、これ以上取 り除くものがないという時である- ア ントワーヌ・ド・サン=テグジュペリ • A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away
  • 35.