Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゆるくプロセスを学ぼう/yuruhako-0824-process
Search
Yuki Nakata chikuwait
September 01, 2019
Programming
0
420
ゆるくプロセスを学ぼう/yuruhako-0824-process
Yuki Nakata chikuwait
September 01, 2019
Tweet
Share
More Decks by Yuki Nakata chikuwait
See All by Yuki Nakata chikuwait
BitVisorであやつるコンテナネットワーク/BitVisorSummit11
chikuwait
0
570
コンテナ型クラウドサービス基盤における集中型ネットワーク隔離手法/ master-thesis
chikuwait
0
280
Concentrated Isolation for Container Networks Toward Application-aware Sandbox Tailoring / UCC-21
chikuwait
0
220
SKBパケット選抜総選挙 〜 僕たちは誰について行けばいい? 〜 /osc21do
chikuwait
15
3.8k
コンテナ型仮想化技術におけるネットワーク分離の研究事情/ Infra-study LT
chikuwait
2
1k
「おいしくてつよくなる」eBPFのはじめかた/Learn eBPF
chikuwait
13
6k
マルチテナント向けコンテナ環境における軽量かつ柔軟なARPスプーフィング対策の実現 / OS 148
chikuwait
4
1.8k
権力の話/ryukyu-fun-lt-chikuwa
chikuwait
1
250
Implementation and Status of 'mruby in BitVisor'
chikuwait
0
570
Other Decks in Programming
See All in Programming
incrementalモデルの理解を深める
ikkimiyazaki
2
640
GitHub Copilot Tips and Tricks
yuichielectric
26
7.4k
Parallel Socket Communication in Swift
s_shimotori
0
220
品質とスピードを両立: TypeScriptの柔軟な型システムをバックエンドで活用する
kosui
4
870
PHPerKaigi 2024〜10年以上動いているレガシーなバッチシステムを Kubernetes(Amazon EKS) に移行する取り組み〜
tshinowpub
1
220
[スクリプト] Swiftの型推論を学ぼう
omochi
0
110
【KMC春合宿2024】実装視点で見るNeural Radiance Fields
runningoutrate
0
150
document.write再考
brn
5
2.5k
オブジェクトしこう
okuramasafumi
2
130
自作ソフト(VMagicMirror)がVRMA対応してる話+実装のTips
bakudreameater
0
110
Compiling Python to WebAssembly with py2wasm
syrusakbary
0
130
ONE WEDGE_Company_Information
1wedge
0
170
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.8k
What the flash - Photography Introduction
edds
64
11k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
185
15k
How To Stay Up To Date on Web Technology
chriscoyier
781
250k
A designer walks into a library…
pauljervisheath
199
23k
Imperfection Machines: The Place of Print at Facebook
scottboms
257
12k
Stop Working from a Prison Cell
hatefulcrawdad
265
19k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
18
1.7k
The Invisible Side of Design
smashingmag
293
49k
The Language of Interfaces
destraynor
150
23k
Atom: Resistance is Futile
akmur
258
25k
Transcript
プロセスを学ぼう chikuwait 1 2019/08/24 ゆるい勉強会 in はこだて#3
chikuwaitです • Twitter : chiku_wait • 高度ICTコース B4 • システムソフトウェア研究室
• OSや仮想化技術(ハイパーバイザ,コンテナ) などの システムソフトウェア(低レイヤ) が好き • Linux(を使うことではなく仕組みなどが)が好き 自己紹介 2
• オープンソースOSのLinuxのプロセスをメインで扱います • 対象のソースコードはLinux kernel 2.6 前提 3
動作中のプログラムのこと • 処理実行の基本単位で、独立した仮想メモリ空間を持つ • バグで異常終了しても他のプロセスには影響を与えない • プロセスは同一メモリ空間などを共有する1つ以上のスレッドからなる • スレッド:1つのプロセス内で複数の処理を同時に実行できる実行単位 プロセスとは
4 Windows だとこれ→
プロセスとスレッドの関係 5 プロセス1 共有メモリ スレッド2 スレッド1 プロセス2 共有メモリ スレッド1
• プロセスを生成したときに生成した側が親、された側が子になる • プロセスは複数の子を持つことができ、その子が更に子を持てる(孫) • 最も遠い祖先はinitプロセス • 全てのプロセスはinitプロセスを起原にもつ プロセスの親子関係 6
init login … sh vim …
• 大きく分けてテキスト、データ、スタックに分割 • データ:グローバル変数、static変数、malloc() 等 で確保したもの • スタック:関数の局所変数と、関数の引数 • スタックの底:引数と環境変数
• 0番地付近は、メモリを割り当てない • いわゆるNULLポインタ プロセスのメモリ構造 7 カーネル領域 スタック(局所変数等) ヒープ(mallocで確保) 初期化なし静的変数 初期化付き静的変数 テキスト(機械語) Low address High address
task_struct構造体 (include/linux/sched.h) • state: プロセスの実行状態を表現 • thread_info: カーネルに関する低レベル情報と カーネルスタックの保持 •
mm:プロセスのメモリ管理 • binfmt:実行ファイルローダ • pid:プロセスID Linuxカーネルにおけるプロセスの表現 8 volatile long state(TASK_XXX) struct thread_info* thread_info unsigned long flags … prio_array_t* array … struct mm_struct *mm Struct linux_binfmt* binfmt … pid_t pid …
TASK_RUNNING • あるCPUで実行中華、実行可能でCPU割当を待っている TASK_INTERRUPTIBLE • シグナルが受信可能で待機している(シグナルを受信すると起床する) TASK_UNINTERRUPTIBLE • シグナル受信不可で待機中 TASK_STOPPED
• 実行停止中(SIGSTOPなどを受信したり、ptraceで実行停止中) 8つのプロセス実行状態(1/2) 9
TASK_TRACED • Ptraceによるトレース対象になっている TASK_NONINTERACTIVE • 非対話的処理(スケジューラへのヒント) EXIT_ZOMBIE • 通称ゾンビ状態、実行終了して親プロセスによるwait待ち EXIT_DEAD
• 実行終了して、task_structを開放中 8つのプロセス実行状態(2/2) 10
プロセスの状態遷移 11 TASK_RUNNING (実行中) TASK_STOPPED TASK_RUNNING (実行待ち) TASK_UNINTER RUPTIBLE TASK_INTERRU
PTIBLE EXIT_ZOMBIE EXIT_DEAD プロセス開放 プロセス生成 fork,clone exec clone(CLONE_STOPEED) ptrace_notify() 起床 プリエンプト スケジューリング 起床 起床 do_exit() wait exit wait
プロセスのライフサイクル 12 clone execve do_fork copy_process ロード 実行 do_fork():fork/vfork/cloneシステムコールの実体 •
共有する資源のフラグ、スタックサイズ などが引数 • 処理の大半は資源の複製を作成 • e.g. CLONE_VM:メモリ空間(mm_struct)の共有 copy_process():資源の複製処理の実体 • do_forkのフラグの指定によって参照を 増やしたりメモリを確保したりする • task_struct構造体などの複製 do_execve バイナリローダ 終了 exit do_exit
プロセスのライフサイクル 13 execve():execファミリのシステムコール • 今まで使用していた空間を破棄して 新たな空間にプログラムをロードする do_execve() • ファイル名、環境変数、引数のページをコピー •
コピーした領域はexec後にマップする • バイナリローダを試す clone execve do_fork copy_process ロード 実行 do_execve バイナリローダ 終了 exit do_exit
プロセスのライフサイクル 14 バイナリローダ:実行ファイルをメモリ上に展開 • Linuxは複数の実行ファイルフォーマットが 使用できるので、それに合わせて切り替える • e.g. ELFローダ:fs/binfmt_elf.c do_exit():プロセス終了時に呼び出される
• exit_notify():プロセスが終了したことを親に通知 • reparent():終了したプロセスの子プロセスを他 のプロセスの子プロセスにする • __exit_mm():mm_structの開放 clone execve do_fork copy_process ロード 実行 do_execve バイナリローダ 終了 exit do_exit
なるほどわからん 15
3年のオペレーティングシステムの授業でやるはず (Linuxのソースコードまでは触れない) 16
OSの気持ちがほんの少しだけ分かるようになる • 別にプロセスを知ったところで、今日からOSを作れる訳でもないし、 アプリを作れるようになるわけでもないです • 別に普段考えなくていいけど、知らないで考えないより、知った上で 任せる方が良いですよね • OSの挙動や仕組みを知ることで、普段書いているプログラミングで 使っている仕組みを理解することができる
e.g. Thread で、プロセスが分かって何になるの? 17