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
共有メモリ
Search
Satoru Takeuchi
PRO
March 22, 2025
Technology
3
53
共有メモリ
以下動画のテキストです
https://youtu.be/dNdledEIJsE
Satoru Takeuchi
PRO
March 22, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
デバイスにアクセスするデバイスファイル
sat
PRO
1
25
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
17
デバイスドライバ
sat
PRO
0
21
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
60
マルチスレッドプログラム
sat
PRO
3
40
Linuxのブートプロセス initramfs編
sat
PRO
2
51
Linuxのブートプロセス
sat
PRO
6
160
シェルのジョブ
sat
PRO
1
35
常駐サービスを実現するデーモンプロセス
sat
PRO
0
40
Other Decks in Technology
See All in Technology
グループ ポリシー再確認 (2)
murachiakira
0
230
Part1 GitHubってなんだろう?その1
tomokusaba
3
740
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
1k
MCPが変えるAIとの協働
knishioka
1
150
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
7
63k
Datadog のトライアルを成功に導く技術 / Techniques for a successful Datadog trial
nulabinc
PRO
0
130
続・やっぱり余白が大切だった話
kakehashi
PRO
2
310
Как мы автоматизировали интеграционное тестирование с Gonkey и не пожалели. Паша Егорычев, Кирилл Поляков
lamodatech
0
2.1k
GraphQLを活用したリアーキテクチャに対応するSLI/Oの再設計
coconala_engineer
0
210
時間がないなら、つくればいい 〜数十人規模のチームが自律性を発揮するために試しているいくつかのこと〜
kakehashi
PRO
22
5.2k
CodeRabbitと過ごした1ヶ月 ─ AIコードレビュー導入で実感したチーム開発の進化
mitohato14
1
240
LLMの開発と社会実装の今と未来 / AI Builders' Community (ABC) vol.2
pfn
PRO
1
120
Featured
See All Featured
How GitHub (no longer) Works
holman
314
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
4 Signs Your Business is Dying
shpigford
183
22k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Writing Fast Ruby
sferik
628
61k
Gamification - CAS2011
davidbonilla
81
5.3k
How to train your dragon (web standard)
notwaldorf
91
6k
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.5k
Building Adaptive Systems
keathley
41
2.5k
Faster Mobile Websites
deanohume
307
31k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Transcript
共有メモリ Mar. 22nd, 2025 Satoru Takeuchi X: satoru_takeuchi 1
はじめに • プロセスは通常別のプロセスのメモリは見えない • プロセス間で情報をやりとりするプロセス間通信のため、あえて一部のメモリ領域を お互いに見えるようにすることもある。これが共有メモリ 2
共有メモリの概念図 3 プロセスAの仮想アドレス 0 200 物理メモリ 0 プロセスAのメモリ 500 400
300 仮想アドレス 物理アドレス 0-100 200-300 100-200 300-400 プロセスAのページテーブル プロセスBの仮想アドレス 0 200 仮想アドレス 物理アドレス 0-100 400-500 100-200 300-400 プロセスBのページテーブル 100 プロセスBのメモリ 共有メモリ 200 100 600 700
実現方法 • System V共有メモリ • POSIX共有メモリ • mmap(今回はこれを使う) ◦ 📝
過去動画: その75 プロセスへのメモリ割り当て (1) mmap 4
実験プログラム: shared-memory.py 1. 共有メモリ領域を作成 2. 共有メモリ領域にデータを書き込み 3. forkする 4. 子プロセスが共有メモリ領域のデータを書き換えて終了
5. 親プロセスが共有メモリ領域のデータを読み出し a. 期待値: データが書き換わっている 5
コード例(1/2): 共有メモリの作成&fork PAGE_SIZE = 4096 data = 1000 print(" 子プロセス生成前のデータの値:
{}".format(data)) shared_memory = mmap.mmap(-1, PAGE_SIZE, flags=mmap.MAP_SHARED) shared_memory[0:8] = data.to_bytes(8, byteorder) pid = os.fork() if pid < 0: print("fork() に失敗しました", file=os.stderr) sys.exit(1) # 次ページに続く 6
コード例(2/2): 子プロセスでデータを書き換え 7 # 前ページから続く if pid == 0: #
子プロセス data = int.from_bytes(shared_memory[0:8], byteorder) data *= 2 shared_memory[0:8] = data.to_bytes(8, byteorder) sys.exit(0) # 親プロセス os.wait() data = int.from_bytes(shared_memory[0:8], byteorder) print(" 子プロセス終了後のデータの値: {}".format(data))
実行結果 8 $ ./shared-memory 子プロセス生成前のデータの値: 1000 子プロセス終了後のデータの値: 2000
共有メモリに複数プロセスが同時にアクセスしたら? • 恐らく期待した通りに動作しない(例外あり) ◦ 見えるべきデータが見えない ◦ 書けるべきデータが書かれない • 一般に排他制御によって問題を解決する(例外あり) ◦
📝 過去動画: その18 シェルスクリプトで学ぶ排他制御 9
おわりに • 共有メモリを使うとプロセス間で通信ができる • 整合性を保つために共有メモリへのアクセスは排他制御する必要がある • 他にも色々な方法がある: シグナル、パイプ、ソケット、メッセージキュー ◦ 📝
過去動画: その88 シグナル 10