Mercurial > hg > Members > taiki > slides
comparison seminar/seminar2013/0924.html @ 3:fea44bb81877 default tip
many change
author | taiki |
---|---|
date | Tue, 10 Dec 2013 15:31:33 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:7f4128b2369a | 3:fea44bb81877 |
---|---|
1 <!-- | |
2 Google IO 2012 HTML5 Slide Template | |
3 | |
4 Authors: Eric Bidelman <ebidel@gmail.com> | |
5 Luke Mahé <lukem@google.com> | |
6 | |
7 URL: https://code.google.com/p/io-2012-slides | |
8 --> | |
9 <!DOCTYPE html> | |
10 <html> | |
11 <head> | |
12 <title>Presentation</title> | |
13 <meta charset="utf-8"> | |
14 <meta http-equiv="X-UA-Compatible" content="chrome=1"> | |
15 <!--<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">--> | |
16 <!--<meta name="viewport" content="width=device-width, initial-scale=1.0">--> | |
17 <!--This one seems to work all the time, but really small on ipad--> | |
18 <!--<meta name="viewport" content="initial-scale=0.4">--> | |
19 <meta name="apple-mobile-web-app-capable" content="yes"> | |
20 <link rel="stylesheet" media="all" href="css/default.css"> | |
21 <link rel="stylesheet" media="only screen and (max-device-width: 480px)" href="../io2012slides/theme/css/phone.css"> | |
22 <base target="_blank"> <!-- This amazingness opens all links in a new tab. --> | |
23 <script data-main="../io2012slides/js/slides" src="../io2012slides/js/require-1.0.8.min.js"></script> | |
24 </head> | |
25 <body style="opacity: 0"> | |
26 | |
27 <slides class="layout-widescreen"> | |
28 | |
29 <!-- | |
30 <slide class="logoslide nobackground"> | |
31 <article class="flexbox vcenter"> | |
32 <span><img src="../io2012slides/images/google_developers_logo.png"></span> | |
33 </article> | |
34 </slide> | |
35 --> | |
36 | |
37 <slide class="title-slide segue nobackground"> | |
38 <aside class="gdbar"><img src="../images/concurrent.png"></aside> | |
39 <!-- The content of this hgroup is replaced programmatically through the slide_config.json. --> | |
40 <hgroup class="auto-fadein"> | |
41 <h1 data-config-title><!-- populated from slide_config.json --></h1> | |
42 <h2 data-config-subtitle><!-- populated from slide_config.json --></h2> | |
43 <p data-config-presenter><!-- populated from slide_config.json --></p> | |
44 </hgroup> | |
45 </slide> | |
46 | |
47 <slide> | |
48 <hgroup> | |
49 <h2>研究目的</h2> | |
50 </hgroup> | |
51 <article> | |
52 <ul> | |
53 <li>ブートが高速で、コンパクトなカーネルを実装する。</li> | |
54 <li>Codesegment と Datasegment をカーネルに実装するにあたって、メモリ管理の役割とどう合致するのかを検証する。</li> | |
55 <li>上記を確認したら CbC を用いて、動作が軽く落ちにくいカーネルを実装する。</li> | |
56 <li>モデル検証に対応し、エラー予測を可能にする</li> | |
57 <li>カーネルパニックをなくす</li> | |
58 <li>Mach-O を ELILO でロードし、64bit で動作可能にする</li> | |
59 </ul> | |
60 </article> | |
61 </slide> | |
62 | |
63 <slide> | |
64 <hgroup> | |
65 <h2>ELILO</h2> | |
66 </hgroup> | |
67 <article> | |
68 <h3>現状</h3> | |
69 <img src="images/flowchart.png"> | |
70 </article> | |
71 </slide> | |
72 | |
73 <slide> | |
74 <hgroup> | |
75 <h2>ELILO</h2> | |
76 </hgroup> | |
77 | |
78 <article> | |
79 <h3>目標</h3> | |
80 <ul> | |
81 <li>Page Table を初期化</li> | |
82 <li>一度 Paging を disable </li> | |
83 <li>CR3 レジスタに初期化した Page Table を登録</li> | |
84 <li>再度 Paging を enable</li> | |
85 </ul> | |
86 <h4>目標 [EFI version]</h4> | |
87 <ul> | |
88 <li>memmap を設定</li> | |
89 <li>新しく仮想メモリ用に memmap を作る</li> | |
90 <li>irq をセーブして、pgd を作る[TLB をフラッシュ]</li> | |
91 <li>UEFI API SetVirtualAddressMap を call</li> | |
92 <li>pgd を登録して、irq をリストア[TLB をフラッシュ]</li> | |
93 </ul> | |
94 <h3>どちらかの方法で、ELILO 内に Page table を作る</h3> | |
95 </article> | |
96 </slide> | |
97 | |
98 <slide> | |
99 <hgroup> | |
100 <h2>gnu-efi での SetVirtualAddressMap の呼び出し</h2> | |
101 </hgroup> | |
102 <article> | |
103 <h3>直接呼び出してみる</h3> | |
104 <ul> | |
105 <li>ExitBootService 後に、 uefi_call_wrapper(RT->SetVirtualAddressMap, 4, mem_map_size, efi_mem_desc_size, mem_desc_ver, mem_map)</li> | |
106 <li>失敗,マシンが落ちる</li> | |
107 <li>考えられる理由は、gnu-efi が対応していないか、Linux のように、呼び出し前と呼び出し後に必要な処理がないこと</li> | |
108 </ul> | |
109 </article> | |
110 </slide> | |
111 | |
112 <slide> | |
113 <hgroup> | |
114 <h2>対策</h2> | |
115 </hgroup> | |
116 <article> | |
117 <h3>SetVirtualAddressMap の呼び出し</h3> | |
118 <ul> | |
119 <li>Linux に習って、SetVirtualAddressMap に処理を書く</li> | |
120 <li>直接アセンブラを書いて EFI の API を呼び出す</li> | |
121 </ul> | |
122 <h3>Linux での引数 4 つの場合の efi の呼び出し</h3> | |
123 <pre> | |
124 ENTRY(efi_call4) | |
125 SAVE_XMM | |
126 subq $32, %rsp | |
127 mov %r8, %r9 | |
128 mov %rcx, %r8 | |
129 mov %rsi, %rcx | |
130 call *%rdi | |
131 addq $32, %rsp | |
132 RESTORE_XMM | |
133 ret | |
134 ENDPROC(efi_call4) | |
135 </pre> | |
136 </article> | |
137 </slide> | |
138 | |
139 <slide> | |
140 <article> | |
141 <h3>Vagrant</h3> | |
142 <ul> | |
143 <li>コマンドラインから VM をいろいろ操作できるツール</li> | |
144 <li>vagrant init: 設定ファイル Vagrantfile の作成</li> | |
145 <li>vagrant box add [vm name] [path / URL]: vagrant の仮想マシンを登録する</li> | |
146 <li>vagrant up: VM の開始</li> | |
147 <li>vagrant destroy: VM を止める</li> | |
148 <li>vagrant suspend: サスペンドする</li> | |
149 <li>vagrant package: 自前の VM を vagrant 用に package</li> | |
150 <li>vagrant ssh: vagrant で起動した VM に ssh する</li> | |
151 </ul> | |
152 </article> | |
153 </slide> | |
154 | |
155 <slide> | |
156 <article> | |
157 <h3>Vagrant の利点</h3> | |
158 <ul> | |
159 <li>コマンドラインから気軽に操作</li> | |
160 <li>開発環境の配布が容易</li> | |
161 <li>VirtualBox を起動しなくても動く</li> | |
162 <li>すぐホストと同期可能なディレクトリを持たせられる</li> | |
163 <li>起動直後に実行する script を指定できる</li> | |
164 </ul> | |
165 </article> | |
166 </slide> | |
167 | |
168 <slide> | |
169 <hgroup> | |
170 <h2>今週すること</h2> | |
171 </hgroup> | |
172 <article> | |
173 <ul> | |
174 <li>ELILO の中で使われている MemoryMap を使って SetVirtualMemoryMap を試す</li> | |
175 <ul> | |
176 </article> | |
177 </slide> | |
178 | |
179 | |
180 | |
181 <slide class="backdrop"></slide> | |
182 | |
183 </slides> | |
184 | |
185 <script> | |
186 var _gaq = _gaq || []; | |
187 _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']); | |
188 _gaq.push(['_trackPageview']); | |
189 | |
190 (function() { | |
191 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |
192 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |
193 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |
194 })(); | |
195 </script> | |
196 | |
197 <!--[if IE]> | |
198 <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script> | |
199 <script>CFInstall.check({mode: 'overlay'});</script> | |
200 <![endif]--> | |
201 </body> | |
202 </html> |