changeset 78:0bf2c2ae2bf6

fix indent
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Wed, 26 Feb 2014 20:58:00 +0900
parents 5903492cd498
children 74e64dea2b49
files paper/fig/blockread.graffle slide/index.html
diffstat 2 files changed, 334 insertions(+), 305 deletions(-) [+]
line wrap: on
line diff
--- a/paper/fig/blockread.graffle	Wed Feb 26 20:15:41 2014 +0900
+++ b/paper/fig/blockread.graffle	Wed Feb 26 20:58:00 2014 +0900
@@ -26,7 +26,7 @@
 	<key>MasterSheets</key>
 	<array/>
 	<key>ModificationDate</key>
-	<string>2014-02-26 09:31:22 +0000</string>
+	<string>2014-02-26 11:17:27 +0000</string>
 	<key>Modifier</key>
 	<string>masataka kohagura</string>
 	<key>NotesVisible</key>
@@ -39275,6 +39275,64 @@
 			<key>GraphicsList</key>
 			<array>
 				<dict>
+					<key>Bounds</key>
+					<string>{{291.8175309446778, 57.777776757385524}, {42.962962204209759, 14}}</string>
+					<key>Class</key>
+					<string>ShapedGraphic</string>
+					<key>FitText</key>
+					<string>Vertical</string>
+					<key>Flow</key>
+					<string>Resize</string>
+					<key>FontInfo</key>
+					<dict>
+						<key>Color</key>
+						<dict>
+							<key>b</key>
+							<string>0</string>
+							<key>g</key>
+							<string>0</string>
+							<key>r</key>
+							<string>1</string>
+						</dict>
+					</dict>
+					<key>ID</key>
+					<integer>16</integer>
+					<key>Shape</key>
+					<string>Rectangle</string>
+					<key>Style</key>
+					<dict>
+						<key>fill</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>shadow</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+						<key>stroke</key>
+						<dict>
+							<key>Draws</key>
+							<string>NO</string>
+						</dict>
+					</dict>
+					<key>Text</key>
+					<dict>
+						<key>Pad</key>
+						<integer>0</integer>
+						<key>Text</key>
+						<string>{\rtf1\ansi\ansicpg932\cocoartf1265
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red255\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf2 New!}</string>
+						<key>VerticalPad</key>
+						<integer>0</integer>
+					</dict>
+				</dict>
+				<dict>
 					<key>Class</key>
 					<string>LineGraphic</string>
 					<key>Head</key>
@@ -43707,11 +43765,11 @@
 	<key>WindowInfo</key>
 	<dict>
 		<key>CurrentSheet</key>
-		<integer>6</integer>
+		<integer>20</integer>
 		<key>ExpandedCanvases</key>
 		<array/>
 		<key>Frame</key>
-		<string>{{1535, 1133}, {952, 850}}</string>
+		<string>{{1565, 1270}, {952, 850}}</string>
 		<key>ListView</key>
 		<true/>
 		<key>OutlineWidth</key>
@@ -43725,9 +43783,9 @@
 		<key>SidebarWidth</key>
 		<integer>120</integer>
 		<key>VisibleRegion</key>
-		<string>{{-28, 0}, {614.28569446444953, 534.58644891581844}}</string>
+		<string>{{-23, 0}, {605.18517449723038, 526.66665736539881}}</string>
 		<key>Zoom</key>
-		<real>1.3300000429153442</real>
+		<real>1.3500000238418579</real>
 		<key>ZoomValues</key>
 		<array>
 			<array>
--- a/slide/index.html	Wed Feb 26 20:15:41 2014 +0900
+++ b/slide/index.html	Wed Feb 26 20:58:00 2014 +0900
@@ -1,298 +1,270 @@
 <!DOCTYPE html>
 
 <html>
-  <head>
+<head>
     <title>Presentation</title>
-
     <meta charset='utf-8'>
-    <script
-       src='./slides.js'></script>
-  </head>
+    <script src='./slides.js'></script>
+</head>
 
-  <style>
-    /* Your individual styles here, or just use inline styles if that’s
-    what you want. */
+<style>
+/* Your individual styles here, or just use inline styles if that’s
+   what you want. */
 
