狠狠撸

狠狠撸Share a Scribd company logo
メモリ管理 完全に理解した
仮想記憶?スワップ? はいはい、知ってる知ってる
@segavvy
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 1
このお話のゴール
メモリは OSが管理(OS:Windows、 Linux、 macOS、etc.)
OSのやっていることがわかれば メモリ管理の仕組みがわかる
OSのやっていることがわかる! これがゴール
3章に分けて お話します
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 2
第1章
メモリとファイル
メモリ管理のお話ですが ファイルも関係するので合わせてご説明します
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 3
メモリは勝手に使えない
メモリは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 11
お金をかけずに
部屋を増やせる方法!?
第2章へつづく
(休憩)自己紹介
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 12
@segavvy
IT企業で企画?マーケを担当している元エンジニア
C|C#|VBA|Python|全文検索|自然言語処理|機械学習|
企画|マーケ|ドラクエ好き|嫁さんはディズニー教|
写真は丸まってたペンギン
セガビ
第2章
大家さんのアイデア
お金をかけずに 部屋を増やす方法
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 13
OS(大家さん)
外出中や睡眠中の部屋がもったいない
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
DA
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本以上動く!
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 23
倉庫の往復が大変なんで
手を抜きたい……
第3章へつづく
(休憩)元記事のご紹介
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 24
https://qiita.com/segavvy/items/9a9f8aa5cc4e6760307a
もう少し
詳しく解説しています
ご興味があれば どうぞ!
第3章
大家さんの手抜き
こっそり 倉庫との往復を減らそう
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 25
OS(大家さん)
倉庫から運ぶのは大変
住人からの荷物の要求は結構多い
倉庫は遠いので
時間もかかるし 運ぶのも大変
?2020 segavvy 2020/5/28 完全に理解した人達の完全に理解したTalk #5 26
同じ荷物を頼まれることは多い
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
DA
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

More Related Content

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