Mercurial > hg > Members > taiki > slides
view seminar2012/20120619.html @ 0:dd1c78c6398f
add having slides
author | taiki <taiki@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 Mar 2013 05:14:03 +0900 |
parents | |
children |
line wrap: on
line source
<!DOCTYPE html> <!-- Google HTML5 slide template Authors: Luke Mahé (code) Marcin Wichary (code and design) Dominic Mazzoni (browser compatibility) Charles Chen (ChromeVox support) URL: http://code.google.com/p/html5slides/ --> <html> <head> <title>Presentation</title> <link src='../styles.css'> <meta charset='utf-8'> <script src='../slides.js'></script> </head> <style> /* Your individual styles here, or just use inline styles if that’s what you want. */ </style> <body style='display: none'> <section class='slides layout-regular template-default'> <!-- Your slides (<article class='nobackground'>s) go here. Delete or comment out the slides below. --> <article> <h1>CbC による OS の実装(仮)</h1> <p>Taiki Taira / 19,Jun,2012</p> </article> <article> <h3>研究目標</h3> <p> 複雑化、多様化した BIOS を書き換え改良した仕様の(U)EFI に準拠した、GRUB2 で起動する。64bit のメモリを有効に扱う。<br> shared library を減らす。<br> 故障や部品交換等でOSそのものが止まるような箇所をなくす。<br> OS を構成する CPU 等の機器に多少の障害が起きてもすぐに切られることがないようにする。<br> CbC で動作し、Cerium の Task Manager をのせる。 </p> </article> <article> <h3> 設計 </h3> <img src='../images/os_plan.png'> <p> Cerium の Task Mangaer を載せ、OS に渡される処理を並列化する。 CbC のコンパイラを載せ、実行可能にする。 </p> </article> <article> <h3> 今週の作業 [~ 2011/06/19 ] </h3> <p> 64bit へ移行するソースの理解と作業 <br> Mach-O と ELF について<br> </p> </article> <article> <h3>Mach-O による開発1/2</h3> <p>cbc-gcc-4.6.0</p> <ul><b>Mac OS X 付属</b> <li>as<br> Mach-O 形式を出力<br> 吐くELFは 32bit 用</li> <li>ld<br> Mach-O 形式を受け入れる、出力する<br> 吐くELFは 32bit 用<br> <ul> <li>linker script が使用できない </li> <li>-Ttext org が使用できない<br> segment の開始アドレスを指定する</li> <li>64bit 形式のELF が吐けない</li> <li>-O binary or -O ELF64-x86-64 が使用できない</li> </ul> </li> </ul> </article> <article> <h3>Mach-O による開発2/2</h3> <p> binutils の objcopy<br> fd で起動する場合に、.img へ純粋なバイナリに変換してコピーするプログラム。 </p> <ul><b>Mac OS X binutils</b> <li>gobjcopy<br> Mach-O 形式を受けつけ、Mach-O を吐く。</li> </ul> <ul><b>binutils</b> <li>as</li> <li>ld</li> <li>objcopy<br> Mach-O 形式受け付けない。ELFを吐く。</li> </ul> <h4>Mach-O には GRUB2 非対応</h4> </article> <article> <h2>Linux 上で作ろうと考えていますが……。</h2> </article> <article> <h1>END</h1> </article> <article class='nobackground'> <h3> MSR (Model Specific Register) </h3> <p> モデル固有レジスタ<br> CPU 内部制御用のレジスタ群<br> RDMSR WRMSR 命令を使用して読み書き<br> </p> <h4> 機能 </h4> <ul> <li>メモリキャッシュ制御</li> <li>拡張機能の有効/無効</li> <li>Microcode の更新(Intel Only)</li> <li>パフォーマンスモニタの制御</li> <li>温度測定</li> <li>デバッグ制御</li> <li>マシンチェック</li> </ul> </article> <article class='nobackground'> <h3> MSR を操作する命令 </h3> <h4> RDMSR </h4> <p> ecx レジスタに MSR のアドレスを指定すると edx:eax レジスタに MSR の内容を読み込む。<br> 上位32bit が edx , 下位 32bit が eax へ入る。 </p> <h4> RDMSR </h4> <p> ecx レジスタに指定したMSR のアドレスに、 edx:eax レジスタの内容を書き込む。<br> </p> </article> <article class='nobackground'> <section> <pre> #define MSR_EFER 0xc0000080 /* extended feature register */ #define _EFER_LME 8 /* Long mode enable */ /* Enable Long mode in EFER (Extended Feature Enable Register) */ movl $MSR_EFER, %ecx rdmsr btsl $_EFER_LME, %eax wrmsr </pre> </section> </article> <article class='nobackground'> <h3> 今後やること </h3> <ul> <li>Task Manager のソースと論文を読む</li> <li> 32bit mode から 64bit mode (long mode) へ。</li> </ul> </article> <article class='nobackground'> </article> <article class='nobackground'> <h3> Multiboot Specification </h3> Multiboot Specification で規定された少量の規定を満たせばこの企画に準拠したブートローダー(ex. grub) から起動できる。<br> Multiboot Specification2 が作られており、grub2 (gurb の最新 grub1.99 )が対応しているため、Multiboot Specification2 に対応させる必要がある。<br> </p> </article> <article class='nobackground'> <h3> Physical Address Extension (PAE)</h3> <p> 物理アドレス拡張。<br> 32bit CPU で 4GiB以上のメモリを扱う技術。<br> AMD の AMD 64 アーキテクチャと Interl 64 アーキテクチャでは PAE のページテーブルエントリ構造を保ったまま512エントリをもった4段のページテーブル構造にすることで仮想アドレス空間を48、物理アドレス空間を52bit まで拡張。<br> IA-32 の PAE 互換を使用する場合物理アドレス空間の範囲は64bit mode で使った場合と同様。<br> </p> </article> <article class='nobackground'> <h3> Intel x86 architectures --- Segment Descripter </h3> <ul> <li> Interrupt Descriptor Table --- 割り込みの設定に使われる</li> <li> Global Descripter Table --- すべてのプログラムから共通にアクセスするセグメントを定義する </li> <li> Local Descriptor Table --- タスク単位に存在する</li> </ul> </article> <article class='nobackground'> <h3> Enable long mode </h3> <p>最初にCPUのIDを確認し、Long mode が使用可能かチェックする。 <ul> <li>ページングを不許可にする</li> <li> CR4 レジスタへ PAE を許可するためのbit をセットする</li> <li> CR3 を PML4 と一緒にロードする</li> <li> long mode を MSR の 0xC0000080 の EEER.LME フラグを セットすることによって許可する</li > <li></li> <li>ページングを許可する</li> </ul> </article> <article class='nobackground'> <h3> linux kernel 3.3 </h3> <p> arch/x86/boot/compressed/head_64.S で protect mode からlong mode へ移行するアセンブラが記述してある。<br> 64bit の GDT (Global Descripter Table) や PAE (Physical Address Extension) などもこのソースで用意している。<br> </p> </article> <article class='nobackground'> <h2> END </h2> </article> </section> </body> </html>