Slide 1

Slide 1 text

メモリ管理 完全に理解した 仮想記憶?スワップ? はいはい、知ってる知ってる @segavvy 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 1

Slide 2

Slide 2 text

このお話のゴール メモリは OSが管理(OS:Windows、 Linux、 macOS、etc.) OSのやっていることがわかれば メモリ管理の仕組みがわかる OSのやっていることがわかる! これがゴール 3章に分けて お話します 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 2

Slide 3

Slide 3 text

第1章 メモリとファイル メモリ管理のお話ですが ファイルも関係するので合わせてご説明します 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 3

Slide 4

Slide 4 text

メモリは勝手に使えない メモリはOSが管理している = OSから借りないと使えない OSに依頼すれば 空いてるメモリを貸してくれる え?いちいちOSから借りたりしてないけど new hoge[123] とか malloc(456) とか fugo = [7, 8, 9] とかすれば使えるし お使いの開発言語が 内部でOSから借りる手続きをやってくれています 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 4

Slide 5

Slide 5 text

ファイルも勝手に使えない ファイルも OSが管理している = OSに依頼しないと使えない OSに依頼すれば ファイルの読み書きをしてくれる OSに頼まずに fread() とか hoge.read() とか fugo.readlines() とかで 直接読み込めてるけど お使いの開発言語が 内部でOSへ依頼してくれています 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 5

Slide 6

Slide 6 text

賃貸アパートに 例えてみる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 6 住人に部屋を貸す 大家さん 借りた部屋に 荷物を持ち込んで活動する住人 OS(大家さん) メモリ(部屋) プログラム(住人) データ (荷物) データ(荷物) データ(荷物)

Slide 7

Slide 7 text

ファイルも例えてみる ファイルは特性上 中身に直接アクセスできない 読み書きは メモリを経由して実施 ファイルは 読み書きに 時間がかかるので 遠くの倉庫に例えてみる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 7 OS(大家さん) データ (荷物) メモリ (部屋) ファイル(倉庫) 住人に依頼された荷物を 倉庫から部屋へ運ぶ大家さん

Slide 8

Slide 8 text

第1章のまとめ 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 8 メモリ (部屋) OS (大家さん) データ (荷物) ファイル (倉庫) プログラム (住人) メモリの使用 ファイル書き込み ファイル読み込み データ (荷物)

Slide 9

Slide 9 text

大家さんの苦悩 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 9 荷物運んで大変な割に 儲からない アパートは6部屋しかないので 6人に貸したら 家賃収入 頭打ち 部屋を増やせば 収入は増えるけど アパートを増やしたり ビルに建て替えたりしたら それこそ 大出費……

Slide 10

Slide 10 text

住人の生活スタイルは さまざま 昼間は外に出かけていて 部屋を空けている人 昼間は部屋にいるけど 夜中に部屋を空けている人 1日中部屋にいるけど 寝ていることが多い人 夜中に寝ないで活動している人 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 10

Slide 11

Slide 11 text

2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 11 お金をかけずに 部屋を増やせる方法!? 第2章へつづく

Slide 12

Slide 12 text

(休憩)自己紹介 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 12 @segavvy IT企業で企画・マーケを担当している元エンジニア C|C#|VBA|Python|全文検索|自然言語処理|機械学習| 企画|マーケ|ドラクエ好き|嫁さんはディズニー教| 写真は丸まってたペンギン セガビ

Slide 13

Slide 13 text

第2章 大家さんのアイデア お金をかけずに 部屋を増やす方法 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 13 OS(大家さん)

Slide 14

Slide 14 text

外出中や睡眠中の部屋がもったいない 1号室 2号室 3号室 4号室 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 14 A C B D 外出中の部屋を他の人へ 寝ている人も 外へ そっと動かして他の人へ 起きる前に戻せば大丈夫 A B D C 外出 外出 外出 睡眠 睡眠 睡眠 睡眠 睡眠 朝 昼 夜 夕方

Slide 15

Slide 15 text

外出中や睡眠中の部屋がもったいない 1号室 2号室 3号室 4号室 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 15 A C B D 外出中の部屋を他の人へ 寝ている人も 外へ そっと動かして他の人へ 起きる前に戻せば大丈夫 A B D C これなら 倍の人に貸せる! 朝 昼 夜 夕方

Slide 16

Slide 16 text

荷物をどうするか 外出中の部屋や 寝ている人を どかして空けた部屋を 他の人に使わせるにしても 部屋には荷物が残っている これらをどこかに どかして また帰宅や起きるまでに 戻さないといけない 一時的な荷物置き場として 倉庫を利用することに 倉庫なら部屋と違って 安く拡張できる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 16

Slide 17

Slide 17 text

部屋の切り替え 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 17 1号室 A C 朝と昼の間で Aさんの部屋からCさんの部屋へ 切り替えが必要 Aさんの荷物を 倉庫へ Cさんの荷物を 倉庫から運んで 部屋を復元 ファイルの読み書きと同じなので 大家さんにとっては 朝飯前 朝 昼

Slide 18

Slide 18 text

部屋番号をどうするか 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 18 1号室 2号室 C B D A B C 朝 昼 夜 夕方 Aさんが夕方に帰ってきて 朝と同じ1号室に入ると Dさんと鉢合わせてしまう D 大家さんが入り口で 住人を出迎えて 部屋までエスコート 間取りは同じなので 住人は部屋の違いには きっと気づかない

Slide 19

Slide 19 text

