SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
自分でOSを作っている人の
 ための、仮想記憶構築法

     At Geekbar
     2011/6/13
    @magoroku15
今日のお話
   対象
       自分でOSを作っている人            AND
       仮想記憶のついて理解はしている         AND
       OSの教科書を読んでみたけどよくわからない   AND
       具体的な実装を見てみたい 人
   内容
       仮想記憶の構成について
       空間構成 単一空間、多重空間
       4.3BSDを例にした実装の紹介
空間の構成
   単一空間構成
     1枚の空間を仮想化する
     1枚の空間に複数のプロセスが同居

     メモリの拡張が主な目的利用

   多重空間構成
     複数の空間を仮想化する
     1枚の空間に1個のプロセスが存在

     システムの保護が主な利用目的
空間の構成

多重空間




単一空間
多重仮想空間の作り方


アプリ




                   仮想-物理 空間変換表
OS



       物理メモリ管理構造
アドレス変換 1of3
アドレス変換表      アドレスの変換単位
              はページ
                 大きさ数Kbyte
                 aligned
             仮想アドレスのページ
              番号を実アドレスのペ
              ージ番号に置換
             アドレスの変換表を
              OSが用意して、CPU(
              MMU)に通知
アドレス変換 2of3
   アドレス32bit、ページサイズ4Kbyte場合


   4Kbyteは0x1000
       16進で3桁は変換表に含まない



         ページ番号      ページ内オフセット
アドレス変換 3of3
仮想アドレス       アドレス変換表        実アドレス

仮ページ番号   ページ内               実ページ番号   ページ内
         オフセット                       オフセット
                 ページ
                 番号


                   実ページ番号
変換機構の実例
                               変換表を2段に
                                   ページ 4Kbyte
セグメント番号 ページ番号       ページ内
                    オフセット          セグメント 1Mbyte
    仮ページ番号
                               変換キャッシュ
                セグメントテーブル
                        ページテーブル

  仮ページ番号




変換キャッシュ

 仮ページ番号    実ページ番号
ページング
   一般的な運用では
     仮想空間量の総量 > 物理メモリ
     物理メモリの奪い合い

     メモリ参照に局所性がある状況では
           ゆっくり奪い合う→そこそこ動く
       メモリ参照に局所性がない状況では
           はげしく奪い合う→動かない


   局所的な参照の検出が重要
       どうやって
Least Recently Used (LRU)
   最近使われていないメモリは、今後も使わ
    れない -たぶんね ;-)
   メモリの参照頻度を記録して、今後使われ
    ないメモリを予想する
   仮想記憶をサポートする最近のCPUは、
    参照の有無を変換表に(1bit)記録する
       OSが、この情報を定期的にクリアしながら記
        録する
ソースを読む
   4.3BSD
     1986年にカリフォルニア大学バークレー校に
      よって配布された近代UNIX
     http://www.tamacom.com/tour/kernel/bsd/

   sys/vm_page.c
       ページング処理が記述
構造:cmap
   h/cmap.h
27 struct cmap
 28 {
 29 unsigned short c_next,        /* index of next free list entry */
 30          c_prev,      /* index of previous free list entry */
 31          c_hlink;      /* hash link for <blkno,mdev> */
 32 unsigned short c_ndx;          /* index of owner proc or text */
 33 unsigned int c_page:21, /* virtual page number in segment */
 34          c_lock:1,      /* locked for raw i/o or pagein */
 35          c_want:1,       /* wanted */
 36          c_intrans:1, /* intransit bit */
 37          c_free:1,     /* on the free list */
 38          c_gone:1,       /* associated page has been released */
 39          c_type:2,      /* type CSYS or CTEXT or CSTACK or CDATA */
 40          :4,        /* to longword boundary */
 41          c_blkno:24, /* disk block this is a copy of */
 42          c_mdev:8;        /* which mounted dev this is from */
 43 };
構造:pte
   vax/pte.h
20 struct pte
 21 {
 22 unsigned int pg_pfnum:21,         /* core page frame number or 0 */
 23           :2,
 24           pg_vreadm:1,      /* modified since vread (or with _m) */
 25           pg_swapm:1,        /* have to write back to swap */
 26           pg_fod:1,      /* is fill on demand (=0) */
 27           pg_m:1,        /* hardware maintained modified bit */
 28           pg_prot:4,      /* access control */
 29           pg_v:1;       /* valid bit */
 30 };
