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

Post on 15-Jan-2016

97 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

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

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

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

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

x86x86

10241024

CR3 page table

page directory table

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

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

4ページの物理ページ

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

0x20000000

0x10000000

0x30000000

0x00000000

ページ・テーブル

   仮想空間    物理メモリO GB

1 GB

2 GB

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

ページ・テーブル

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

O GB

1 GB

2 GB

process 12

3

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

ページ・テーブル

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

O GB

1 GB

2 GB

Kernel

CR3

User

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

User Code

Linux Kern

Linux Kern

User Code

0x00000000

0x10000000

0x20000000

0x30000000

0x30000000

ページ・テーブル

   仮想空間    物理メモリO GB

1 GB

2 GB

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

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

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

る。 clone()

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

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

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

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

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

clone()

ページ・テーブル

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

O GB

1 GB

2 GB

Kernel

User

clone()

ページ・テーブル

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

O GB

1 GB

2 GB

Kernel

User

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

LinuxKernel

UserCode

L4Kernel

LinuxServer

Linux Server の page table

0x30000000

Linux

L4 Kern

L4 Kern

Linux

0x00000000

0x10000000

0x20000000

0x30000000

0x00000000

ページ・テーブル

   仮想空間    物理メモリO GB

1 GB

2 GB

0x10000000

0x20000000

システム・コール

UserCode

例えば getpid() の場合

LinuxServer

UserCode

Linux L4 L4

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

User Linux

Linux L4

read()

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

User Linux

Linux L4

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

User Linux

CR3 CR3Linux L4

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

Linux

IPC(receive)

pagefault

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

UserCode

access

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

Linux

IPC(receive)

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

0x0000c600

UserCode

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

Linux

IPC(receive)

page in

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

UserCode

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

Linux

IPC(receive)

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

IPC(send)

L4-Linux と mlockall()

Linux

mlockall()

page in

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

UserCode

L4-Linux と mlockall()

Linux

mlockall()

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

UserCode

return 0

L4-Linux と mmap()

Linux

mmap()

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

UserCode

L4-Linux と mmap()

Linux

mmap()

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

return 0

UserCode

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

User

Linux

LinuxServer

L4

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

User

Linux

LinuxServer

L4

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

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

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

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

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

Linux

IPC(receive)

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

IPC(send)

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

Linux

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

process

fpage_map()

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

Linux

mflush()

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

fpage_map()

Scan

process

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

Linux

mflush()

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

fpage_map()

Scan

process

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

Linux

mflush()

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

fpage_map()

Scan

process

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

Linux

mflush()

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

return 0

process

top related