大家さんは住人と部屋を対応表で管理 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 19 1号室 未使用 2号室 未使用 2号室 2号室 未使用 未使用 未使用 1号室 未使用 2号室 未使用 未使用 1号室 1号室 A C B D 朝 昼 夜 夕方 大家さんは 住人の顔を見て 実際に使う部屋へ誘導 朝は1号室だったAさんが 夕方に帰ってきたら 大家さんは 何食わぬ顔で 2号室へご案内 住人には 部屋番号を 気にさせない

Slide 20

Slide 20 text

複数の部屋を借りる人はどうするか 実際には 1人の住人が いくつも部屋を 借りることが多い その場合 住人自身が 自分の借りている部屋を 区別できるように 部屋番号が必要 実際の部屋を すり替えていることは 住人には絶対秘密! 部屋番号は教えられないので 架空の部屋番号を でっちあげて 教えることに…… 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 20

Slide 21

Slide 21 text

架空の部屋番号と実際の部屋番号 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 21 1,2,3号室 (3部屋) 1号室 未使用 2号室 未使用 3号室 3号室 4号室 4号室 1号室 (1部屋) 未使用 未使用 2号室 2号室 1,2号室 (2部屋) 未使用 1号室 未使用 2号室 3号室 3号室 1号室 (1部屋) 未使用 未使用 1号室 1号室 A C B D 朝 昼 夜 夕方 さんは 1~3号室の3部屋を さんは 1~2号室の2部屋を 借りている (と思っている) 実際の部屋は 大家さんが決める A 架空の 部屋番号 C

Slide 22

Slide 22 text

第2章のまとめ 大家さんが やっていること メモリ管理の用語 1 架空の部屋番号を伝え 実際の部屋割りを隠すアイデア 仮想記憶 2 大家さんしか知らない 実際の部屋番号 メモリの 物理アドレス 3 住人に伝えている 架空の部屋番号 メモリの 仮想アドレス 4 外出中や睡眠中の住人の荷物を 倉庫に運んだり戻したりするアイデア メモリ スワッピング 5 荷物を倉庫に運んで 他の人のために部屋を空けること スワップ アウト 6 倉庫に運んだ荷物を戻して 部屋を復元すること スワップ イン 7 倉庫に追い出した 住人の部屋の荷物 スワップ ファイル スワップ パーティション 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 22 メモリ4GBのPCで メモリを1GB使うアプリが 5本以上動く!

Slide 23

Slide 23 text

2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 23 倉庫の往復が大変なんで 手を抜きたい…… 第3章へつづく

Slide 24

Slide 24 text

(休憩)元記事のご紹介 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 24 https://qiita.com/segavvy/items/9a9f8aa5cc4e6760307a もう少し 詳しく解説しています ご興味があれば どうぞ!

Slide 25

Slide 25 text

第3章 大家さんの手抜き こっそり 倉庫との往復を減らそう 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 25 OS(大家さん)

Slide 26

Slide 26 text

倉庫から運ぶのは大変 住人からの荷物の要求は結構多い 倉庫は遠いので 時間もかかるし 運ぶのも大変 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 26

Slide 27

Slide 27 text

同じ荷物を頼まれることは多い Aさんが同じ荷物を依頼してきた BさんとCさんとDさんが 同じ荷物を依頼してきた 何度も取りに行くのは無駄なので 取ってきた荷物をこっそり 手元に置いておいて 使いまわしたい…… 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 27 A C B D

Slide 28

Slide 28 text

空いている部屋を一時置き場に活用 一度運んだ荷物は 空いている部屋に 置いておいて 同じものを頼まれたら再利用 部屋にある荷物なら 倉庫まで行かずに済むので 大家さんはラクできる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 28 1号室 2号室 3号室 4号室 A C B D A B D C 朝 昼 夜 夕方 A A C A A C

Slide 29

Slide 29 text

倉庫へ運ぶのも大変 倉庫へ荷物を運ぶ依頼も多い これも結構大変 とりあえず住人には 「運んだ」とウソ報告し 先ほどの空いてる部屋に こっそり貯めておく 手が空いた時に まとめて運べは 大家さんはラクできる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 29

Slide 30

Slide 30 text

手抜きして住人は怒らない? 住人は 荷物を早く持ってきてもらえることがあるし すぐに「運んだ」と報告されるし 大歓迎! ・空き部屋は 人に貸すことが最優先(収入増やしたい) 借り手がいない時しか この手抜きはできない ・手抜きのせいで 荷物の処理時間は一定にならない 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 30

Slide 31

Slide 31 text

第3章のまとめ 大家さんが やっていること メモリ管理の用語 1 空き部屋を荷物の一時置き場にするアイデア ファイル システム キャッシュ 2 倉庫から運んだ荷物を一時置き場に置いて 再利用する仕組み 読み込みキャッシュ 3 荷物をすぐには倉庫に運ばず 後でまとめて運ぶ仕組み 書き込みキャッシュ 4 一時置き場に置いておいた荷物を 倉庫へ一気に運ぶ作業 フラッシュ 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 31 ファイルアクセスが高速になる!

Slide 32

Slide 32 text

おわりに メモリは OS が管理している メモリ管理の仕組みを理解するためには OS(大家さん)のやっていることがわかればOK これがゴールでした このお話が メモリ管理の理解の一助になれば幸いです ありがとうございました 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 32

Slide 33

Slide 33 text

参考文献・参考サイト • 仮想記憶 - フリー百科事典『ウィキペディア(Wikipedia)』(最終閲覧日:2020/5/24) https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6 • 誰でもわかるメモリ管理入門:01 @segavvy - 『Qiita』(最終閲覧日:2020/5/24) https://qiita.com/segavvy/items/9a9f8aa5cc4e6760307a • かわいいフリー素材集『いらすとや』 https://www.irasutoya.com/ 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 33