Mercurial > hg > Papers > 2018 > tobaru-sigos
comparison Slide/prosym.html @ 9:5790bdc1d515
add gears_structure
author | tobaru |
---|---|
date | Mon, 21 May 2018 17:18:19 +0900 |
parents | f275411f458d |
children | d4e58a38aae7 |
comparison
equal
deleted
inserted
replaced
8:f275411f458d | 9:5790bdc1d515 |
---|---|
84 | 84 |
85 <div class='slide '> | 85 <div class='slide '> |
86 <!-- === begin markdown block === | 86 <!-- === begin markdown block === |
87 | 87 |
88 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15] | 88 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15] |
89 on 2018-05-20 21:27:27 +0900 with Markdown engine kramdown (1.13.2) | 89 on 2018-05-21 16:36:00 +0900 with Markdown engine kramdown (1.13.2) |
90 using options {} | 90 using options {} |
91 --> | 91 --> |
92 | 92 |
93 <!-- _S9SLIDE_ --> | 93 <!-- _S9SLIDE_ --> |
94 <h2 id="gears-os">Gears OS</h2> | 94 <h2 id="gears-os">Gears OS</h2> |
95 <ul> | 95 <ul> |
96 <li>現代のOS では拡張性と信頼性を両立させることが要求されている。 | 96 <li>現代のOS では拡張性と信頼性を両立させることが要求されている。 |
97 <ul> | 97 <ul> |
98 <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li> | 98 <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li> |
99 <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。</li> | 99 <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまうので信頼性のある OS が必要。</li> |
100 </ul> | 100 </ul> |
101 </li> | 101 </li> |
102 <li>本研究室では、それらを実現することを目標に Gears OS の開発を行なっている。</li> | 102 <li>本研究室では、拡張性と信頼性を実現することを目標に Gears OS の開発を行なっている。</li> |
103 </ul> | 103 </ul> |
104 | 104 |
105 | 105 |
106 </div> | 106 </div> |
107 <div class='slide '> | 107 <div class='slide '> |
119 <!-- _S9SLIDE_ --> | 119 <!-- _S9SLIDE_ --> |
120 <h2 id="gears-os-interface">Gears OS での形式化とInterfaceの導入</h2> | 120 <h2 id="gears-os-interface">Gears OS での形式化とInterfaceの導入</h2> |
121 <ul> | 121 <ul> |
122 <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li> | 122 <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li> |
123 <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li> | 123 <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li> |
124 <li>Logic としては、依存型関数言語である Agda を使う(前の発表)</li> | 124 <li>Logic としては、依存型関数言語である Agda を使う(外間の発表)</li> |
125 <li>証明とモデル検査を使って、信頼性を確保する</li> | 125 <li>証明とモデル検査を使って、信頼性を確保する</li> |
126 </ul> | 126 </ul> |
127 | 127 |
128 | 128 |
129 </div> | 129 </div> |
145 </div> | 145 </div> |
146 <div class='slide '> | 146 <div class='slide '> |
147 <!-- _S9SLIDE_ --> | 147 <!-- _S9SLIDE_ --> |
148 <h2 id="api">並列API</h2> | 148 <h2 id="api">並列API</h2> |
149 <ul> | 149 <ul> |
150 <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li> | 150 <li>Geas OS 信頼性を保証するために、モジュールシステムが必要である。</li> |
151 <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li> | 151 <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li> |
152 <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li> | 152 <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li> |
153 </ul> | 153 </ul> |
154 | 154 |
155 | 155 |
254 | 254 |
255 </div> | 255 </div> |
256 <div class='slide '> | 256 <div class='slide '> |
257 <!-- _S9SLIDE_ --> | 257 <!-- _S9SLIDE_ --> |
258 <h2 id="gears-os-">Gears OS の構造</h2> | 258 <h2 id="gears-os-">Gears OS の構造</h2> |
259 <ul> | |
260 <li>Gears OS は以下の要素で構成されている | |
261 <ul> | |
262 <li>Context</li> | |
263 <li>TaskQueue</li> | |
264 <li>TaskManager</li> | |
265 <li>Worker</li> | |
266 </ul> | |
267 </li> | |
268 </ul> | |
269 | |
259 <div style="text-align: center;"> | 270 <div style="text-align: center;"> |
260 <img src="./image/gearsos.svg" alt="Gears OS の構造" width="600" /> | 271 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> |
261 </div> | 272 </div> |
262 | 273 |
263 | 274 |
264 </div> | 275 </div> |
265 <div class='slide '> | 276 <div class='slide '> |
308 <li>Code Gear と Data Gear の依存関係をノーマルレベルで記述できるようになる。</li> | 319 <li>Code Gear と Data Gear の依存関係をノーマルレベルで記述できるようになる。</li> |
309 </ul> | 320 </ul> |
310 <pre><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { | 321 <pre><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { |
311 par goto add(integer1, integer2, output, __exit); | 322 par goto add(integer1, integer2, output, __exit); |
312 goto code2(); | 323 goto code2(); |
324 } | |
325 </code></pre> | |
326 | |
327 | |
328 </div> | |
329 <div class='slide '> | |
330 <!-- _S9SLIDE_ --> | |
331 <h2 id="perl--meta-data-gear-">Perl スクリプトによる Meta Data Gear の生成</h2> | |
332 | |
333 <pre lang="c"><code>__code code1(struct Context *context, Integer *integer1, Integer *integer2, Integer *output) { | |
334 // create context | |
335 context->task = NEW(struct Context); | |
336 initContext(context->task); | |
337 | |
338 // set task parameter | |
339 context->task->next = C_add; | |
340 context->task->idgCount = 2; | |
341 context->task->idg = context->task->dataNum; | |
342 context->task->maxIdg = context->task->idg + 2; | |
343 context->task->odg = context->task->maxIdg; | |
344 context->task->maxOdg = context->task->odg + 1; | |
345 | |
346 // create Data Gear Queue | |
347 GET_META(integer1)->wait = createSynchronizedQueue(context); | |
348 GET_META(integer2)->wait = createSynchronizedQueue(context); | |
349 GET_META(integer3)->wait = createSynchronizedQueue(context); | |
350 | |
351 // set Input Data Gear | |
352 context->task->data[context->task->idg+0] = (union Data*)integer1; | |
353 context->task->data[context->task->idg+1] = (union Data*)integer2; | |
354 | |
355 // set Output Data Gear | |
356 context->task->data[context->task->odg+0] = (union Data*)integer3; | |
357 | |
358 | |
359 // set TaskManager->spawns parameter | |
360 Gearef(context, TaskManager)->taskList = context->taskList; | |
361 Gearef(context, TaskManager)->next1 = C_code2; | |
362 goto parGotoMeta(context, C_code2); | |
313 } | 363 } |
314 </code></pre> | 364 </code></pre> |
315 | 365 |
316 | 366 |
317 </div> | 367 </div> |