-  </style>
+</style>
 
-  <body style='display: none'>
-    <section class='slides layout-regular template-default'>
+<body style='display: none'>
+<section class='slides layout-regular template-default'>
 
-      <!-- 
-           Your slides (<article>s) go here. Delete or comment out the
-           slides below.
-        -->
-      <article >
-        <h1>Cerium による並列処理向け I/O の設計と実装</h1>
-        <h3 class="title">Masataka Kohagura 27th, February</h3>
-        <div align="right">担当教官 : 河野 真治</div>
-      </article>
+<!-- 
+Your slides (<article>s) go here. Delete or comment out the
+slides below.
+-->
+<article>
+    <h1>Cerium による並列処理向け I/O の設計と実装</h1>
+    <h3 class="title">Masataka Kohagura 27th, February</h3>
+    <div align="right">担当教官 : 河野 真治</div>
+</article>
 
-        <article>
-        <h3>研究概要</h3>
-        <p>
-        当研究室ではCellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク、 Ceriumの開発・改良を行っている
-        </p>
-          <img src='images/resources.png' style="height:200px" align="middle">
-        <p>
-        本研究では
-        <font color=red> 
-        <ul>
-        <li>ファイル読み込みと文字列検索の分離
-        </li>
-        <li>I/O専用の Threadを追加
-        </li>
-        </ul>
-        </font>
-        </p>
-        <p>
-        I/0 を含む Task の動作改善を行った
-        </p>
+<article>
+    <h3>研究概要</h3>
+    <p>
+    当研究室ではCellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク、 Ceriumの開発・改良を行っている
+    </p>
+    <img src='images/resources.png' style="height:170px" align="middle">
+    <p>
+    本研究では
+    <ul>
+    <li><font color=red>ファイル読み込みと文字列検索の分離</font> </li>
+    <li><font color=red>I/O専用の Threadを追加</font></li>
+    </ul>
+    </p>
 
-
-      </article>
+    <p>
+    以上2点を実装して<br>
+    I/O を含む Task の動作改善を行った
+    </p>
+</article>
 
 
-      <article>
-        <h3>Cerium Task Manager</h3>
-        <table  border="0" cellpadding="0" cellspacing="0">
-          <tbody>
+<article>
+    <h3>Cerium Task Manager</h3>
+    <table  border="0" cellpadding="0" cellspacing="0">
+        <tbody>
             <tr>
-              <td><img src='images/ceriumtaskmanager.png' style="height:280px"></td>
-              <td>
+            <td><img src='images/ceriumtaskmanager.png' style="height:280px"></td>
+            <td>
                 <ol>
-                  <li>Taskを生成</li>
-                  <li>依存関係のチェック</li>
-                  <li>Schedulerに転送</li>
-                  <li>並列実行</li>
+                    <li>Taskを生成</li>
+                    <li>依存関係のチェック</li>
+                    <li>Schedulerに転送</li>
+                    <li>並列実行</li>
                 </ol>
-              </td>
+            </td>
             </tr>
-          </tbody>
-        </table>
-        <p>
-        I/O 専用の Thread を用意することにより、読み込みに専念させることができる
-        </p>
-      </article>
+        </tbody>
+    </table>
+    <p>
+    I/O 専用の Thread を用意することにより、読み込みに専念させることができる
+    </p>
+</article>
+
+<article>
+    <h3>I/O を含む Task の説明</h3>
+    <br>
+    <img src='images/includeIOTask.png' style="height:270px" align="middle">
+    <ol>
+        <li>テキストファイルの読み込み後、ファイルをある一定の大きさに分割する</li>
+        <li>分割したテキストファイルに対して、それぞれ計算を行う</li>
+        <li>計算した結果を集計する</li>
+    </ol>
+    </article>
 
-      <article>
-        <h3>I/O を含む Task の説明</h3>
-          <br>
-          <img src='images/includeIOTask.png' style="height:270px" align="middle">
-          <ol>
-            <li>テキストファイルの読み込み後、ファイルをある一定の大きさに分割する</li>
-            <li>分割したテキストファイルに対して、それぞれ計算を行う</li>
-            <li>計算した結果を集計する</li>
-          </ol>
-      </article>
-
-      <article>
-        <h3>mmap の特徴</h3>
-        <table  border="0" cellpadding="0" cellspacing="0">
-          <tbody>
+<article>
+    <h3>mmap の特徴</h3>
+    <table  border="0" cellpadding="0" cellspacing="0">
+        <tbody>
             <tr>
