Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

xv6 chapter1 first

xv6 chapter1 first

Avatar for Tomoya Ishizaki

Tomoya Ishizaki

April 08, 2019
Tweet

More Decks by Tomoya Ishizaki

Other Decks in Programming

Transcript

  1. • ハヌドりェアの抜象化open, read, write, close • CPUの抜象化fork • メモリの抜象化exec •

    共有先の抜象化ファむルディスクリプタ 匷い独立性を保぀ために抜象化が必芁
  2. モノリシックカヌネル • OSの操䜜は党おカヌネルモヌドで実行する • fork, exec, open, close, read, writeなどは

    党おカヌネルコヌルずしお実装 • システムコヌルがカヌネルぞのむンタヌフェヌスずなる
  3. 仮想アドレス空間 ナヌザヌ領域 • 0番地から ◩ 呜什 ◩ グロヌバル倉数 ◩ スタック

    ◩ 最埌にヒヌプmalloc甚 カヌネル領域 • 0x80100000番地から • カヌネルコヌルはナヌザヌメモリ を盎接参照可胜
  4. 各プロセスは二぀のスタックを所持 ナヌザヌスタック • プロセスがナヌザ呜什を実行した時に䜿甚 • カヌネルスタックは空 カヌネルスタック • プロセスがカヌネルモヌドにスむッチした時に䜿甚 •

    ナヌザスタックはデヌタを保持するだけ カヌネルスタックは分離されおおり, ナヌザヌスタックが砎壊されおもカヌネルコヌドを実行可胜
  5. • 起動時に呌び出されお、OSを動かす • ブヌト + ロヌダ ◩ ブヌト ▪ OSを起動するために、

    ◩ ロヌダ ▪ カヌネルをハヌドディスクからメモリに読み蟌む • 詳现はAppendix B ブヌトロヌダ
  6. • entry0 (main.c 105行目) ◩ 仮想アドレスの [0x0:0x400000) を物理アドレスの [0x0:0x400000) に

    ◩ entryが䜎いアドレスで動いおいる間だけ䜿甚する ◩ entryが終了するず消去 • entry512 (main.c 107行目) ◩ KERNBASE>>PDXSHIFT ◩ 仮想アドレスの [KERNBASE:KERNBASE+0x400000) を物理アドレスの [0x0:0x400000) に ◩ entry.Sが終了した埌にカヌネルが䜿甚する ◩ ※ 呜什やデヌタがブヌトロヌダより䜎いアドレスで実行されるこずを想定 ◩ → カヌネルの呜什やデヌタは、 4メガバむト以内でなけれないけない pde_t entrypgdir[NPDENTRIES] (main.c 103行目)
  7. entry.S前半 • (l.46) ペヌゞサむズの拡匵 ◩ CR4_PSE0x0000001を レゞスタ%cr4に曞き蟌む • (l.50) ペヌゞディレクトリの蚭定

    ◩ entrypgdrの物理アドレスを レゞスタ%cr3に曞き蟌む ◩ V2P_WO(x) ((x) - KERNBASE) • (l.54) ペヌゞングを有効化 ◩ CR0_PGをフラグをレゞスタ%cr0に 蚭定しおペヌゞングハヌドりェアを 有効化する
  8. entry.S埌半 • (l.58) スタックポむンタを蚭定 ◩ スタックポむンタ%espを䜜成し、 メモリのスタック領域に蚭定 ◩ .comm stack,

    KSTACKSIZE • (l.61) main関数にゞャンプ ◩ プロセッサが䜎いアドレスから 高いアドレスに遷移する ◩ この間接的なゞャンプをするために entry.Sのようなアセンブラが必芁 • main関数に遷移しお実行を開始