1 / 37

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

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 を使うものとする

asasia
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. L4-Linux のメモリ管理における問題点とその解決策 Linuxスレッドをリアルタイム・スレッドとして使うために

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

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

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

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

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

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

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

  9. mlockall()    仮想空間    物理メモリ 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

  10. mlockall()    仮想空間    物理メモリ 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

  11. mmap()    仮想空間    物理メモリ 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

  12. mmap()    仮想空間    物理メモリ 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

  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 0x00000000 0x10000000 0x20000000 1 GB L4 Kern 0x30000000 0x00000000 0x10000000 0x20000000 2 GB 0x30000000

  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 L4 Linux CR3 CR3

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

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

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

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

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

  26. L4-Linux と mlockall() 本物のページ・テーブルは空っぽのまま User Code Linux 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つのページ・テーブルを一致させるための追加機能2つのページ・テーブルを一致させるための追加機能 相手の同意なしに一方的にマップする機能 Linux process fpage_map()

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

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

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

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

More Related