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

仮想記憶 ~概念編~

仮想記憶 ~概念編~

以下動画のテキストです。
https://youtu.be/8E85MD6INYs

Satoru Takeuchi

January 15, 2023
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. 仮想記憶
    ~ 概念編 ~
    Jan. 15th, 2022
    Satoru Takeuchi
    twitter: satoru_takeuchi

    View full-size slide

  2. はじめに
    ● 仮想記憶という機能の説明
    ○ システム上で複数のプロセスを動作させる際の課題を解決
    ○ プロセスごとに独自のメモリ空間を見せる
    ○ 本動画では概念だけ説明。機能を実現するしくみは別動画で説明
    ● 事前に見ておく必要がある動画
    ○ その34 実行ファイル
    ● 話を簡単にするために実行ファイルはPIEではないとする
    ○ その35 Address Space Location Randomization

    View full-size slide

  3. プロセスが生まれてから消えるまで
    1. ユーザが実行ファイルを指定してカーネルにプロセスを実行するよう依頼
    2. 実行ファイル内の情報をもとにコードとデータをメモリ上に配置
    3. 実行ファイル内に書かれているエントリポイントから実行開始
    test(実行ファイル)
    メモリ
    コード
    データ
    コード
    データ
    マップ

    View full-size slide

  4. 二つの課題
    ● コード/データマップ位置の重複
    ● データ保護

    View full-size slide

  5. コード/データマップ位置の重複
    ● 例) 同じプロセスを二つ実行
    test(実行ファイル)
    メモリ
    コード
    データ

    View full-size slide

  6. コード/データマップ位置の重複
    ● 例) 同じプロセスを二つ実行
    1. testファイルからプロセスを生成
    test(実行ファイル)
    メモリ
    コード
    データ
    コード
    データ
    マップ

    View full-size slide

  7. コード/データマップ位置の重複
    ● 例) 同じプロセスを二つ実行
    1. testファイルからプロセスを生成
    2. testファイルから二つめのプロセスを生成しようとするが …
    test(実行ファイル)
    メモリ
    コード
    データ
    コード
    データ
    既にマップ済み

    View full-size slide

  8. データ保護
    ● システムに2つのプロセスA,Bが存在すると仮定
    プロセスA
    プロセスB
    メモリ
    *) カーネルの存在は省略

    View full-size slide

  9. データ保護
    ● お互いのメモリにアクセスできるとまずい
    プロセスA
    盗み見、破壊可能?
    プロセスB
    メモリ

    View full-size slide

  10. 仮想記憶
    ● Linuxや他の多くのOSは仮想記憶という機能によって2つの問題を解決
    ○ 📝 他にも方法は色々あるが省略
    ● プロセスごとに独自のメモリ空間を見せる
    物理メモリ(システムに搭載されているメモリ )
    プロセスAの
    仮想アドレス空間
    物理アドレス空間
    プロセスAのメモリ

    View full-size slide

  11. 個々のプロセスの挙動
    ● プロセスが指定するアドレスはすべて仮想アドレス
    ○ 物理メモリに直接アクセス不能
    物理メモリ(システムに搭載されているメモリ )
    プロセスAのメモリ
    1. 仮想アドレスXにアクセス
    2. アドレス変換&
    物理アドレスYにアクセス

    View full-size slide

  12. 複数プロセスがある場合
    物理メモリ
    プロセスAの
    仮想アドレス空間
    プロセスBの
    仮想アドレス空間
    プロセスAのメモリ
    プロセスBのメモリ

    View full-size slide

  13. 「コード/データマップ位置の重複」の解決
    ● 例) 同じプロセスを二つ実行
    ○ testファイルからプロセス Aを生成
    test(実行ファイル)
    物理メモリ
    コード
    データ

    View full-size slide

  14. 「コード/データマップ位置の重複」の解決
    ● 例) 同じプロセスを二つ実行
    1. testファイルからプロセス Aを生成
    test(実行ファイル)
    物理メモリ
    コード
    データ
    Aのコード
    Aのデータ
    プロセスAの
    仮想アドレス空間

    View full-size slide

  15. 「コード/データマップ位置の重複」の解決
    ● 例) 同じプロセスを二つ実行
    1. testファイルからプロセス Aを生成
    2. testファイルからプロセス Bを生成
    test(実行ファイル)
    物理メモリ
    コード
    データ
    Aのコード
    Aのデータ
    プロセスAの
    仮想アドレス空間
    プロセスBの
    仮想アドレス空間
    Bのコード
    Bのデータ
    *) 実際はコード領域は共有するが説明は省略

    View full-size slide

  16. データ保護
    物理メモリ
    プロセスAの
    仮想アドレス空間
    プロセスBの
    仮想アドレス空間
    プロセスAのメモリ
    プロセスBのメモリ
    見えない
    見えない

    View full-size slide

  17. まとめ
    ● 仮想記憶はシステム上で複数のプログラムを実行する際の課題を解決できる
    ○ コード/データのマップ先の重複
    ○ データ保護
    ● プロセスごとに仮想アドレス空間をもつ
    ○ プロセスが指定するアドレスは全部仮想アドレス
    ● 詳細は別動画で

    View full-size slide