-              <td><img src='images/mmap.png' style="height:350px" align="middle"></td>
-              <td>
-                <ul>
-                <font size = 5>
-                    <li>
-                    mmap は、C 及び C++ で使用でき、ファイルを読み込む API である。
-                    </li>
-                  <li>
-                  code がシンプル <br>(メモリを自分自身で malloc せず、read を書いて読み込まなくていいため)
-                  </li>
-                  </font>
-                </ul>
-              </td>
+                <td><img src='images/mmap.png' style="height:350px" align="middle"></td>
+                <td>
+                    <ul>
+                        <font size = 5>
+                            <li>
+                            mmap は、C 及び C++ で使用でき、ファイルを読み込む API である。
+                            </li>
+                            <li>
+                            code がシンプル <br>(メモリを自分自身で malloc せず、read を書いて読み込まなくていいため)
+                            </li>
+                        </font>
+                    </ul>
+                </td>
             </tr>
-          </tbody>
-        </table>
+        </tbody>
+    </table>
+</article>
+
+<article>
+    <h3>mmapでの実装の問題点</h3>
+    <ul>
+        <li> mmap でファイルを読み込むと、ファイルはメモリ上に即座に展開されるわけではない。 </li>
+        <li>
+        ファイルがメモリに展開されるタイミングは、そのファイルに対して文字列検索を行うときである。<br><br>
+        ->つまり、文字列検索が行われるときに初めてファイルが読み込まれるので、<font color=red>ファイル読み込みと文字列検索が分離できない。</font>
+        </li>
+    </ul>
+</article>
+
 
-        <ul>
-        </ul>
-      </article>
+<article>
+    <h3>Blocked Read の設計</h3>
+    <br>
+    <img src='images/divide_read.png' style="height:250px" align="middle" >
+    <br>
 
-        <article>
-        <h3>mmapでの実装の問題点</h3>
-        <ul>
+    <ul>
+        <li> メモリへの呼び出しを自分で書ける(制御できる) </li>
+        <li> Read は 連続で動作する。 </li>
+    </ul>
+</article>
+
+<article>
+    <h3>Blocked Read の実装</h3>
+    <br>
+    <img src='images/blockread.png' style="height:250px"align="middle">
+    <br>
+
+    <ul>
         <li>
-        mmap でファイルを読み込むと、ファイルはメモリ上に即座に展開されるわけではない。
+        Task を 1 つずつではなく、ブロック単位で生成して起動する<br>
+        (1つずつ生成すると、生成された Task でメモリを圧迫するため)
         </li>
         <li>
-        ファイルがメモリに展開されるタイミングは、そのファイルに対して文字列検索を行うときである。<br><br>
-        <font color=red> 
-        →つまり、文字列検索が行われるときに初めてファイルが読み込まれるので、ファイル読み込みと文字列検索が分離できない。
-        </font>
+        Blocked Read Task が読み込み終わるまで、<br>Task Blockを待たせる
         </li>
-        </ul>
-      </article>
-
-
-      <article>
-        <h3>Blocked Read の設計</h3>
-          <br>
-          <img src='images/divide_read.png' style="height:250px" align="middle" >
-          <br>
-
-        <ul>
-          <li>
-          メモリへの呼び出しを自分で書ける(制御できる)
-          </li>
-          <li>
-          Read は 連続で動作する。
-          </li>
-        </ul>
-        以後、文字列検索を行う処理を Task と定義する。
-      </article>
-
-      <article>
-        <h3>Blocked Read の実装</h3>
-          <br>
-          <img src='images/blockread.png' style="height:250px"align="middle">
-          <br>
-
-        <ul>
-          <li>
-          Task を 1 つずつではなく、ブロック単位で生成して起動する<br>
-          (1つずつ生成すると、生成された Task でメモリを圧迫するため)
-          </li>
-          <li>
-          Blocked Read Task が読み込み終わるまで、Task Blockを待たせる<br>
-          </li>
-        </ul>
-      </article>
+    </ul>
+</article>
 
 <!--
