L4-Linux のメモリ管理における問題点とその解決策

Slides:



Advertisements
Similar presentations
1 組込みエンジニアのための Linux 入門 仮想メモリ編 株式会社アプリックス 小林哲之.
Advertisements

メモリマップドファイル オペレーティングシステム. 今日の流れ (12/10) ディスクの話の残り  ディスクを高速に使う工夫 メモリとディスクの簡単なまとめ メモリマップト・ファイル (mmap)
メモリマップドファイル オペレーティングシステム. 今日の流れ (12/10) ディスクの話の残り  ディスクを高速に使う工夫 メモリとディスクの簡単なまとめ メモリマップト・ファイル (mmap)
Linuxを組み込んだマイコンによる 遠隔監視システムの開発
Linux2.2 on x86 での メモリ管理機構 Dec 2001 安田 泰勲.
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
第6回 仮想記憶とページング ページング ページ取り出し方式 ページ置き換え方式 中間テスト(40分)
メモリ管理(1).
オペレーティングシステム 第10回 仮想記憶管理(1)
計算機工学III オペレーティングシステム #9 主記憶管理:ページング 2006/06/09 津邑 公暁
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
クラウド上の仮想マシンの安全なリモート監視機構
物理実験 I 情報実験第9回 2004/12/10 小西 丈予 2003/12/12 中神 雄一
組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)
オペレーティングシステム 第11回 仮想記憶管理(2)
中村孝介(九州工業大学) 光来健一(九州工業大学/JST CREST)
KVMにおけるIDSオフロードのための仮想マシン監視機構
JTAG ICEによる 組み込みLinuxデバッグ
オペレーティングシステム (OSの機能と構造)
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
ソフトウェア階層 分類 具体例 応用ソフト 基本ソフト アプリケーションソフト 個別アプリケーション SEやユーザが開発するプログラム
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
XenによるゲストOSの解析に 基づくパケットフィルタリング
ユビキタス環境における コミュニケーション・ツール選択支援機構の提案
Linuxカーネルについて 2014/01.
問2.9 割り込みB 割り込みA 割り込みC (msec) 開始 停止 終了 走行レベル4 走行レベル3
第17回カーネル読書会 2001年10月17日 高杉@YLUG YLUG読書会
オペレーティングシステム i386アーキテクチャ(2)
メモリ管理 4.3, 4.4 章 さだ.
アスペクト指向プログラミングを用いたIDSオフロード
ファイルシステムAPIと メモリマップドファイル
型付きアセンブリ言語を用いた安全なカーネル拡張
OS輪講 sada.
SpectreとMeltdown ITソリューション塾・第28期 2018年5月30日 株式会社アプライド・マーケティング 大越 章司
イベント通知機構・メモリ保護API.
Lazy Release Consistency
AMD64の仮想化技術を利用した 仮想マシンモニタの実装
全体ミーティング 金田憲二.
KVMにおける仮想マシンの 内部監視機構の実装と性能評価
仮想マシン間にまたがる プロセススケジューリング
Xenによる ゲストOSの監視に基づく パケットフィルタリング
仮想計算機を用いて OSを介さずに行う安全な ファイルアクセス制御
分散IDSの実行環境の分離 による安全性の向上
マルチスレッド処理 マルチプロセス処理について
仮想マシンモニタによる きめ細かい パケットフィルタリング
VMのメモリ暗号化によるクラウド管理者への情報漏洩の防止
VMのメモリ暗号化による クラウド管理者への情報漏洩の防止
VM専用仮想メモリとの連携による VMマイグレーションの高速化
IaaS型クラウドにおける インスタンス構成の動的最適化手法
シャドウデバイスを用いた 帯域外リモート管理を継続可能なVMマイグレーション
オペレーティングシステム イントロダクション
仮想機械 温故知新 前田俊行 東京大学米澤研究室.
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
全体ミーティング 6月6日 島本 大輔(M2) 2006年6月6日(火).
IaaS環境におけるVMのメモリ暗号化による情報漏洩の防止
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
オペレーティングシステムJ/K 2004年11月15日2時限目
オペレーティングシステム i386アーキテクチャ(1)
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
オペレーティングシステム (OSの機能と構造)
実装について 前田俊行.
オペレーティングシステムJ/K 2004年10月4日
Mondriaan Memory Protection の調査
ネットワーク・プログラミング デバイスドライバと環境変数.
SpectreとMeltdown ITソリューション塾・第27期 2018年3月20日 株式会社アプライド・マーケティング 大越 章司
強制パススルー機構を用いた VMの安全な帯域外リモート管理
SMP/マルチコアに対応した 型付きアセンブリ言語
オペレーティングシステム (OSの機能と構造)
Presentation transcript:

L4-Linux のメモリ管理における問題点とその解決策

x86 のページング機構 1024 x 1024 x 4 K = 4 G x86 1024 1024 page table CR3 page directory table

話(図)を簡単にするために ページ・サイズを 256KB とする 仮想アドレス空間を 2GB に制限する 一層(8エントリ)のページ・テーブル 1GB の RAM を使うものとする 4ページの物理ページ

仮想空間とページ・テーブル 仮想空間 物理メモリ O GB ページ・テーブル 0x30000000 0x00000000    仮想空間    物理メモリ O GB ページ・テーブル 0x30000000 0x00000000 0x20000000 1 GB 0x10000000 2 GB

