l4-linux のメモリ管理における問題点とその解決策
DESCRIPTION
L4-Linux のメモリ管理における問題点とその解決策. Linux スレッドをリアルタイム・スレッドとして使うために. x86 のページング機構. 1024 x 1024 x 4 K = 4 G. x86. page table. CR3. 1024. 1024. page directory table. 話(図)を簡単にするために. ページ・サイズを 256 KB とする 仮想アドレス空間を 2 GB に制限する 8ページで2 GB 一層 ( 8エントリ ) のページ・テーブル 1 GB の RAM を使うものとする - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/1.jpg)
L4-Linux のメモリ管理における問題点とその解決策
Linux スレッドをリアルタイム・スレッドとして使うために
![Page 2: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/2.jpg)
x86 のページング機構 1024 x 1024 x 4 K = 4 G
x86x86
10241024
CR3 page table
page directory table
![Page 3: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/3.jpg)
話(図)を簡単にするために ページ・サイズを 256 KB とする 仮想アドレス空間を 2 GB に制限する
8ページで2 GB 一層 ( 8エントリ ) のページ・テーブル 1 GB の RAM を使うものとする
4ページの物理ページ
![Page 4: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/4.jpg)
仮想空間とページ・テーブル
0x20000000
0x10000000
0x30000000
0x00000000
ページ・テーブル
仮想空間 物理メモリO GB
1 GB
2 GB
![Page 5: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/5.jpg)
プロセスとページ・テーブル
ページ・テーブル
各プロセスはそれ自身の仮想空間を持つ
O GB
1 GB
2 GB
process 12
3
![Page 6: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/6.jpg)
ユーザ空間とカーネル空間
ページ・テーブル
仮想空間はユーザ空間とカーネル空間から成る
O GB
1 GB
2 GB
Kernel
CR3
User
![Page 7: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/7.jpg)
カーネル空間のマッピング
User Code
Linux Kern
Linux Kern
User Code
0x00000000
0x10000000
0x20000000
0x30000000
0x30000000
ページ・テーブル
仮想空間 物理メモリO GB
1 GB
2 GB
![Page 8: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/8.jpg)
仮想空間に関連する Linux のシステム・コール mlockall()
プロセスの実行に必要な全てのページをメモリ常駐にする。
mmap() デバイスのメモリをプロセスの仮想空間にマップす
る。 clone()
スレッド(メモリ空間を共有するプロセス)を生成する。
…
![Page 9: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/9.jpg)
mlockall()
page 1
page 2
page 3
Linux Kern
Linux Kern
page 3
0x00000000
0x10000000
0x20000000
0x30000000
0x30000000
ページ・テーブル
仮想空間 物理メモリO GB
1 GB
2 GB
0x10000000
0x20000001
![Page 10: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/10.jpg)
mlockall()
page 1
page 2
page 3
Linux Kern
Linux Kern
page 2
page 3
0x00000000
0x10000000
0x20000000
0x30000000
0x30000001
ページ・テーブル
仮想空間 物理メモリO GB
1 GB
2 GB
0x10000001
0x20000001page 1
![Page 11: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/11.jpg)
mmap()
page 1
page 2
page 3
Linux Kern
Linux Kern
page 3
0x00000000
0x10000000
0x20000000
0x30000000
0x30000000
ページ・テーブル
仮想空間 物理メモリO GB
1 GB
2 GB
0x10000000
0x20000001
VME
Universe
![Page 12: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/12.jpg)
mmap()
page 1
page 2
page 3
VME
Linux Kern
Linux Kern
page 3
0x00000000
0x10000000
0x20000000
0x30000000
0x3000000
ページ・テーブル
仮想空間 物理メモリO GB
1 GB
2 GB
0x10000000
0x20000001
VME
Universe
0xfc000000
![Page 13: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/13.jpg)
clone()
ページ・テーブル
ページ・テーブルを共有するプロセスを生成する
O GB
1 GB
2 GB
Kernel
User
![Page 14: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/14.jpg)
clone()
ページ・テーブル
ページ・テーブルを共有するプロセスを生成する
O GB
1 GB
2 GB
Kernel
User
![Page 15: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/15.jpg)
Linux と L4-Linux の比較Linux は L4 タスクの1つ
LinuxKernel
UserCode
L4Kernel
LinuxServer
![Page 16: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/16.jpg)
Linux Server の page table
0x30000000
Linux
L4 Kern
L4 Kern
Linux
0x00000000
0x10000000
0x20000000
0x30000000
0x00000000
ページ・テーブル
仮想空間 物理メモリO GB
1 GB
2 GB
0x10000000
0x20000000
![Page 17: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/17.jpg)
システム・コール
UserCode
例えば getpid() の場合
LinuxServer
UserCode
Linux L4 L4
![Page 18: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/18.jpg)
プロセス切替を伴う場合例えば read() で休眠するとき
User Linux
Linux L4
read()
![Page 19: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/19.jpg)
L4-Linux におけるメモリ管理ページ・テーブルはどこにある?
User Linux
Linux L4
![Page 20: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/20.jpg)
L4-Linux におけるメモリ管理ページ・テーブルの2重構造
User Linux
CR3 CR3Linux L4
![Page 21: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/21.jpg)
2つのページ・テーブルに対する操作
Linux
IPC(receive)
pagefault
はじめにページ・フォルトありき
UserCode
access
![Page 22: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/22.jpg)
2つのページ・テーブルに対する操作
Linux
IPC(receive)
何をどうするかは全て Linux サーバが決める
0x0000c600
UserCode
![Page 23: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/23.jpg)
2つのページ・テーブルに対する操作
Linux
IPC(receive)
page in
何をどうするかは全て Linux サーバが決める
UserCode
![Page 24: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/24.jpg)
2つのページ・テーブルに対する操作
Linux
IPC(receive)
マッピングを実現するのは L4 カーネル
IPC(send)
![Page 25: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/25.jpg)
L4-Linux と mlockall()
Linux
mlockall()
page in
全てのページが読み込まれた後も、、、
UserCode
![Page 26: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/26.jpg)
L4-Linux と mlockall()
Linux
mlockall()
本物のページ・テーブルは空っぽのまま
UserCode
return 0
![Page 27: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/27.jpg)
L4-Linux と mmap()
Linux
mmap()
Linux のページ・テーブルを書き換えても、、、
UserCode
![Page 28: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/28.jpg)
L4-Linux と mmap()
Linux
mmap()
本物のページ・テーブルには反映されない
return 0
UserCode
![Page 29: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/29.jpg)
L4-Linux における clone()各スレッドが独自のページ・テーブルを持つ
User
Linux
LinuxServer
L4
![Page 30: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/30.jpg)
L4-Linux における clone()各スレッドが独自のページ・テーブルを持つ
User
Linux
LinuxServer
L4
![Page 31: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/31.jpg)
問題点の整理 Linux が管理・操作する仮のページ・テーブルと
L4 の中にある本物のページ・テーブルの2つが存在する。
前者に対する操作が後者に反映される機会はプロセスがページ・フォルトを起こした時であり、その時だけである。
リアルタイム・プロセスにするためには、実行開始前に本物のページ・テーブルを論理的なページ・テーブルに従って埋め尽くしておく必要がある。
![Page 32: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/32.jpg)
2つのページ・テーブルに対する操作
Linux
IPC(receive)
マッピングを実現するのは L4 カーネル
IPC(send)
![Page 33: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/33.jpg)
2つのページ・テーブルを一致させるための追加機能
Linux
相手の同意なしに一方的にマップする機能
process
fpage_map()
![Page 34: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/34.jpg)
2つのページ・テーブルを一致させるための追加機能
Linux
mflush()
Linux のページ・テーブルの内容を掃き出させる
fpage_map()
Scan
process
![Page 35: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/35.jpg)
2つのページ・テーブルを一致させるための追加機能
Linux
mflush()
Linux のページ・テーブルの内容を掃き出させる
fpage_map()
Scan
process
![Page 36: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/36.jpg)
2つのページ・テーブルを一致させるための追加機能
Linux
mflush()
Linux のページ・テーブルの内容を掃き出させる
fpage_map()
Scan
process
![Page 37: L4-Linux のメモリ管理における問題点とその解決策](https://reader033.vdocuments.site/reader033/viewer/2022061616/56814a88550346895db79992/html5/thumbnails/37.jpg)
2つのページ・テーブルを一致させるための追加機能
Linux
mflush()
Linux のページ・テーブルの内容を掃き出させる
return 0
process