-      <article class = 'smaller'>
-        <h3>I/O 専用の therad を追加 (1/2)</h3>
-          <br>
-          <img src='images/SPE_ANYblockread.png' style="height:350px"align="middle">
-        <ul>
-          <li>
-          Task 単位で使用するデバイスをセットすることができる。
-          </li>
-          <li>
-          SPE_ANY でセットすると、Cerium Task Manager 側で自動的に CPU を割り振る。
-          </li>
-          <li>
-          自動的に割り振るので、Blocked Read に 他のTask が割り込むおそれがある。
-          </li>
-        </ul>
-      </article>
+<article class = 'smaller'>
+<h3>I/O 専用の therad を追加 (1/2)</h3>
+<br>
+<img src='images/SPE_ANYblockread.png' style="height:350px"align="middle">
+<ul>
+<li>
+Task 単位で使用するデバイスをセットすることができる。
+</li>
+<li>
+SPE_ANY でセットすると、Cerium Task Manager 側で自動的に CPU を割り振る。
+</li>
+<li>
+自動的に割り振るので、Blocked Read に 他のTask が割り込むおそれがある。
+</li>
+</ul>
+</article>
 -->
 
 
-      <article>
-        <h3>I/O 専用の therad を追加</h3>
-          <br>
-          <img src='images/IO_0blockread.png' style="height:350px">
-          <ul>
-            <li>Blocked Read Task が最優先されるので、他の Task に割り込まれなくなる<br>
-            </li>
-          </ul>
-      </article>
+<article>
+    <h3>I/O 専用の thread を追加</h3>
+    <br>
+    <img src='images/IO_0blockread.png' style="height:350px">
+    <ul>
+        <li>Blocked Read Task が最優先されるので、他の Task に割り込まれなくなる<br>
+        </li>
+    </ul>
+</article>
 
-      <article>
-        <h3>I/O 専用の therad を使用しない場合</h3>
-          <br>
-          <img src='images/SPE_ANYblockread.png' style="height:350px">
-          <ul>
-            <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。
-            </li>
-          </ul>
-      </article>
+<article>
+    <h3>I/O 専用の thread を使用しない場合</h3>
+    <br>
+    <img src='images/SPE_ANYblockread.png' style="height:350px">
+    <ul>
+        <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 </li>
+    </ul>
+</article>
 
-      <article>
-        <h3>実験環境</h3>
-          <br>
-              <ul>
-              <li> Mac OS X 10.9.1</li>
-              <li> 2*2.66 GHz 6-Core Intel Xeon</li>
-              <li> Memory 16GB 1333MHz DDR3</li>
-              <li> HHD 1TB</li>
-              <li> file size : 約 10 GB</li>
-              <li> ファイルに対して Boyer-Moore String Seaech で文字列検索をかける </li>
-              <li> ファイルの読み込みから結果までを測定</li>
-              </ul>
-      </article>
+<article>
+<h3>実験環境</h3>
+<br>
+<ul>
+    <li> Mac OS X 10.9.1</li>
+    <li> 2*2.66 GHz 6-Core Intel Xeon</li>
+    <li> Memory 16GB 1333MHz DDR3</li>
+    <li> HHD 1TB</li>
+    <li> file size : 約 10 GB</li>
+    <li> ファイルに対して Boyer-Moore String Seaech で文字列検索をかける </li>
+    <li> ファイルの読み込みから結果までを測定</li>
+</ul>
+</article>
 
