Upgrade to Pro — share decks privately, control downloads, hide ads and more …

メモリ管理 完全に理解した

メモリ管理 完全に理解した

2020年5月28日にEasy Easyというエンジニアのコミュニティが主催したオンラインLTイベントにおいて、初学者向けにメモリ管理についてお話した際の資料です。

LTの動画(スライド画面+音声)はこちらです。
https://youtu.be/zw11L8a7QTY?t=3072

segavvy

May 28, 2020
Tweet

More Decks by segavvy

Other Decks in Programming

Transcript

  1. メモリは勝手に使えない メモリはOSが管理している = OSから借りないと使えない OSに依頼すれば 空いてるメモリを貸してくれる え?いちいちOSから借りたりしてないけど new hoge[123] とか

    malloc(456) とか fugo = [7, 8, 9] とかすれば使えるし お使いの開発言語が 内部でOSから借りる手続きをやってくれています 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 4
  2. ファイルも勝手に使えない ファイルも OSが管理している = OSに依頼しないと使えない OSに依頼すれば ファイルの読み書きをしてくれる OSに頼まずに fread() とか

    hoge.read() とか fugo.readlines() とかで 直接読み込めてるけど お使いの開発言語が 内部でOSへ依頼してくれています 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 5
  3. 賃貸アパートに 例えてみる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 6 住人に部屋を貸す 大家さん

    借りた部屋に 荷物を持ち込んで活動する住人 OS(大家さん) メモリ(部屋) プログラム(住人) データ (荷物) データ(荷物) データ(荷物)
  4. ファイルも例えてみる ファイルは特性上 中身に直接アクセスできない 読み書きは メモリを経由して実施 ファイルは 読み書きに 時間がかかるので 遠くの倉庫に例えてみる 2020

    segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 7 OS(大家さん) データ (荷物) メモリ (部屋) ファイル(倉庫) 住人に依頼された荷物を 倉庫から部屋へ運ぶ大家さん
  5. 第1章のまとめ 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 8 メモリ (部屋) OS

    (大家さん) データ (荷物) ファイル (倉庫) プログラム (住人) メモリの使用 ファイル書き込み ファイル読み込み データ (荷物)
  6. 大家さんの苦悩 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 9 荷物運んで大変な割に 儲からない アパートは6部屋しかないので

    6人に貸したら 家賃収入 頭打ち 部屋を増やせば 収入は増えるけど アパートを増やしたり ビルに建て替えたりしたら それこそ 大出費……
  7. 外出中や睡眠中の部屋がもったいない 1号室 2号室 3号室 4号室 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5

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

    15 A C B D 外出中の部屋を他の人へ 寝ている人も 外へ そっと動かして他の人へ 起きる前に戻せば大丈夫 A B D C これなら 倍の人に貸せる! 朝 昼 夜 夕方
  9. 荷物をどうするか 外出中の部屋や 寝ている人を どかして空けた部屋を 他の人に使わせるにしても 部屋には荷物が残っている これらをどこかに どかして また帰宅や起きるまでに 戻さないといけない

    一時的な荷物置き場として 倉庫を利用することに 倉庫なら部屋と違って 安く拡張できる 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 16
  10. 部屋の切り替え 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 17 1号室 A C

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

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

    未使用 2号室 2号室 未使用 未使用 未使用 1号室 未使用 2号室 未使用 未使用 1号室 1号室 A C B D 朝 昼 夜 夕方 大家さんは 住人の顔を見て 実際に使う部屋へ誘導 朝は1号室だったAさんが 夕方に帰ってきたら 大家さんは 何食わぬ顔で 2号室へご案内 住人には 部屋番号を 気にさせない
  13. 複数の部屋を借りる人はどうするか 実際には 1人の住人が いくつも部屋を 借りることが多い その場合 住人自身が 自分の借りている部屋を 区別できるように 部屋番号が必要

    実際の部屋を すり替えていることは 住人には絶対秘密! 部屋番号は教えられないので 架空の部屋番号を でっちあげて 教えることに…… 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 20
  14. 架空の部屋番号と実際の部屋番号 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
  15. 第2章のまとめ 大家さんが やっていること メモリ管理の用語 1 架空の部屋番号を伝え 実際の部屋割りを隠すアイデア 仮想記憶 2 大家さんしか知らない

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

    倉庫から運んだ荷物を一時置き場に置いて 再利用する仕組み 読み込みキャッシュ 3 荷物をすぐには倉庫に運ばず 後でまとめて運ぶ仕組み 書き込みキャッシュ 4 一時置き場に置いておいた荷物を 倉庫へ一気に運ぶ作業 フラッシュ 2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 31 ファイルアクセスが高速になる!
  17. 参考文献・参考サイト • 仮想記憶 - フリー百科事典『ウィキペディア(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