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