Mercurial > hg > Members > taiki > slides
view seminar/seminar2013/0924.html @ 3:fea44bb81877 default tip
many change
author | taiki |
---|---|
date | Tue, 10 Dec 2013 15:31:33 +0900 |
parents | |
children |
line wrap: on
line source
<!-- Google IO 2012 HTML5 Slide Template Authors: Eric Bidelman <ebidel@gmail.com> Luke Mahé <lukem@google.com> URL: https://code.google.com/p/io-2012-slides --> <!DOCTYPE html> <html> <head> <title>Presentation</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="chrome=1"> <!--<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">--> <!--<meta name="viewport" content="width=device-width, initial-scale=1.0">--> <!--This one seems to work all the time, but really small on ipad--> <!--<meta name="viewport" content="initial-scale=0.4">--> <meta name="apple-mobile-web-app-capable" content="yes"> <link rel="stylesheet" media="all" href="css/default.css"> <link rel="stylesheet" media="only screen and (max-device-width: 480px)" href="../io2012slides/theme/css/phone.css"> <base target="_blank"> <!-- This amazingness opens all links in a new tab. --> <script data-main="../io2012slides/js/slides" src="../io2012slides/js/require-1.0.8.min.js"></script> </head> <body style="opacity: 0"> <slides class="layout-widescreen"> <!-- <slide class="logoslide nobackground"> <article class="flexbox vcenter"> <span><img src="../io2012slides/images/google_developers_logo.png"></span> </article> </slide> --> <slide class="title-slide segue nobackground"> <aside class="gdbar"><img src="../images/concurrent.png"></aside> <!-- The content of this hgroup is replaced programmatically through the slide_config.json. --> <hgroup class="auto-fadein"> <h1 data-config-title><!-- populated from slide_config.json --></h1> <h2 data-config-subtitle><!-- populated from slide_config.json --></h2> <p data-config-presenter><!-- populated from slide_config.json --></p> </hgroup> </slide> <slide> <hgroup> <h2>研究目的</h2> </hgroup> <article> <ul> <li>ブートが高速で、コンパクトなカーネルを実装する。</li> <li>Codesegment と Datasegment をカーネルに実装するにあたって、メモリ管理の役割とどう合致するのかを検証する。</li> <li>上記を確認したら CbC を用いて、動作が軽く落ちにくいカーネルを実装する。</li> <li>モデル検証に対応し、エラー予測を可能にする</li> <li>カーネルパニックをなくす</li> <li>Mach-O を ELILO でロードし、64bit で動作可能にする</li> </ul> </article> </slide> <slide> <hgroup> <h2>ELILO</h2> </hgroup> <article> <h3>現状</h3> <img src="images/flowchart.png"> </article> </slide> <slide> <hgroup> <h2>ELILO</h2> </hgroup> <article> <h3>目標</h3> <ul> <li>Page Table を初期化</li> <li>一度 Paging を disable </li> <li>CR3 レジスタに初期化した Page Table を登録</li> <li>再度 Paging を enable</li> </ul> <h4>目標 [EFI version]</h4> <ul> <li>memmap を設定</li> <li>新しく仮想メモリ用に memmap を作る</li> <li>irq をセーブして、pgd を作る[TLB をフラッシュ]</li> <li>UEFI API SetVirtualAddressMap を call</li> <li>pgd を登録して、irq をリストア[TLB をフラッシュ]</li> </ul> <h3>どちらかの方法で、ELILO 内に Page table を作る</h3> </article> </slide> <slide> <hgroup> <h2>gnu-efi での SetVirtualAddressMap の呼び出し</h2> </hgroup> <article> <h3>直接呼び出してみる</h3> <ul> <li>ExitBootService 後に、 uefi_call_wrapper(RT->SetVirtualAddressMap, 4, mem_map_size, efi_mem_desc_size, mem_desc_ver, mem_map)</li> <li>失敗,マシンが落ちる</li> <li>考えられる理由は、gnu-efi が対応していないか、Linux のように、呼び出し前と呼び出し後に必要な処理がないこと</li> </ul> </article> </slide> <slide> <hgroup> <h2>対策</h2> </hgroup> <article> <h3>SetVirtualAddressMap の呼び出し</h3> <ul> <li>Linux に習って、SetVirtualAddressMap に処理を書く</li> <li>直接アセンブラを書いて EFI の API を呼び出す</li> </ul> <h3>Linux での引数 4 つの場合の efi の呼び出し</h3> <pre> ENTRY(efi_call4) SAVE_XMM subq $32, %rsp mov %r8, %r9 mov %rcx, %r8 mov %rsi, %rcx call *%rdi addq $32, %rsp RESTORE_XMM ret ENDPROC(efi_call4) </pre> </article> </slide> <slide> <article> <h3>Vagrant</h3> <ul> <li>コマンドラインから VM をいろいろ操作できるツール</li> <li>vagrant init: 設定ファイル Vagrantfile の作成</li> <li>vagrant box add [vm name] [path / URL]: vagrant の仮想マシンを登録する</li> <li>vagrant up: VM の開始</li> <li>vagrant destroy: VM を止める</li> <li>vagrant suspend: サスペンドする</li> <li>vagrant package: 自前の VM を vagrant 用に package</li> <li>vagrant ssh: vagrant で起動した VM に ssh する</li> </ul> </article> </slide> <slide> <article> <h3>Vagrant の利点</h3> <ul> <li>コマンドラインから気軽に操作</li> <li>開発環境の配布が容易</li> <li>VirtualBox を起動しなくても動く</li> <li>すぐホストと同期可能なディレクトリを持たせられる</li> <li>起動直後に実行する script を指定できる</li> </ul> </article> </slide> <slide> <hgroup> <h2>今週すること</h2> </hgroup> <article> <ul> <li>ELILO の中で使われている MemoryMap を使って SetVirtualMemoryMap を試す</li> <ul> </article> </slide> <slide class="backdrop"></slide> </slides> <script> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <!--[if IE]> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script> <script>CFInstall.check({mode: 'overlay'});</script> <![endif]--> </body> </html>