Enviar pesquisa
Carregar
2022-09-15.studyMeeting.pdf
•
0 gostou
•
70 visualizações
Shin-ya Koga
Seguir
2022/09/15 の、社内ゼミ(Linux kernel 勉強会)で使ったスライド。プロセス間通信の第1回目です。
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 33
Baixar agora
Baixar para ler offline
Recomendados
Mmo game networking_1
Mmo game networking_1
Katsutoshi Makino
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
VirtualTech Japan Inc.
ceph acceleration and storage architecture
ceph acceleration and storage architecture
Yuki Kitajima
Ppt fukui g
Ppt fukui g
harmonylab
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
Shinichiro Isago
これから始める Azure の基礎サービス: IaaS/PaaS
これから始める Azure の基礎サービス: IaaS/PaaS
Daiyu Hatakeyama
201910 azure seminar
201910 azure seminar
SAKURUG co.
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
Recomendados
Mmo game networking_1
Mmo game networking_1
Katsutoshi Makino
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
VirtualTech Japan Inc.
ceph acceleration and storage architecture
ceph acceleration and storage architecture
Yuki Kitajima
Ppt fukui g
Ppt fukui g
harmonylab
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
Shinichiro Isago
これから始める Azure の基礎サービス: IaaS/PaaS
これから始める Azure の基礎サービス: IaaS/PaaS
Daiyu Hatakeyama
201910 azure seminar
201910 azure seminar
SAKURUG co.
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
2021 12-02.koga.lecture note-revised
2021 12-02.koga.lecture note-revised
Shin-ya Koga
2021 10-12.linx device-tree
2021 10-12.linx device-tree
Shin-ya Koga
品質管理グループ Linux 勉強会
品質管理グループ Linux 勉強会
Shin-ya Koga
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
Shin-ya Koga
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)
Shin-ya Koga
2019 05-19.overview
2019 05-19.overview
Shin-ya Koga
2018 08-31.946oss revised
2018 08-31.946oss revised
Shin-ya Koga
2017 06-04.overview
2017 06-04.overview
Shin-ya Koga
2017 05-21.overview
2017 05-21.overview
Shin-ya Koga
正解は一つじゃない:選択肢と最適解
正解は一つじゃない:選択肢と最適解
Shin-ya Koga
C#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコン
Shin-ya Koga
Universal Apps (UWP)
Universal Apps (UWP)
Shin-ya Koga
IoT あるじゃん北海道支部勉強会
IoT あるじゃん北海道支部勉強会
Shin-ya Koga
組み込みから IoT へ
組み込みから IoT へ
Shin-ya Koga
コードを書かずにLチカ。から始めよう
コードを書かずにLチカ。から始めよう
Shin-ya Koga
デバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoT
Shin-ya Koga
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
Shin-ya Koga
組み込みでもマルチコア。WEC2013での対応
組み込みでもマルチコア。WEC2013での対応
Shin-ya Koga
CLR/H 第 79 回勉強会での LT
CLR/H 第 79 回勉強会での LT
Shin-ya Koga
Mais conteúdo relacionado
Mais de Shin-ya Koga
2021 12-02.koga.lecture note-revised
2021 12-02.koga.lecture note-revised
Shin-ya Koga
2021 10-12.linx device-tree
2021 10-12.linx device-tree
Shin-ya Koga
品質管理グループ Linux 勉強会
品質管理グループ Linux 勉強会
Shin-ya Koga
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
Shin-ya Koga
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)
Shin-ya Koga
2019 05-19.overview
2019 05-19.overview
Shin-ya Koga
2018 08-31.946oss revised
2018 08-31.946oss revised
Shin-ya Koga
2017 06-04.overview
2017 06-04.overview
Shin-ya Koga
2017 05-21.overview
2017 05-21.overview
Shin-ya Koga
正解は一つじゃない:選択肢と最適解
正解は一つじゃない:選択肢と最適解
Shin-ya Koga
C#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコン
Shin-ya Koga
Universal Apps (UWP)
Universal Apps (UWP)
Shin-ya Koga
IoT あるじゃん北海道支部勉強会
IoT あるじゃん北海道支部勉強会
Shin-ya Koga
組み込みから IoT へ
組み込みから IoT へ
Shin-ya Koga
コードを書かずにLチカ。から始めよう
コードを書かずにLチカ。から始めよう
Shin-ya Koga
デバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoT
Shin-ya Koga
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
Shin-ya Koga
組み込みでもマルチコア。WEC2013での対応
組み込みでもマルチコア。WEC2013での対応
Shin-ya Koga
CLR/H 第 79 回勉強会での LT
CLR/H 第 79 回勉強会での LT
Shin-ya Koga
Mais de Shin-ya Koga
(20)
2021 12-02.koga.lecture note-revised
2021 12-02.koga.lecture note-revised
2021 10-12.linx device-tree
2021 10-12.linx device-tree
品質管理グループ Linux 勉強会
品質管理グループ Linux 勉強会
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #3(オブジェクト指向言語ふりかえり)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2014年の社内新人教育テキスト #1(プログラミング言語概論)
2019 05-19.overview
2019 05-19.overview
2018 08-31.946oss revised
2018 08-31.946oss revised
2017 06-04.overview
2017 06-04.overview
2017 05-21.overview
2017 05-21.overview
正解は一つじゃない:選択肢と最適解
正解は一つじゃない:選択肢と最適解
C#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコン
Universal Apps (UWP)
Universal Apps (UWP)
IoT あるじゃん北海道支部勉強会
IoT あるじゃん北海道支部勉強会
組み込みから IoT へ
組み込みから IoT へ
コードを書かずにLチカ。から始めよう
コードを書かずにLチカ。から始めよう
デバイスからクラウドへ ~組み込みエンジニアと IoT
デバイスからクラウドへ ~組み込みエンジニアと IoT
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
自律走行ロボットをプログラミングするということ ~ETロボコンの場合~
組み込みでもマルチコア。WEC2013での対応
組み込みでもマルチコア。WEC2013での対応
CLR/H 第 79 回勉強会での LT
CLR/H 第 79 回勉強会での LT
2022-09-15.studyMeeting.pdf
1.
古賀信哉 株式会社アットマークテクノ
2.
プロセス間通信の概要 プロセス間通信を使う意義
3.
プロセス同士の間でのデータ(や制御)の受け渡し アプリケーション間通信 スレッド間通信 違うホスト上のプロセスとの通信を含む 分散処理
4.
プロセスとは(仮想記憶がある場合) 仮想アドレス空間 + 実行コード
+ スレッド
5.
プロセスとは(仮想記憶がある場合) 仮想アドレス空間 + 実行コード
+ スレッド 仮想アドレス空間上の RAM 領域 定数領域 + 静的変数領域 スタック + 動的割り当て可能領域 仮想アドレス空間上の実行コード領域 仮想アドレス空間はプロセス毎に異なり、 互いに干渉しない(できない)
6.
プロセスとは(仮想記憶がある場合) 仮想アドレス空間 + 実行コード
+ スレッド 仮想アドレス空間上の RAM 領域 定数領域 + 静的変数領域 スタック + 動的割り当て可能領域 仮想アドレス空間上の実行コード領域 仮想アドレス空間はプロセス毎に異なり、 互いに干渉しない(できない) 「プロセス境界」
7.
プロセス間通信とは プロセス境界をまたぐデータ(や制御)の受け渡し どうやって?
8.
プロセス間通信とは プロセス境界をまたぐデータ(や制御)の受け渡し どうやって? プロセスとプロセスの間を繋ぐものを使う パイプ、ファイル 共有メモリ ソケット、etc. どんな方法を使うにせよ、 カーネルの助けが必要
9.
ところで 人は、なぜプロセス間通信をしたいのか?
10.
プログラムを組み合わせて動かせる 例:単機能プログラム同士をパイプで結合 プログラムを書き換えずに機能拡張できる!
11.
プログラムを組み合わせて動かせる 例:単機能プログラム同士をパイプで結合 モジュール同士の結合を疎にできる 関数結合 > プロセス間通信 関数結合:
static lib > shared lib (DLL) プロセス結合: 共有メモリ > スレッド間通信 プログラムを書き換えずに機能拡張できる! スケーラビリティの確保: 保守性と拡張性の向上
12.
プログラムを組み合わせて動かせる 例:単機能プログラム同士をパイプで結合 モジュール同士の結合を疎にできる 関数結合 > プロセス間通信 関数結合:
static lib > shared/dynamic lib プロセス結合: 共有メモリ > スレッド間通信 プログラムを書き換えずに機能拡張できる! スケーラビリティの確保: 保守性と拡張性の向上 AWS のエピソード: オンライン販売サイトからクラウドサービス基盤へ
13.
密結合より大きいオーバーヘッド 使う側・作る側にスキルが要求される
14.
密結合より大きいオーバーヘッド 使う側・作る側にスキルが要求される 分割されたものの組み合わせを理解すること 適切に分割して設計すること カーネルの場合にも! :モノリシックカーネル vs マイクロカーネル
15.
密結合より大きいオーバーヘッド 使う側・作る側にスキルが要求される 分割されたものの組み合わせを理解すること 適切に分割して設計すること カーネルの場合にも! :モノリシックカーネル vs マイクロカーネル 保守性・拡張性・堅牢性との間のトレードオフ
16.
ステートフルから RESTful へ ステートレスなプロトコル 単純・汎用の操作 統一された対象指定構文(URL
based) 例 Web サービスにおける REST API ロボット制御における ROS SOAP から REST へ CORBA から ROS へ
17.
ステートフルから RESTful へ ステートレスなプロトコル 単純・汎用の操作 統一された対象指定構文(URL
based) 例 Web サービスにおける REST API ロボット制御における ROS SOAP から REST へ CORBA から ROS へ 密結合から疎結合へ、という傾向。 ソフトウェア設計のガイドラインにもなる(?)
18.
プロセスとカーネルの違い プロセス: 仮想アドレス空間 + 実行コード
+ スレッド カーネル:仮想アドレス空間 + 実行コード カーネルの実行コード システムコールハンドラ + 割り込みハンドラ スケジューラ
19.
プロセスとカーネルの違い プロセス: 仮想アドレス空間 + 実行コード
+ スレッド カーネル:仮想アドレス空間 + 実行コード カーネルの実行コード システムコールハンドラ + 割り込みハンドラ スケジューラ カーネルにはスレッドがない??? ps ax --forest で見てみよう
20.
プロセスとカーネルの違いとは? 特権レベル 動作開始の順序(OS 起動時に最初に動くか) 複数存在するかどうか スレッドの作られ方 余談:用語の注意 「カーネルスレッド」vs「カーネルレベルスレッド」 余談2:Linux のプロセスとスレッド fork(),
vfork(), clone()
21.
カーネルとプロセスの間の制御の遷移 カーネル→プロセス プロセスの生成時 プロセスから遷移した後の復帰時 プロセス→カーネル 割込みをトリガーとする(※システムコールも) スケジューラのプロセス切り替え(※同上)
22.
パイプ 名前なし、名前付き(FIFO) メッセージキュー System V 版、POSIX
版 ソケット通信(他ホストあり) UNIX ドメイン、TCP/IP、UDP、etc.
23.
パイプ 名前なし、名前付き(FIFO) メッセージキュー System V 版、POSIX
版 ソケット通信(他ホストあり) UNIX ドメイン、TCP/IP、UDP、etc. ソケット API の汎用性: Cactusphere の SoC でもコア間通信に利用!
24.
共有メモリ System V 版、POSIX
版 同期機構 System V 版、POSIX 版 非伝統的なもの dbus Binder (and ashmem) mmap() との組み合わせ
25.
パイプ /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
26.
共有メモリ /ipc/shmem.c (?) 同期機構 /kernel/locking/{mutex.c, semaphore.c,
etc.} 非伝統的なもの dbus: ユーザランドで実装 /drivers/android/binder.c
27.
排他制御:MUTual EXclusion 同期:synchronization 直列化の考え方(serialization) https://cs.stackexchange.com/a/10770 https://www.haiku-os.org/legacy- docs/ArtOfBeOSProgramming/chapter/chapter03.html#3. 3.2 排他制御以外の同期: タイミング合わせのための待ち動作
28.
排他制御:MUTual EXclusion 同期:synchronization 直列化の考え方(serialization) https://cs.stackexchange.com/a/10770 排他制御・同期とスケジューラ スケジューラ以下の階層では ベアメタルの場合と同様の方策
29.
排他制御:MUTual EXclusion 同期:synchronization 直列化の考え方(serialization) https://cs.stackexchange.com/a/10770 排他制御・同期とスケジューラ スケジューラ以下の階層では ベアメタルの場合と同様の方策 ロックレス(ロックフリー)な データ構造とアルゴリズム
30.
排他制御:MUTual EXclusion 同期:synchronization 直列化の考え方(serialization) https://cs.stackexchange.com/a/10770 排他制御・同期とスケジューラ スケジューラ以下の階層では ベアメタルの場合と同様の方策 ロックレス(ロックフリー)な データ構造とアルゴリズム ≠デバイスドライバの「割り込みハンドラ」関数 Linux の
request_irq() で登録する割り込みハンドラ 関数は、カーネルスレッドが呼び出す!
31.
カーネルを呼び出すオーバーヘッド システムコール 割込みと割り込みハンドラ Linux の futex /kernel/futex.c
とアトミック演算
32.
カーネルを呼び出すオーバーヘッド システムコール 割込みと割り込みハンドラ Linux の futex /kernel/futex.c
とアトミック演算 カーネル内部でも: 割込みは、速い? 割込み vs ポーリング: 割込みハンドラ 割込み応答スレッドのポーリング
33.
プロセス間通信の概要 プロセス間通信を使う意義 ソフトウェアを分割する道具 疎結合による保守性と拡張性の向上 上手に使えば堅牢性も向上 より良い使い方(設計)をするのが大切!
Baixar agora