-      <article>
-        <h3>実験結果</h3>
-        <table  border="2" cellpadding="0" cellspacing="0">
-          <tbody>
-            <tr>
-              <td>read mode</td>
-              <td>CPU num</td>
-              <td>ave time(s)</td>
-            </tr>
-            <tr>
-              <td>mmap</td>
-              <td>2</td>
-              <td>106.2</td>
-            </tr>
-            <tr>
-              <td bgcolor="#ffffcc">mmap</td>
-              <td bgcolor="#ffffcc">12</td>
-              <td bgcolor="#ffffcc">154.6</td>
-            </tr>
-            <tr>
-              <td>一括Read</td>
-              <td>12</td>
-              <td>114.9</td>
-            </tr>
-            <tr>
-              <td>Blocked Read(SPE_ANY)</td>
-              <td>12</td>
-              <td>106.0</td>
-            </tr>
-            <tr>
-              <td bgcolor="#ffffcc">Blocked Read(IO_0)</td>
-              <td bgcolor="#ffffcc">(I/0) 1 + (Task) 11</td>
-              <td bgcolor="#ffffcc">99.2</td>
-            </tr>
-          </tbody>
-        </table>
+<article>
+<h3>実験結果</h3>
+<table  border="2" cellpadding="0" cellspacing="0">
+    <tbody>
+        <tr>
+            <td>read mode</td>
+            <td>CPU num</td>
+            <td>ave time(s)</td>
+        </tr>
+        <tr>
+            <td>mmap</td>
+            <td>2</td>
+            <td>106.2</td>
+        </tr>
+        <tr>
+            <td bgcolor="#ffffcc">mmap</td>
+            <td bgcolor="#ffffcc">12</td>
+            <td bgcolor="#ffffcc">154.6</td>
+        </tr>
+        <tr>
+            <td>一括Read</td>
+            <td>12</td>
+            <td>114.9</td>
+        </tr>
+        <tr>
+            <td>Blocked Read(SPE_ANY)</td>
+            <td>12</td>
+            <td>106.0</td>
+        </tr>
+        <tr>
+            <td bgcolor="#ffffcc">Blocked Read(IO_0)</td>
+            <td bgcolor="#ffffcc">(I/0) 1 + (Task) 11</td>
+            <td bgcolor="#ffffcc">99.2</td>
+        </tr>
+    </tbody>
+</table>
 
-            <ul>
-            <li>
-            Blocked Read & IO_0 が mmap より<font color=red>1.55倍</font>実行速度が向上した。<br>
-            </li>
-            <li>
-            mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。
-            </li>
-            </ul>
-      </article>
+    <ul>
+        <li> Blocked Read & IO_0 が mmap より<font color=red>1.55倍</font>実行速度が向上した。<br> </li>
+        <li> mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。 </li>
+    </ul>
+</article>
 
-      <article>
-        <h3>まとめ</h3>
-          <br>
-            <ul>
-            <li>
-            I/O と Task を分離し、同時に動くように改良した。
-            </li>
-            <li>
-            I/O 専用の Thread の追加
-            <li>
-            I/O を含む Task をで並列実装するときに mmap では不向きであり、
-            Blocked Read で読み込みを制御したほうが効果的。
-            </li>
-            </ul>
-        <h3 class="yellow">今後の課題</h3>
-            <ul>
-            <li>
-            Cerium の API として実装
-            </li>
-            <li>
-            様々な実装の試み<br>(I/O threads を 2つ、分割 mmap・・・)
-            </li>
-            </ul>
-      </article>
+<article>
+    <h3>まとめ</h3>
+    <br>
+    <ul>
+        <li> I/O と Task を分離し、同時に動くように改良した。 </li>
+        <li> I/O 専用の Thread の追加 </li>
+        <li>
+        I/O を含む Task をで並列実装するときに mmap では不向きであり、
+        Blocked Read で読み込みを制御したほうが効果的。
+        </li>
+    </ul>
+    <h3 class="yellow">今後の課題</h3>
+    <ul>
+        <li> Cerium の API として実装 </li>
+        <li>
+        様々な実装の試み<br>(I/O threads を 2つ、分割 mmap・・・)
+        </li>
+    </ul>
+</article>
 
-      <article>
-        <h3>Cerium Task の生成の例(1)</h3>
-        <p>(例題) multiply : 2つの数を掛け算するプログラム</p>
-          <h3 class="yellow">main.cc の記述</h3>
-        <pre>
+<article>
+    <h3>Cerium Task の生成の例(1)</h3>
+    <p>(例題) multiply : 2つの数を掛け算するプログラム</p>
+    <h3 class="yellow">main.cc の記述</h3>
+<pre>
 float* A, B, C;
 // Task の宣言
 HTaskPtr multiply = manager->create_task(MULTIPLY_TASK);
