Soumettre la recherche
Mettre en ligne
Unix architecture
•
3 j'aime
•
2,287 vues
raw-hide
Suivre
UNIXの歴史から始まり、OSの基本的な機能の説明やカーネルとおしゃべりするためのシステムコールなどについての内容です!
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 51
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Unixコマンド入門
Unixコマンド入門
Satosi Sakai
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
Yuma Ohgami
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介
Yuma Ohgami
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
Yuma Ohgami
ここんとーく in 大分 (opencoconのご紹介と次期バージョンの予告)
ここんとーく in 大分 (opencoconのご紹介と次期バージョンの予告)
shimadah
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
Yuma Ohgami
UEFIベアメタルプログラミング
UEFIベアメタルプログラミング
Yuma Ohgami
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
shimadah
Recommandé
Unixコマンド入門
Unixコマンド入門
Satosi Sakai
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
Yuma Ohgami
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介
Yuma Ohgami
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
Yuma Ohgami
ここんとーく in 大分 (opencoconのご紹介と次期バージョンの予告)
ここんとーく in 大分 (opencoconのご紹介と次期バージョンの予告)
shimadah
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
Yuma Ohgami
UEFIベアメタルプログラミング
UEFIベアメタルプログラミング
Yuma Ohgami
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
shimadah
帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)
帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)
shimadah
ターミナル上でのSwift運用 ver.1.1
ターミナル上でのSwift運用 ver.1.1
HarutakaMatsumoto
ターミナル上でのSwift運用
ターミナル上でのSwift運用
HarutakaMatsumoto
XRDPで怠惰な日々を送る
XRDPで怠惰な日々を送る
monochrojazz
Dockerfile for Perl development
Dockerfile for Perl development
Yuzo Iwasaki
サーバーだけじゃない!Linux デスクトップを使い倒そう!その2
サーバーだけじゃない!Linux デスクトップを使い倒そう!その2
Fuminobu Takeyama
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバ
zgock
自宅サーバ仮想化
自宅サーバ仮想化
anubis_369
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
shimadah
今時のLinuxにおけるGPUエンコード事情
今時のLinuxにおけるGPUエンコード事情
zgock
OS development beginner version 20160611
OS development beginner version 20160611
Langur
Gentoo Linuxの紹介
Gentoo Linuxの紹介
University of Tsukuba Linux User Group
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
VirtualTech Japan Inc.
Microsoft azureとdockerとansibleと
Microsoft azureとdockerとansibleと
Kinoshita Miku
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
Langur
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Masataka Tsukamoto
秀丸最強化計画
秀丸最強化計画
Kiichi Kajiura
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
Takuto Matsuu
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
Unix 基礎
Unix 基礎
Sho A
Unixファイルシステムの歴史
Unixファイルシステムの歴史
magoroku Yamamoto
Contenu connexe
Tendances
帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)
帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)
shimadah
ターミナル上でのSwift運用 ver.1.1
ターミナル上でのSwift運用 ver.1.1
HarutakaMatsumoto
ターミナル上でのSwift運用
ターミナル上でのSwift運用
HarutakaMatsumoto
XRDPで怠惰な日々を送る
XRDPで怠惰な日々を送る
monochrojazz
Dockerfile for Perl development
Dockerfile for Perl development
Yuzo Iwasaki
サーバーだけじゃない!Linux デスクトップを使い倒そう!その2
サーバーだけじゃない!Linux デスクトップを使い倒そう!その2
Fuminobu Takeyama
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバ
zgock
自宅サーバ仮想化
自宅サーバ仮想化
anubis_369
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
shimadah
今時のLinuxにおけるGPUエンコード事情
今時のLinuxにおけるGPUエンコード事情
zgock
OS development beginner version 20160611
OS development beginner version 20160611
Langur
Gentoo Linuxの紹介
Gentoo Linuxの紹介
University of Tsukuba Linux User Group
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
VirtualTech Japan Inc.
Microsoft azureとdockerとansibleと
Microsoft azureとdockerとansibleと
Kinoshita Miku
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
Langur
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Masataka Tsukamoto
秀丸最強化計画
秀丸最強化計画
Kiichi Kajiura
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
Takuto Matsuu
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
Tendances
(20)
帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)
帰ってきた凄い謎マシン (ARMのDevice Tree話, 2015年6月 東海道らぐ浜松)
ターミナル上でのSwift運用 ver.1.1
ターミナル上でのSwift運用 ver.1.1
ターミナル上でのSwift運用
ターミナル上でのSwift運用
XRDPで怠惰な日々を送る
XRDPで怠惰な日々を送る
Dockerfile for Perl development
Dockerfile for Perl development
サーバーだけじゃない!Linux デスクトップを使い倒そう!その2
サーバーだけじゃない!Linux デスクトップを使い倒そう!その2
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバ
自宅サーバ仮想化
自宅サーバ仮想化
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
今時のLinuxにおけるGPUエンコード事情
今時のLinuxにおけるGPUエンコード事情
OS development beginner version 20160611
OS development beginner version 20160611
Gentoo Linuxの紹介
Gentoo Linuxの紹介
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
Microsoft azureとdockerとansibleと
Microsoft azureとdockerとansibleと
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
秀丸最強化計画
秀丸最強化計画
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
#ljstudy KVM勉強会
#ljstudy KVM勉強会
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
En vedette
Unix 基礎
Unix 基礎
Sho A
Unixファイルシステムの歴史
Unixファイルシステムの歴史
magoroku Yamamoto
Finding Key Influencers and Viral Topics in Twitter Networks Related to ISIS ...
Finding Key Influencers and Viral Topics in Twitter Networks Related to ISIS ...
Steve Kramer
tce
tce
Mateus Cozer
Сторінками юридичних періодичних видань.
Сторінками юридичних періодичних видань.
Понкратова Людмила
NeuString - Roaming Discount Agreements vs Spreadsheets e.1.1
NeuString - Roaming Discount Agreements vs Spreadsheets e.1.1
Casper Tribler
BioSharing - ELIXIR All Hands, March 2017
BioSharing - ELIXIR All Hands, March 2017
Susanna-Assunta Sansone
Missions Mobilization Principles @globalcast
Missions Mobilization Principles @globalcast
GlobalCAST Resources
XOHW17 - tReeSearch Project Presentation
XOHW17 - tReeSearch Project Presentation
tReeSearch@NECST
ICDS2 IARIA presentation M. Hartog
ICDS2 IARIA presentation M. Hartog
eSociety Institute of The Hague University of Applied Sciences
Adult Learning Pyramid
Adult Learning Pyramid
jlong1232
Thank you 3.22.2017
Thank you 3.22.2017
Kevin Schafer
Media Literacy: Evaluating the News We Consume
Media Literacy: Evaluating the News We Consume
Shelly Sanchez Terrell
Actividad unidad 3
Actividad unidad 3
Lucy Fernandez
FORTRESS Cascading Effects presentation -ISCRAM 2015
FORTRESS Cascading Effects presentation -ISCRAM 2015
Trilateral Research
Biografía de fernando lópez del castillo
Biografía de fernando lópez del castillo
Fernando Lopez del Castillo
FALTAN MILES DE VACANTES EN LAS ESCUELAS PUBLICAS DE CIUDAD DE BUENOS AIRES
FALTAN MILES DE VACANTES EN LAS ESCUELAS PUBLICAS DE CIUDAD DE BUENOS AIRES
Laura Marrone
Enabling your Company to Embrace SEO by Nakul Goyal
Enabling your Company to Embrace SEO by Nakul Goyal
Nakul Goyal
SVEN.org Design-Led Marketing - Harry West - frog
SVEN.org Design-Led Marketing - Harry West - frog
FortuneCMO, LLC
En vedette
(19)
Unix 基礎
Unix 基礎
Unixファイルシステムの歴史
Unixファイルシステムの歴史
Finding Key Influencers and Viral Topics in Twitter Networks Related to ISIS ...
Finding Key Influencers and Viral Topics in Twitter Networks Related to ISIS ...
tce
tce
Сторінками юридичних періодичних видань.
Сторінками юридичних періодичних видань.
NeuString - Roaming Discount Agreements vs Spreadsheets e.1.1
NeuString - Roaming Discount Agreements vs Spreadsheets e.1.1
BioSharing - ELIXIR All Hands, March 2017
BioSharing - ELIXIR All Hands, March 2017
Missions Mobilization Principles @globalcast
Missions Mobilization Principles @globalcast
XOHW17 - tReeSearch Project Presentation
XOHW17 - tReeSearch Project Presentation
ICDS2 IARIA presentation M. Hartog
ICDS2 IARIA presentation M. Hartog
Adult Learning Pyramid
Adult Learning Pyramid
Thank you 3.22.2017
Thank you 3.22.2017
Media Literacy: Evaluating the News We Consume
Media Literacy: Evaluating the News We Consume
Actividad unidad 3
Actividad unidad 3
FORTRESS Cascading Effects presentation -ISCRAM 2015
FORTRESS Cascading Effects presentation -ISCRAM 2015
Biografía de fernando lópez del castillo
Biografía de fernando lópez del castillo
FALTAN MILES DE VACANTES EN LAS ESCUELAS PUBLICAS DE CIUDAD DE BUENOS AIRES
FALTAN MILES DE VACANTES EN LAS ESCUELAS PUBLICAS DE CIUDAD DE BUENOS AIRES
Enabling your Company to Embrace SEO by Nakul Goyal
Enabling your Company to Embrace SEO by Nakul Goyal
SVEN.org Design-Led Marketing - Harry West - frog
SVEN.org Design-Led Marketing - Harry West - frog
Similaire à Unix architecture
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
Tizen & Crosswalk
Tizen & Crosswalk
Naruto TAKAHASHI
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
Fumihito Yokoyama
210728 mpy
210728 mpy
Takuya Nishimoto
Bsd suki
Bsd suki
yamori813
私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)
Hiroshi Hayakawa
どっかのしたのほう
どっかのしたのほう
_norin_
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
Center for Embedded Computing Systems, Nagoya Univ.
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Masaki Muranaka
Unix コマンド入門
Unix コマンド入門
Sho A
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
Futoshi Tanuma
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
7shi
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWEST
Kiyoshi Ogawa
composer-scriptsについて
composer-scriptsについて
Hiraku Nakano
基礎教養としてのUbuntuサーバ_後編.pptx
基礎教養としてのUbuntuサーバ_後編.pptx
Yuji Naito
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)
Kazuko Itoda
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Takashi Sogabe
Open design computer project(boost)
Open design computer project(boost)
Ito Takahiro
Similaire à Unix architecture
(20)
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Tizen & Crosswalk
Tizen & Crosswalk
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
210728 mpy
210728 mpy
Bsd suki
Bsd suki
私とOSSの25年
私とOSSの25年
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)
どっかのしたのほう
どっかのしたのほう
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
TOPPERSプロジェクトの紹介 OSC2017 Tokyo Fall
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Unix コマンド入門
Unix コマンド入門
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWEST
composer-scriptsについて
composer-scriptsについて
基礎教養としてのUbuntuサーバ_後編.pptx
基礎教養としてのUbuntuサーバ_後編.pptx
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Open design computer project(boost)
Open design computer project(boost)
Unix architecture
1.
UNIX の設計思想 井上直人 2015/01/21
2.
目次 • 目的 • 対象者 •
効果・効能 • 歴史 • カーネル • システムコール • リソース • プロセス • ファイルディスクリプタ • 終了コード • パイプ • fork • まとめ • ここから先は • 参考文献 • その他
3.
目的 UNIX の仕組みと哲学を学び コンピュータープログラミングを 楽しくハックする
4.
対象者 • 低レイヤーで動くプログラムをよく知らない • UNIX
に興味はあるけど C言語 を覚えるのは大変 • コマンドは使えるけど、なぜそう使うのか分からない
5.
効果・効能 • 明日から使える特効薬ではありません • いつか役に立ちます・・・ •
過剰摂取は身を滅ぼします
6.
歴史 • 1969年に AT&T
のベル研究所で UNIX が誕生 • ゲームがしたかったから研究所の端に転がっていた PDP-7 にゲームプログラムを移植 • アセンブリで書かれていたものを C言語 で書きなお した • UNIX と C言語 はともに成長していった
7.
歴史 • デニス・リッチー 2011年逝去 FreeBSD 9.0
や RedHat16 のリリースノートにメッセージが添えられている 「プログラミング言語C」の著者 ! • ケン・トンプソン 正規表現の普及に貢献 ラインエディター ed は正規表現の機能があった UTF-8 の開発 次世代 UNIX と謳われた幻の OS Plan9 での成果 Google で Go 言語の開発 ! • ブライアン・カーニハン Hello World を B言語 のチュートリアルで最初に用いた 「プログラミング言語C」の著者
8.
カーネル • CPU • メモリ •
ハードディスク • BDドライブ • グラフィックボード • ネットワークカード • サウンドカード OS の機能の 中心 となる部分 = カーネル
9.
カーネル 低レイヤーの機能を抽象化し API として提供する ! システムコール
を呼び出して仕事を依頼する
10.
システムコール コマンドをトレースしてどんなシステムコールが 呼ばれているのか調べてみよう Mac $ sudo dtruss
-a command Linux $ sudo strace command
11.
システムコール $ man open
# Mac のオープンコマンド $ man 2 open # システムコールの open() システムコールを man で参照するには セクション 2 をみる
12.
システムコール セクション情報は以下の4つ 1. ユーザーコマンド 2. システムコール
(カーネル関数) 3. サブルーチン (Cライブラリ関数) 4. デバイス (/dev のスペシャルファイル)
13.
リソース あらゆるものをファイルとしてみなし 木構造のファイルシステムとして構築 ! デバイスもソケットもパイプもすべて ファイルで扱えるインターフェースを備える ! IO の基本は open,
read, write, close である
14.
リソース デバイスってただのリソース? Mac $ ls /dev $
file /dev/* # ファイルの種類を表示
15.
リソース • キャラクターデバイス プリンタ、モデム、キーボードなど ! • ブロックデバイス ハードディスクなど ランダムアクセスできないのが特徴
16.
リソース デバイスのファイルシステムへの マウント情報をみよう $ mount
17.
リソース $ lpq $ echo
“Hello Printer!” | lpr -Pfoo プリンターはデバイスとしてマウントされる ! プリンターもまたリソースなので共通の IO インターフェースで扱える
18.
リソース $ echo C-v
C-g サウンドカードもまたリソースなので共通の IO インターフェースで扱える Linux では /dev/dsp や /dev/audio にサ ウンドカードがマウントされる 信号を送って音が鳴ることを確かめてみよう $ echo “aaaaaa” > /dev/dsp
19.
リソース ネットワークもまたリソースなので共通の IO インターフェースで扱える? ネットワークにおいてはソケットを作ることで 共通のインターフェースを持つことになる
20.
プロセス あらゆるプログラムは実行時にプロセスとして 立ち上がる Ruby Process.pid Process.ppid getpid というシステムコールが呼ばれる
21.
ファイルディスクリプタ プロセスでリソースを開くとファイルディスクリプ タが割り当てられる ! ファイルディスクリプタはプロセスとともに生き プロセスとともに死ぬ Ruby IO#fileno
22.
ファイルディスクリプタ Ruby f1 = File.open('/dev/null') puts
f1.fileno ! f2 = File.open('/etc/hosts') puts f2.fileno ! f1.close ! f3 = File.open('/etc/ntp.conf') puts f3.fileno
23.
ファイルディスクリプタ Ruby STDIN.fileno STDOUT.fileno STDERR.fileno 0, 1, 2
のファイルディスクリプタは どこに割り当てられている? /dev 配下にヒントがあったよ
24.
ファイルディスクリプタ Ruby Process.getrlimit(:NOFILE) Process.getrlimit(:FSIZE) ファイルディスクリプタの限界 ファイルサイズの限界
25.
ファイルディスクリプタ $ httperf --server
www.test.com —port 80 --uri /index.html —num-conn 30000 必要になる場面はあるの? ! ある httperf などのパフォーマンスツー ルで socket をたくさん開くときなど
26.
ファイルディスクリプタ httperf はどんなシステムコールを呼んでる?
27.
終了コード 終了コードは 0-255 の整数値で返る 正常終了は
0 なぜ複数の終了コードがあるのだろう? Ruby exit exit 22
28.
終了コード Ruby $ echo "Hi"
&& ruby -e 'exit' && echo "OK?" $ echo "Hi" && ruby -e 'exit!' && echo "OK?" $ echo "Hi" && ruby -e 'abort' && echo "OK?" $ echo "Hi" && ruby -e 'raise' && echo "OK?" raise は例外メッセージとバックトレースが STDERR に出力される
29.
パイプ • IPC とは
プロセス間通信 のことである • パイプは IPC を可能にする • ネットワークにおいて IPC を高速に実現するには UNIX ドメインソケットを使う
30.
パイプ • コマンドを独立したプロセスとして 同時
に実行する • そのプロセス間をパイプでつなぐ • パイプは 非常に効率よく プロセスを処理する
31.
パイプ Shell $ /usr/bin/time -l
cat /usr/share/dict/words ! $ /usr/bin/time -l cat /usr/share/dict/words | grep purple | awk '{print length($1), $1}' | sort -n | tail -n 1 | cut -d " " -f 2
32.
パイプ パイプはなぜこんなに速く処理できるのか? ! プロセスを同時に実行し read と
write がメモリバッ ファを通して逐次実行されるため
33.
パイプ パイプを使えるプログラムを フィルタ と呼ぶ UNIX
ではすべてのプログラムは フィルタ として振る 舞うことを期待する
34.
fork • fork はプロセスを生成するためのシステムコール •
子プロセスは親プロセスの すべてのメモリーのコピー を引き継ぐ • 子プロセスには新しくメモリのアドレス空間が割り当 てられるが CoW* 機構によって実際の物理メモリの 確保は 遅延 される * Ruby1.9 まではこの機能が使えなかったが 2.0 から Bitmap Marking によって GC が改善したため 問題なく使える
35.
fork fork は親プロセスが開いている ファイルディスクリプタも同様に引き継ぐ
36.
fork Ruby if fork p "true
が返る" else p "false が返る" end if の挙動がおかしい?
37.
fork Ruby p Process.fork fork の返り値って何?
38.
fork Ruby fork do 5.times do sleep
1 puts "僕は孤児です・・・" end end ! abort "子どもを待たずに親が死ぬ" 孤児プロセスとは?
39.
fork Ruby fork do 5.times do sleep
1 puts "僕は孤児です・・・" end end ! # 子プロセスの中で、どれか一つが終了するまで待つ Process.wait ! abort "親が死んだ・・・"
40.
fork Ruby pid = fork
do sleep 1 puts "#{Process.pid}: 僕は孤児です・・・" end ! p Process.waitpid pid
41.
fork Ruby puts Process.fork {
sleep 1 } ! # 親プロセスが終了しない状況を再現 sleep 10 ゾンビプロセスとは?
42.
fork fork は UNIX
プログラミングにおいて 様々な場面で使用されている unicorn での fork 利用例 https://github.com/defunkt/unicorn/blob/ 20f3b0c94474709fc6468a8a707b1c205ca80677/lib/unicorn/ launcher.rb
43.
fork Shell :(){ :|:& };: シンプルで美しいとされる シェル版の
fork 爆弾
44.
fork 何が起こったのか? • プロセステーブル を埋め尽くす •
プロセスを殺そうとしても開いたプロセステーブルを 即座 に fork が占領する • CPU実行とメモリも 肥大化するためシステムの動作 が困難となり再起動以外に方法がなくなる
45.
まとめ • システムコール はカーネルとおしゃべりするための たった一つの方法 •
UNIX は すべてをファイルとみなす ことで抽象化さ れた共通インターフェースを提供した • すべてのプログラムはプロセス として分散処理される
46.
まとめ • ファイルディスクリプタ はプロセスがリソースにアク セスするための番号 •
適切な 終了コード は十分な判断材料になる • パイプは プロセス間通信 を高速に行うことができる • fork によって プロセスからプロセスを生成 できる
47.
ここから先は • CoW (copy
on write) • シグナルハンドラ • デーモンプロセス • prefork サーバー ! • ぜひ見て欲しい • UNIX の欠点を取り除いた次世代分散 OS Plan9 • すべてをファイルにするという UNIX の概念をさらに推し進めた ! • 「UNIX という考え方」古い本だが名著
48.
参考文献 「なるほどUNIXプロセス」より・まつもとさんの言葉 http://gyazo.com/3f6ca21ca46d975bc57c732acaacae63 ! 「ファイルシステム」Wikipedia 出典 http://ja.wikipedia.org/wiki/ %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB %E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0 ! 【書籍】普通の Linux
プログラミング ! 【書籍】UNIXという考え方 ! /dev/null の実装の一部解説 http://devnull.synergy-marketing.co.jp/2013/07/dev-null/
49.
参考文献 パイプとフィルタ ソフトウェア工学における有用なアーキテクチャ ¦
POSTD http://postd.cc/pipes-and-filters/ ! UNIX 6th code reading (パイプのコード解説) http://d.hatena.ne.jp/takahirox/20111231/1325330383 ! UNIX ツールを作成するためのヒント http://postd.cc/unix-tools-hints/ ! jq、xmllintコマンドさようなら。俺はパイプが好きだから http://qiita.com/richmikan@github/items/ e051b5d882c3dd2a39c6 ! プロセスを fork するときのこと http://hibariya.github.io/entries/20120326/a0.html
50.
参考文献 なるほどUnixプロセス読んだ - デーモン化のためのdouble
fork http://hakobe932.hatenablog.com/entry/2013/04/28/210815 ! Ruby 2.0.0 の GC 改善 http://magazine.rubyist.net/?0041-200Special-gc ! fork 爆弾 http://ja.wikipedia.org/wiki/Fork%E7%88%86%E5%BC%BE
51.
参考文献 Plan9 UNIX との違い http://plan9.aichi-u.ac.jp/unix.html ! Plan9
日記 ネットワークはどう抽象化されるか http://d.hatena.ne.jp/oraccha/20060305 ! Linux に勝てなかった Plan9 http://www.atmarkit.co.jp/news/analysis/200902/09/ future.html
Télécharger maintenant