pageout()
   sys/vm_page.c
696 loop:
711      sleep((caddr_t)&proc[2], PSWP+1);
712      (void) spl0();
713      count = 0;
714      pushes = 0;
715      while (nscan < desscan && freemem < lotsfree) {
720           if (checkpage(fronthand, FRONT))
721                 count = 0;
722           if (checkpage(backhand, BACK))
723                 count = 0;
724           cnt.v_scan++;
725           nscan++;
 :
 :
741      }
742      goto loop;
743 }
744
checkpage
   sys/vm_page.c
768 top:                                            802       break;
774        c = &cmap[hand];                         803   }
775        if (c->c_lock || c->c_free)               :
776              return (0);                        813   if (pte->pg_v) {
777        switch (c->c_type) {                     814         if (whichhand == BACK)
779        case CSYS:                               815               return(0);
780              return (0);                        816         pte->pg_v = 0;
                                                    817         if (anycl(pte, pg_m))
789        case CDATA:                              818               pte->pg_m = 1;
790        case CSTACK:                             819         distcl(pte);
791             rp = &proc[c->c_ndx];                :
792             while (rp->p_flag & SNOVM)          825   }
793                   rp = rp->p_xlink;
794             xp = rp->p_textp;
795             if (c->c_type == CDATA) {
796                 v = dptov(rp, c->c_page);
797                 pte = dptopte(rp, c->c_page);
 :
こんなかんじ
  FRONTハンドがスキャンし
  た後にBACKがスキャン。参
  照されていなければ参照さ
  れていない


             c_pageとc_ndxを
             使ってpteを求め
FRONT        て、無効化して
             swapに書き出す
一定の距離

                                              仮想-物理 空間変換表
BACK
                             c_page:



                              c_ndx;



        cmap 物理メモリ管理構造                 proc プロセス管理構造
まとめ
   pageout処理に絞って処理を俯瞰
   他のOSもほぼ同じ
     実メモリ(page)の管理構造
     利用状況を検出

     実メモリから、アドレス変換エントリを算出

     変換を無効化してswapに追い出す

     どこに追い出したかを記録
   これで、仮想記憶の拡張も書けますね
   そういえば
     UNIX V7に仮想記憶を書き足した学生がいま
      したね
     minixっていうUNIXもどきの学習用のOSに仮
      想記憶を書き足した学生もいましたね

Mais conteúdo relacionado

Mais procurados

SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介MITSUNARI Shigeo
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるKoichi Suzuki
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithmtakesako
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生MITSUNARI Shigeo
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementationMITSUNARI Shigeo
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~Preferred Networks
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Kazuhiro Takahashi
 
あるキャッシュメモリの話
あるキャッシュメモリの話あるキャッシュメモリの話
あるキャッシュメモリの話nullnilaki
 
Node 学園祭 2012 用
Node 学園祭 2012 用Node 学園祭 2012 用
Node 学園祭 2012 用Rei Kawai
 

Mais procurados (20)

Altanative macro
Altanative macroAltanative macro
Altanative macro
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
emcjp Item 42
emcjp Item 42emcjp Item 42
emcjp Item 42
 
as-2. メモリと CPU
as-2. メモリと CPUas-2. メモリと CPU
as-2. メモリと CPU
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
 
あるキャッシュメモリの話
あるキャッシュメモリの話あるキャッシュメモリの話
あるキャッシュメモリの話
 
Maatkitの紹介
Maatkitの紹介Maatkitの紹介
Maatkitの紹介
 
Ras piでrt linux
Ras piでrt linuxRas piでrt linux
Ras piでrt linux
 
Node 学園祭 2012 用
Node 学園祭 2012 用Node 学園祭 2012 用
Node 学園祭 2012 用
 

Destaque

Introdução a educação digital
Introdução a educação digitalIntrodução a educação digital
Introdução a educação digitalJosé Luis Carneiro
 
Presentación1
Presentación1Presentación1
Presentación1Yismar94
 
Avances de obra mayo 2011
Avances de obra mayo 2011Avances de obra mayo 2011
Avances de obra mayo 2011juanintera
 
โครงการปีการศึกษา 2554
โครงการปีการศึกษา 2554โครงการปีการศึกษา 2554
โครงการปีการศึกษา 2554Nang Ka Nangnarak
 
2011年中国公益组织资源匹配与筹资培训
2011年中国公益组织资源匹配与筹资培训2011年中国公益组织资源匹配与筹资培训
2011年中国公益组织资源匹配与筹资培训vim background
 
Comites proyectos y celebraciones
Comites proyectos y celebracionesComites proyectos y celebraciones
Comites proyectos y celebracioneshildebon
 
Каталог Енчо Енчев ЕТЕ
Каталог Енчо Енчев ЕТЕКаталог Енчо Енчев ЕТЕ
Каталог Енчо Енчев ЕТЕMaterial_bg
 
Como Abrir uma Empresa Individual
Como Abrir uma Empresa IndividualComo Abrir uma Empresa Individual
Como Abrir uma Empresa IndividualÉrico Machado
 
ティナシーリグ氏による創造性を高める9つのポイント
ティナシーリグ氏による創造性を高める9つのポイントティナシーリグ氏による創造性を高める9つのポイント
ティナシーリグ氏による創造性を高める9つのポイントTetsu Kanaya
 
Protocolo 4
Protocolo 4Protocolo 4
Protocolo 4bkruz
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsJorge Walendowsky
 

Destaque (20)

Introdução a educação digital
Introdução a educação digitalIntrodução a educação digital
Introdução a educação digital
 
Presentación1
Presentación1Presentación1
Presentación1
 
Avances de obra mayo 2011
Avances de obra mayo 2011Avances de obra mayo 2011
Avances de obra mayo 2011
 
โครงการปีการศึกษา 2554
โครงการปีการศึกษา 2554โครงการปีการศึกษา 2554
โครงการปีการศึกษา 2554
 
2011年中国公益组织资源匹配与筹资培训
2011年中国公益组织资源匹配与筹资培训2011年中国公益组织资源匹配与筹资培训
2011年中国公益组织资源匹配与筹资培训
 
TALENTOTAL
TALENTOTALTALENTOTAL
TALENTOTAL
 
новогодний проект 2012
новогодний проект 2012новогодний проект 2012
новогодний проект 2012
 
8v,
8v,8v,
8v,
 
Unicode
UnicodeUnicode
Unicode
 
Comites proyectos y celebraciones
Comites proyectos y celebracionesComites proyectos y celebraciones
Comites proyectos y celebraciones
 
Slids
SlidsSlids
Slids
 
Mkt 360
Mkt 360Mkt 360
Mkt 360
 
Slide jailani
Slide jailaniSlide jailani
Slide jailani
 
Каталог Енчо Енчев ЕТЕ
Каталог Енчо Енчев ЕТЕКаталог Енчо Енчев ЕТЕ
Каталог Енчо Енчев ЕТЕ
 
Como Abrir uma Empresa Individual
Como Abrir uma Empresa IndividualComo Abrir uma Empresa Individual
Como Abrir uma Empresa Individual
 
ティナシーリグ氏による創造性を高める9つのポイント
ティナシーリグ氏による創造性を高める9つのポイントティナシーリグ氏による創造性を高める9つのポイント
ティナシーリグ氏による創造性を高める9つのポイント
 
Resenha
ResenhaResenha
Resenha
 
Protocolo 4
Protocolo 4Protocolo 4
Protocolo 4
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.js
 
Turis de aguazul
Turis de aguazulTuris de aguazul
Turis de aguazul
 

Semelhante a 仮想記憶の構築法

仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題にmagoroku Yamamoto
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
081108huge_data.ppt
081108huge_data.ppt081108huge_data.ppt
081108huge_data.pptNaoya Ito
 
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理Akari Asai
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflowionis111
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Takeshi Arabiki
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
Linux の hugepage の開発動向
Linux の hugepage の開発動向Linux の hugepage の開発動向
Linux の hugepage の開発動向Naoya Horiguchi
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇Manabu Ori
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deploymentssmdkk
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaandroid sola
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 

Semelhante a 仮想記憶の構築法 (20)

仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
081108huge_data.ppt
081108huge_data.ppt081108huge_data.ppt
081108huge_data.ppt
 
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
Linux の hugepage の開発動向
Linux の hugepage の開発動向Linux の hugepage の開発動向
Linux の hugepage の開発動向
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Open VZ
Open VZOpen VZ
Open VZ
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
Reconf 201506
Reconf 201506Reconf 201506
Reconf 201506
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deployments
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 

Mais de magoroku Yamamoto

Mais de magoroku Yamamoto (20)

Deep learning入門
Deep learning入門Deep learning入門
Deep learning入門
 
波形で見るBig.little
波形で見るBig.little波形で見るBig.little
波形で見るBig.little
 
自動並列化コンパイラをAndroidに適用してみた
自動並列化コンパイラをAndroidに適用してみた自動並列化コンパイラをAndroidに適用してみた
自動並列化コンパイラをAndroidに適用してみた
 
Oscar compiler for power reduction
Oscar compiler for power reduction Oscar compiler for power reduction
Oscar compiler for power reduction
 
Unix v6 セミナー vol. 5
Unix v6 セミナー vol. 5Unix v6 セミナー vol. 5
Unix v6 セミナー vol. 5
 
V6 unix vol.2 in okinawa
V6 unix vol.2 in okinawaV6 unix vol.2 in okinawa
V6 unix vol.2 in okinawa
 
Adk2012
Adk2012Adk2012
Adk2012
 
Android binder-ipc
Android binder-ipcAndroid binder-ipc
Android binder-ipc
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
ぐだ生システム#2
ぐだ生システム#2ぐだ生システム#2
ぐだ生システム#2
 
ぐだ生って何
ぐだ生って何ぐだ生って何
ぐだ生って何
 
Android builders summit slide tour
Android builders summit slide tourAndroid builders summit slide tour
Android builders summit slide tour
 
第4回名古屋Android勉強会資料
第4回名古屋Android勉強会資料第4回名古屋Android勉強会資料
第4回名古屋Android勉強会資料
 
Poorman’s adk トレーナ
Poorman’s adk トレーナPoorman’s adk トレーナ
Poorman’s adk トレーナ
 
20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント
 
Poormans sdk
Poormans sdkPoormans sdk
Poormans sdk
 
Ngk2011 b
Ngk2011 bNgk2011 b
Ngk2011 b
 
オレオレ家電
オレオレ家電オレオレ家電
オレオレ家電
 
V6read#4
V6read#4V6read#4
V6read#4
 
V6read#3
V6read#3V6read#3
V6read#3
 

Último

20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdfssuser80a51f
 
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)KayaSuetake1
 
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdfストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdfmasakisaito12
 
Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipYasuyoshi Minehisa
 
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチUP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチユニパー株式会社
 
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfmasakisaito12
 
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ 株式会社
 
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店ssuserfb441f
 

Último (8)

20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf
 
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
 
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdfストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
 
Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
 
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチUP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
 
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
 
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
 
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
 

仮想記憶の構築法

  • 2. 今日のお話  対象  自分でOSを作っている人 AND  仮想記憶のついて理解はしている AND  OSの教科書を読んでみたけどよくわからない AND  具体的な実装を見てみたい 人  内容  仮想記憶の構成について  空間構成 単一空間、多重空間  4.3BSDを例にした実装の紹介
  • 3. 空間の構成  単一空間構成  1枚の空間を仮想化する  1枚の空間に複数のプロセスが同居  メモリの拡張が主な目的利用  多重空間構成  複数の空間を仮想化する  1枚の空間に1個のプロセスが存在  システムの保護が主な利用目的
  • 5. 多重仮想空間の作り方 アプリ 仮想-物理 空間変換表 OS 物理メモリ管理構造
  • 6. アドレス変換 1of3 アドレス変換表  アドレスの変換単位 はページ  大きさ数Kbyte  aligned  仮想アドレスのページ 番号を実アドレスのペ ージ番号に置換  アドレスの変換表を OSが用意して、CPU( MMU)に通知
  • 7. アドレス変換 2of3  アドレス32bit、ページサイズ4Kbyte場合  4Kbyteは0x1000  16進で3桁は変換表に含まない ページ番号 ページ内オフセット
  • 8. アドレス変換 3of3 仮想アドレス アドレス変換表 実アドレス 仮ページ番号 ページ内 実ページ番号 ページ内 オフセット オフセット ページ 番号 実ページ番号
  • 9. 変換機構の実例  変換表を2段に  ページ 4Kbyte セグメント番号 ページ番号 ページ内 オフセット  セグメント 1Mbyte 仮ページ番号  変換キャッシュ セグメントテーブル ページテーブル 仮ページ番号 変換キャッシュ 仮ページ番号 実ページ番号
  • 10. ページング  一般的な運用では  仮想空間量の総量 > 物理メモリ  物理メモリの奪い合い  メモリ参照に局所性がある状況では  ゆっくり奪い合う→そこそこ動く  メモリ参照に局所性がない状況では  はげしく奪い合う→動かない  局所的な参照の検出が重要  どうやって
  • 11. Least Recently Used (LRU)  最近使われていないメモリは、今後も使わ れない -たぶんね ;-)  メモリの参照頻度を記録して、今後使われ ないメモリを予想する  仮想記憶をサポートする最近のCPUは、 参照の有無を変換表に(1bit)記録する  OSが、この情報を定期的にクリアしながら記 録する
  • 12. ソースを読む  4.3BSD  1986年にカリフォルニア大学バークレー校に よって配布された近代UNIX  http://www.tamacom.com/tour/kernel/bsd/  sys/vm_page.c  ページング処理が記述
  • 13. 構造:cmap  h/cmap.h 27 struct cmap 28 { 29 unsigned short c_next, /* index of next free list entry */ 30 c_prev, /* index of previous free list entry */ 31 c_hlink; /* hash link for <blkno,mdev> */ 32 unsigned short c_ndx; /* index of owner proc or text */ 33 unsigned int c_page:21, /* virtual page number in segment */ 34 c_lock:1, /* locked for raw i/o or pagein */ 35 c_want:1, /* wanted */ 36 c_intrans:1, /* intransit bit */ 37 c_free:1, /* on the free list */ 38 c_gone:1, /* associated page has been released */ 39 c_type:2, /* type CSYS or CTEXT or CSTACK or CDATA */ 40 :4, /* to longword boundary */ 41 c_blkno:24, /* disk block this is a copy of */ 42 c_mdev:8; /* which mounted dev this is from */ 43 };
  • 14. 構造:pte  vax/pte.h 20 struct pte 21 { 22 unsigned int pg_pfnum:21, /* core page frame number or 0 */ 23 :2, 24 pg_vreadm:1, /* modified since vread (or with _m) */ 25 pg_swapm:1, /* have to write back to swap */ 26 pg_fod:1, /* is fill on demand (=0) */ 27 pg_m:1, /* hardware maintained modified bit */ 28 pg_prot:4, /* access control */ 29 pg_v:1; /* valid bit */ 30 };
  • 15. pageout()  sys/vm_page.c 696 loop: 711 sleep((caddr_t)&proc[2], PSWP+1); 712 (void) spl0(); 713 count = 0; 714 pushes = 0; 715 while (nscan < desscan && freemem < lotsfree) { 720 if (checkpage(fronthand, FRONT)) 721 count = 0; 722 if (checkpage(backhand, BACK)) 723 count = 0; 724 cnt.v_scan++; 725 nscan++; : : 741 } 742 goto loop; 743 } 744
  • 16. checkpage  sys/vm_page.c 768 top: 802 break; 774 c = &cmap[hand]; 803 } 775 if (c->c_lock || c->c_free) : 776 return (0); 813 if (pte->pg_v) { 777 switch (c->c_type) { 814 if (whichhand == BACK) 779 case CSYS: 815 return(0); 780 return (0); 816 pte->pg_v = 0; 817 if (anycl(pte, pg_m)) 789 case CDATA: 818 pte->pg_m = 1; 790 case CSTACK: 819 distcl(pte); 791 rp = &proc[c->c_ndx]; : 792 while (rp->p_flag & SNOVM) 825 } 793 rp = rp->p_xlink; 794 xp = rp->p_textp; 795 if (c->c_type == CDATA) { 796 v = dptov(rp, c->c_page); 797 pte = dptopte(rp, c->c_page); :
  • 17. こんなかんじ FRONTハンドがスキャンし た後にBACKがスキャン。参 照されていなければ参照さ れていない c_pageとc_ndxを 使ってpteを求め FRONT て、無効化して swapに書き出す 一定の距離 仮想-物理 空間変換表 BACK c_page: c_ndx; cmap 物理メモリ管理構造 proc プロセス管理構造
  • 18. まとめ  pageout処理に絞って処理を俯瞰  他のOSもほぼ同じ  実メモリ(page)の管理構造  利用状況を検出  実メモリから、アドレス変換エントリを算出  変換を無効化してswapに追い出す  どこに追い出したかを記録
  • 19. これで、仮想記憶の拡張も書けますね  そういえば  UNIX V7に仮想記憶を書き足した学生がいま したね  minixっていうUNIXもどきの学習用のOSに仮 想記憶を書き足した学生もいましたね