SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
古賀信哉
株式会社アットマークテクノ
プロセス間通信の概要
プロセス間通信を使う意義
プロセス同士の間でのデータ(や制御)の受け渡し
アプリケーション間通信
スレッド間通信
違うホスト上のプロセスとの通信を含む
分散処理
プロセスとは(仮想記憶がある場合)
仮想アドレス空間 + 実行コード + スレッド
プロセスとは(仮想記憶がある場合)
仮想アドレス空間 + 実行コード + スレッド
仮想アドレス空間上の RAM 領域
定数領域 + 静的変数領域
スタック + 動的割り当て可能領域
仮想アドレス空間上の実行コード領域
仮想アドレス空間はプロセス毎に異なり、
互いに干渉しない(できない)
プロセスとは(仮想記憶がある場合)
仮想アドレス空間 + 実行コード + スレッド
仮想アドレス空間上の RAM 領域
定数領域 + 静的変数領域
スタック + 動的割り当て可能領域
仮想アドレス空間上の実行コード領域
仮想アドレス空間はプロセス毎に異なり、
互いに干渉しない(できない)
「プロセス境界」
プロセス間通信とは
プロセス境界をまたぐデータ(や制御)の受け渡し
どうやって?
プロセス間通信とは
プロセス境界をまたぐデータ(や制御)の受け渡し
どうやって?
プロセスとプロセスの間を繋ぐものを使う
パイプ、ファイル
共有メモリ
ソケット、etc.
どんな方法を使うにせよ、
カーネルの助けが必要
ところで
人は、なぜプロセス間通信をしたいのか?
プログラムを組み合わせて動かせる
例:単機能プログラム同士をパイプで結合
プログラムを書き換えずに機能拡張できる!
プログラムを組み合わせて動かせる
例:単機能プログラム同士をパイプで結合
モジュール同士の結合を疎にできる
関数結合 > プロセス間通信
関数結合: static lib > shared lib (DLL)
プロセス結合: 共有メモリ > スレッド間通信
プログラムを書き換えずに機能拡張できる!
スケーラビリティの確保: 保守性と拡張性の向上
プログラムを組み合わせて動かせる
例:単機能プログラム同士をパイプで結合
モジュール同士の結合を疎にできる
関数結合 > プロセス間通信
関数結合: static lib > shared/dynamic lib
プロセス結合: 共有メモリ > スレッド間通信
プログラムを書き換えずに機能拡張できる!
スケーラビリティの確保: 保守性と拡張性の向上
AWS のエピソード:
オンライン販売サイトからクラウドサービス基盤へ
密結合より大きいオーバーヘッド
使う側・作る側にスキルが要求される
密結合より大きいオーバーヘッド
使う側・作る側にスキルが要求される
分割されたものの組み合わせを理解すること
適切に分割して設計すること
カーネルの場合にも!
:モノリシックカーネル vs マイクロカーネル
密結合より大きいオーバーヘッド
使う側・作る側にスキルが要求される
分割されたものの組み合わせを理解すること
適切に分割して設計すること
カーネルの場合にも!
:モノリシックカーネル vs マイクロカーネル
保守性・拡張性・堅牢性との間のトレードオフ
ステートフルから RESTful へ
ステートレスなプロトコル
単純・汎用の操作
統一された対象指定構文(URL based)
例
Web サービスにおける REST API
ロボット制御における ROS
SOAP から REST へ
CORBA から ROS へ
ステートフルから RESTful へ
ステートレスなプロトコル
単純・汎用の操作
統一された対象指定構文(URL based)
例
Web サービスにおける REST API
ロボット制御における ROS
SOAP から REST へ
CORBA から ROS へ
密結合から疎結合へ、という傾向。
ソフトウェア設計のガイドラインにもなる(?)
プロセスとカーネルの違い
プロセス:
仮想アドレス空間 + 実行コード + スレッド
カーネル:仮想アドレス空間 + 実行コード
カーネルの実行コード
システムコールハンドラ + 割り込みハンドラ
スケジューラ
プロセスとカーネルの違い
プロセス:
仮想アドレス空間 + 実行コード + スレッド
カーネル:仮想アドレス空間 + 実行コード
カーネルの実行コード
システムコールハンドラ + 割り込みハンドラ
スケジューラ
カーネルにはスレッドがない???
ps ax --forest で見てみよう
プロセスとカーネルの違いとは?
特権レベル
動作開始の順序(OS 起動時に最初に動くか)
複数存在するかどうか
スレッドの作られ方
余談:用語の注意
「カーネルスレッド」vs「カーネルレベルスレッド」
余談2:Linux のプロセスとスレッド
fork(), vfork(), clone()
カーネルとプロセスの間の制御の遷移
カーネル→プロセス
プロセスの生成時
プロセスから遷移した後の復帰時
プロセス→カーネル
割込みをトリガーとする(※システムコールも)
スケジューラのプロセス切り替え(※同上)
パイプ
名前なし、名前付き(FIFO)
メッセージキュー
System V 版、POSIX 版
ソケット通信(他ホストあり)
UNIX ドメイン、TCP/IP、UDP、etc.
パイプ
名前なし、名前付き(FIFO)
メッセージキュー
System V 版、POSIX 版
ソケット通信(他ホストあり)
UNIX ドメイン、TCP/IP、UDP、etc.
ソケット API の汎用性:
Cactusphere の SoC でもコア間通信に利用!
共有メモリ
System V 版、POSIX 版
同期機構
System V 版、POSIX 版
非伝統的なもの
dbus
Binder (and ashmem)
mmap() との組み合わせ
パイプ
/fs/pipe.c (?)
メッセージキュー
/ipc/mqueue.c (?)
ソケット通信
/net/socket.c (?)
余談:Elixir のクロスリファレンスは便利!
https://elixir.bootlin.com/linux/v5.10.130/source
https://elixir.bootlin.com/u-boot/latest/source
共有メモリ
/ipc/shmem.c (?)
同期機構
/kernel/locking/{mutex.c, semaphore.c, etc.}
非伝統的なもの
dbus: ユーザランドで実装
/drivers/android/binder.c
排他制御:MUTual EXclusion
同期:synchronization
直列化の考え方(serialization)
https://cs.stackexchange.com/a/10770
https://www.haiku-os.org/legacy-
docs/ArtOfBeOSProgramming/chapter/chapter03.html#3.
3.2
排他制御以外の同期:
タイミング合わせのための待ち動作
排他制御:MUTual EXclusion
同期:synchronization
直列化の考え方(serialization)
https://cs.stackexchange.com/a/10770
排他制御・同期とスケジューラ
スケジューラ以下の階層では
ベアメタルの場合と同様の方策
排他制御:MUTual EXclusion
同期:synchronization
直列化の考え方(serialization)
https://cs.stackexchange.com/a/10770
排他制御・同期とスケジューラ
スケジューラ以下の階層では
ベアメタルの場合と同様の方策
ロックレス(ロックフリー)な
データ構造とアルゴリズム
排他制御:MUTual EXclusion
同期:synchronization
直列化の考え方(serialization)
https://cs.stackexchange.com/a/10770
排他制御・同期とスケジューラ
スケジューラ以下の階層では
ベアメタルの場合と同様の方策
ロックレス(ロックフリー)な
データ構造とアルゴリズム
≠デバイスドライバの「割り込みハンドラ」関数
Linux の request_irq() で登録する割り込みハンドラ
関数は、カーネルスレッドが呼び出す!
カーネルを呼び出すオーバーヘッド
システムコール
割込みと割り込みハンドラ
Linux の futex
/kernel/futex.c とアトミック演算
カーネルを呼び出すオーバーヘッド
システムコール
割込みと割り込みハンドラ
Linux の futex
/kernel/futex.c とアトミック演算
カーネル内部でも:
割込みは、速い?
割込み vs ポーリング:
割込みハンドラ
割込み応答スレッドのポーリング
プロセス間通信の概要
プロセス間通信を使う意義
ソフトウェアを分割する道具
疎結合による保守性と拡張性の向上
上手に使えば堅牢性も向上
より良い使い方(設計)をするのが大切!

