20分で理解する仮想記憶

3,549 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,549
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
19
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

20分で理解する仮想記憶

  1. 1. 20 分で理解する仮想記憶 横浜 Android 勉強会 2011/2/11 @magoroku15
  2. 2. ふーあむあい <ul><li>源氏名  @magoroku15  名古屋在住 </li></ul><ul><li>本日最高齢の某氏次ぐオサーン </li></ul><ul><li>OS 屋さん出身の組み込み屋さん </li></ul><ul><li>2005年から電子工作、オーディオで遊ぶ </li></ul><ul><ul><li>今年は FPGA で pdp11 を動かすのが目標 </li></ul></ul><ul><li>UST 検定 初段 </li></ul><ul><ul><li>初段:講演会場から HD で送出できること </li></ul></ul><ul><ul><li>名古屋つくる部配信係り  </li></ul></ul><ul><ul><ul><li>よーするに塚田部長のパシリ、 @gabu こえー </li></ul></ul></ul><ul><li>ぐだ生(土曜)、 V7UNIX (日曜)を配信中 </li></ul><ul><ul><li>magorokutv で検索  / 現在までに6600人が視聴 </li></ul></ul>
  3. 3. メモリの制約への対応 <ul><li>オーバーレイ </li></ul><ul><ul><li>プログラムを分割 </li></ul></ul><ul><ul><li>マスタが複数のスレーブを切り替えて1つの仕事を行う </li></ul></ul><ul><ul><li>例: UNIX の cc コマンド </li></ul></ul><ul><ul><ul><li>cpp,cc1,ccom,as,ld </li></ul></ul></ul><ul><li>なぜオーバレイが有効か? </li></ul><ul><ul><li>プログラムの局所性 </li></ul></ul>
  4. 4. プログラムの局所性 <ul><li>CPU の実行サイクル </li></ul><ul><ul><li>fetch,decode,execute </li></ul></ul><ul><li>C 言語のプログラミングモデルでは命令、データ、スタックの3点のみを参照 </li></ul><ul><li>プログラム全体をメモリに常駐させる必要なし </li></ul>
  5. 5. 仮想アドレス・実アドレス <ul><li>アドレス空間の一部にメモリを割り当てる </li></ul><ul><ul><li>プログラムが今必要な部分をメモリに </li></ul></ul><ul><ul><li>今必要でない部分はより安価装置へ移動 </li></ul></ul><ul><li>プログラムから見える仮のアドレスを実のアドレスにハードハードウェアが変換 </li></ul><ul><li>アドレスの変換に失敗すると割り込みが発生して OS に処理が遷移 </li></ul>
  6. 6. アドレス変換  1of3 <ul><li>アドレスの変換単位はページ </li></ul><ul><ul><li>大きさ数 Kbyte </li></ul></ul><ul><ul><li>aligned </li></ul></ul><ul><li>仮想アドレスのページ番号を実アドレスのページ番号に置換 </li></ul><ul><li>アドレスの変換表を OS が用意して、 CPU ( MMU )に通知 </li></ul>アドレス変換表
  7. 7. アドレス変換 2of3 <ul><li>アドレス32 bit 、ページサイズ4 Kbyte 場合 </li></ul><ul><li>4Kbyte は 0x1000 </li></ul><ul><ul><li>16 進で3桁は変換表に含まない </li></ul></ul><ul><ul><li>          </li></ul></ul>ページ番号     ページ内オフセット
  8. 8. アドレス変換  3of3 アドレス変換表 仮ページ番号 仮想アドレス ページ内 オフセット ページ 番号 実ページ番号 実ページ番号 実アドレス ページ内 オフセット
  9. 9. 変換機構の実例 <ul><li>変換表を2段に </li></ul><ul><ul><li>ページ  4Kbyte </li></ul></ul><ul><ul><li>セグメント 1Mbyte </li></ul></ul><ul><li>変換キャッシュ </li></ul>ページ番号 セグメント番号 ページ内 オフセット セグメントテーブル ページテーブル 仮ページ番号 仮ページ番号 実ページ番号 仮ページ番号 変換キャッシュ
  10. 10. 昔の話でごめんなさい <ul><li>System360 ってしってる? </li></ul><ul><ul><li>8 ビットでバイトを構成 </li></ul></ul><ul><ul><li>バイト単位のアドレス </li></ul></ul><ul><ul><li>32 ビット ワード </li></ul></ul><ul><ul><li>2 の補数による演算(業界初ではないが、 System/360 で採用されたことで標準となった) </li></ul></ul><ul><ul><li>セグメント方式とページング方式によるメモリ管理  1966 </li></ul></ul><ul><ul><li>マイクロプログラム方式の商用化 </li></ul></ul><ul><ul><li>IBM 浮動小数点標準( 20 年後に IEEE 754 に取って代わられた) </li></ul></ul><ul><ul><li>EBCDIC 文字セット </li></ul></ul><ul><li>現在のコンピュータの原点 </li></ul><ul><ul><li>S360,   PDP11 を理解すればあとはその子孫 </li></ul></ul>
  11. 11. 仮想記憶と *nux <ul><li>物理メモリ利用以上の仮想メモリ空間 </li></ul><ul><ul><li>オーバーレイ不要でアプリのロジックに集中 </li></ul></ul><ul><ul><li>参照の局所性がある場合には有効 </li></ul></ul><ul><li>ほかにも </li></ul><ul><ul><li>fork の高速化 </li></ul></ul><ul><ul><li>ファイルシステムの高速化 </li></ul></ul><ul><ul><li>exec の高速化 </li></ul></ul>
  12. 12. fork の高速化 <ul><li>Fork(2) </li></ul><ul><ul><li>fork(2) はプロセスの空間を複製 </li></ul></ul><ul><ul><li>メモリコピーが発生するため、システム規模が大きくなるとコスト増 </li></ul></ul><ul><ul><li>そこで、インチキ  COW </li></ul></ul><ul><li>プロセスの仮想記憶の管理テーブルのみを複写して、書き込み禁止に </li></ul><ul><li>書き込みで例外発生、ページをコピー </li></ul><ul><ul><li>遅延評価技法の一種 </li></ul></ul>
  13. 13. CopyOnWrite セグメントテーブル ページテーブル proc A B C セグメントテーブル ページテーブル proc C Copy A B C セグメントテーブル ページテーブル proc A B C セグメントテーブル ページテーブル proc A B C セグメントテーブル ページテーブル proc
  14. 14. ファイルシステムの高速化 <ul><li>ファイルシステム用キャッシュメモリ量の自動調整 </li></ul><ul><li>4BSD,SVR2 までは OS 生成時の固定パラメタ </li></ul><ul><ul><li>たとえばメモリの半分をキャッシュバッファに </li></ul></ul><ul><ul><li>残りをユーザプログラムに </li></ul></ul><ul><ul><li>メモリに開きがあってもファイルシステムキャッシュに利用できない </li></ul></ul>
  15. 15. exec(2) の高速化 <ul><li>exec(2)  パスで指定されたファイルの内容でアプリケーションのメモリを書き換え≒プログラムの起動 </li></ul><ul><li>exec(2) では仮想記憶テーブルを作るだけ </li></ul><ul><ul><li>カーネル内 mmap </li></ul></ul><ul><ul><li>変換に失敗したら、パスで指定されたファイルからページを読み込む </li></ul></ul><ul><ul><li>変更は COW で保護 </li></ul></ul>
  16. 16. おんこちしん <ul><li>低レイやの基本は </li></ul><ul><li>System360,PDP11,UNIX version7 に有り </li></ul><ul><li>おしまい </li></ul>

×