プロセスとページ・テーブル 各プロセスはそれ自身の仮想空間を持つ ページ・テーブル O GB 3 2 process 1 1 GB 2 GB

ユーザ空間とカーネル空間 仮想空間はユーザ空間とカーネル空間から成る User Kernel ページ・テーブル CR3 O GB 1 GB

カーネル空間のマッピング 仮想空間 物理メモリ O GB ページ・テーブル User Code Linux Kern 0x30000000    仮想空間    物理メモリ O GB ページ・テーブル User Code Linux Kern 0x30000000 User Code 1 GB Linux Kern 0x00000000 0x10000000 0x20000000 2 GB 0x30000000

仮想空間に関連する Linux のシステム・コール mlockall() プロセスの実行に必要な全てのページをメモリ常駐にする。 mmap() デバイスのメモリをプロセスの仮想空間にマップする。 clone() スレッド(メモリ空間を共有するプロセス)を生成する。 …

mlockall() 仮想空間 物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2    仮想空間    物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2 0x30000000 page 3 page 3 0x10000000 0x20000001 1 GB Linux Kern 0x00000000 0x10000000 0x20000000 2 GB 0x30000000

mlockall() 仮想空間 物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2 page 2    仮想空間    物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2 page 2 0x30000001 page 3 page 3 0x10000001 page 1 0x20000001 1 GB Linux Kern 0x00000000 0x10000000 0x20000000 2 GB 0x30000000

mmap() 仮想空間 物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2 0x30000000    仮想空間    物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2 0x30000000 page 3 page 3 0x10000000 0x20000001 1 GB Linux Kern 0x00000000 VME 0x10000000 0x20000000 Universe 2 GB 0x30000000

mmap() 仮想空間 物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2 0x3000000    仮想空間    物理メモリ O GB ページ・テーブル page 1 Linux Kern page 2 0x3000000 page 3 page 3 0x10000000 VME 0x20000001 1 GB Linux Kern 0xfc000000 0x00000000 VME 0x10000000 0x20000000 Universe 2 GB 0x30000000

clone() ページ・テーブルを共有するプロセスを生成する ページ・テーブル O GB User 1 GB Kernel 2 GB

clone() ページ・テーブルを共有するプロセスを生成する ページ・テーブル O GB User 1 GB Kernel 2 GB

Linux と L4-Linux の比較 Linux は L4 タスクの1つ User Code Linux Server Linux Kernel L4 Kernel

Linux Server の page table    仮想空間    物理メモリ O GB ページ・テーブル L4 Kern Linux Linux 0x00000000 0x10000000 0x20000000 1 GB L4 Kern 0x30000000 0x00000000 0x10000000 0x20000000 2 GB 0x30000000

システム・コール 例えば getpid() の場合 Linux Server User Code User Code Linux L4 L4

プロセス切替を伴う場合 例えば read() で休眠するとき User Linux read() Linux L4

L4-Linux におけるメモリ管理 ページ・テーブルはどこにある? User Linux Linux L4

L4-Linux におけるメモリ管理 ページ・テーブルの2重構造 User Linux Linux L4 CR3 CR3

2つのページ・テーブルに対する操作 はじめにページ・フォルトありき User Linux Code access page fault IPC(receive)

2つのページ・テーブルに対する操作 何をどうするかは全て Linux サーバが決める User Linux Code IPC(receive)

2つのページ・テーブルに対する操作 何をどうするかは全て Linux サーバが決める User Linux Code page in IPC(receive)

2つのページ・テーブルに対する操作 マッピングを実現するのは L4 カーネル Linux IPC(receive) IPC(send)

L4-Linux と mlockall() 全てのページが読み込まれた後も、、、 User Linux Code mlockall() page in User Code Linux mlockall()

L4-Linux と mlockall() 本物のページ・テーブルは空っぽのまま User Linux Code mlockall() return 0

L4-Linux と mmap() Linux のページ・テーブルを書き換えても、、、 User Code Linux mmap()

L4-Linux と mmap() 本物のページ・テーブルには反映されない User Code Linux mmap() return 0

L4-Linux における clone() 各スレッドが独自のページ・テーブルを持つ User Linux Server Linux L4

L4-Linux における clone() 各スレッドが独自のページ・テーブルを持つ User Linux Server Linux L4

問題点の整理 Linux が管理・操作する仮のページ・テーブルと L4 の中にある本物のページ・テーブルの2つが存在する。 前者に対する操作が後者に反映される機会はプロセスがページ・フォルトを起こした時であり、その時だけである。 リアルタイム・プロセスにするためには、実行開始前に本物のページ・テーブルを論理的なページ・テーブルに従って埋め尽くしておく必要がある。

2つのページ・テーブルに対する操作 マッピングを実現するのは L4 カーネル Linux IPC(receive) IPC(send)

2つのページ・テーブルを 一致させるための追加機能 相手の同意なしに一方的にマップする機能 Linux process fpage_map()

2つのページ・テーブルを 一致させるための追加機能 Linux のページ・テーブルの内容を掃き出させる Scan Linux process fpage_map() mflush()

2つのページ・テーブルを 一致させるための追加機能 Linux のページ・テーブルの内容を掃き出させる Scan Linux process fpage_map() mflush()

2つのページ・テーブルを 一致させるための追加機能 Linux のページ・テーブルの内容を掃き出させる Scan Linux process fpage_map() mflush()

2つのページ・テーブルを 一致させるための追加機能 Linux のページ・テーブルの内容を掃き出させる Linux process mflush() return 0