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

37
L4-Linux ののののののののののののの のののののの Linux ののののののののののの ののののののの ののののの

Upload: asasia

Post on 15-Jan-2016

97 views

Category:

Documents


3 download

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 Presentation

TRANSCRIPT

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

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

Linux スレッドをリアルタイム・スレッドとして使うために

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

x86 のページング機構 1024 x 1024 x 4 K = 4 G

x86x86

10241024

CR3 page table

page directory table

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

話(図)を簡単にするために ページ・サイズを 256 KB とする 仮想アドレス空間を 2 GB に制限する

8ページで2 GB 一層 ( 8エントリ ) のページ・テーブル 1 GB の RAM を使うものとする

4ページの物理ページ

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

仮想空間とページ・テーブル

0x20000000

0x10000000

0x30000000

0x00000000

ページ・テーブル

   仮想空間    物理メモリO GB

1 GB

2 GB

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

プロセスとページ・テーブル

ページ・テーブル

各プロセスはそれ自身の仮想空間を持つ

O GB

1 GB

2 GB

process 12

3

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

ユーザ空間とカーネル空間

ページ・テーブル

仮想空間はユーザ空間とカーネル空間から成る

O GB

1 GB

2 GB

Kernel

CR3

User

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

カーネル空間のマッピング

User Code

Linux Kern

Linux Kern

User Code

0x00000000

0x10000000

0x20000000

0x30000000

0x30000000

ページ・テーブル

   仮想空間    物理メモリO GB

1 GB

2 GB

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

仮想空間に関連する Linux のシステム・コール mlockall()

プロセスの実行に必要な全てのページをメモリ常駐にする。

mmap() デバイスのメモリをプロセスの仮想空間にマップす

る。 clone()

スレッド(メモリ空間を共有するプロセス)を生成する。

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

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  のメモリ管理における問題点とその解決策

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  のメモリ管理における問題点とその解決策

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  のメモリ管理における問題点とその解決策

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  のメモリ管理における問題点とその解決策

clone()

ページ・テーブル

ページ・テーブルを共有するプロセスを生成する

O GB

1 GB

2 GB

Kernel

User

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

clone()

ページ・テーブル

ページ・テーブルを共有するプロセスを生成する

O GB

1 GB

2 GB

Kernel

User

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

Linux と L4-Linux の比較Linux は L4 タスクの1つ

LinuxKernel

UserCode

L4Kernel

LinuxServer

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

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  のメモリ管理における問題点とその解決策

システム・コール

UserCode

例えば getpid() の場合

LinuxServer

UserCode

Linux L4 L4

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

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

User Linux

Linux L4

read()

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

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

User Linux

Linux L4

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

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

User Linux

CR3 CR3Linux L4

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

2つのページ・テーブルに対する操作

Linux

IPC(receive)

pagefault

はじめにページ・フォルトありき

UserCode

access

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

2つのページ・テーブルに対する操作

Linux

IPC(receive)

何をどうするかは全て Linux サーバが決める

0x0000c600

UserCode

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

2つのページ・テーブルに対する操作

Linux

IPC(receive)

page in

何をどうするかは全て Linux サーバが決める

UserCode

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

2つのページ・テーブルに対する操作

Linux

IPC(receive)

マッピングを実現するのは L4 カーネル

IPC(send)

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

L4-Linux と mlockall()

Linux

mlockall()

page in

全てのページが読み込まれた後も、、、

UserCode

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

L4-Linux と mlockall()

Linux

mlockall()

本物のページ・テーブルは空っぽのまま

UserCode

return 0

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

L4-Linux と mmap()

Linux

mmap()

Linux のページ・テーブルを書き換えても、、、

UserCode

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

L4-Linux と mmap()

Linux

mmap()

本物のページ・テーブルには反映されない

return 0

UserCode

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

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

User

Linux

LinuxServer

L4

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

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

User

Linux

LinuxServer

L4

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

問題点の整理 Linux が管理・操作する仮のページ・テーブルと

L4 の中にある本物のページ・テーブルの2つが存在する。

前者に対する操作が後者に反映される機会はプロセスがページ・フォルトを起こした時であり、その時だけである。

リアルタイム・プロセスにするためには、実行開始前に本物のページ・テーブルを論理的なページ・テーブルに従って埋め尽くしておく必要がある。

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

2つのページ・テーブルに対する操作

Linux

IPC(receive)

マッピングを実現するのは L4 カーネル

IPC(send)

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

2つのページ・テーブルを一致させるための追加機能

Linux

相手の同意なしに一方的にマップする機能

process

fpage_map()

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

2つのページ・テーブルを一致させるための追加機能

Linux

mflush()

Linux のページ・テーブルの内容を掃き出させる

fpage_map()

Scan

process

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

2つのページ・テーブルを一致させるための追加機能

Linux

mflush()

Linux のページ・テーブルの内容を掃き出させる

fpage_map()

Scan

process

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

2つのページ・テーブルを一致させるための追加機能

Linux

mflush()

Linux のページ・テーブルの内容を掃き出させる

fpage_map()

Scan

process

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

2つのページ・テーブルを一致させるための追加機能

Linux

mflush()

Linux のページ・テーブルの内容を掃き出させる

return 0

process