Mais conteúdo relacionado

Mais de Shin-ya Koga

2021 12-02.koga.lecture note-revised
2021 12-02.koga.lecture note-revised2021 12-02.koga.lecture note-revised
2021 12-02.koga.lecture note-revisedShin-ya Koga
 
2021 10-12.linx device-tree
2021 10-12.linx device-tree2021 10-12.linx device-tree
2021 10-12.linx device-treeShin-ya Koga
 
品質管理グループ Linux 勉強会
品質管理グループ Linux 勉強会品質管理グループ Linux 勉強会
品質管理グループ Linux 勉強会Shin-ya Koga
 
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)Shin-ya Koga
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)Shin-ya Koga
 
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)Shin-ya Koga
 
2019 05-19.overview
2019 05-19.overview2019 05-19.overview
2019 05-19.overviewShin-ya Koga
 
2018 08-31.946oss revised
2018 08-31.946oss revised2018 08-31.946oss revised
2018 08-31.946oss revisedShin-ya Koga
 
2017 06-04.overview
2017 06-04.overview2017 06-04.overview
2017 06-04.overviewShin-ya Koga
 
2017 05-21.overview
2017 05-21.overview2017 05-21.overview
2017 05-21.overviewShin-ya Koga
 
正解は一つじゃない: 選択肢と最適解
正解は一つじゃない:選択肢と最適解正解は一つじゃない:選択肢と最適解
正解は一つじゃない: 選択肢と最適解Shin-ya Koga
 
