3
|
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 <article>
|
|
78 <h3>目標</h3>
|
|
79 <ul>
|
|
80 <li>Page Table を初期化</li>
|
|
81 <li>一度 Paging を disable </li>
|
|
82 <li>CR3 レジスタに初期化した Page Table を登録</li>
|
|
83 <li>再度 Paging を enable</li>
|
|
84 </ul>
|
|
85 </article>
|
|
86 </slide>
|
|
87
|
|
88 <slide>
|
|
89 <hgroup>
|
|
90 <h2>ELILO</h2>
|
|
91 </hgroup>
|
|
92 <article>
|
|
93 <h3>作業[1]</h3>
|
|
94 <ul>
|
|
95 <li>結局 ExitBootService を通して成功したのは GDT/IDT の操作のみ</li>
|
|
96 <li>CR3 へ PML4 の先頭アドレスを入れるために CR0.PG を disable すると落ちる</li>
|
|
97 <li>CR4.PCIDE を disable にするだけなら通る</li>
|
|
98 </ul>
|
|
99 </article>
|
|
100 </slide>
|
|
101
|
|
102 <slide>
|
|
103 <hgroup>
|
|
104 <h2>ELILO</h2>
|
|
105 </hgroup>
|
|
106 <article>
|
|
107 <h3>作業[2]</h3>
|
|
108 <ul>
|
|
109 <li>Intel CPU には Long mode があり、それには二通りの sub mode がある</li>
|
|
110 <li>Compatibility mode/64bit mode</li>
|
|
111 <li>UEFI のマニュアルに、UEFI は 64bit mode で起動している、という記述が</li>
|
|
112 <li>Intel マニュアルをみると、
|
|
113 <h3 class="red">64 bit mode では CR0.PG を clear すると #GP exception をはく</h3></li>
|
|
114 <li>つまり、一度 64bit mode から、Compatibility mode にしてからページテーブルを初期化する必要がある</li>
|
|
115 </ul>
|
|
116 </article>
|
|
117 </slide>
|
|
118
|
|
119 <slide>
|
|
120 <hgroup>
|
|
121 <h2>ELILO</h2>
|
|
122 </hgroup>
|
|
123 <article>
|
|
124 <h3>EFI Runtime Services[SetVirtualAddressMap]</h3>
|
|
125 <ul>
|
|
126 <li>EFI から OS を Boot するためのサービスが Boot Services</li>
|
|
127 <li>OS が走っている状態で、EFI を操作するためのサービスが Runtime Services</li>
|
|
128 <li>SetVirtualAddressMap()</li>
|
|
129 <li>Changes the runtime addressing mode of EFI firmware from physical to virtual.</li>
|
|
130 </ul>
|
|
131 </article>
|
|
132 </slide>
|
|
133
|
|
134 <slide>
|
|
135 <hgroup>
|
|
136 <h2>ELILO</h2>
|
|
137 </hgroup>
|
|
138 <article>
|
|
139 <h3>EFI Runtime Services[SetVirtualAddressMap] in Linux kernel</h3>
|
|
140 <pre>
|
|
141 static efi_status_t __init phys_efi_set_virtual_address_map(
|
|
142 unsigned long memory_map_size,
|
|
143 unsigned long descriptor_size,
|
|
144 u32 descriptor_version,
|
|
145 efi_memory_desc_t *virtual_map)
|
|
146 {
|
|
147 efi_status_t status;
|
|
148 efi_call_phys_prelog();
|
|
149 <font color=#ff0000>
|
|
150 status = efi_call_phys4(efi_phys.set_virtual_address_map,
|
|
151 memory_map_size, descriptor_size, descriptor_version, virtual_map);
|
|
152 </font>
|
|
153 efi_call_phys_epilog();
|
|
154 return status;
|
|
155 }
|
|
156 </pre>
|
|
157 </article>
|
|
158 </slide>
|
|
159
|
|
160 <slide class="backdrop"></slide>
|
|
161
|
|
162 </slides>
|
|
163
|
|
164 <script>
|
|
165 var _gaq = _gaq || [];
|
|
166 _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);
|
|
167 _gaq.push(['_trackPageview']);
|
|
168
|
|
169 (function() {
|
|
170 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
|
171 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
|
172 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
|
173 })();
|
|
174 </script>
|
|
175
|
|
176 <!--[if IE]>
|
|
177 <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
|
|
178 <script>CFInstall.check({mode: 'overlay'});</script>
|
|
179 <![endif]-->
|
|
180 </body>
|
|
181 </html>
|