Share
Embed
メモリ管理 完全に理解した
2020年5月28日にEasy Easyというエンジニアのコミュニティが主催したオンラインLTイベントにおいて、初学者向けにメモリ管理についてお話した際の資料です。
LTの動画(スライド画面+音声)はこちらです。
https://youtu.be/zw11L8a7QTY?t=3072
segavvy
May 28, 2020
Transcript
33 slides
-
このお話のゴール メモリは OSが管理(OS:Windows、 Linux、 macOS、etc.) OSのやっていることがわかれば メモリ管理の仕組みがわかる OSのやっていることがわかる! これがゴール 3章に分けて
お話します 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 2 -
メモリは勝手に使えない メモリはOSが管理している = OSから借りないと使えない OSに依頼すれば 空いてるメモリを貸してくれる え?いちいちOSから借りたりしてないけど new hoge[123] とか
malloc(456) とか fugo = [7, 8, 9] とかすれば使えるし お使いの開発言語が 内部でOSから借りる手続きをやってくれています 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 4 -
ファイルも勝手に使えない ファイルも OSが管理している = OSに依頼しないと使えない OSに依頼すれば ファイルの読み書きをしてくれる OSに頼まずに fread() とか
hoge.read() とか fugo.readlines() とかで 直接読み込めてるけど お使いの開発言語が 内部でOSへ依頼してくれています 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 5 -
賃貸アパートに 例えてみる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 6 住人に部屋を貸す 大家さん
借りた部屋に 荷物を持ち込んで活動する住人 OS(大家さん) メモリ(部屋) プログラム(住人) データ (荷物) データ(荷物) データ(荷物) -
ファイルも例えてみる ファイルは特性上 中身に直接アクセスできない 読み書きは メモリを経由して実施 ファイルは 読み書きに 時間がかかるので 遠くの倉庫に例えてみる 2020
segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 7 OS(大家さん) データ (荷物) メモリ (部屋) ファイル(倉庫) 住人に依頼された荷物を 倉庫から部屋へ運ぶ大家さん -
第1章のまとめ 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 8 メモリ (部屋) OS
(大家さん) データ (荷物) ファイル (倉庫) プログラム (住人) メモリの使用 ファイル書き込み ファイル読み込み データ (荷物) -
大家さんの苦悩 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 9 荷物運んで大変な割に 儲からない アパートは6部屋しかないので
6人に貸したら 家賃収入 頭打ち 部屋を増やせば 収入は増えるけど アパートを増やしたり ビルに建て替えたりしたら それこそ 大出費…… -
住人の生活スタイルは さまざま 昼間は外に出かけていて 部屋を空けている人 昼間は部屋にいるけど 夜中に部屋を空けている人 1日中部屋にいるけど 寝ていることが多い人 夜中に寝ないで活動している人 2020
segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 10 -
(休憩)自己紹介 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 12 @segavvy IT企業で企画・マーケを担当している元エンジニア C|C#|VBA|Python|全文検索|自然言語処理|機械学習|
企画|マーケ|ドラクエ好き|嫁さんはディズニー教| 写真は丸まってたペンギン セガビ -
外出中や睡眠中の部屋がもったいない 1号室 2号室 3号室 4号室 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5
14 A C B D 外出中の部屋を他の人へ 寝ている人も 外へ そっと動かして他の人へ 起きる前に戻せば大丈夫 A B D C 外出 外出 外出 睡眠 睡眠 睡眠 睡眠 睡眠 朝 昼 夜 夕方 -
外出中や睡眠中の部屋がもったいない 1号室 2号室 3号室 4号室 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5
15 A C B D 外出中の部屋を他の人へ 寝ている人も 外へ そっと動かして他の人へ 起きる前に戻せば大丈夫 A B D C これなら 倍の人に貸せる! 朝 昼 夜 夕方 -
荷物をどうするか 外出中の部屋や 寝ている人を どかして空けた部屋を 他の人に使わせるにしても 部屋には荷物が残っている これらをどこかに どかして また帰宅や起きるまでに 戻さないといけない
一時的な荷物置き場として 倉庫を利用することに 倉庫なら部屋と違って 安く拡張できる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 16 -
部屋の切り替え 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 17 1号室 A C
朝と昼の間で Aさんの部屋からCさんの部屋へ 切り替えが必要 Aさんの荷物を 倉庫へ Cさんの荷物を 倉庫から運んで 部屋を復元 ファイルの読み書きと同じなので 大家さんにとっては 朝飯前 朝 昼 -
部屋番号をどうするか 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 18 1号室 2号室 C
B D A B C 朝 昼 夜 夕方 Aさんが夕方に帰ってきて 朝と同じ1号室に入ると Dさんと鉢合わせてしまう D 大家さんが入り口で 住人を出迎えて 部屋までエスコート 間取りは同じなので 住人は部屋の違いには きっと気づかない -
大家さんは住人と部屋を対応表で管理 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 19 1号室 未使用 2号室
未使用 2号室 2号室 未使用 未使用 未使用 1号室 未使用 2号室 未使用 未使用 1号室 1号室 A C B D 朝 昼 夜 夕方 大家さんは 住人の顔を見て 実際に使う部屋へ誘導 朝は1号室だったAさんが 夕方に帰ってきたら 大家さんは 何食わぬ顔で 2号室へご案内 住人には 部屋番号を 気にさせない -
複数の部屋を借りる人はどうするか 実際には 1人の住人が いくつも部屋を 借りることが多い その場合 住人自身が 自分の借りている部屋を 区別できるように 部屋番号が必要
実際の部屋を すり替えていることは 住人には絶対秘密! 部屋番号は教えられないので 架空の部屋番号を でっちあげて 教えることに…… 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 20 -
架空の部屋番号と実際の部屋番号 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 -
第2章のまとめ 大家さんが やっていること メモリ管理の用語 1 架空の部屋番号を伝え 実際の部屋割りを隠すアイデア 仮想記憶 2 大家さんしか知らない
実際の部屋番号 メモリの 物理アドレス 3 住人に伝えている 架空の部屋番号 メモリの 仮想アドレス 4 外出中や睡眠中の住人の荷物を 倉庫に運んだり戻したりするアイデア メモリ スワッピング 5 荷物を倉庫に運んで 他の人のために部屋を空けること スワップ アウト 6 倉庫に運んだ荷物を戻して 部屋を復元すること スワップ イン 7 倉庫に追い出した 住人の部屋の荷物 スワップ ファイル スワップ パーティション 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 22 メモリ4GBのPCで メモリを1GB使うアプリが 5本以上動く! -
同じ荷物を頼まれることは多い Aさんが同じ荷物を依頼してきた BさんとCさんとDさんが 同じ荷物を依頼してきた 何度も取りに行くのは無駄なので 取ってきた荷物をこっそり 手元に置いておいて 使いまわしたい…… 2020 segavvy
2020/5/28 完全に理解した人達の完全に理解したTalk #5 27 A C B D -
空いている部屋を一時置き場に活用 一度運んだ荷物は 空いている部屋に 置いておいて 同じものを頼まれたら再利用 部屋にある荷物なら 倉庫まで行かずに済むので 大家さんはラクできる 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 -
倉庫へ運ぶのも大変 倉庫へ荷物を運ぶ依頼も多い これも結構大変 とりあえず住人には 「運んだ」とウソ報告し 先ほどの空いてる部屋に こっそり貯めておく 手が空いた時に まとめて運べは 大家さんはラクできる
2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 29 -
手抜きして住人は怒らない? 住人は 荷物を早く持ってきてもらえることがあるし すぐに「運んだ」と報告されるし 大歓迎! ・空き部屋は 人に貸すことが最優先(収入増やしたい) 借り手がいない時しか この手抜きはできない ・手抜きのせいで
荷物の処理時間は一定にならない 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 30 -
第3章のまとめ 大家さんが やっていること メモリ管理の用語 1 空き部屋を荷物の一時置き場にするアイデア ファイル システム キャッシュ 2
倉庫から運んだ荷物を一時置き場に置いて 再利用する仕組み 読み込みキャッシュ 3 荷物をすぐには倉庫に運ばず 後でまとめて運ぶ仕組み 書き込みキャッシュ 4 一時置き場に置いておいた荷物を 倉庫へ一気に運ぶ作業 フラッシュ 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 31 ファイルアクセスが高速になる! -
おわりに メモリは OS が管理している メモリ管理の仕組みを理解するためには OS(大家さん)のやっていることがわかればOK これがゴールでした このお話が メモリ管理の理解の一助になれば幸いです ありがとうございました
2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 32 -
参考文献・参考サイト • 仮想記憶 - フリー百科事典『ウィキペディア(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