C#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコンC#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコンShin-ya Koga
 
Universal Apps (UWP)
Universal Apps (UWP)Universal Apps (UWP)
Universal Apps (UWP)Shin-ya Koga
 
IoT あるじゃん北海道支部勉強会
IoT あるじゃん北海道支部勉強会IoT あるじゃん北海道支部勉強会
IoT あるじゃん北海道支部勉強会Shin-ya Koga
 
組み込みから IoT へ
組み込みから IoT へ組み込みから IoT へ
組み込みから IoT へShin-ya Koga
 
コードを書かずにLチカ。から始めよう
コードを書かずにLチカ。から始めようコードを書かずにLチカ。から始めよう
コードを書かずにLチカ。から始めようShin-ya Koga
 
デバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoTデバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoTShin-ya Koga
 
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~Shin-ya Koga
 
組み込みでもマルチコア。WEC2013での対応
組み込みでもマルチコア。WEC2013での対応組み込みでもマルチコア。WEC2013での対応
組み込みでもマルチコア。WEC2013での対応Shin-ya Koga
 
CLR/H 第 79 回勉強会での LT
CLR/H 第 79 回勉強会での LTCLR/H 第 79 回勉強会での LT
CLR/H 第 79 回勉強会での LTShin-ya Koga
 

Mais de Shin-ya Koga (20)

2021 12-02.koga.lecture note-revised
2021 12-02.koga.lecture note-revised2021 12-02.koga.lecture note-revised
2021 12-02.koga.lecture note-revised
 
2021 10-12.linx device-tree
2021 10-12.linx device-tree2021 10-12.linx device-tree
2021 10-12.linx device-tree
 
品質管理グループ Linux 勉強会
品質管理グループ Linux 勉強会品質管理グループ Linux 勉強会
品質管理グループ Linux 勉強会
 
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
 
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)
 
2019 05-19.overview
2019 05-19.overview2019 05-19.overview
2019 05-19.overview
 
2018 08-31.946oss revised
2018 08-31.946oss revised2018 08-31.946oss revised
2018 08-31.946oss revised
 
2017 06-04.overview
2017 06-04.overview2017 06-04.overview
2017 06-04.overview
 
2017 05-21.overview
2017 05-21.overview2017 05-21.overview
2017 05-21.overview
 
正解は一つじゃない: 選択肢と最適解
正解は一つじゃない:選択肢と最適解正解は一つじゃない:選択肢と最適解
正解は一つじゃない: 選択肢と最適解
 
C#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコンC#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコン
 
Universal Apps (UWP)
Universal Apps (UWP)Universal Apps (UWP)
Universal Apps (UWP)
 
IoT あるじゃん北海道支部勉強会
IoT あるじゃん北海道支部勉強会IoT あるじゃん北海道支部勉強会
IoT あるじゃん北海道支部勉強会
 
組み込みから IoT へ
組み込みから IoT へ組み込みから IoT へ
組み込みから IoT へ
 
コードを書かずにLチカ。から始めよう
コードを書かずにLチカ。から始めようコードを書かずにLチカ。から始めよう
コードを書かずにLチカ。から始めよう
 
デバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoTデバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoT
 
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
 
組み込みでもマルチコア。WEC2013での対応
組み込みでもマルチコア。WEC2013での対応組み込みでもマルチコア。WEC2013での対応
組み込みでもマルチコア。WEC2013での対応
 
CLR/H 第 79 回勉強会での LT
CLR/H 第 79 回勉強会での LTCLR/H 第 79 回勉強会での LT
CLR/H 第 79 回勉強会での LT
 

2022-09-15.studyMeeting.pdf