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
47
共有メモリ
以下動画のテキストです
https://youtu.be/dNdledEIJsE
Satoru Takeuchi
PRO
March 22, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
41
マルチスレッドプログラム
sat
PRO
3
40
Linuxのブートプロセス initramfs編
sat
PRO
2
48
Linuxのブートプロセス
sat
PRO
6
150
シェルのジョブ
sat
PRO
1
28
常駐サービスを実現するデーモンプロセス
sat
PRO
0
35
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
120
シェルのセッション
sat
PRO
2
36
RubyでKubernetesプログラミング
sat
PRO
4
190
Other Decks in Technology
See All in Technology
AI Agentを「期待通り」に動かすために:設計アプローチの模索と現在地
kworkdev
PRO
2
440
LLM とプロンプトエンジニアリング/チューターをビルドする / LLM, Prompt Engineering and Building Tutors
ks91
PRO
1
250
Dynamic Reteaming And Self Organization
miholovesq
3
380
AWS全冠芸人が見た世界 ~資格取得より大切なこと~
masakiokuda
5
5.8k
3月のAWSアップデートを5分間でざっくりと!
kubomasataka
0
110
Porting PicoRuby to Another Microcontroller: ESP32
yuuu
3
400
新卒エンジニアがCICDをモダナイズしてみた話
akashi_sn
2
160
[2025年4月版] Databricks Academy ラボ環境 利用開始手順 / Databricks Academy Labs Onboarding
databricksjapan
0
130
Amazon CloudWatchで始める エンドユーザー体験のモニタリング
o11yfes2023
0
180
AIで進化するソフトウェアテスト:mablの最新生成AI機能でQAを加速!
mfunaki
0
140
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming
tomzoh
0
220
システムとの会話から生まれる先手のDevOps
kakehashi
PRO
0
270
Featured
See All Featured
A designer walks into a library…
pauljervisheath
205
24k
Navigating Team Friction
lara
184
15k
BBQ
matthewcrist
88
9.6k
Automating Front-end Workflow
addyosmani
1369
200k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Designing for humans not robots
tammielis
252
25k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
104
19k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
390
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Pragmatic Product Professional
lauravandoore
33
6.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