@@ -306,20 +278,21 @@
 // Task へ値を1つだけ渡す
 multiply->set_param(0,length);
 // Task を TaskList に set する
-multiply->spawn(); </pre>
-      </article>
+multiply->spawn();
+</pre>
+</article>
 
-      <article>
-        <h3> Cerium Task の生成(2)</h3>
-          <br>
-          <h3 class="yellow">Task の記述</h3>
-        <pre>
+<article>
+    <h3> Cerium Task の生成(2)</h3>
+    <br>
+    <h3 class="yellow">Task の記述</h3>
+<pre>
 static int
 multiply(SchedTask *s,void *rbuf, void *wbuf)
 {
     float *A,*B,*C
-    // 登録した inData を取得
-    A = (float*)s->get_input(rbuf,0);
+        // 登録した inData を取得
+        A = (float*)s->get_input(rbuf,0);
     B = (float*)s->get_input(rbuf,1);
     // 登録した outData を取得
     C = (float*)s->get_output(wbuf,0);
@@ -329,14 +302,15 @@
         C[i] = A[i] * B[i];
     }
     return 0;
-} </pre>
-      </article>
+}
+</pre>
+</article>
 
-      <article>
-        <h3>mmap での I/O の実装</h3>
-          <br>
-          <h3 class="yellow">mmap の記述</h3>
-        <pre>
+<article>
+    <h3>mmap での I/O の実装</h3>
+    <br>
+    <h3 class="yellow">mmap の記述</h3>
+    <pre>
 mmap(SchedTask *s, void *in, void *out)
 {
     // FileReadPtr : File情報などを格納している構造体
@@ -346,28 +320,25 @@
     fr->read_text =
         (char*)mmap(NULL,fr->filesize,PROT_READ,map,fr->fd,(off_t)0);
 }
-</pre>
-        <ul>
-            <li>
-            PROT_READ : 読み込み可
-            </li>
-            <li>
-            MAP_PRIVATE : 読み込んだ領域に対して書き込みが起こると複製し、複製した領域に対して書き込みを行う
-            </li>
-        </ul>
-      </article>
+    </pre>
 
-      <article class='smaller'>
-        <h3>Block Read の実装(1/2)</h3>
-          <br>
-          <h3 class="yellow">Block Read の実装</h3>
-        <pre>
+    <ul>
+        <li> PROT_READ : 読み込み可 </li>
+        <li> MAP_PRIVATE : 読み込んだ領域に対して書き込みが起こると複製し、複製した領域に対して書き込みを行う </li>
+    </ul>
+</article>
+
+<article class='smaller'>
+<h3>Block Read の実装(1/2)</h3>
+<br>
+<h3 class="yellow">Block Read の実装</h3>
+<pre>
 HTaskPtr t_read = manager->create_task(READ_TASK);
 t_read->set_cpu(read_spe_cpu);
 // 読み出すファイルの格納場所を設定
 t_read->set_outData(0,
-                    w->file_mmap + w->task_spawned * w->division_size,
-                    w->task_blocks * w->division_size);
+        w->file_mmap + w->task_spawned * w->division_size,
+        w->task_blocks * w->division_size);
 // ファイルディスクリプタの受け渡し
 t_read->set_param(0,w->fd);
 // ファイル読み込みの始点
@@ -383,14 +354,14 @@
 t_read->spawn();
 
 </pre>
-      </article>
+</article>
 
-      <article>
-        <h3>Block Read の実装(2/2)</h3>
-          <br>
-          <h3 class="yellow"> Block Read の記述</h3>
-        <pre>
-static int
+<article>
+<h3>Block Read の実装(2/2)</h3>
+<br>
+<h3 class="yellow"> Block Read の記述</h3>
+<pre>
+    static int
 read_task(SchedTask *s, void *rbuf, void *wbuf)
 {
     long fd = (long)s->get_param(0);
@@ -403,8 +374,8 @@
     return 0;
 }
 </pre>
-      </article>
+</article>
 
 
-  </body>
+</body>
 </html>