annotate slide/sigos.pdf.html @ 20:20d4a97ff72f default tip

slide fix
author e165723 <e165723@ie.u-ryukyu.ac.jp>
date Wed, 29 May 2019 19:45:43 +0900
parents 954d8aee41fb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 <!DOCTYPE html>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 <html>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 <head>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 <meta http-equiv="content-type" content="text/html;charset=utf-8">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 <title>継続を用いたxv6 kernelの書き換え</title>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 <meta name="generator" content="Slide Show (S9) v4.0.1 on Ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17]">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 <meta name="author" content="Takahiro Sakamoto, Yu Tobaru, Shinji Kono" >
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 <!-- style sheet links -->
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 <link rel="stylesheet" href="s6/themes/print.css" media="print">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 <!-- JS -->
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 <script src="s6/js/jquery-1.11.3.min.js"></script>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 <script src="s6/js/jquery.slideshow.js"></script>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 <script src="s6/js/jquery.slideshow.counter.js"></script>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 <script src="s6/js/jquery.slideshow.controls.js"></script>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 <script src="s6/js/jquery.slideshow.footer.js"></script>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 <!-- prettify -->
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 <link rel="stylesheet" href="scripts/prettify.css">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 <script src="scripts/prettify.js"></script>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 <style>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 .slide {page-break-after: always;}
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 </style>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 </head>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 <body>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 <div class="layout">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 <div id="header"></div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 <div id="footer">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 <div align="right">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 <img src="s6/images/logo.svg" width="200px">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 <div class="presentation">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 <div class='slide cover'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 <table width="90%" height="90%" border="0" align="center">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 <tr>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 <td>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 <div align="center">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 <h1><font color="#808db5">継続を用いたxv6 kernelの書き換え</font></h1>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 </td>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 </tr>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 <tr>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 <td>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 <div align="left">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 Takahiro Sakamoto, Yu Tobaru, Shinji Kono
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 琉球大学工学部情報工学科並列信頼研
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 </td>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 </tr>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 </table>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 <div class='slide'>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
76
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
77 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
78 <h2 id="研究目的">研究目的</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
79 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
80 <li>現代の OS では拡張性と信頼性を両立させることが要求されている</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
81 <li>信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
82 <li>ノーマルレベルの計算とメタレベルの計算を切り離して記述するために Code Gear と Data Gear という単位を用いている</li>
20
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
83 </ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
84
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
85
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
86
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
87 </div>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
88
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
89 <div class='slide'>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
90 <!-- _S9SLIDE_ -->
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
91 <h2 id="研究目的-1">研究目的</h2>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
92 <ul>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
93 <li>Gears OS は Continuation based C(CbC) によってアプリケーションと OS そのものを記述する</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
94 <li>本研究では、CbC を用いた Gears OS の実装の前段階として xv6 での実装を目標とする</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
95 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
96
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
99 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
100
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
101 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
102 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
103 <h2 id="メタ計算とは">メタ計算とは</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
104 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
105 <li>プログラムを記述する際、ノーマルレベルの処理の他に、メモリ管理やスレッド管理、CPU や GPU の資源管理等、記述しなければならない処理が存在する</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
106 <li>これらの計算をメタ計算と呼ぶ</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
107 <li>メタ計算はノーマルレベルの計算から切り離して記述したい</li>
20
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
108 </ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
109
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
110
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
111
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
112 </div>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
113
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
114 <div class='slide'>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
115 <!-- _S9SLIDE_ -->
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
116 <h2 id="メタ計算とは-1">メタ計算とは</h2>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
117 <ul>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
118 <li>そのためには処理を細かく分割する必要があるが、関数やクラスなどの単位は容易に分割できない</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
119 <li>そこで当研究室ではメタ計算を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
120 </ul>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 <!-- _S9SLIDE_ -->
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
128 <h2 id="continuatuin-based-c">Continuatuin based C</h2>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 <ul>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
130 <li>Continuation based C (CbC) はこの Code Gear 処理の単位としてプログラミング言語として開発している。</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
131 <li>Code Gear は 関数呼び出し時の環境を使わずに次の Code Gear へと goto 文によって遷移する</li>
20
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
132 <li>この goto 文による遷移を軽量継続と呼ぶ</li>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
133 <li>継続を用いることによって状態遷移ベースでのプログラミングが可能である</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
134 <li>CbC は C と互換性のある言語なので、C の関数も呼び出すことができる</li>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 </ul>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 <!-- _S9SLIDE_ -->
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
143 <h2 id="cbc-のコード例">CbC のコード例</h2>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 <ul>
20
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
145 <li>CbC では Code Gear は __code Code Gear 名 (引数) の形で記述される</li>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
146 <li>Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
147 <li>goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
148 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
149
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
150
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
151
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
152 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
153
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
154 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
155 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
156 <h2 id="cbc-のコード例-1">CbC のコード例</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
157 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
158 <li>この goto の行き先を継続と呼び、このときの a+b が次の Code Gear への出力となる</li>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 </ul>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
161 <pre><code>__code cg0(int a, int b){
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 goto cg1(a+b);
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
163 }
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
165 __code cg1(int c){
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 goto cg2(c);
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
167 }
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
168 </code></pre>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 <!-- _S9SLIDE_ -->
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
176 <h2 id="cbc-の継続">CbC の継続</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
177 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
178 <li>Code Gear の継続を表す図である</li>
19
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
179 <li>Code Gear 間の遷移は goto によって行われる
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
180 <!--* アセンブラレベルで見ると call ではなく jmp となっている--></li>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
181 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
182
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
183 <div style="text-align: center;">
19
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
184  <img src="./images/cbc_goto.svg" alt="normalCodeGear" width="600" />
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
185 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
186
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
187
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
188
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
189 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
190
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
191 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
192 <!-- _S9SLIDE_ -->
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
193 <h2 id="gears-におけるメタ計算">Gears におけるメタ計算</h2>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 <ul>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
195 <li>Gears OS ではメタ計算を Meta Code Gear、Meta Data Gear で表現する</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
196 <li>Meta Code Gear はノーマルレベルの Code Gear の直後に遷移され、メタ計算を実行する</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
197 <li>Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う</li>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 </ul>
19
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
199 <div style="text-align: center;">
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
200  <img src="./images/meta_Code_Gear.svg" alt="normalCodeGear" width="600" />
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
201 </div>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
202
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
203
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
204
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
205 </div>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
206
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
207 <div class='slide'>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
208 <!-- _S9SLIDE_ -->
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
209 <h2 id="meta-gear">Meta Gear</h2>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
210 <ul>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
211 <li>Gears OS では、Meta Code Gear は通常の Code Gear の直前、直後に挿入され、メタ計算を実行する</li>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
212 <li>通常の計算からはメタ計算は見ることができない</li>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
213 </ul>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
214 <div style="text-align: center;">
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
215  <img src="./images/meta_gear2.svg" alt="MetaGear" width="600" />
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
216 </div>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
217
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
218
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
219
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
220 </div>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
221
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
222 <div class='slide'>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
223 <!-- _S9SLIDE_ -->
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
224 <h2 id="context">Context</h2>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
225 <ul>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
226 <li>Gears OS では Context と呼ばれる、使用されるすべての Code Gear、Data Gear を持つ Meta Data Gear を持っている</li>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
227 <li>Gears OS は必要な Code Gear、Data Gear を参照したい場合、この Context を通す必要がある</li>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
228 <li>Context は Meta Data Gear であるため、Meta Code Gear を介してアクセスする</li>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
229 </ul>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
230
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 <!-- _S9SLIDE_ -->
20
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
237 <h2 id="context-1">Context</h2>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
238 <ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
239 <li>Context は全ての Code Gear のリストを持っており、enum で番号とアドレスを対応付けている
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
240 <pre><code>enum Code {
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
241 C_popSingleLinkedStack,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
242 C_pushSingleLinkedStack,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
243 C_stackTest3,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
244 C_assert3,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
245 ...
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
246 };
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
247 </code></pre>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
248 <pre><code>context-&gt;code[C_popSingleLinkedStack] = popSingleLinkedStack_stub;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
249 context-&gt;code[C_pushSingleLinkedStack] = pushSingleLinkedStack_stub;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
250 context-&gt;code[C_stackTest3] = stackTest3_stub;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
251 context-&gt;code[C_assert3] = assert3_stub;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
252 </code></pre>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
253 </li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
254 </ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
255
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
256
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
257
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
258 </div>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
259
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
260 <div class='slide'>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
261 <!-- _S9SLIDE_ -->
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
262 <h2 id="context-2">Context</h2>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
263 <ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
264 <li>Data Gear も Code Gear と同様に Context が全ての Data Gear のリストを持っている</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
265 <li>Data Gear のリストも enum で管理されている</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
266 <li>これは引数格納用の Data Gear の番号である
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
267 <pre><code>enum DataType {
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
268 D_Code,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
269 D_SingleLinkedStack,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
270 D_Stack,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
271 D_TaskManager,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
272 D_Worker,
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
273 ...
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
274 };
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
275 </code></pre>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
276 </li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
277 </ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
278
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
279
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
280
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
281 </div>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
282
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
283 <div class='slide'>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
284 <!-- _S9SLIDE_ -->
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
285 <h2 id="interface">Interface</h2>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 <ul>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
287 <li>Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される</li>
20
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
288 <li>Interface は GearsOS でのモジュール化の仕組み</li>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
289 <li>Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
290 <li>Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
291 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
292
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
293
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
294
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
295 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
296
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
297 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
298 <!-- _S9SLIDE_ -->
20
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
299 <h2 id="interface-の定義">Interface の定義</h2>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
300 <ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
301 <li>Stack の Interface の例である</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
302 <li>typedef struct Interface 名で記述する</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
303 <li>Impl は実際に実装した際のデータ構造の型になる</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
304 </ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
305
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
306 <pre><code>typedef struct Stack&lt;Impl&gt; {
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
307 union Data* stack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
308 union Data* data;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
309 __code next(...);
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
310 __code whenEmpty(...);
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
311
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
312 __code clear(Impl* stack, __code next(...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
313 __code push(Impl* stack, union Data* data, __code next(...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
314 __code pop(Impl* stack, __code next(union Data* ...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
315 __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
316
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
317 }
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
318 </code></pre>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
319
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
320
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
321 </div>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
322
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
323 <div class='slide'>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
324 <!-- _S9SLIDE_ -->
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
325 <h2 id="interface-の定義-1">Interface の定義</h2>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
326 <ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
327 <li>Data Gear は 操作する Data Gear と
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
328 操作に必要な全ての Data Gear Gear が記述されている</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
329 <li>__code で記述されているものが操作の Code Gear である</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
330 </ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
331
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
332 <pre><code>typedef struct Stack&lt;Impl&gt; {
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
333 union Data* stack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
334 union Data* data;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
335 __code next(...);
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
336 __code whenEmpty(...);
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
337
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
338 __code clear(Impl* stack, __code next(...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
339 __code push(Impl* stack, union Data* data, __code next(...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
340 __code pop(Impl* stack, __code next(union Data* ...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
341 __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
342
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
343 }
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
344 </code></pre>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
345
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
346
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
347 </div>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
348
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
349 <div class='slide'>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
350 <!-- _S9SLIDE_ -->
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
351 <h2 id="interface-の実装の記述">Interface の実装の記述</h2>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
352 <ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
353 <li>ソースコードは Interface の実装の初期化のコードである</li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
354 <li>操作の Code Gear には実装した Code Gear の番号が代入されるが、ここを入れ替えることで、複数の実装を持つことができる
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
355 <pre><code>Stack* createSingleLinkedStack(struct Context* context) {
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
356 struct Stack* stack = new Stack();
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
357 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack();
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
358 stack-&gt;stack = (union Data*)singleLinkedStack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
359 singleLinkedStack-&gt;top = NULL;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
360 stack-&gt;push = C_pushSingleLinkedStack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
361 stack-&gt;pop = C_popSingleLinkedStack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
362 stack-&gt;isEmpty = C_isEmptySingleLinkedStack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
363 stack-&gt;clear = C_clearSingleLinkedStack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
364 return stack;
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
365 }
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
366 </code></pre>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
367 </li>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
368 </ul>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
369
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
370
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
371
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
372 </div>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
373
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
374 <div class='slide'>
20d4a97ff72f slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
375 <!-- _S9SLIDE_ -->
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
376 <h2 id="xv6-rpi-の-cbc-対応">xv6-rpi の CbC 対応</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
377 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
378 <li>オリジナルの xv6 は x86 アーキテクチャで実装されたものだが、xv6-rpi は Raspberry Pi 用に実装されたものである</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
379 <li>xv6-rpi を CbC で書き換えるために、GCC 上で実装した CbC コンパイラを ARM 向けに build し xv6-rpi をコンパイルした</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
380 <li>これにより、xv6-rpi を CbC で書き換える ことができるようになった</li>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 </ul>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
384
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 <!-- _S9SLIDE_ -->
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
389 <h2 id="xv6-の-cbc-への書き換え">xv6 の CbC への書き換え</h2>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
390 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
391 <li>xv6 は UNIX V6 を x86 向けに再実装した OS である</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
392 <li>プロセスや仮想メモリ、カーネルとユーザーの分離、割り込み、ファイルシステムなどの基本的な Unix の構造を持つ</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
393 <li>CbC は Code Gear 間の遷移が goto による継続で行われるため、状態遷移ベースでのプログラミングに適している</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
394 <li>CbC で xv6 を書き換えることにより、状態遷移モデルによるモデル検査が可能となることを期待する</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
395 </ul>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
400
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 <!-- _S9SLIDE_ -->
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
403 <h2 id="xv6-の書き換えの方針">xv6 の書き換えの方針</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
404 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
405 <li>xv6 を CbC で書き換え、Gears OS の機能と置き換えることで Gears OS に OS の基本構造を持たせたい</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
406 <li>このためには xv6 をモジュール化することで、xv6 の機能を明らかにする必要がある</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
407 <li>xv6 の Interface を定義し、Gears OS の機能をこれに合わせることによって実現したい</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
408 </ul>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
409
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
411
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
413
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 <!-- _S9SLIDE_ -->
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
416 <h2 id="cbc-によるシステムコールの書き換え">CbC によるシステムコールの書き換え</h2>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
417 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
418 <li>CbC は C と互換性のある言語であるため、元のソースコードから大きく崩すことなく必要な機能のみを CbC へと書き換えることが可能である</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
419 <li>ここでは実際にシステムコールを CbC で書き換えることによって、状態遷移ベースで書き換えるには何が必要か示すことにした</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
420 <li>今回は read システムコールの CbC 書き換えを行なった</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
421 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
422
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
423
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
424
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
425 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
426
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
427 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
428 <!-- _S9SLIDE_ -->
19
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
429 <h2 id="syscall関数">syscall関数</h2>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
430 <ul>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
431 <li>syscall 関数 はシステムコールを呼び出す関数である
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
432 <pre><code>void syscall(void)
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
433 {
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
434 int num;
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
435 int ret;
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
436 num = proc-&gt;tf-&gt;r0;
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
437 if((num &gt;= NELEM(syscalls)) &amp;&amp; (num &lt;= NELEM(cbccodes)) &amp;&amp; cbccodes[num]) {
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
438 proc-&gt;cbc_arg.cbc_console_arg.num = num;
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
439 goto (cbccodes[num])(cbc_ret);
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
440 }
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
441 if((num &gt; 0) &amp;&amp; (num &lt;= NELEM(syscalls)) &amp;&amp; syscalls[num]) {
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
442 ret = syscalls[num]();
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
443 if (num != SYS_exec) {
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
444 proc-&gt;tf-&gt;r0 = ret;
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
445 }
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
446 } else {
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
447 cprintf("%d %s: unknown sys call %d\n", proc-&gt;pid, proc-&gt;name, num);
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
448 proc-&gt;tf-&gt;r0 = -1;
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
449 }
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
450 }
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
451 </code></pre>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
452 </li>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
453 </ul>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
454
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
455
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
456
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
457 </div>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
458
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
459 <div class='slide'>
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
460 <!-- _S9SLIDE_ -->
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
461 <h2 id="sys_read-関数">sys_read 関数</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
462 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
463 <li>読み込むファイルの情報とアドレスを取り出し、fileread に渡している
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
464 <pre><code>int sys_read(void)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
465 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
466 struct file *f;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
467 int n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
468 char *p;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
469
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
470 if(argfd(0, 0, &amp;f) &lt; 0 || argint(2, &amp;n) &lt; 0 || argptr(1, &amp;p, n) &lt; 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
471 return -1;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
472 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
473
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
474 return fileread(f, p, n);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
475 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
476 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
477 </li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
478 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
479
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
480
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
481
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
482 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
483
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
484 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
485 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
486 <h2 id="cbc_read">cbc_read</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
487 <pre><code>__code cbc_read(__code (*next)(int ret)){
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
488 struct file *f;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
489 int n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
490 char *p;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
491
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
492 if(argfd(0, 0, &amp;f) &lt; 0 || argint(2, &amp;n) &lt; 0 || argptr(1, &amp;p, n) &lt; 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
493 goto next(-1);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
494 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
495 goto cbc_fileread(f, p, n, next);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
496 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
497 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
498
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
499
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
500
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
501 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
502
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
503 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
504 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
505 <h2 id="fileread">fileread</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
506 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
507 <li>file の状態を確認し、対応した関数へ移行する
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
508 <pre><code>int fileread (struct file *f, char *addr, int n)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
509 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
510 int r;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
511
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
512 if (f-&gt;readable == 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
513 return -1;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
514 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
515
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
516 if (f-&gt;type == FD_PIPE) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
517 return piperead(f-&gt;pipe, addr, n);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
518 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
519
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
520 if (f-&gt;type == FD_INODE) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
521 ilock(f-&gt;ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
522
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
523 if ((r = readi(f-&gt;ip, addr, f-&gt;off, n)) &gt; 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
524 f-&gt;off += r;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
525 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
526
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
527 iunlock(f-&gt;ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
528
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
529 return r;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
530 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
531
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
532 panic("fileread");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
533 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
534 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
535 </li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
536 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
537
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
538
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
539
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
540 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
541
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
542 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
543 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
544 <h2 id="cbc_fileread">cbc_fileread</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
545 <pre><code>__code cbc_fileread1 (int r)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
546 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
547 struct file *f = proc-&gt;cbc_arg.cbc_console_arg.f;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
548 __code (*next)(int ret) = cbc_ret;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
549 if (r &gt; 0)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
550 f-&gt;off += r;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
551 iunlock(f-&gt;ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
552 goto next(r);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
553 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
554
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
555 __code cbc_fileread (struct file *f, char *addr, int n, __code (*next)(int ret))
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
556 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
557 if (f-&gt;readable == 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
558 goto next(-1);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
559 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
560
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
561 if (f-&gt;type == FD_PIPE) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
562 //goto cbc_piperead(f-&gt;pipe, addr, n, next);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
563 goto next(-1);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
564 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
565
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
566 if (f-&gt;type == FD_INODE) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
567 ilock(f-&gt;ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
568 proc-&gt;cbc_arg.cbc_console_arg.f = f;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
569 goto cbc_readi(f-&gt;ip, addr, f-&gt;off, n, cbc_fileread1);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
570 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
571
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
572 goto cbc_panic("fileread");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
573 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
574 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
575
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
576
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
577
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
578 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
579
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
580 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
581 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
582 <h2 id="readi">readi</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
583 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
584 <li>readi はファイルシステム上か特殊なデバイスを制御するかどうかで分岐する</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
585 <li>ここでは consoleread へ向かう処理を確認する
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
586 <pre><code>int readi (struct inode *ip, char *dst, uint off, uint n)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
587 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
588 uint tot, m;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
589 struct buf *bp;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
590
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
591 if (ip-&gt;type == T_DEV) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
592 if (ip-&gt;major &lt; 0 || ip-&gt;major &gt;= NDEV || !devsw[ip-&gt;major].read) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
593 return -1;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
594 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
595
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
596 return devsw[ip-&gt;major].read(ip, dst, n);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
597 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
598 ...
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
599 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
600 </li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
601 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
602
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
603
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
604
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
605 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
606
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
607 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
608 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
609 <h2 id="cbc_readi">cbc_readi</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
610 <pre><code>__code cbc_readi (struct inode *ip, char *dst, uint off, uint n, __code (*next)(int ret))
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
611 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
612 uint tot, m;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
613 struct buf *bp;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
614
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
615 if (ip-&gt;type == T_DEV) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
616 if (ip-&gt;major &lt; 0 || ip-&gt;major &gt;= NDEV || !cbc_devsw[ip-&gt;major].read) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
617 goto next(-1);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
618 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
619
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
620 goto cbc_devsw[ip-&gt;major].read(ip, dst, n, next);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
621 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
622 ...
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
623 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
624
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
625
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
626
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
627 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
628
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
629 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
630 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
631 <h2 id="consoleread">consoleread</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
632 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
633 <li>console への入力を読み込み、待っている間スリープする
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
634 <pre><code>int consoleread (struct inode *ip, char *dst, int n)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
635 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
636 uint target;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
637 int c;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
638 iunlock(ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
639 target = n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
640 acquire(&amp;input.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
641
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
642 while (n &gt; 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
643 while (input.r == input.w) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
644 if (proc-&gt;killed) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
645 release(&amp;input.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
646 ilock(ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
647 return -1;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
648 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
649 sleep(&amp;input.r, &amp;input.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
650 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
651 c = input.buf[input.r++ % INPUT_BUF];
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
652 if (c == C('D')) { // EOF
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
653 if (n &lt; target) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
654 input.r--;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
655 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
656 break;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
657 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
658 *dst++ = c;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
659 --n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
660 if (c == '\n') {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
661 break;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
662 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
663 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
664 release(&amp;input.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
665 ilock(ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
666 return target - n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
667 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
668 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
669 </li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
670 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
671
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
672
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
673
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
674 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
675
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
676 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
677 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
678 <h2 id="cbc_consoleread">cbc_consoleread</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
679
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
680 <pre><code>__code cbc_consoleread (struct inode *ip, char *dst, int n, __code(*next)(int ret))
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
681 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
682 uint target;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
683
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
684 iunlock(ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
685
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
686 target = n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
687 acquire(&amp;input.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
688
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
689 if (n &gt; 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
690 proc-&gt;cbc_arg.cbc_console_arg.n = n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
691 proc-&gt;cbc_arg.cbc_console_arg.target = target;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
692 proc-&gt;cbc_arg.cbc_console_arg.dst = dst;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
693 proc-&gt;cbc_arg.cbc_console_arg.ip = ip;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
694 proc-&gt;cbc_arg.cbc_console_arg.next = next;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
695 goto cbc_consoleread2();
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
696 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
697 goto cbc_consoleread1();
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
698 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
699 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
700
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
701
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
702
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
703 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
704
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
705 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
706 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
707 <h2 id="cbc_consoleread-1">cbc_consoleread</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
708 <pre><code>__code cbc_consoleread2 ()
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
709 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
710 struct inode *ip = proc-&gt;cbc_arg.cbc_console_arg.ip;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
711 __code(*next)(int ret) = proc-&gt;cbc_arg.cbc_console_arg.next;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
712 if (input.r == input.w) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
713 if (proc-&gt;killed) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
714 release(&amp;input.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
715 ilock(ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
716 goto next(-1);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
717 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
718 goto cbc_sleep(&amp;input.r, &amp;input.lock, cbc_consoleread2);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
719 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
720 goto cbc_consoleread1();
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
721 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
722
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
723 __code cbc_consoleread1 ()
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
724 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
725 int cont = 1;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
726 int n = proc-&gt;cbc_arg.cbc_console_arg.n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
727 int target = proc-&gt;cbc_arg.cbc_console_arg.target;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
728 char* dst = proc-&gt;cbc_arg.cbc_console_arg.dst;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
729 struct inode *ip = proc-&gt;cbc_arg.cbc_console_arg.ip;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
730 __code(*next)(int ret) = proc-&gt;cbc_arg.cbc_console_arg.next;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
731
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
732 int c = input.buf[input.r++ % INPUT_BUF];
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
733
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
734 if (c == C('D')) { // EOF
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
735 if (n &lt; target) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
736 input.r--;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
737 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
738 cont = 0;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
739 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
740
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
741 *dst++ = c;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
742 --n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
743 if (c == '\n') {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
744 cont = 0;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
745 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
746 if (cont == 1) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
747 if (n &gt; 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
748 proc-&gt;cbc_arg.cbc_console_arg.n = n;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
749 proc-&gt;cbc_arg.cbc_console_arg.target = target;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
750 proc-&gt;cbc_arg.cbc_console_arg.dst = dst;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
751 proc-&gt;cbc_arg.cbc_console_arg.ip = ip;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
752 proc-&gt;cbc_arg.cbc_console_arg.next = next;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
753 goto cbc_sleep(&amp;input.r, &amp;input.lock, cbc_consoleread2);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
754 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
755 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
756 release(&amp;input.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
757 ilock(ip);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
758 goto next(target - n);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
759 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
760 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
761
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
762
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
763 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
764
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
765 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
766 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
767 <h2 id="sleep">sleep</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
768 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
769 <li>プロセスをスリープ状態にしてスケジューラーへ引き渡す
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
770 <pre><code>void sleep(void *chan, struct spinlock *lk)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
771 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
772 if(proc == 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
773 panic("sleep");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
774 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
775
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
776 if(lk == 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
777 panic("sleep without lk");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
778 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
779
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
780 if(lk != &amp;ptable.lock){ //DOC: sleeplock0
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
781 acquire(&amp;ptable.lock); //DOC: sleeplock1
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
782 release(lk);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
783 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
784
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
785 proc-&gt;chan = chan;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
786 proc-&gt;state = SLEEPING;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
787 sched();
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
788
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
789 proc-&gt;chan = 0;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
790
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
791 if(lk != &amp;ptable.lock){ //DOC: sleeplock2
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
792 release(&amp;ptable.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
793 acquire(lk);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
794 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
795 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
796 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
797 </li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
798 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
799
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
800
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
801
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
802 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
803
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
804 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
805 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
806 <h2 id="cbc_sleep">cbc_sleep</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
807 <pre><code>__code cbc_sleep1()
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
808 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
809 struct spinlock *lk = proc-&gt;lk;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
810 proc-&gt;chan = 0;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
811
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
812 if(lk != &amp;ptable.lock){ //DOC: sleeplock2
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
813 release(&amp;ptable.lock);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
814 acquire(lk);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
815 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
816 goto proc-&gt;cbc_next();
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
817 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
818
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
819 __code cbc_sleep(void *chan, struct spinlock *lk, __code(*next1)())
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
820 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
821 if(proc == 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
822 panic("sleep");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
823 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
824
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
825 if(lk == 0) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
826 panic("sleep without lk");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
827 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
828
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
829 if(lk != &amp;ptable.lock){ //DOC: sleeplock0
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
830 acquire(&amp;ptable.lock); //DOC: sleeplock1
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
831 release(lk);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
832 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
833 proc-&gt;chan = chan;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
834 proc-&gt;state = SLEEPING;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
835 proc-&gt;lk = lk;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
836 proc-&gt;cbc_next = next1;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
837
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
838 goto cbc_sched(cbc_sleep1);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
839 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
840 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
841
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
842
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
843
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
844 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
845
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
846 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
847 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
848 <h2 id="sched">sched</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
849 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
850 <li>レジスタの値を切り替えて、スケジューラーへと戻る</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
851 <li>再開時は swtch の下から再開する
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
852 <pre><code>void sched(void)
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
853 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
854 int intena;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
855
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
856 if(!holding(&amp;ptable.lock)) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
857 panic("sched ptable.lock");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
858 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
859
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
860 if(cpu-&gt;ncli != 1) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
861 panic("sched locks");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
862 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
863
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
864 if(proc-&gt;state == RUNNING) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
865 panic("sched running");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
866 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
867
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
868 if(int_enabled ()) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
869 panic("sched interruptible");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
870 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
871
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
872 intena = cpu-&gt;intena;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
873 swtch(&amp;proc-&gt;context, cpu-&gt;scheduler);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
874 cpu-&gt;intena = intena;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
875 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
876 </code></pre>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
877 </li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
878 </ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
879
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
880
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
881
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
882 </div>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
883
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
884 <div class='slide'>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
885 <!-- _S9SLIDE_ -->
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
886 <h2 id="cbc_sched">cbc_sched</h2>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
887 <pre><code>__code cbc_sched(__code(*next)())
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
888 {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
889 int intena;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
890
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
891 if(!holding(&amp;ptable.lock)) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
892 panic("sched ptable.lock");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
893 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
894
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
895 if(cpu-&gt;ncli != 1) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
896 panic("sched locks");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
897 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
898
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
899 if(proc-&gt;state == RUNNING) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
900 panic("sched running");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
901 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
902
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
903 if(int_enabled ()) {
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
904 panic("sched interruptible");
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
905 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
906
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
907 intena = cpu-&gt;intena;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
908 swtch(&amp;proc-&gt;context, cpu-&gt;scheduler);
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
909 cpu-&gt;intena = intena;
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
910
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
911 goto next();
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
912 }
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
913 </code></pre>
19
954d8aee41fb slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
914 <!-- コメントアウトのやり方-->
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
915
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
916
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
917 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
918
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
919 <div class='slide'>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
920 <!-- _S9SLIDE_ -->
17
8b0d4a70ef47 fix slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
921 <h2 id="まとめと今後の方針">まとめと今後の方針</h2>
18
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
922 <ul>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
923 <li>現在は xv6 のシステムコールの一部のみの書き換えと、設計のみしか行っていないのでカーネル全ての書き換えをおこなう</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
924 <li>Gears OS にはメタ計算を実装する context は par goto の機能がある</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
925 <li>これらの機能を xv6 に組み込む方法について考察する必要がある</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
926 <li>xv6-rpi は QEMU のみの動作でしか確認してないため、実機上での動作が可能なように実装する必要がある</li>
cef6ee71df2d slide fix
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
927 </ul>
16
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
928
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
929 </div>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
930
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
931
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
932 </div><!-- presentation -->
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
933 </body>
22deadcd8653 add slide
e165723 <e165723@ie.u-ryukyu.ac.jp>
parents:
diff changeset
934 </html>