tag:blogger.com,1999:blog-48356619800079779712024-03-13T03:23:15.171-07:00Keep Coding, Keep Learning.Life is my implementationhawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-4835661980007977971.post-90518860565942310262017-11-23T01:24:00.000-07:002019-08-30T15:44:33.361-07:00JuluOSDev - Comprehensive System Software Study Group<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-TCqrKK0IMr4/WhaDcdSpujI/AAAAAAAAHf0/VZwOURXtLIQLiSuYHMgnjLS1ConvdF0HACLcBGAs/s1600/IMG_C5CFA99B0B39-1.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1136" data-original-width="640" height="640" src="https://3.bp.blogspot.com/-TCqrKK0IMr4/WhaDcdSpujI/AAAAAAAAHf0/VZwOURXtLIQLiSuYHMgnjLS1ConvdF0HACLcBGAs/s640/IMG_C5CFA99B0B39-1.jpeg" width="360" /></a></div>
The discussion and official page of the club are on the Facebook: <a href="https://www.facebook.com/groups/224024274384934/" target="_blank">https://www.facebook.com/groups/224024274384934/ </a><br />
<br />
Before going to the U.S, I was the co-founder of the JuluOSDev clud, which focuses on discussion of so many different system software, FreeBSD, RTOS, Microckernel, Nanokernel, Exokernel, Virtualization and IoT systems. When I co-founded the JuluOSDev, there were only 7 members; however, after core members' effort, the group has been expanded to 700+ members now. It was the wonderful experience because we knew a lot of OS contributors in Taiwan via the talk invitations and knowledge sharing.<br />
<br />
Although I am not the co-founder now, I still hope this group can keep expanding in order to leave the space for us to discussion about different system software instead of only major OS, Linux.hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-74879232218966195602017-04-12T15:34:00.002-07:002017-04-12T15:37:06.225-07:00[Systematical Case Study] Zephyr Inside Shell<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-CDgfF0I3_vk/WO6q2Md2NhI/AAAAAAAAGlI/_MUVfs0Jqk8DebKMk3zlwbIAbbKiIC99gCLcB/s1600/Screen%2BShot%2B2017-04-12%2Bat%2B15.26.44.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="255" src="https://1.bp.blogspot.com/-CDgfF0I3_vk/WO6q2Md2NhI/AAAAAAAAGlI/_MUVfs0Jqk8DebKMk3zlwbIAbbKiIC99gCLcB/s400/Screen%2BShot%2B2017-04-12%2Bat%2B15.26.44.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Overview: File Usages</td></tr>
</tbody></table>
<br />Whole Article: <a href="https://github.com/HawxChen/Thoughts-Technical_Readings/blob/master/Zephyr_CaseStudy.pdf"><br />https://github.com/HawxChen/Thoughts-Technical_Readings/blob/master/Zephyr_CaseStudy.pdf</a><br />
<br />
Keywords: Interrupt, ISR, UART Driver, console driver, ISR, IDT, Callback.<br />
<br />
Abstract<br />
This case study comprehensively surveys zephyr through understanding of shell’s internal implementation. It includes shell functions, console driver, UART driver, ISR set-up, hardware configuration, system initialization, and related IDT mechansims. <br />
<br />
Motivation<br />
To understand the interactivities between task, fiber, driver, interrupts and hardware, case study of Shell implementation is representative. It contains prompt, console driver, UART driver, and related hardware configurations. When I was programming the final assignment, due to my adoption of the Nanokernel, I must ensure that it is achievable to use shell, task, and fibers without related scheduling problems. Through examination of shell implementation, I understood how Zephyr works.<br />
<div>
<br /></div>
<br />hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-74194495662104989122016-11-17T12:24:00.001-07:002016-11-17T14:29:21.139-07:00[Sample Code] Write a mprobe module for dynamic debugging.<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-wmmDbcgxxcs/WC4Xe5DnKyI/AAAAAAAAF7I/pfgEaidTXgQlKndbR53Ksp_ButugIfwcQCLcB/s1600/Screen%2BShot%2B2016-11-17%2Bat%2B13.02.53.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://2.bp.blogspot.com/-wmmDbcgxxcs/WC4Xe5DnKyI/AAAAAAAAF7I/pfgEaidTXgQlKndbR53Ksp_ButugIfwcQCLcB/s400/Screen%2BShot%2B2016-11-17%2Bat%2B13.02.53.jpg" width="400" /></a></div>
<br />
<br />
Kernel debugging is generally viewed as an annoying process because it might heavily use printk with <b><span style="color: yellow;">static</span></b> debugging techniques (compile, then run). However, in this work, I want to show you how to write a mprobe module through device interface and then, in user programs, we can use POSIX interface, open()/read()/write(), to operate the virtual device exported through the mprobe module. Through this virtual device, we can observe the interesting kernel information. Therefore, without any help from physical devices, we can <b><span style="color: yellow;">dynamically</span></b> debug developing kernel modules.<br />
<br />
In this work, I demonstrated how to write a loadable kernel module and a mprobe module; moreover, the kernel module can be debugged by the mprobe module.</div>
<div>
<ul>
<li><a href="https://github.com/HawxChen/Linux-Kernel-Driver-Programming/tree/master/ASU_CSE530/assignment01">https://github.com/HawxChen/Linux-Kernel-Driver-Programming/tree/master/ASU_CSE530/assignment01</a></li>
<li>If you feel it useful, please star or watch this repository.</li>
</ul>
The folder included two modules:</div>
<div>
<ul>
<li>A kernel module used hashtable and synchronization.</li>
<li>A mprobe module could debug the previous kernel module.</li>
<li><b>Both parts had testing programs and README.</b></li>
</ul>
<b>Enjoy tracing the code!</b></div>
hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-70117120120294211372016-11-03T04:55:00.000-07:002016-11-18T18:07:46.899-07:00[File System] UNIX VS. GFS<ul>
<li>In this article, I want to discuss two classic papers of File System, which are almost 30 years apart. I feel it is very interesting to understand and review their differences.</li>
<ul>
<li>Dennis M. Ritchie , Ken Thompson, The UNIX time-sharing system, Communications of the ACM, v.17 n.7, p.365-375, July 1974</li>
<li>Sanjay Ghemawat , Howard Gobioff , Shun-Tak Leung, The Google file system, Proceedings of the nineteenth ACM symposium on Operating systems principles, October 19-22, 2003, Bolton Landing, NY, USA </li>
</ul>
<li>I will compare them through the following items.</li>
<ul>
<li>Different Applied Target (Motivation)</li>
<li>Different Manifestation of Design Principles</li>
<li>Design Challenges</li>
<ol>
<li>Consistency</li>
<li>Scalable Performance</li>
<li>Reliability</li>
<li>Availability</li>
<li>Fault Tolerance</li>
<li>Transparency</li>
</ol>
</ul>
<li>I also provided the PDF version: <a href="https://github.com/HawxChen/Thoughts-Technical_Readings/blob/master/FS-UNIX-GFS.pdf" target="_blank">[File System] UNIX VS. GFS</a></li>
<li>Different Applied Target (Motivation)</li>
<ul>
<li>GFS: For large distributed data intensive applications and web services such as YouTube, Google Drive, and Google Docs, they need a scalable and distributed file system to store large amount of data shared between users.</li>
<li>UNIX FS (File System): For highly interactive applications such as editor, shell, and graphical user desktop, they require a file system to minimize response time between user and kernel.</li>
</ul>
<li>Different manifestation of design
principles</li>
</ul>
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-TW</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="382">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="59" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 9"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Hyperlink"/>
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:"Courier New";
panose-1:2 7 3 9 2 2 5 2 4 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:新細明體;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536870145 1073786111 1 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:96293658;
mso-list-type:hybrid;
mso-list-template-ids:1861791376 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l1
{mso-list-id:870725915;
mso-list-type:hybrid;
mso-list-template-ids:-817171946 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l2
{mso-list-id:1046295465;
mso-list-type:hybrid;
mso-list-template-ids:897093458 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l2:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l2:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l2:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l2:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l2:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l2:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l2:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l3
{mso-list-id:2069496385;
mso-list-type:hybrid;
mso-list-template-ids:1369203006 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l3:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l3:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l3:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l3:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l3:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l3:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l3:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
table.MsoTableGrid
{mso-style-name:"Table Grid";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:59;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-fareast-language:EN-US;}
</style>
<![endif]-->
<!--StartFragment-->
<br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; margin-left: 6.85pt; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184; width: 525px;">
<tbody>
<tr style="height: 25.95pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;">
<td style="border: solid windowtext 1.0pt; height: 25.95pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<br /></div>
</td>
<td style="border-left: none; border: solid windowtext 1.0pt; height: 25.95pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">GFS<o:p></o:p></span></div>
</td>
<td style="border-left: none; border: solid windowtext 1.0pt; height: 25.95pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpLast" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">UNIX
FS<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 106.9pt; mso-yfti-irow: 1;">
<td style="border-top: none; border: solid windowtext 1.0pt; height: 106.9pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Components
<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 106.9pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Constructed
from many common and inexpensive components that might be often
malfunctioned.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Component
failures are viewed as the norm instead of the exception.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
<br /></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 106.9pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">It
does not assume to use those kinds of often malfunctioned components like
GFS.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Component
failures are seen as exceptions.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 0cm; mso-add-space: auto;">
<br /></div>
</td>
</tr>
<tr style="height: 144.8pt; mso-yfti-irow: 2;">
<td style="border-top: none; border: solid windowtext 1.0pt; height: 144.8pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Read<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 144.8pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo3; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">In<b> Large streaming reads</b>, individual
read might read hundreds of KBs, usually 1 MB or more. Consecutive operations
from the same client usually read through a contiguous region of a file.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo3; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><b><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Small random reads</span></b><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">, each read might read a few KBs at some
arbitrary offset.<b><o:p></o:p></b></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 144.8pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo3; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">The
size in each read</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"> is much fewer than
GFS. Generally, It might only read data in tens of bytes.</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"><o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="mso-list: l1 level1 lfo3; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">In UNIX FS, it mainly uses random reads at
arbitrary offsets.</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"><o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 106.9pt; mso-yfti-irow: 3;">
<td style="border-top: none; border: solid windowtext 1.0pt; height: 106.9pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Write<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 106.9pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">GFS majorly
uses large, sequential writes to end of files (Append).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Writes in
small size at arbitrary offset in a file are still provided without improving
efficiency.<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 106.9pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">The
size in each write</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"> is much fewer than
GFS. Generally, It might only write data in tens of bytes.</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"><o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">It mainly uses random writes at arbitrary offsets.</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"><o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 49.0pt; mso-yfti-irow: 4;">
<td style="border-top: none; border: solid windowtext 1.0pt; height: 49.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Concurrent
Write to a same file.<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 49.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">In GFS
multiple clients might concurrently <b>append</b>
to the same file.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">GFS use two
techniques to maintain atomicity with minimum overhead<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l3 level2 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; font-size: 12.0pt; line-height: 115%;">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Producer-consumer
queue<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l3 level2 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; font-size: 12.0pt; line-height: 115%;">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Many-way
merging.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">If the region
is <b>defined</b> and <b>consistent</b>, then no writes will be
lost and <b>each client</b> can see the
same result from mutations. <o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 49.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">UNIX
FS creators thought that they have no opportunity to let one independent
process own a large file so that they did not design user-visible locks. <o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Without
user-visible locks, if users have the same privilege to a file, users can
write the file in any time and at any offset. Unlike GFS, although UNIX users
can see the same file (<b>consistency</b>),
they might lose some writes (<b>undefined
state</b>) due to overwrites to the same file regions.<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 58.45pt; mso-yfti-irow: 5;">
<td style="border-top: none; border: solid windowtext 1.0pt; height: 58.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Bandwidth
VS. Latency <o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 58.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">For GFS, high
steady bandwidth is more important than low latency.<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 58.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpLast" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Due
to the focus on interactive applications, UNIX FS is devoted to achieving low
latency.<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 49.0pt; mso-yfti-irow: 6;">
<td style="border-top: none; border: solid windowtext 1.0pt; height: 49.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">File
Size<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 49.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l2 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Typically,
each file is 100 MB or larger in size.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l2 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Multi-GB files
are ordinary.<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 49.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpLast" style="mso-list: l2 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">The Maximum single file in the UNIX FS is
1MB.</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"><o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 58.45pt; mso-yfti-irow: 7; mso-yfti-lastrow: yes;">
<td style="border-top: none; border: solid windowtext 1.0pt; height: 58.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 77.95pt;" valign="top" width="78"><div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Block
Size<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 58.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 8.0cm;" valign="top" width="227"><div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">In GFS, it uses
the chunk to store data, the unit of a chunk is 64MB.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;">
</span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Although in
raw layer file system, GFS still use blocks, the unit of each block size
might be higher than 512 bytes.<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 58.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 219.75pt;" valign="top" width="220"><div class="MsoListParagraphCxSpLast" style="mso-list: l3 level1 lfo4; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Its
block size is 512 bytes<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
<!--EndFragment--><br />
<div>
<ul>
<li>Design Challenges</li>
</ul>
</div>
<div>
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-TW</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="382">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="59" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 9"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Hyperlink"/>
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:新細明體;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536870145 1073786111 1 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:521626454;
mso-list-type:hybrid;
mso-list-template-ids:1845518946 1623113382 67698703 67698689 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:18.0pt;
text-indent:-18.0pt;
mso-ansi-font-weight:bold;}
@list l0:level2
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:54.0pt;
text-indent:-18.0pt;}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:99.0pt;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:126.0pt;
text-indent:-18.0pt;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:162.0pt;
text-indent:-18.0pt;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
margin-left:198.0pt;
text-indent:-9.0pt;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:234.0pt;
text-indent:-18.0pt;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:270.0pt;
text-indent:-18.0pt;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
margin-left:306.0pt;
text-indent:-9.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
</style>
<![endif]-->
<!--StartFragment-->
<br />
<div class="MsoListParagraphCxSpFirst" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">1.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Consistency<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Although
UNIX FS keeps consistency in directories and concurrent writes to a file, GFS
can be better through the <b>defined state:
</b>consistency and all updates from writes and append are known to clients.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">However,
GFS is still possible to have an <b>undefined
but consistent</b> state. <o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">2.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">S</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">calable Performance:<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">To
achieve performance, GFS separates control and data plane. <o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 126.0pt; mso-add-space: auto; mso-list: l0 level4 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">1.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Master
server is responsible for control plane.
If clients want to know which one Chunkserver they can request the
replication from, then they can ask the Master server.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 126.0pt; mso-add-space: auto; mso-list: l0 level4 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">2.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Chunkserver
is responsible for data plane. After clients asks Master server to get the
exact chunkservers, they can request replications, then clients can transfer
data between themselves and chunkservers.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">To
achieve scalability, GFS manages different levels of replications such as Master
server, primary replica, and secondary replicas throughout chunkservers so that
enormous amount clients can request same content from different chunkservers.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Because
of so many replications in different chunkservers, GFS uses the <b>pipeline</b> technique to achieve high
performance of updates. <o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 126.0pt; mso-add-space: auto; mso-list: l0 level4 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">1.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">To completely
utilize each machine’s networking bandwidth, each chunkserver, masterserver,
and client transfer the data as soon as possible, rather the sliced data into multiple
receivers.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 126.0pt; mso-add-space: auto; mso-list: l0 level4 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">2.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">To keep
away from high-latency connections and network bottleneck, according to the
network location, each machine just copies the data to the nearest machine,
which does not receive the same data.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">UNIX FS
has little scalability because, in the 1970s, networking was not popular like
now. They did not have enough motivation to achieve scalable performance like
GFS in 2003.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">3.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Reliability<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Unlike
UNIX FS, which has no sel</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">f-made</span><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;"> visible
backup for files, GFS has chunk replications in many chunkservers. When one
replication failed, clients can request the replications from other chunkservers.
<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">In
GFS’s internal management, it does not only replicate<b> data chunks </b>but also maintains <b>replication for management chunk of Master </b>server in different
chunkservers. Therefore, if the central manager, Master server, crashed, then
client can request information from the replications of Master server so that
GFS achieves high reliability.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">4.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Availability<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">According
to GFS assumption, server failures are the norm so that creators made GFS
achieve high availability through the techniques Fast Recovery, Chunk and
Master Replication.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">For Fast
Recovery, masters and chunckserver are regularly shut down to restore their
state and restart their services so that they can prepare well for any abnormal
termination in the future.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">For Chunk
Replication, because chunk replications are in chunkservers of different racks,
clients can acquire the file namespace’s different parts from servers, even
though some of chunk replication might be malfunctioned.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Master
Replication is not only helpful to reliability but also availability. GFS has
shadow masters falling behind primary master servers with management
information. Although shadow servers only provide Read Access, they still can
provide some requested information to clients. <o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">5.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Fault
tolerance<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">GFS
achieves fault tolerance through three techniques: Master and Chunk
replication, operation log, and data integrity.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">For
Master and Chunk replication, client does not have to worry about any failure
from Master or Chunkserver because GFS will restore state and restart service through
replications of different servers.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">For Operation
Log, GFS will save operations after the last checkpoint. When servers were malfunctioned
for any reason, to restart these servers, GFS will read the operation log to
load a checkpoint and replay each operation in the log. <o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">For Data
Integrity, GFS uses checksum to verify the integrity of each chunk. GFS also
enhances checksum mechanisms through partial updates of the tail in each
checksum because appending is the major file operation.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">6.<span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">Transparency<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 99.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "symbol"; font-size: 12.0pt; line-height: 115%;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal; line-height: normal;"> </span></span><!--[endif]--><span style="font-family: "times new roman"; font-size: 12.0pt; line-height: 115%;">For
fault tolerance and load balance, GFS can achieve transparency through the
location independent namespace stored in Master server.<b><o:p></o:p></b></span></div>
<!--EndFragment--></div>
<div>
<br /></div>
<br />
<style>
<!--
/* Font Definitions */
@font-face
{font-family:新細明體;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536870145 1073786111 1 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:521626454;
mso-list-type:hybrid;
mso-list-template-ids:1845518946 1623113382 67698703 67698689 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:18.0pt;
text-indent:-18.0pt;
mso-ansi-font-weight:bold;}
@list l0:level2
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:54.0pt;
text-indent:-18.0pt;}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:99.0pt;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:126.0pt;
text-indent:-18.0pt;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:162.0pt;
text-indent:-18.0pt;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
margin-left:198.0pt;
text-indent:-9.0pt;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:234.0pt;
text-indent:-18.0pt;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:270.0pt;
text-indent:-18.0pt;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
margin-left:306.0pt;
text-indent:-9.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style><style>
<!--
/* Font Definitions */
@font-face
{font-family:"Courier New";
panose-1:2 7 3 9 2 2 5 2 4 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:新細明體;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536870145 1073786111 1 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
{mso-style-priority:34;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-type:export-only;
margin-top:0cm;
margin-right:0cm;
margin-bottom:10.0pt;
margin-left:36.0pt;
mso-add-space:auto;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:新細明體;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:96293658;
mso-list-type:hybrid;
mso-list-template-ids:1861791376 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l1
{mso-list-id:870725915;
mso-list-type:hybrid;
mso-list-template-ids:-817171946 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l2
{mso-list-id:1046295465;
mso-list-type:hybrid;
mso-list-template-ids:897093458 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l2:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l2:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l2:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l2:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l2:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l2:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l2:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l3
{mso-list-id:2069496385;
mso-list-type:hybrid;
mso-list-template-ids:1369203006 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l3:level3
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l3:level4
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l3:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l3:level6
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
@list l3:level7
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Symbol;}
@list l3:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:"Courier New";}
@list l3:level9
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;
font-family:Wingdings;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-2997543905648652402016-10-06T18:29:00.001-07:002016-10-06T18:42:07.501-07:00Discussion Notes on Arrakis : The Operating System is the Control Plane<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-rw3D3LKlULk/V_b9Eh6sM8I/AAAAAAAAFwc/pcbCAPUkePENGH1SfktKU0x6-pb6CdT3ACLcB/s1600/Screen%2BShot%2B2016-10-06%2Bat%2B18.39.59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="https://4.bp.blogspot.com/-rw3D3LKlULk/V_b9Eh6sM8I/AAAAAAAAFwc/pcbCAPUkePENGH1SfktKU0x6-pb6CdT3ACLcB/s400/Screen%2BShot%2B2016-10-06%2Bat%2B18.39.59.png" width="400" /></a></div>
<br />
<br />
Hi All,<br />
I was a transcriber of one discussion about this OSDI'14 best paper and responsible to answer many open questions. Full content is in the PDF: <b><a href="https://github.com/HawxChen/Thoughts-Technical_Readings/blob/master/Discussion%20Notes%20on%20Arrakis-The%20Operating%20System%20is%20the%20Control%20Plane.pdf" target="_blank">Discussion Notes on Arrakis-The Operating System is the Control Plane.pdf. </a></b><br />
<br />
The following digested description is from the PDF.<br />
<br />
<ul>
<li>Main Idea</li>
<ul>
<li>Arrakis achieved high performance through the isolation between control and data plane. This paper moved data plane from its own kernel to user mode because of virtualization supported by recent hardware devices.</li>
</ul>
<li>Contribution</li>
<ul>
<li>Provided an OS prototype to achieve the separation of chores between the I/O devices (Networking/Disk), kernel, user applications. This prototype can then scale its capability to multi-core processors based on the Barrelfish[1]. Finally, authors evaluated their prototype through the quantified ex- amination of Memcached[2], Redis[3], and HTTP load balancer.</li>
</ul>
<li><b>... Please see the PDF</b></li>
<li>Conclusion</li>
<ul>
<li>I really appreciate this paper demonstrated the possibility that minimizing kernel can improve performance based one the modern hardware. I can not wait to see more microkernel OSes which can be sped up; therefore future microkernel OSes can have robustness as well as high performance. Finally, if this notes have any mistake or ambiguous points, welcome to correct me through Email or comments.</li>
</ul>
</ul>
hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-66970346527706176592016-01-28T05:14:00.001-07:002016-01-28T19:51:19.349-07:00 [志工][石頭湯][人生百味][芒草心協會]街友尾牙 (下) 一日舉牌(志)工的心得 <div>
<h2 style="clear: both;">
寫這個文章的用義有二個: <a href="http://hawxchen.blogspot.tw/2016/01/blog-post_24.html#links" target="_blank">第一線參加-破除部份街友的刻版印象(上)</a> & <a href="http://hawxchen.blogspot.com/2016/01/blog-post_28.html" target="_blank">一日舉牌(志)工的心得(下)。</a></h2>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Hqe8L5dPACs/VqoFSI8ZQEI/AAAAAAAAEEI/nU4AnGj3w7A/s1600/IMG_6827.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://3.bp.blogspot.com/-Hqe8L5dPACs/VqoFSI8ZQEI/AAAAAAAAEEI/nU4AnGj3w7A/s400/IMG_6827.JPG" width="300" /></a></div>
<h3 style="clear: both;">
<span style="font-size: large; font-weight: normal;">活動: </span><a href="https://www.facebook.com/events/1540608909590177/" style="font-size: x-large; font-weight: normal;" target="_blank">123無家者人權尾牙音樂會</a></h3>
<h3 style="clear: both;">
一日舉牌(志)工的心得 (下)</h3>
</div>
<ul>
<li>撰寫下篇的動機是想表達: </li>
<ul>
<li>飯可以亂吃,工作不能亂選。</li>
<li>一個理想活動背後的現實。</li>
<li>磨練自已的能力是本份,但不要忘撥些心力幫助人。</li>
</ul>
<li>親身體驗過那些舉牌工的工作後,</li>
<ul>
<li><b>那些在大馬路邊的舉牌工人的工作-是活生生的都市恐佈傳說</b></li>
<li>站一天,風吹日晒雨淋又凍。 </li>
<li>沒有勞健保</li>
<li>還經歷減薪 1200 -> 800/day</li>
<li>站再久,也很難有所謂工作資歷的累積</li>
<li><b>愈做愈窮的工作- 賺的錢/身體的消磨/沒有競爭力的經驗累積,簡直是不成比例。</b></li>
<ul>
<li><strike>請勿對號入坐 。</strike></li>
</ul>
</ul>
<li>這個活動很有理想性,而達到理想是需要實力的…; 這次有許多社會上有頭臉有能力的人,來號召200多位志工,及把程序打通關。</li>
<ul>
<li><a href="http://2.bp.blogspot.com/-zTWHqMUxmic/VqoAOSVhgjI/AAAAAAAAEDs/R7lVhT-7fIM/s1600/IMG_6831.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="http://2.bp.blogspot.com/-zTWHqMUxmic/VqoAOSVhgjI/AAAAAAAAEDs/R7lVhT-7fIM/s320/IMG_6831.JPG" width="240" /></a></li>
<a href="http://1.bp.blogspot.com/-ECuGDX9JfKQ/VqoAOIrsihI/AAAAAAAAEDo/QXZ6xDX4iqs/s1600/IMG_6834.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="http://1.bp.blogspot.com/-ECuGDX9JfKQ/VqoAOIrsihI/AAAAAAAAEDo/QXZ6xDX4iqs/s320/IMG_6834.JPG" width="240" /></a><br />
<ul></ul>
<a href="http://4.bp.blogspot.com/-6FulHhbpOXk/Vqn8jLh8F2I/AAAAAAAAEDM/Nwfe6N2yA_w/s1600/IMG_6842.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="http://4.bp.blogspot.com/-6FulHhbpOXk/Vqn8jLh8F2I/AAAAAAAAEDM/Nwfe6N2yA_w/s320/IMG_6842.JPG" width="240" /></a><br />
<a href="http://3.bp.blogspot.com/-qh6mUyrLk6E/Vqn8kbC_YeI/AAAAAAAAEDc/1TeM5K3o8aU/s1600/IMG_6844.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="http://3.bp.blogspot.com/-qh6mUyrLk6E/Vqn8kbC_YeI/AAAAAAAAEDc/1TeM5K3o8aU/s320/IMG_6844.JPG" width="240" /></a><br />
<li><span style="text-align: center;">題材要發酵,活動有影響力,找的到媒體。--換句話說,有正面迴響才更有繼續的可能。太多活動是有正面效果而無廻響,繼而斷炊。</span></li>
<li><a href="http://1.bp.blogspot.com/-AEPlTI6SGTE/Vqn6sCGG2gI/AAAAAAAAECs/5L71wuOg-ok/s1600/IMG_6835.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="240" src="http://1.bp.blogspot.com/-AEPlTI6SGTE/Vqn6sCGG2gI/AAAAAAAAECs/5L71wuOg-ok/s320/IMG_6835.JPG" width="320" /></a></li>
</ul>
<ul>
<li><a href="http://4.bp.blogspot.com/-UJL_1k9Ss3k/Vqn7kitoQxI/AAAAAAAAEC8/ho1k6QgV7I0/s1600/IMG_6837.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="240" src="http://4.bp.blogspot.com/-UJL_1k9Ss3k/Vqn7kitoQxI/AAAAAAAAEC8/ho1k6QgV7I0/s320/IMG_6837.JPG" width="320" /></a></li>
<li>要錢有得募,要物有人捐<br /><a href="http://1.bp.blogspot.com/-7lqso47LwqQ/VqToqxrSsAI/AAAAAAAAEBw/JKylTdUqNpE/s1600/IMG_6826.JPG" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="http://1.bp.blogspot.com/-7lqso47LwqQ/VqToqxrSsAI/AAAAAAAAEBw/JKylTdUqNpE/s320/IMG_6826.JPG" width="240" /></a></li>
<li>要人召的到人,要器材有得生<br /><a href="http://4.bp.blogspot.com/-a8Um5W9BBJc/Vqn7RIfqFEI/AAAAAAAAEC0/eBI3NOA8B3I/s1600/IMG_6829.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="http://4.bp.blogspot.com/-a8Um5W9BBJc/Vqn7RIfqFEI/AAAAAAAAEC0/eBI3NOA8B3I/s320/IMG_6829.JPG" width="240" /></a></li>
</ul>
<li>顧好自已的責任,行有餘力。也許可以用自已能接受的方式幫忙點人。這是種社會行善存褶的concept。</li>
<ul>
<li><strike>認清現實,工作別亂選,厚植實力: 也許我們未來都能會是能贊助這次尾牙的人,而不是去吃這次尾牙的人。</strike></li>
<li><a href="http://3.bp.blogspot.com/-VKQ7B7Dwy5I/VqoDGuGJ1MI/AAAAAAAAED8/pAAS9llRGn8/s1600/f_6944165_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="221" src="http://3.bp.blogspot.com/-VKQ7B7Dwy5I/VqoDGuGJ1MI/AAAAAAAAED8/pAAS9llRGn8/s400/f_6944165_1.jpg" width="400" /></a></li>
</ul>
<li>後記: <a href="http://hawxchen.blogspot.tw/2016/01/blog-post.html" target="_blank">怎樣的人才可以擁有理想?</a></li>
</ul>
hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-22389417525439207342016-01-24T08:26:00.000-07:002016-01-28T05:24:45.147-07:00[志工][石頭湯][人生百味][芒草心協會]街友尾牙 (上) 破除部份街友的刻版印象<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-0sooL6U64xA/VqTYwnra1sI/AAAAAAAAEA8/LNh9EMcR8E8/s1600/12620824_10201081686839943_1156261697_o.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="http://4.bp.blogspot.com/-0sooL6U64xA/VqTYwnra1sI/AAAAAAAAEA8/LNh9EMcR8E8/s400/12620824_10201081686839943_1156261697_o.jpg" width="300" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">跟街友-宋大哥(化名),一同當舉牌工的一天。</td></tr>
</tbody></table>
<h2 style="clear: both; text-align: left;">
寫這個文章的用義有二個: <a href="http://hawxchen.blogspot.com/2016/01/blog-post_24.html" target="_blank">第一線參加-破除部份街友的刻版印象(上)</a> & <a href="http://hawxchen.blogspot.com/2016/01/blog-post_28.html" target="_blank">一日舉牌(志)工的心得(下)。</a></h2>
<div>
<span style="font-size: large;">活動: <a href="https://www.facebook.com/events/1540608909590177/" target="_blank">123無家者人權尾牙音樂會</a></span></div>
<h3 style="clear: both;">
</h3>
<h3 style="clear: both;">
</h3>
<h3 style="clear: both;">
第一線參加-破除部份街友的刻版印象 (上)</h3>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>街友 70%是有工作的,只是工作付不起房租外,因此流落街頭。這有很多隱性問題</li>
<ul>
<li>不懂理財</li>
<li>常被騙錢</li>
<li>跟會被倒</li>
<li>花錢的價值觀: 有得住就好,住街頭也是往</li>
<li>有其他更需花錢/急需用錢的事物,因此自已的住就放一邊</li>
<li>會愈賺愈少愈不夠生活,背後是各有原因。</li>
<ul>
<li>就拿跟我今天一同排班的街友-宋大哥來說好了,他年輕時是在工地工人,沒有勞健工保,現做現領,賭麻將20年,但真正奪去正常工作能力的是40歲由12米高的鷹架上摔下來的那一次。目前被社會局安排工作在某公務機關當掃地工。</li>
</ul>
</ul>
<li>就跟馬斯洛三角形一樣,愈初階的需求不能滿足,就會一直落入惡性循環。但只要有人協助其取得工作,獲得所謂社會<b><span style="font-size: large;">畸</span></b>識(壓力)下的有工作有尊嚴。他們就能站起來。</li>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-qJBuARTG3bA/VqTfocsXs1I/AAAAAAAAEBM/h1PKIoOWWUM/s1600/IMG_6823.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-qJBuARTG3bA/VqTfocsXs1I/AAAAAAAAEBM/h1PKIoOWWUM/s320/IMG_6823.JPG" width="240" /></a></div>
<li>有工作有尊嚴-這其實是假議題,應該是有錢有尊嚴,但這社會就是會找一堆藉口施壓在相對弱勢者身上。- 不信? 看看台灣的勞雇環境就知道了。</li>
<ul>
<li>高鐵: 經過一番抗議,公司先付<b>半價</b>的已加班費,換員工的正常加班,</li>
<li>關廠工人…</li>
<li>勞基有法,執法效率低落: 您的加班費有正常申請嗎?</li>
<li>有錢有尊嚴,沒工作沒關係: 連大公子的帝寶是自已賺的嗎?</li>
</ul>
<li>基本上- 街友也有分上中下等,今天來的,有相當比例是跟社會局有連繫,而且不用露宿街頭(行李隨身帶的那種)。</li>
<ul>
<li>像為何有的街友 可以拿到邀請卡,而有的不行?</li>
<li><a href="http://1.bp.blogspot.com/-ZKY9RA4g0dk/VqTldgL3m4I/AAAAAAAAEBc/SyAW-NdtprE/s1600/IMG_6816.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="http://1.bp.blogspot.com/-ZKY9RA4g0dk/VqTldgL3m4I/AAAAAAAAEBc/SyAW-NdtprE/s320/IMG_6816.jpg" width="240" /></a></li>
<li>每個團體的力量有限,在自已的能力範圍盡力就很好。</li>
<li>不該期待每個人都有神佛的法力無邊- 盡渡眾生,地獄不空,誓不成佛。<strike>今天這餐是人煮的不是滿天神佛賞的。</strike></li>
<li>就跟不管亂世/順世。百姓是不變的犧牲品一樣,資訊面本來就不是件平等的事,不信? 看看內線交易就知道了。</li>
</ul>
<li>街友,有部份其實對工作意外的敬業,明顯看的出來有一份正常的工作 對他們的重要性。跟社會的連結性。</li>
<ul>
<li>跟我一同站崗的宋大哥,就自願站頭班,且一直找人多的點,希望令更多人看到。這應該是沒有所謂的績效的…</li>
<li>絕非大家的印象: 好吃懶做,流落死好。</li>
</ul>
<li>可憐之人,必有可恨之地? 我不否認。 但有更多的原因需要探究。</li>
<ul>
<li>有點像廢死議題爭論</li>
<li><strike>像很多人- 就可恨自已的老爸不是李嘉誠</strike></li>
<ul>
<li><strike>望子成龍,望女成鳳,但更多人是希望 望父成龍,望母成鳳。</strike></li>
<li><strike><a href="http://1.bp.blogspot.com/-GD9XtXHgYvI/VqTmR0YYidI/AAAAAAAAEBk/hI92RGU28mQ/s1600/6352759350_06de7e02e5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="218" src="http://1.bp.blogspot.com/-GD9XtXHgYvI/VqTmR0YYidI/AAAAAAAAEBk/hI92RGU28mQ/s320/6352759350_06de7e02e5.jpg" width="320" /></a></strike></li>
</ul>
</ul>
<li>社會邊緣人,沒有推力,是不會成為邊緣人的。但腳的確還是自已的。</li>
<ul>
<li>每人的抗壓性不同。</li>
<li>一個溫暖的社會,是該給不同能力的各有自已的一方天空。</li>
</ul>
</ul>
<div>
<h2 style="clear: both;">
</h2>
<h2 style="clear: both;">
</h2>
<h2 style="clear: both;">
<a href="http://hawxchen.blogspot.com/2016/01/blog-post_28.html" target="_blank">一日舉牌(志)工的心得(下)</a>。<strike>--待續。</strike></h2>
</div>
<div>
<br /></div>
hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-40783846120746168902013-08-05T08:15:00.000-07:002015-12-06T08:22:33.523-07:00[TALK] Exokernel VS. Microkernel/<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" mozallowfullscreen="" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/24940177" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" webkitallowfullscreen="" width="427"> </iframe> </div>
<div style="margin-bottom: 5px;">
<div style="text-align: center;">
<strong> <a href="http://www.slideshare.net/hawxchen/talk-exokernel-vs-24940177" target="_blank" title="[TALK] Exokernel vs. Microkernel">[TALK] Exokernel vs. Microkernel</a> </strong> from <strong><a href="http://www.slideshare.net/hawxchen" target="_blank">Hawx Chen</a></strong> </div>
</div>
<br />
<ul>
<li>I presented the topic "Exokernel VS. Microkernel" at <a href="http://coscup.org/2013/en/program/" target="_blank">Taiwan COSCUP 2013 with about 1500 attendees</a>. I focus on Exokernel design and its implementation to show some differences from Microkernel.</li>
<li>Something through this presentation I want to convey sincerely is that </li>
<ol>
<li>Ambitious app designers could design OS services just for its own applications to achieve better performance and optimization.</li>
<li>By Exokernel design and principle, ambitious app designers could release their creative soul to customize almost all OS services they want.</li>
</ol>
<li>I enjoy discussing, learning, and implementing system topics like OS kernels, virtualization, and embedded products, mobile application, etc.</li>
<ol>
</ol>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="http://4.bp.blogspot.com/-Fp3MSvn6zCM/Uf_AGWZTHjI/AAAAAAAADgU/Ld9z-wbHY_w/s1600/IMG_3521.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="http://4.bp.blogspot.com/-Fp3MSvn6zCM/Uf_AGWZTHjI/AAAAAAAADgU/Ld9z-wbHY_w/s640/IMG_3521.JPG" width="480" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-39246135947988664302013-04-27T04:33:00.001-07:002013-04-27T21:28:41.109-07:00Lab4 Preemptive Multitasking<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-4zww0e2DLZA/UXuUYUo8ZzI/AAAAAAAADc8/-SlS43veOyQ/s1600/Light_on_cinema_queue.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="http://1.bp.blogspot.com/-4zww0e2DLZA/UXuUYUo8ZzI/AAAAAAAADc8/-SlS43veOyQ/s640/Light_on_cinema_queue.jpg" width="640" /></a></div>
<br />
<a href="http://hawxchen.blogspot.com/2012/03/preface-hope-that-my-crude-remarks-may.html" target="_blank">[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People</a><br />
<u><a href="http://hawxchen.blogspot.com/2012/03/blog-post.html" target="_blank">[前言]拋磚引玉</a></u><br />
<br />
<a href="https://github.com/HawxChen/MIT-6.828-Adventure/tree/lab4" target="_blank">GitHub: MIT-6.828-Adventure-Lab4</a><br />
<br />
<br />
<ul>
<li>Part A: Multiprocessor Support and Cooperative Multitasking.</li>
<ul>
<li>Initialize hardware support.</li>
<ul>
<li>Main goal: Make every CPUs have its own independent data.</li>
<li>Booting CPU triggers the bootaps() to set up each CPU by env_init_percpu() through mpentry.S to call mp_main().</li>
<li>ma_main() triggers</li>
<ul>
<li>env_init_percpu</li>
<ul>
<li>trap_init_percpu() setup each CPU's own TSS and stack allocated from mem_init_mp()</li>
<ul>
<li>ltr(tss)</li>
<li>lidt</li>
</ul>
</ul>
<li>trap_init_percpu()</li>
<ul>
<li>setup es/ds/fs/gs/fs/<b><span style="color: #cc0000;">ss</span></b></li>
<li><span style="color: #cc0000;"><b>setup CS by ljmp</b></span></li>
</ul>
</ul>
</ul>
<li>Big Kernel Lock setup to ensure only one trap to capable to enter the kernel mode in the same time between all CPUs.</li>
<li>Implement Round-Robin scheduling.</li>
</ul>
<li>Part B: Copy-on-Write Fork. </li>
<ul>
<li><span style="color: #b45f06;">I must say this part is very very interesting!!!</span></li>
<ul>
<li>user mode page fault handler</li>
<li>The translation between UXSTACK, Kernel stack, and normal user stack.</li>
</ul>
<li>The guide on Lab4 is very very detailed, I hope U could enjoy this part!</li>
<li>Note: Difference between faultalloc.c and faultallocbad.c</li>
<ul>
<li>faultallocbad.c trigger user_mem_assert under kernel mode, so it can't print out.</li>
<li>faultalloc.c trigger 3 times page fault under user mode</li>
<ul>
<li>1 by deadbeef printing.</li>
<li>2 by cafebffe printing.(contains recursive page fault)</li>
</ul>
</ul>
</ul>
<li>Part C: Preemptive Multitasking and Inter-Process communication (IPC).</li>
<ul>
<li>Avoid one user process keep occupying CPU if it likes.</li>
<li>Enable timer interrupt as the Force in Jedi to make Process release CPU.</li>
<li>IPC here is applied in Blocking Send and Blocking Receive.</li>
<ul>
<li>It could be used as the basic lock mechanism, too.</li>
</ul>
<li>This part could be the Integration system test for lab 1~4, for interactions between kernel and users. :)</li>
<ul>
</ul>
</ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/blob/lab4/DevLog_Lab4/Assignment_Questionstxt" target="_blank">Some questions assignment after exercises.</a></li>
</ul>
<br />hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-7364012808806126192012-09-30T09:19:00.000-07:002012-09-30T09:19:07.767-07:00Engineer's interpersonal relation with colleague.<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-CxzMnS6_IcM/UGhwr-T1KaI/AAAAAAAADZs/5P_lBgLB-Vo/s1600/engingeer.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://4.bp.blogspot.com/-CxzMnS6_IcM/UGhwr-T1KaI/AAAAAAAADZs/5P_lBgLB-Vo/s400/engingeer.jpg" width="400" /></a></div>
<br />
This is the organized digest from "How to be star engineer" Article.<br />
<div>
<ul>
<li style="font-family: arial; font-size: small;">Don't just focus on self engineering technique. The most important thing is co-workers' recognition.</li>
<li style="font-family: arial; font-size: small;">The stars were not standout because of what they had in their heads but because of how they used what they had.</li>
<li style="font-family: arial; font-size: small;"> Stars are made, not born.</li>
</ul>
<span style="font-family: arial; font-size: x-small;">9 key points:</span><br />
<ol><span style="font-family: arial; font-size: x-small;">
<li>Blazing trails: </li>
<ul>
<li>only certain actions earn the initiative label. </li>
<ul>
<li>Seeking out responsibility above and beyond job description.</li>
<li>Undertaking extra efforts for the benefit of co-workers or the larger group.</li>
<li>Stepping willingly into the gaps between job descriptions where important jobs pop-up, affording it, and doing the good job for them</li>
<li>Sticking tenaciously to an idea or project and following it through to successful implementation.</li>
</ul>
</ul>
<li>Knowing who knows:</li>
<ul>
<li>Help the stars get unstuck for lake of knowledge is effective interpersonal networking.</li>
<li>Effective interpersonal networking.</li>
<ul>
<li>Right people in them.</li>
<li>They are fast to response.</li>
</ul>
<li>One to One and face to face communication is better to construct friendship.</li>
<li>Maintain self interpersonal networking within a group expert who share knowledge for mutual benefit.</li>
</ul>
<li>Proactive self-management </li>
<ul>
<li>Stars do much more than managing time and project to meet control. Stars proactively create opportunities, direct work choices</li>
<li>Despite the unsupportive manager, stars take every chance to enhance self value.</li>
<ul>
<li>Never give up.</li>
</ul>
</ul>
<li> Getting the big picture</li>
<ul>
<li>Solve self tunnel vision and jump out of the concrete viewpoint to world.</li>
<li>Stars' perspective grows out of getting enough experience to develop pattern recognition, expert's Intuition,</li>
<ul>
<li>iWoz: Engineer should keep the view in gray side.</li>
<li>Adopt variety of perspectives to evaluate relative importance.</li>
</ul>
<li>Help others solve problems</li>
<ul>
<li>Valuable exposure to problems she would not have faced in her own work.</li>
<li>Build variety of view. </li>
</ul>
<li>Know others' view.</li>
<ul>
<li>Learn to do different job, and co-work with different groups.</li>
</ul>
<li>Seek out the ability to smell nuances of perspective, and keep to cultivate its benefits.</li>
</ul>
<li>The right kind of followership</li>
<ul>
<li>Traditional follower: </li>
<ul>
<li>How to tone the line.</li>
<li>Take orders without question.</li>
<li>not threaten the leader</li>
</ul>
<li>Not only follow the leader's single trail, but also become the the other trail to help leader reach the goal.</li>
<ul>
<li>Find what to do.</li>
<li>Think how to do.</li>
<li>Independent and decisive judgement.</li>
<li>Predict the coming danger.</li>
<li>Question about leaders' correctness.</li>
</ul>
<li>The relation between Right and Wrong is not XOR.</li>
<ul>
<li>Engineer should live in the gray area, not only black and white.</li>
<li>Find the goal between leader and follower.</li>
</ul>
</ul>
<li>Teamwork as joint ownership of a project</li>
<ul>
<li>Co-work in star's view is a complex series of skills</li>
<ul>
<li>goal-setting.</li>
<li>group commitments.</li>
<li>work activities.</li>
<li>schedules.</li>
<li>share group accomplishments with team members.</li>
<li>help everyone feel part of the team.</li>
<li>deal with conflict.</li>
<li>assist others in solving problems.</li>
</ul>
</ul>
<li>Small-I leadership</li>
<ul>
<li>View leadership as a work strategy:</li>
<ul>
<li>Build expertise and influence to convince to unite with each other.</li>
<li>Need efforts:</li>
<ul>
<li>Help members build clear vision.</li>
<li>Work with high commitment and trust necessary to get the goal.</li>
<li>Finding the resource to get the goal.</li>
<li>Shepherding the project to successful completion.</li>
</ul>
<li>The talent small-l leadership needs</li>
<ul>
<li>Know everything about others</li>
<li>Know what's best for the followers and for the situation</li>
<ul>
<li>Needs</li>
<li>Skill</li>
<li>Desire</li>
<li>Privilege</li>
</ul>
</ul>
<li>Peers will go along only if they believe a member of the group who wants to lead is acting in their interest as much as his or her own</li>
<li>The most different with Big-Leader</li>
<ul>
<li>Refusal to assume they know everything about other people</li>
</ul>
<li>Behavior</li>
<ul>
<li>Asking first, even when they think they already kow.</li>
</ul>
<li>Of course, reality can't satisfied any employee.</li>
<ul>
<li>Wins a lot of influence and recognition by sincere offer to listen and meet partial needs.</li>
<li>Create the attitude: we're all-in-the-trenches-together.</li>
</ul>
</ul>
</ul>
<li>Street smarts</li>
<ul>
<li>Don't be evil!</li>
<li>Any large organization has legitimate competing interests.</li>
<li>Ability to mediate each other to get the goal.</li>
<ul>
<li>Expertise in managing individual or group dynamics.</li>
<li>When to avoid conflicts.</li>
<li>When to meet them head on.</li>
<li>How to make allies out of potential.</li>
</ul>
</ul>
<li>Show and tell</li>
<ul>
<li>Misunderstanding: Focus primarily on their image and their message, not on the audience.</li>
<li>Stars do: Know audience and shape message to them.</li>
<li>Prepare:</li>
<ul>
<li>To deliver a message to a targeted audience(figure out the Composition of them).</li>
<li>Persuade listeners to accept the message.</li>
<li>Be proactive in deflecting criticism.</li>
</ul>
</ul>
</span></ol>
<span style="font-family: arial; font-size: x-small;">
</span></div>
<div style="font-family: arial; font-size: small;">
<div>
<br /></div>
<div>
</div>
</div>
hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-66366359278297963092012-08-23T01:34:00.003-07:002012-08-23T01:37:02.773-07:00"Trap Return"'s esp to trap frame in xv6 and JOS這二個OS在返回時,有一個共同目標。即是把esp 指定在trapframe的地方。但二者的implementation方式,只差在一行。<br />
<div>
<br /></div>
<div>
xv6是利用stack push pop的相對位置,效率高,但需小心過程中esp的修改(但其實這部份在gcc/assembler 的x86 calling convention已經幫coder做掉了,由ebp 這個reg 保存了call instruction之前esp的值。</div>
<div>
<span style="color: red;"><b>pushl %esp</b></span></div>
<div>
call trap</div>
<div>
<b><span style="color: red;"> addl $4, %esp</span></b></div>
<div>
<br /></div>
<div>
JOS是在trap return執行前 灌給esp 其保存的trap frame 位置。優點是在中間的stack 操作, 可以放心盡量使用,只要沒有破壞原本的trap frame 資料基本完整性即可 。但差在效能上的多執行一個function call的動作。 </div>
<div>
<div>
void env_pop_tf (struct Trapframe *<b><span style="color: red;">tf</span></b>)</div>
<div>
{</div>
<div>
__asm __volatile (<b><span style="color: red;">"movl %0,%%esp\n"</span></b> "\tpopal\n" "\tpopl %%es\n" "\tpopl %%ds\n" "\taddl $0x8,%%esp\n" /* skip tf_trapno and tf_errcode */</div>
<div>
"\tiret":<span style="color: red;"><b>:"g" (tf)</b></span>:"memory");</div>
<div>
panic ("iret failed"); /* mostly to placate the compiler */</div>
<div>
}</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
同一目標,二種實踐。<br />
<div>
<br /></div>
</div>
hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-698175352173571422012-08-20T19:12:00.002-07:002015-12-06T09:50:54.758-07:00[TALK] Memory Allocation In Classic Monolithic Kernel and Classic Micro Kernel<div style="text-align: center;">
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/14024445" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" width="427"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="http://www.slideshare.net/hawxchen/memoryallocationunixminixcoscup2012-14024445" target="_blank" title="Memory_AllocationUNIX_MINIX-COSCUP2012">Memory_AllocationUNIX_MINIX-COSCUP2012</a> </strong> from <strong><a href="http://www.slideshare.net/hawxchen" target="_blank">Hawx Chen</a></strong></div>
</div>
<ul>
<li> I presented the topic "Memory Allocation in UNIX(classic monolithic kernel) and MINIX(classic micro kernel)" at <a href="http://coscup.org/2012/zh-tw/program/" target="_blank">Taiwan COSCUP2012 with 907 attendees-JuluOS Workshop</a>. I focus on memory allocation to show some differences between these 2 classic kernel.</li>
<li> Something through this presentation I want to convey sincerely is that </li>
<ol>
<li>History is the way to show wisdom about design. </li>
<li>Start to implement OS: Focus on the most important stuff you want, keep others to be as simple as possible.</li>
<li>Join us to discuss OS, design OS, and implement OS.</li>
</ol>
</ul>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-1biEhEVw7ns/VmRnFcWOwMI/AAAAAAAAD74/vr9Pz5xEIoA/s1600/Screen%2BShot%2B2015-12-07%2Bat%2B00.48.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="http://3.bp.blogspot.com/-1biEhEVw7ns/VmRnFcWOwMI/AAAAAAAAD74/vr9Pz5xEIoA/s400/Screen%2BShot%2B2015-12-07%2Bat%2B00.48.28.png" width="400" /></a></div>
<br />hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com1tag:blogger.com,1999:blog-4835661980007977971.post-49351404236119332882012-07-24T04:33:00.000-07:002013-04-27T21:28:42.826-07:00Lab3 User Environment<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-eM2wTkuG678/UA1tP8dWTcI/AAAAAAAADZI/Z6BMusV0oDs/s1600/UER.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="476" src="http://2.bp.blogspot.com/-eM2wTkuG678/UA1tP8dWTcI/AAAAAAAADZI/Z6BMusV0oDs/s640/UER.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div>
<a href="http://hawxchen.blogspot.com/2012/03/preface-hope-that-my-crude-remarks-may.html" target="_blank">[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People</a><br />
<u><a href="http://hawxchen.blogspot.com/2012/03/blog-post.html" target="_blank">[前言]拋磚引玉</a></u><br />
<ul>
<li>How to do the following lab3?</li>
<ul>
<li>Read following list:</li>
<ul>
<li>Lec4 JOS memory layout.</li>
<li>Lec5: Process Creation System call/Interrupt, and Exception Handling</li>
<li><strike>Hw5</strike> Hw4</li>
<li>Ch.9 of 80386 Programmer's Manual/Ch05 of the IA-32 Developer's Manual.</li>
<li>Lab3 assignment.</li>
</ul>
<li>Dig everything unknown more:</li>
<ul>
<li><a href="http://hawxchen.blogspot.tw/2012/06/ch5-debugging.html" target="_blank">Think about debugging!</a></li>
</ul>
</ul>
<li>Basic setup:</li>
<ul>
<li>IDT.</li>
<ul>
<li>Breakpoint exception.</li>
<li>System call exception.</li>
<li>Other exceptions.</li>
</ul>
<li>Allocate the memory space for Env structure.</li>
<ul>
<li>Be cared about address mapping.</li>
<li>Link each element in the right order.</li>
</ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/99fcb0db7a01b6ca66085f56b75b9eebd481bc00" target="_blank">Exercise 1 & 2 is done</a></li>
</ul>
<li>More setup </li>
<ul>
<li>Make programs run.</li>
<ul>
<li>Setup the env's virtual memory mapping</li>
<ul>
<li>Map only user level's need address mapping from kern_pgdir.</li>
<li>Load ELF file.</li>
<li>Stack.</li>
<li>Entry address.</li>
<li>Set the env's fields well</li>
<ul>
<li>env_status/env_type...etc</li>
</ul>
</ul>
<li>Let user programs be capable of trapping into kernel.</li>
<ul>
<li>Push the needed variable/registers into kernel stack!</li>
<li>Default error handling: Not supported exceptions.</li>
</ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/085bbb3cfc4fc46809751c8b7f30cc2e88f00d30" target="_blank">Get PartA's grade.</a></li>
</ul>
<li>Setup exception handlers:</li>
<ul>
<li>Trap entries to support user's functionality.</li>
<ul>
<li>page_fault_handler.</li>
<li>breakpoint handler.</li>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/aed4ce6a04b4db0dcd0145234c0c16768af4a963" target="_blank">Pass exercise 5&6</a></li>
</ul>
<li>system call setup</li>
<ul>
<li>Handle 0x30 IDT entry.</li>
<ul>
<li>Organize the trap frame..</li>
<li>Push the right esp as the trap call's input parameter(trap frame address).</li>
</ul>
<li>Dispatch the eax (syscall num) to the corresponding handler.</li>
<ul>
<li>Extract parameters in the right slot.</li>
<li>Return value.</li>
</ul>
<li>User level's this env assignment.</li>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/c7bf24f65c6c551142c5a035da0e7b9ee4d09bac" target="_blank">Pass exercise 7&8</a></li>
<ul>
<li>kdebug.c not yet.</li>
</ul>
</ul>
<li>Protections</li>
<ul>
<li>user_mem_check</li>
<ul>
<li> permission.</li>
<li>legal contiguous memory coverage.</li>
</ul>
<li>evilhello: address' permission setup must be right.</li>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/9c8621cbb7520a2ed53deb0d887e4716ed6dd045" target="_blank">Pass All</a></li>
</ul>
</ul>
</ul>
<li>Challenge implementation: fast system call</li>
<ul>
<li>Read carefully about sysenter/sysexit/wrmsr/rdmsr in Intel manual.</li>
<li>Setup the following slot in the right vale.</li>
<ul>
<li>MSR_IA32_SYSTEM_CS.</li>
<ul>
<li>GDT must own the right order between ring0/ring3's cs ss</li>
<ul>
<li>ring0:CS</li>
<li>ring0:SS</li>
<li>ring3:CS</li>
<li>ring3:SS</li>
</ul>
</ul>
<li>MSR_IA32_SYSTEM_EIP.</li>
<li>MSR_IA32_SYSTEM_ESP</li>
</ul>
<li>library wrapper</li>
<ul>
<li>Assign the right value into regs.</li>
<ul>
<li>ebp(stack pointer used by sysenter).</li>
<li>esi (intruction pointer used by sysenter).</li>
<li>place arguments into the right registers.</li>
</ul>
<li>Be careful about push/restore clobber registers.</li>
</ul>
<li>Trap entry's handler</li>
<ul>
<li>Before calling system call function.</li>
<ul>
<li>push the needed vars into stack to organize the Trapframe.</li>
<li>push the organize trapframe pointer into stack</li>
</ul>
<li>After calling system call function.</li>
<ul>
<li>Assign the right value into regs.</li>
<ul>
<li>edx(stack pointer used by sysenter).</li>
<li>ecx (intruction pointer used by sysenter).</li>
</ul>
<li>Retroe the needed regs</li>
</ul>
</ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/6688e2e99c923843e9344c46d9f4175a9efa9f59" target="_blank">Finish Fast Syscall Challenge</a></li>
</ul>
</ul>
</div>
<br />
<br />
<ol><br class="Apple-interchange-newline" /></ol>
hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-45632790390172146402012-06-03T10:03:00.000-07:002012-06-03T10:03:28.175-07:00Ch.5 Debugging<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-4mR9m6InWbg/T8mZTffRB1I/AAAAAAAADYw/9FcgQqNj0NQ/s1600/bug-found.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="452" src="http://2.bp.blogspot.com/-4mR9m6InWbg/T8mZTffRB1I/AAAAAAAADYw/9FcgQqNj0NQ/s640/bug-found.jpg" width="640" /></a></div>
<div>
<br /></div>
<ul>
<li>A lot of ways to improve design and development, but none of them could eliminate all bugs.</li>
<ul>
<li>Reduce connection and interaction between software components</li>
<ul>
<li>Information hiding</li>
<li>Abstraction</li>
<li>Interfaces</li>
<li>Language features to support above items</li>
</ul>
<li>Integrity of a software design</li>
<ul>
<li>Program proofs</li>
<li>Modeling</li>
<li>Requirement analysis</li>
<li>formal verification</li>
</ul>
</ul>
<li>Techniques to reduce debugging time</li>
<ul>
<li>Good design</li>
<li>Good style</li>
<li>Boundary condition tests,</li>
<li>Assertions and sanity checks in the code</li>
<li>Defensive programming</li>
<li>Well-designed interfaces</li>
<li>Limited global data</li>
<li>Checking Tools</li>
</ul>
<li>Debuggers</li>
<ul>
<li>Debugger are system dependent</li>
<li>Programs are not well handled by debuggers, just by lower level approaches.</li>
<ul>
<li>Multi-process/multi-thread programs</li>
<li>Operating systems</li>
<li>Distributed systems</li>
</ul>
<li>Bug killer is always coders, not the debuggers!</li>
<ul>
<li>Coders must own the blue graph in mind to find bugs.</li>
<li><b><span style="color: #e69138;">Blind probing with a debugger shouldn't be productive.</span></b></li>
<ul>
<li><b><span style="color: #e69138;">Stepping through a program is less productive than thinking harder and adding output statements and self-checking code at critical places.</span></b></li>
</ul>
</ul>
</ul>
<li>What's the lower level approach</li>
<ul>
<li>Just print them!</li>
<li>Binary search</li>
<ul>
<li>Data</li>
<li>Code</li>
</ul>
</ul>
<ul><ul>
</ul>
</ul>
<li>Debugging experience</li>
<ul>
<li>Good clues, easy bugs</li>
<ul>
<li>Look for familiar patterns</li>
<ul>
<li>Common bugs have distinctive signatures</li>
<li>Example: Fail to initialize local varable</li>
<ul>
<li>declaration</li>
<li>malloc/realloc</li>
</ul>
</ul>
<li>Examine the most recent change</li>
<ul>
<li>Version control system is powerful here.</li>
</ul>
<li>Don't make the same mistake twice</li>
<ul>
<li>If it occurs, then it might have the same one somewhere else.</li>
</ul>
<li>Debug it now, not later</li>
<ul>
<li>As I was both the task leader and the RD, in the other words, I had to be responsible for tracking other's bugs/development progress, fixing my bugs, and keeping to write my modules. It had the blind spot that I couldn't distinguish priority clearly between bugs' severity level and development progress, deadline. I judged some un-crashed issue and weird behavior to be low priority. Sad!<b> <span style="color: #e69138;">In the day of released version population, we were more painful to fix them.</span></b> It was the terrible experience.</li>
<ul>
<li>If I am just the developer, I will focus on fixing all bugs</li>
<li>If I am just the manager, I put the deadline in higher priority.</li>
<li>If I am both of them, I need much more experience to find the balance or the experienced advisor.</li>
</ul>
<li>If you can't do it now, just list them on schedule in the most obvious place!</li>
</ul>
<li>Get a stack trace</li>
<ul>
<li>The trail of function call</li>
<li>Arguments</li>
<li>Line numbers</li>
</ul>
<li>Read before typing</li>
<ul>
<li>What you see in the source code is what you meant rather than what you wrote!</li>
<ul>
<li>Take a break to jump out of the mental barrier</li>
</ul>
<li>Resist the urge to start typing: thinking is a worthwhile alternative</li>
</ul>
<li>Explain your code to someone else or puppet</li>
<ul>
<li>Reorganize thought.</li>
</ul>
</ul>
<li>No clues, hard bugs</li>
<ul>
<li>Make the bug reproducible</li>
<ul>
<li>Decrease the time spent waiting for bug happened, then find it faster</li>
<ul>
<li>Make the bug appeared on demand!</li>
</ul>
</ul>
<li>Divide and conquer</li>
<ul>
<li>Narrow down the possibilities by creating the smallest input where bug still show up</li>
<li>Proceed by binary search</li>
<ul>
<li>Code</li>
<li>Data</li>
</ul>
</ul>
<li>Study the numerology of failures</li>
<ul>
<li>Failing examples give us the clue and point out the track to find bugs.</li>
</ul>
<li>Display output to localize your search</li>
<ul>
<li>Each message should be distinct so you can tell which one you are looking at.</li>
<li>Easy to use the message with other tools: like grep, string parser. compression tool.</li>
<li>Two pointer has the same value, or they are the same pointer?</li>
<ul>
<li>%x, %p.</li>
</ul>
</ul>
<li>Write self-checking code</li>
<ul>
<li>Check function</li>
<ul>
<li>test conditions.</li>
<li>dump relevant variables, data structures.</li>
<li>abort the program.</li>
</ul>
<li>Not only for debugging, leave check function during all stages of development.</li>
</ul>
<li>Write a log file</li>
<ul>
<li>Fixed format stream to the debugging output.</li>
<li>I/O to files: setbuf/setvbuf</li>
<ul>
<li>Buffer</li>
<ul>
<li>flush</li>
<li>When crashed...</li>
<ul>
<li>core dump</li>
<li>final flush!</li>
</ul>
</ul>
<li>Unbuffer</li>
<ul>
<li>overhead </li>
</ul>
</ul>
</ul>
<li>Draw a picture</li>
<ul>
<li>Figure out programs deeply by annotating the data structures with statistics and plotting it!</li>
</ul>
<li>Use tools</li>
<ul>
<li>Learn them in anytime and anywhere if needed!</li>
<ul>
<li>Investment!</li>
</ul>
</ul>
<li>Keep records</li>
<ul>
<li>When bug occurred, record them!</li>
<ul>
<li>root cause.</li>
<li>where to be changed</li>
<li>related issues</li>
<li>Commit CL</li>
</ul>
<li>One of the sources of test cases. </li>
</ul>
</ul>
</ul>
<li>Non-reproducible bugs</li>
<ul>
<li>Write outside of memory</li>
<li>All vars initialized</li>
<li>Double free</li>
<ul>
<li>Compiler support option to assert immediately!</li>
</ul>
<li>Work fine on my side, but fail on another side!</li>
<ul>
<li>Environment!</li>
</ul>
</ul>
<li>Other people's bugs</li>
<ul>
<li>Organize the program, and original parameters in and out!</li>
<ul>
<li>Debugger could point out it!</li>
</ul>
<li>Check the frequent changed section!</li>
<li>Point out other's bug?</li>
<ul>
<li>Kindly discussion</li>
<li>Risk of credit and time!</li>
</ul>
<li>Make sure the bug is new!</li>
<li>Platform bugs</li>
<ul>
<li>Try tests on multiple systems and check platform/compiler definition</li>
<ul>
<li>ex: shift operation filled with zero bits or sign bits?</li>
</ul>
</ul>
<li>Report them in nice format!</li>
<ul>
<li>The best sample: The ones that need only a line or two of input on a plain vanilla system to demonstrate the fault, and includes the fix.</li>
</ul>
</ul>
<li>Summary</li>
<ul>
<li>Classes of bugs</li>
<ul>
<li>Good clues, easy bugs</li>
<li>No clues, hard bugs</li>
<li>Non-reproducible bugs</li>
<li>Other people's bugs</li>
</ul>
<li>Steps</li>
<ul>
<li>Look for familiar patterns</li>
<li>Examine the most recent change</li>
<li>Don't make the same mistake twice</li>
<li>Debug it now, not later</li>
<li>Get a stack trace</li>
<li>Read before typing</li>
<li>Explain your code to someone else or puppet</li>
<li>Make the bug reproducible</li>
<li>Divide and conquer</li>
<li>Study the numerology of failures</li>
<li>Display output to localize your search</li>
<li>Write self-checking code</li>
<li>Write a log file</li>
<li>Draw a picture</li>
<li>Use tools</li>
<li>Keep records</li>
</ul>
<li>Make myself to fix bugs much more effectively in the next time.</li>
</ul>
<ul>
</ul>
<ul>
</ul>
</ul>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-11139353389308942722012-04-29T09:54:00.003-07:002013-04-27T21:28:44.757-07:00Lab2 Memory Management<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-C0KcCFm6eMg/T518WJ0TenI/AAAAAAAADSY/GIcWR8VWI2U/s1600/BrainDRAM.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-C0KcCFm6eMg/T518WJ0TenI/AAAAAAAADSY/GIcWR8VWI2U/s1600/BrainDRAM.jpg" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://hawxchen.blogspot.com/2012/03/preface-hope-that-my-crude-remarks-may.html" target="_blank">[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People</a></div>
<div>
<u><a href="http://hawxchen.blogspot.com/2012/03/blog-post.html" target="_blank">[前言]拋磚引玉</a></u></div>
<br />
<ul>
<li><i><u><b>Outline:</b></u></i></li>
<ul>
<li>Lab2 has 3 parts:</li>
</ul>
<ol><ol>
<li>Physical page allocator.</li>
<li>Virtual page management.</li>
<li>Kernel page mapping installation.</li>
</ol>
</ol>
<li><b><i><u>Preparation:</u></i></b></li>
<ul>
<li>Intel 80386 reference manual: Chap5, Chap6.</li>
<li>xv6: Chap 1.</li>
<li>JOS: test cases code: check_*()</li>
<li>Understand xv6 how to create temporary memory management to touch memory after 1MB.</li>
<li><b style="color: #cc0000;">Build the map about Segment and Page translation on x86 in mind.</b></li>
</ul>
<li><i><u><b>Part 1</b>: Physical page allocator</u></i></li>
<ul>
<li>boot_alloc():</li>
<ul>
<li>Divide physical memory into each 4KB pages.</li>
<li>It should account for booting memory overhead from NVRAM's status until now. </li>
<ul>
<li>kernel image.</li>
<li>allocation data structure.</li>
</ul>
</ul>
<li>mem_init():</li>
<ul>
<li>Here, just allocate the kernel page directory and set its attributes.</li>
</ul>
<li>physical page allocation</li>
<ul>
<li>page_init():</li>
<ul>
<li>Calculate the free list.</li>
<li>Set up data structure.</li>
<li>Don't touch the reserved memory! But the reserve memory should be accounted.</li>
</ul>
<li>page_alloc():</li>
<ul>
<li>Just allocate one physical page.</li>
<li>ALLOC_ZERO handling.</li>
</ul>
<li>page_free:</li>
<ul>
<li>Just free one physical page.</li>
</ul>
</ul>
<li>Read code carefully to sync the thought between Judge code and lab code</li>
<ul>
<li>check_page_free_list()</li>
<li>check_page_alloc()</li>
</ul>
<li>GitHub Link</li>
<ul>
<li><span style="font-size: large;"><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/72f07e4544d5aa4f7acc9960754b07fc5e5405a2" target="_blank"> Physical page allocator.</a></span></li>
</ul>
</ul>
<li><i><u><b>Part 2</b>: Virtual page management.</u></i></li>
<ul>
<li>pgdir_walk()</li>
<ul>
<li>Ask yourself: If i am a x86 cpu, how could I find the corresponding page?</li>
<li>If the new pte doesn't belong to any page table, then just allocate the new page table.</li>
<li>Return virtual address of PTE slot!</li>
<li>Consult the xv6 code.</li>
</ul>
<li>virtual page allocation</li>
<ul>
<li>page_insert()
</li>
<ul>
<li>Use pgdir_walk to find corresponding pte.</li>
<li>One physical page to map N virtual pages</li>
<ul>
<li>pp->ref is N.</li>
</ul>
<li>Remember permission assignment.</li>
<li>Return page table entry.</li>
</ul>
<li>page_remove()</li>
<ul>
<li>Decrease the count. </li>
<ul>
<li>Be zero, then free the physical page by page_free.</li>
</ul>
<li>Clear the pte!</li>
</ul>
<li>page_lookup()</li>
<ul>
<li>Return the corresponding virtual page's page structure.</li>
<ul>
<li>by pgdir_walk and pa2page.</li>
</ul>
</ul>
</ul>
<li>Read code carefully to sync the thought between Judge code and lab code</li>
<ul>
<li>check_page()</li>
</ul>
<ul><ul><ul>
</ul>
</ul>
</ul>
<li>GitHub Link:</li>
<ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/7618542ca2cffc27217d4b3aeb5d125f44a982fb" target="_blank"><span style="font-size: large;">check_page success</span></a></li>
</ul>
</ul>
<li><i><u><i><u><b>Part 3</b>: kernel page mapping and installation.</u></i></u></i></li>
<ul>
<li>boot_map_region()</li>
<ul>
<li>Map the memory block into pages.</li>
</ul>
<li>some extern symbols are already the virtual address in C language!</li>
<ul>
<li>PADDR usage.</li>
<li>bootstack ,bootstacktop</li>
<ul>
<li>Naming like virtual address, but it is extren variable in C to be Virtual address.</li>
</ul>
</ul>
<li>Read code carefully to sync the thought between Judge code and lab code
</li>
<ul>
<li>check_kern_pgdir()</li>
<li>check_page_installed_pgdir()</li>
<ul>
</ul>
</ul>
<li>GitHub Link:
</li>
<ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/3534850239844162982d8dfd3107509f00b9bf0a" target="_blank"><span style="font-size: large;">pass all</span></a></li>
</ul>
</ul>
<li><i><u><b>Discussion</b>:</u></i> </li>
<ul>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">If __ALL_COUNT__ defined</span></span></li>
<ul>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">When each PTE referenced, then It increases corresponding page table/directory's count.</span></span></li>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">Sample: __ALL_COUNT__ defined</span></span></li>
<ul>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page_table 3</span></span></li>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page 1 1</span></span></li>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page 2 1</span></span></li>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page 3 1</span></span></li>
</ul>
<li><span style="font-family: Arial, Verdana, sans-serif; font-size: x-small;"><span style="line-height: 21px;">Sample </span></span>
<span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small; line-height: 18px;">__ALL_COUNT__ not defined</span><ul>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page_table 1</span></span></li>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page 1 1</span></span></li>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page 2 1</span></span></li>
<li><span style="font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: x-small;"><span style="line-height: 18px;">page 3 1</span></span></li>
</ul>
</li>
</ul>
<li>GitHub Link</li>
<ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/8a34a565f0b27dd5b81b850facfe7d2a919a6efc" target="_blank"><span style="font-size: large;"> __ALL_COUNT__ compile option</span></a></li>
</ul>
</ul>
</ul>
<br />hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-76255327595412573912012-03-18T10:03:00.000-07:002012-03-18T10:17:03.845-07:00[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-I7nEle4jVBU/T2YSanArZLI/AAAAAAAADJ4/smE8LQjDmB4/s1600/Road.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="474" src="http://1.bp.blogspot.com/-I7nEle4jVBU/T2YSanArZLI/AAAAAAAADJ4/smE8LQjDmB4/s640/Road.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
By these articles and courses, I want to have much more discussion and make much more friends.<br />
Share passion and fun about OS between you and me.<br />
<br />
Dear Friends:<br />
Hello. Each MIT 6.828 article is my transcripts about problem solving and some other interesting questions, <b><span style="font-size: large;">After Lesson</span></b>. Under the pressure of time and work, some questions have been answered by me, some not. This place is open for all masters and enthusiasts. Any questions or issues about OS and related domains are welcomed. Welcome!.<br />
<br />
<b>Hope that we can share delight of the journey.</b>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-91670611198868605062012-03-18T06:30:00.002-07:002012-03-18T19:42:45.875-07:00Indent - My Coding Style<span style="font-family: Tahoma;">Coding Style不統一,是在跟人寫code中最大的不耐之一。</span><br />
<span style="font-family: Tahoma;">相對於使用文件說什麼哪邊有空白,哪邊要換行的,模模糊糊,令人無所適從。</span><br />
<span style="font-family: Tahoma;">不是不排,是不知從何排起,用人腦去記每個細項也很難做的100%對。</span><br />
<span style="font-family: Tahoma;"><br /></span><br />
<span style="font-family: Tahoma;">套一句 Knuth的名言</span><br />
<span style="font-family: Tahoma;"><b>"<span style="color: #f1c232;">A person does not really understand something until after teaching it to a computer</span>"</b></span><br />
<span style="font-family: Tahoma;">在下就把自已習慣的coding style 極大部份是採用GNU的風格。</span><br />
<span style="font-family: Tahoma;">用indent 去令電腦懂 我要排什麼樣的style,協作的一方 也清楚多了。</span><br />
<span style="font-family: Tahoma;">也真的不習慣用已套裝好的指令 還不知道各參數是什麼意思…。</span><br />
<span style="font-family: Tahoma;">因此就查個明明白白。</span><span style="font-family: Tahoma;">列在下面,也有一些對indent各參數的說明。</span><br />
<span style="font-family: Tahoma;"><br /></span><br />
<span style="font-family: Tahoma;">也可以看看Berkerly/K&R...etc的風格</span><br />
<span style="font-family: Tahoma;">#man indent</span><br />
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"><br /></span><br />
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"><u>目前的Macro還不知道怎麼做Indent,若有用Macro寫多行expression的情況下,還是各自為政…</u></span><br />
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"><u><br /></u></span><br />
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">My C coding style based on the GNU style.</span><br />
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"> indent -nbad -bap -nbc -bbo -bl -bli0 -bls -ncdb -ncdw </span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"> -nce -cp1 -cs -di1 -ndj -nfc1 -nfca -hnl -i4 -ip5 </span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"> -lp -pcs -nprs -psl -saf -sai -saw -nsc -nsob -blf</span><br />
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"> -nut -ts4</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nbad: 宣告變數後無空行</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-bap: 強迫在function body前必有空行</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nbc: each comma(逗行)前必換行</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-bbo: 強迫在&& ||前換行</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-bl: braces-{ 需在if(...)換到下一行</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-blin: { 需在if(...) 換行時,縮入多少空白</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-bls: 於struct name及{ 置入newline</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-blf: 需在function def及{置入newline</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-ncdb: Don't put comment delimeters on the blank line</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-ncdw: do{...} while 其} while 之間會置入newline</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nce: } 及 else間會置入newline</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-cp1: Put comments to the right of #else and #endif statements in column n</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-cs: 於Type cast opertator及變數間會有空白</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-di1: 於declaration時的type 及 Identitier中間會有1個空白(換行時亦會有1空白)</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-ndj: 對declarations 後的comments 等同於其他位於statements後的comment</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nfc1:勿對第一行的comment做格式化</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nfca:勿對comment做格式化 </span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-hnl: prefer use the input file to break the long line</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-i4: indentation level to n spaces.</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-ip5: for old coding style其引數宣告需內縮5格</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-lp: 若(...)有斷行 則 對齊 left parenthesis</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-pcs: 在function name被call時,其name及 ( 之間不會有空白</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nprs: 於parentheses(括號)後無空白</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;"><span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;">-psl: 令procedure的type 及 name 為上下行</span></span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-saf: 令for及括號間有一個空白</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-sai: </span>令if及括號間有一個空白</div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-saw: </span>令while及括號間有一個空白 </div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nsc: Do not put the '*' character at the left of comments</span></div>
<div>
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nsob: Do'nt swallow optional blank lines</span><br />
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-nut: no tab</span><br />
<span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Tahoma;">-ts4: 1 tab 為4spaces</span></div>
<div>
<br /></div>
<div>
<br /></div>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-81892235540717385252012-03-17T22:18:00.001-07:002012-07-23T08:38:59.948-07:00Lab1-Part C-2/2: The Kernel (Stack)<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-QqAM2MdmLx8/T2Vv9a-S1gI/AAAAAAAADJg/cIyo7EZHtEI/s1600/m31_gendler_Nmosaic1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="464" src="http://4.bp.blogspot.com/-QqAM2MdmLx8/T2Vv9a-S1gI/AAAAAAAADJg/cIyo7EZHtEI/s640/m31_gendler_Nmosaic1.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://hawxchen.blogspot.com/2012/03/preface-hope-that-my-crude-remarks-may.html" target="_blank">[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People</a></div>
<div>
<u><a href="http://hawxchen.blogspot.com/2012/03/blog-post.html" target="_blank">[前言]拋磚引玉</a></u><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u>Exercise9</u></b>:</span></i><br />
<ul>
<li> Something needed to know</li>
<ul>
<li>Understand how did kernel perform its stack creation. </li>
</ul>
<li>Discussion:</li>
<ol>
<li>Determine where the kernel initializes its stack</li>
<ul>
<li>At kern/entry.S</li>
</ul>
<ol><ul>
<li># Set the stack pointer</li>
<li>movl $(bootstacktop),%esp</li>
<li>f0100034: bc 00 00 11 f0 mov $0xf0110000,%esp</li>
</ul>
</ol>
<li>Where in memory its stack is located</li>
<ul>
<li>as above: 0xf0110000</li>
</ul>
<li>How does the kernel reserve space for its stack</li>
<ul>
<li>.space KSTKSIZE</li>
</ul>
<ol><ul>
<li>8*4096 bytes = 8192 stack frames each 4 bytes</li>
</ul>
</ol>
<li>At which "end" of this reserved area is the stack pointer initialized to point to?</li>
<ul>
<li>bootstack</li>
</ul>
<li>push data from bootstacktop to bootstack (each one put is -4)</li>
</ol>
</ul>
#</div>
<div>
<br /></div>
<div>
<i><span style="font-size: large;"><b><u>Exercise10</u></b>:</span></i></div>
<div>
<ul>
<li>Something needed to know</li>
<ul>
<li>To be familiar with x86 calling convention.</li>
<ul>
<li>Each EBP pused into stack</li>
<ul>
<li>the base pointer into the stack used by that function: </li>
</ul>
<li>Each EIP pushed into stack</li>
<ul>
<li>return instruction. : the instruction address to which control will return when the function returns.</li>
</ul>
</ul>
<li>Set breakpoint at test_backtrace </li>
<ol>
<li>Examine what happens each time it gets called after the kernel starts</li>
<li>How many 32-bit words does each recursive nesting level of test_backtrace push on the stack what are those words?</li>
<ul>
<li>EIP/ARGS/EBP</li>
<li>registers waited to be used</li>
<ul>
<li>push its value in, before return, just pop out them.</li>
</ul>
</ul>
</ol>
</ul>
<li> Recursive Calling Stack</li>
<ul>
<li>stack as linked list array</li>
<ul>
<li>From current EIP</li>
<li>Old EIPs by finding EBP+4 pushed by gcc calling convention </li>
</ul>
<li>PIC</li>
</ul>
<li>Question</li>
<ul>
<li>read_eip</li>
<ul>
<li>Doesn't work if inlined</li>
<li>Putting at the end of the file seems to prevent inlining.</li>
</ul>
</ul>
</ul>
#</div>
<div>
<br /></div>
<div>
<i><span style="font-size: large;"><b><u>Exercise11</u></b>:</span></i>
<br />
<br />
<ul>
<li>Something needed to know</li>
<ul>
<li>Based on Exercise10</li>
<li>Pointer usage</li>
<ul>
<li>int*p</li>
<ul>
<li>(int)p + 1 - 1base</li>
<li>(int)(p + 1) - 4base</li>
</ul>
</ul>
</ul>
<li>GitHub Link</li>
<ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/d0a256a0d9d3325c58d632afb3789403b61cc69f" target="_blank"><b>My Code</b></a>.</li>
</ul>
</ul>
#</div>
<div>
<i><span style="font-size: large;"><b><u>Exercise12</u></b>:</span></i></div>
<div>
<ul>
<li>Something needed to know</li>
<ul>
<li>Based on Exercise11</li>
<li>printf(%.*) usage</li>
<li>Stab format</li>
<li> Trace kern/kdebug.c</li>
</ul>
<li>GitHub Link:</li>
<ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/d0a256a0d9d3325c58d632afb3789403b61cc69f" target="_blank"><b>My Code</b>.</a></li>
</ul>
</ul>
<br />
#</div>
<div>
<br /></div>
<div>
<span style="font-size: large;"><b><i>Enjoy OS travel </i>:)</b></span><br />
<span style="font-size: large;"><b>#</b></span></div>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-62020614710938784982012-03-17T22:11:00.000-07:002012-07-23T08:40:20.285-07:00Lab1-Part C -1/2: The Kernel (Taste of MM/Output)<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-QqAM2MdmLx8/T2Vv9a-S1gI/AAAAAAAADJg/cIyo7EZHtEI/s1600/m31_gendler_Nmosaic1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="464" src="http://4.bp.blogspot.com/-QqAM2MdmLx8/T2Vv9a-S1gI/AAAAAAAADJg/cIyo7EZHtEI/s640/m31_gendler_Nmosaic1.jpg" width="640" /></a></div>
<br />
<br />
<div>
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<a href="http://hawxchen.blogspot.com/2012/03/preface-hope-that-my-crude-remarks-may.html" target="_blank">[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People</a><br />
<u><a href="http://hawxchen.blogspot.com/2012/03/blog-post.html" target="_blank">[前言]拋磚引玉</a></u><br />
<i><span style="font-size: large;"><b><u><br /></u></b></span></i><br />
<i><span style="font-size: large;"><b><u>Exercise7</u></b>:</span></i><br />
<div>
<ul>
<li>Something needed to know.</li>
<ul>
<li>Examine before and after Paging Enable.</li>
</ul>
<ol><ol>
<li>brack at <i> movl %eas,%cr0</i> to check 0x00100000/0xf0100000</li>
<ul>
<li>x/20h 0x100000<br />0x100000: 0xb002 0x1bad 0x0000 0x0000 0x4ffe 0xe452 0xc766 0x72050<br />x100010: 0x0004 0x3400 0xb812 0x0000 0x0011 0x220f 0x0fd8 0xc020<br />0x100020: 0x010d 0x0100 0x0f80 0xc022</li>
<li>x/20h 0xf0100000<br />0xf0100000: 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff<br />0xf0100010: 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff<br />0xf0100020: 0xffff 0xffff 0xffff 0xffff</li>
</ul>
<li>si then check again.<br /><ul>
<li>x/20h 0x100000<br />0x100000: 0xb002 0x1bad 0x0000 0x0000 0x4ffe 0xe452 0xc766 0x7205<br />0x100010: 0x0004 0x3400 0xb812 0x0000 0x0011 0x220f 0x0fd8 0xc020<br />0x100020: 0x010d 0x0100 0x0f80 0xc022</li>
<li>x/20h 0xf0100000<br />0x100000: 0xb002 0x1bad 0x0000 0x0000 0x4ffe 0xe452 0xc766 0x7205<br />0x100010: 0x0004 0x3400 0xb812 0x0000 0x0011 0x220f 0x0fd8 0xc020<br />0x100020: 0x010d 0x0100 0x0f80 0xc022 </li>
</ul>
</li>
<li>They are mapped.</li>
</ol>
</ol>
<ul>
<li>Geuss where would be happaned, if mapping weren't in place by commenting out <i>movl %eas,%cr0</i>.</li>
<ul>
<li>mov $relocated, %eax<br />jmp *%eax #<---Here</li>
<li>Why?</li>
<ol>
<li>$relocate is addressed as 0xf0100025(by VMA:0xf0100000), but commenting out the line,enabling protected mode. It resulted in mapping failed.</li>
<ul>
<li>No protected mode no mapping from 0xf010000c to 0x10000c(phy address) at view of entry address.</li>
</ul>
<li>By the way, above code could be executed because the bootloader directly move/copy/jmp <b>in real address</b>. (know details by the following discussion)</li>
</ol>
</ul>
</ul>
<li>Discussion:</li>
<ul>
<li>How did kernel execute its start address at 0x10000c?</li>
<ol>
<li>BIOS read disk's #0 sector(boot sector) and load them into ram:0x7C00 to execute</li>
<li>bootload read disk's #1 sector and load them into ram:0x100000 to execute</li>
<ul>
<li>dd command put kernel into #1 sector.</li>
</ul>
<li>bootloader jump to kernel's start entry address by ((void (*)(void)) (ELFHDR->e_entry))();</li>
</ol>
</ul>
<li><b>After Lesson</b>:<ul>
<li>What did kernel.asm do from 0x100000 to 0x10000c</li>
<ul>
<li>.globl entry</li>
<li>entry:</li>
<li> movw $0x1234,0x472 # warm boot f0100000: 02 b0 ad 1b 00 00 add 0x1bad(%eax),%dh</li>
<li>f0100006: 00 00 add %al,(%eax)</li>
<li>f0100008: fe 4f 52 decb 0x52(%edi) f010000b: e4 66 in $0x66,%al</li>
<li>f010000c <entry>:</li>
</ul>
</ul>
</li>
</ul>
<ul></ul>
</div>
<blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;">
<div>
<div>
#</div>
</div>
</blockquote>
<div>
<div>
<br /></div>
<div>
<i><span style="font-size: large;"><b><u>Exercise8</u></b>:</span></i></div>
<div>
<ul>
<li>Something needed to kow</li>
<ul>
<li>Trace code to understand the following code's relateionship.</li>
<ul>
<li>kern/printf.c</li>
<ul>
<li>kernel internal API function </li>
</ul>
<li>lib/printfmt.c</li>
<ul>
<li>Utility to format output used by Kernel/User mode</li>
</ul>
<li>kern/console.c</li>
<ul>
<li>Driver</li>
</ul>
</ul>
<li>Accomplish to print "%o" for octal.</li>
<ul>
<li>209 num = getuint(&ap, lflag);</li>
<li>210 base = 8;</li>
<li>211 goto number;</li>
</ul>
</ul>
<li>Discussion:</li>
<ol>
<li>Interface between console.c and printf.c</li>
<ul>
<li>Exported by inc/stdio.h</li>
<ul>
<li>cputchar by printf.c</li>
<li>getchar;by readline.c</li>
<li>iscons ;by readline.c</li>
</ul>
<li>Exported by inc/console.h</li>
<ul>
<li>cons_init; by init.c</li>
<li>cons_getc;</li>
<li>kbd_intr</li>
<li>serial_intr</li>
</ul>
</ul>
<li> Roll up One Empty line.</li>
<li>check arguments</li>
<ul>
<li>cprintf</li>
<ul>
<li>fmt=0xf0101a69 "x:%d,y:%d,z:%d\n"</li>
<li>ap=0xf010ffe4 ("\001")</li>
<li> x/4w 0xf010ffe0<br />0xf010ffe0: 0xf0101a69 0x00000001 0x00000003 0x00000004</li>
<li>push order: arg4(0x0000004) arg3 arg2 arg1(0xf0101a69)</li>
<ul>
<li>pop order is the reverse.</li>
</ul>
</ul>
<li>cons_putc/va_arg/vcprintf</li>
<ol>
<li>order: vcprintf->va_arg->cons_putc</li>
<li>vcprintf:<ul>
<li>fmt=0xf0101a69 "x:%d,y:%d,z:%d\n"</li>
<li>ap=0xf010ffe4 ("\001"</li>
</ul>
</li>
<li>va_arg:</li>
<ul>
<li>the next stack address to print</li>
</ul>
<li>cons_putc: </li>
<ul>
<li>the int type variable to be printed on Screen.</li>
</ul>
</ol>
</ul>
<li> type translation and ASCII table</li>
<ul>
<li>Output "He110 World"</li>
<li>57616 (Decimal) = E110 (Hex)</li>
<li>0x00646c72 </li>
<ul>
<li>0x72 :'r'</li>
<li>0x6c :'l'</li>
<li>0x64 :'d'</li>
<li>0x00 :'\0'</li>
</ul>
<li>Note: little endian printed.</li>
</ul>
<li> cprintf("x=%d y=%d",3)</li>
<ul>
<li> y=%d in va_arg, it gets the next stack frame's value.</li>
</ul>
<li>reverse order.</li>
<ul><ol></ol>
</ul>
</ol>
<li>After Lesson:</li>
<ul>
<li>Why is printfmt.c located in the separate lib directory?</li>
</ul>
<li>GitHub Link</li>
<ul>
<li><a href="https://github.com/HawxChen/MIT-6.828-Adventure/commit/104709d3a8148b97ac8a7c23d9fc5d4504299135"><b>My Code</b></a></li>
</ul>
</ul>
</div>
</div>
<div>
#</div>
</div>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-16209044977189007942012-03-17T22:08:00.002-07:002012-07-23T08:41:04.362-07:00Lab1-Part B: Boot loader & Bootstrap<br />
<a href="http://3.bp.blogspot.com/-29Qw_K9KlLo/T0r_3ygSdRI/AAAAAAAADHY/IZzbKwXCVZY/s1600/laces-bootstrap.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="265" src="http://3.bp.blogspot.com/-29Qw_K9KlLo/T0r_3ygSdRI/AAAAAAAADHY/IZzbKwXCVZY/s640/laces-bootstrap.png" width="640" /></a><br />
<br />
<u style="background-color: #333333; color: #cccccc; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 20px;"></u><br />
<a href="http://hawxchen.blogspot.com/2012/03/preface-hope-that-my-crude-remarks-may.html" target="_blank">[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People</a><br />
<a href="http://hawxchen.blogspot.com/2012/03/blog-post.html" target="_blank">[前言]拋磚引玉</a><br />
Boot loader: 1st stage, don't need to depend on kernel<br />
Bootstrap: 2nd stage, related about kernel image not part of the kernel code, do kernel uncompressing ...etc<br />
<br />
<i><span style="font-size: large;"><b><u>Exercise3</u></b>:</span></i><br />
<ul>
<li>Something needed to know</li>
<ul>
<li>Addressing methodology and its adv/disadv in real-mode/16-bit protected mode/32-bit protected mode</li>
</ul>
<li>Trace boot loader:</li>
</ul>
<ol>
<li>.globl start : 為0x7c00</li>
<li>16bit ASM section is on</li>
<li>cli ; cld;</li>
<li>Set %ds,%es,%ss to 0</li>
<li>%cs is 0 set by BIOS CS:IP = 0000:7c00</li>
<li>Enable A20</li>
<li>lgdt gdtdesc //load global descriptor table</li>
<li>set %cr0 to Enable Protected mode</li>
<li>16 bit ASM is off</li>
<li> ljmp $0xb866,$0x87c32</li>
<ul>
<li>CS is replaced as #8 slot at gdt table (PROT_MODE_CSEG)and plus 0xb866 base.</li>
<li>immed is 0x87c32</li>
</ul>
<li> set %ds,%es,%fs,%gs,%ss as #10 at gdt table(PROT_MODE_DSEG)</li>
<li> set esp as 0x7c00 to form stack base address ; stack address: [ss:esp]</li>
<li>call bootmain(void)</li>
<li>call readseg((uint32_t) ELFHDR, SECTSIZE*8, 0); read in ELF headers</li>
<li>call readseg to read in every program header.</li>
<li>jump to kernel.</li>
<ul>
<li>((void (*)(void)) (ELFHDR->e_entry))();</li>
</ul>
<li>#</li>
</ol>
<ul>
<li>Trace readseg</li>
<ol>
<li>end_pa = pa + memsize</li>
<li> round down it-physical address for loading program into ram by pa&= 0x(FFFFFE00) // ~(SECTSIZE-1)</li>
<li>Translate offset into Sector number</li>
<ul>
<li>Note: The offset must start from #1, #0 is the boot sec </li>
</ul>
<li>Read enough data by pa and sector number </li>
<ul>
<li>Because paging is not enable, just direct map into memory. by $PROT_MODE_DSEG, %ax</li>
</ul>
<li>#</li>
</ol>
</ul>
<ul>
<li>Trace readsect</li>
<ul>
<li>do IDE HardDisk read in data.</li>
</ul>
</ul>
<ul>
<li>Reply for its questions</li>
<ol>
<li>At what point does the processor start executing 32-bit code? What exactly causes the switch from 16- to 32-bit mode?</li>
<ul>
<li>before long jump, and set cr0's 1st bit to 1</li>
</ul>
<li>What is the <i>last</i> instruction of the boot loader executed, and what is the <i>first</i> instruction of the kernel it just loaded?</li>
<ol>
<li>Last instruction in boot loader</li>
<ul>
<li>In "C": ((void (*)(void)) (ELFHDR->e_entry))();</li>
<li>In "GAS": call *0x10018 to jmp at kernel's entry point 0x10000c</li>
<ul>
<li>0x10018 is the byte address of at ELFHDR's #24 byte.</li>
</ul>
</ul>
<li>First Instruction in Kernel</li>
<ul>
<li>movw $0x1234,0x472 //warm boot</li>
</ul>
</ol>
<li><i>Where</i> is the first instruction of the kernel?</li>
<ul>
<li>At kern/entry.S . .globl entry</li>
<li>0x10000c</li>
</ul>
<li>How does the boot loader decide how many sectors it must read in order to fetch the entire kernel from disk? Where does it find this information?</li>
<ol>
<li>由ELF info 穿針引線。</li>
<ul>
<li>#man elf</li>
<li>readelf -l obj/kern/kernel</li>
</ul>
<ul>
<li>From its ELF header </li>
<ul>
<li>get Program header's start offset: e_phoff</li>
<li>get how many are the program headers: e_phnum</li>
</ul>
</ul>
<li>由program header </li>
<ul>
<li>readelf -l obj/kern/kernel</li>
</ul>
</ol>
<ul>
<li>From program headers to do readseg</li>
<ul>
<li>ph->p_pa : the address for prgram segment loaded into ram</li>
<ul>
<li>On systems for which physical addressing is relevant, this member is reserved for the segment's physical address. Under BSD this member is not used and must be zero.</li>
</ul>
<li>ph->p_memsz: </li>
<ul>
<li>This member holds the number of bytes in the memory image of the segment. It may be zero.</li>
</ul>
<li>ph->p_offset</li>
<ul>
<li> This member holds the offset from the beginning of the file at which the first byte of the segment resides.</li>
</ul>
</ul>
</ul>
</ol>
</ul>
<ul>
<li>Discussion</li>
<ul>
<li>Calling conventions gcc at i386</li>
<ul>
<li>Saved by Caller</li>
<ul>
<li>eax : contain return value</li>
<li>ecx: possibly trashed</li>
<li>edx: possibly trashed</li>
</ul>
<li>Saved by Callee</li>
<ul>
<li>ebp</li>
<li>ebx</li>
<li>esi</li>
<li>edi</li>
<li>must be saved before call</li>
</ul>
<li>Sample<ol>
<li>In bootmain, why did it need following instructions?</li>
<ul>
<li>push %ebp #x86 gcc calling convention</li>
<li>mov %esp,%ebp #x86 gcc calling convention</li>
<li>push %edi</li>
<li>push %ebx</li>
</ul>
<li>In readseg, ...</li>
<ul>
<li>push %ebp #x86 gcc calling convention</li>
<li>mov %esp,%ebp #x86 gcc calling convention</li>
<li>push %edi</li>
</ul>
</ol>
</li>
</ul>
</ul>
<li><b>After Lesson:</b></li>
</ul>
<ol><ul>
</ul>
<li>Drivers. How did it execute IDE device I/O
</li>
<ul>
<li>Ans: Not Yet.</li>
</ul>
<li>How to decide program headers?</li>
<ul>
<ul>
<li> LOAD //PT_LOAD</li>
<li> LOAD //PT_LOAD</li>
<li> GNU_STACK .//PT_GNU_SACK</li>
</ul>
<li>Ans: By session's default orgnization.</li>
</ul>
<li>In program header, </li>
<ol>
<li>Why is memsz and filesz? Loading it totally is not better?</li>
<li>Why is GNU_Stack's Memsize zero?</li>
</ol>
<ul>
<li>Program Headers:</li>
<li> Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align</li>
<li> LOAD 0x001000 0xf0100000 0x00100000 0x075b9 0x075b9 R E 0x1000</li>
<li> LOAD 0x009000 0xf0108000 0x00108000 0x0a300 0x0a960 RW 0x1000</li>
<li> GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4</li>
</ul>
<li>ljmp: how did it decide to do TSS related stuff</li>
<ul>
<li>Guess: by segment descriptor's field.</li>
</ul>
</ol>
<ul>
<li>References:</li>
<ul>
<li><a href="http://www.pcguide.com/ref/mbsys/res/ioSummary-c.html" target="_blank">x86 IO address summary map</a></li>
<li>A20:</li>
<ul>
<li><a href="http://www.win.tue.nl/~aeb/linux/kbd/A20.html" target="_blank">A20 - a pain from the past</a></li>
<li><a href="http://www.win.tue.nl/~aeb/linux/kbd/A20.html" target="_blank">A20 - a pain from the past</a></li>
<li><a href="http://wiki.osdev.org/A20_Line" target="_blank">A20 Line by OSDev</a></li>
</ul>
<li>ljmp's printing </li>
<ul>
<li>會抽換掉code segment</li>
<li><a href="http://stackoverflow.com/questions/5211541/bootloader-switching-processor-to-protected-mode" target="_blank">bootloader - switching processor to protected mode</a></li>
<li><a href="http://stackoverflow.com/questions/1685654/ljmp-syntax-in-gcc-inline-assembly" target="_blank">ljmp syntax in gcc inline assembly</a></li>
</ul>
<li><a href="http://www.glamenv-septzen.net/en/view/6" target="_blank">Why BIOS loads MBR into 0x7C00 in x86</a></li>
</ul>
</ul>
<ul></ul>
#<br />
<br />
<b><span style="font-size: large;"><i><u>Exercise4</u>:</i></span></b><br />
<ul>
<li>Just Read <a href="http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628" target="_blank">The C Programming Language K&R</a> chap5.</li>
<li>Address Arithmetic. The Byte added to l-value is by its type.</li>
<ul>
<li>c = (int *) ((char *) c + 1); //added by 1</li>
<li>b = (int *) a + 1;//added by 4</li>
</ul>
</ul>
#<br />
<br />
<b><i><span style="font-size: large;"><u>Exercise5</u>:</span></i></b><br />
<ul>
<li>Something needed to know</li>
<ul>
<li>Change boo/Makefrag的-Ttext : 0x7c000 for link address</li>
<li>VMA: Link address. Expected address for it to rum.</li>
<li>LMA: Load address. Expected address for it to load into memory.</li>
<li>objdump -h:Display the contents of the section headers -See VMA/LMA.</li>
<li>objdump -f: Display the contents of the section headers -See entry_point for execution start address</li>
</ul>
<li>objdump -f obj/boot/boot.out</li>
<ul>
<li> start address 0x00007c00</li>
</ul>
<li>objdump -h obj/boot/boot.out</li>
<ul>
<li>VMA:0x00007c00</li>
<li>LMA:0x00007c00</li>
</ul>
<li>Modify boot/Makefrag -Ttext to 0x8C00</li>
<ul>
<li>Error happaned at ljmp $PROT_MODE_CSEG, $protcseg @ boot/boot.S</li>
<li>.Ttext .text/.org tell assembler its start address 0x8C00 , but BIOS load it into 0x7C00 that .gdt related data follow 0x7C00, at 0x7c64. When executing ljmp error happened instruction, it will use 0x8c64 by .Ttext claimed, but in reality it is loaded at 0x7C64 by BIOS.</li>
</ul>
<li><b>After Lesson</b>:</li>
<ul>
<li>Modify -Ttext0x7900. How and Why did it change VMA/LAM not just only entry(.start)? </li>
<ul>
<li>Ans: Not Yet.</li>
</ul>
<li>How did CPU's chip view reject to execute ljmp instruction if gdt field was something wrong?</li>
<ul>
<li>Ans: Not Yet.</li>
</ul>
</ul>
</ul>
#<br />
<br />
<b><i><span style="font-size: large;"><u>Exercise6</u>:</span></i></b><br />
<ul>
<li>Something needed to know</li>
<ul>
<li>Set 1st break point at 0x7c00</li>
<ul>
<li>examine 0x100000</li>
</ul>
<li>Set 2nd breakpoint at 0x10000c</li>
<ul>
<li>examine
0x100000</li>
</ul>
<li>Addresses for obj/kern/kernel</li>
<ul>
<li>VMA:0xf0100000</li>
<li>LMA: 0x00100000</li>
<li>Entry: 0x10000c</li>
</ul>
</ul>
<li> Result</li>
<ul>
<li>BIOS enter Bootloader</li>
<ul>
<li>x/8h 0x100000: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000</li>
</ul>
<li>Bootloader enter OS Kernel</li>
<ul>
<li>x/8h 0x100000: 0xb002 0x1bad 0x0000 0x0000 0x4ffe 0xe452 0xc766 0x7205</li>
<li>x8h 0x10000c: 0xc766 0x7205 0x0004 0x3400 0xb812 0x0000 0x0011 0x220f</li>
</ul>
</ul>
<li>Discussion: Why are they different?</li>
<ul>
<li>By LMA's value</li>
<li>bootloader load kernel by claim form program header of kernel's elf info.</li>
<ul>
<li>readelf -l obj/kern/kernel</li>
<ul>
<li>Elf file type is EXEC (Executable file)<br />Entry point 0x10000c<br />VMA:0xf0100000<br />LMA:0x100000</li>
</ul>
</ul>
</ul>
</ul>
#<br />
<br />
<br class="Apple-interchange-newline" />hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-70100135981508321842012-03-17T22:05:00.001-07:002012-07-23T08:41:35.817-07:00Lab1-Part A: Boot a PC (BIOS Run)<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://4.bp.blogspot.com/-mTJrCcoiztY/T0sDwBtk2yI/AAAAAAAADHo/poo2TNqQKRE/s1600/boot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br class="Apple-interchange-newline" /><img border="0" height="400" src="http://4.bp.blogspot.com/-mTJrCcoiztY/T0sDwBtk2yI/AAAAAAAADHo/poo2TNqQKRE/s400/boot.jpg" width="340" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<i><b><span style="font-size: large;"><u><br /></u></span></b></i></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://hawxchen.blogspot.com/2012/03/preface-hope-that-my-crude-remarks-may.html" target="_blank">[Preface] A Hope That My Crude Remarks May Draw Forth By Abler People</a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="http://hawxchen.blogspot.com/2012/03/blog-post.html" target="_blank">[前言]拋磚引玉</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<i><b><span style="font-size: large;"><u>Exercise01</u>:</span></b></i></div>
Just read<a href="http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html"> inline assembly</a><br />
Ref Link <a href="http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html" target="_blank">Linux assemblers: A comparison of GAS and NASM</a><br />
<br />
<br />
<b><i><span style="font-size: large;"><u>Exercise2</u>:</span></i></b><br />
Just run GDB for remote debugging by the given script. See the GAS code if you can.<br />
<br />
Boot ASM code explanation.<br />
<ol>
<li>[f000:fff0] 0xffff0: ljmp $0xf000,$0xe05b //For Real-Mode's ljmp</li>
<li>jmp 0xfc85e</li>
<li>%cr0 = %cr0 0x9ffffff 0 For follows<br class="Apple-interchange-newline" /><span style="font-family: sans-serif; font-size: x-small;"><span style="line-height: 19px;"><table class="wikitable" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-collapse: collapse; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; font-size: 13px; line-height: 19px; margin-bottom: 1em; margin-left: 0px; margin-right: 1em; margin-top: 1em;"><tbody>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">30</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">CD</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><a href="http://en.wikipedia.org/wiki/CPU_cache" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="CPU cache"><span style="color: #38761d;">Cache</span></a><span style="color: #38761d;"> disable</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Globally enables/disable the memory cache</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">29</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">NW</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Not-write through</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Globally enables/disable write-back caching</span></td></tr>
</tbody></table>
</span></span></li>
<li>cli</li>
<li>cld</li>
<li>set port 0x70 = 0x8f</li>
<ul>
<li> to enable NMI- Non Maskable Interrupt</li>
</ul>
<li>port 0x71 </li>
<ul>
<li>RTC是否為0 此例中為0 故續往下exec</li>
</ul>
<li>set %ss =0 and %esp = 0x7000 </li>
<ul>
<li>to form SS:[ESP] stack segment (PS: Code Segment: CS:[EIP])</li>
</ul>
<li>mov $0xf4b2c, %edx </li>
<ul>
<li>//for DMA controller setup section.</li>
</ul>
<li>jmp 0xfc719 </li>
<li>enable 0x92 ; System devices A20 line. fast A20</li>
<li><pre style="white-space: pre-wrap; word-wrap: break-word;">0xfc726: <span style="color: #cc0000;"><b>in $0x71,%al</b></span>
0xfc728: in $0x92,%al
0xfc72a: or $0x2,%al
0xfc72c: out %al,$0x92</pre>
<pre style="white-space: pre-wrap; word-wrap: break-word;">for (11.)</pre>
</li>
<li>lidtw %cs:-0x31cc </li>
<ul>
<li>set IDT</li>
</ul>
<li>lgdtw %cs:-0x3188 </li>
<ul>
<li> set GDT</li>
</ul>
<li>enable %Cr0's 1st bit. </li>
<ul>
<li>Enable Protected Mode</li>
</ul>
<li>0xfc744: ljmpl $0x8,$0xfc74c </li>
<ul>
<li>//For Protected Mode's ljmp, 換code segment 並跳至其code segment 下的0xfc74c</li>
</ul>
<li>set ds es ss fs gs 為0x10 from gdt</li>
<li>jmp to *%edx (look item.9) </li>
<li>out 0 to slave dma controller- port: 0xd</li>
<li>out 0 to master dma controller-port 0xda/0xd6/0xd4</li>
<li>jmp to 0x7c00</li>
<ul>
<li> The address in ram to load the boot sector into.</li>
</ul>
<li>#</li>
</ol>
<div>
<b>After Lesson:</b></div>
<b>Question1</b>: Why did not I find /boot/boot.S, /boot/main.c by GDB: info sources ; Its symbol<br />
readelf -a obj/boot/main.o<br />
Ans: That belongs to the boot loader placed on the #1 sector at disk. and load it into 0x7C00 to execute.<br />
#<br />
<b><br /></b><br />
<b>Question2</b>: Where is the Code's symbol?<br />
Ans: Symbol is in obj/boot/boot.out.$file obj/boot/boot.out<br />
#<br />
<b><br /></b><br />
<b>Question3</b>: How to Assume It? when ljmp called show the following msg.<br />
"The target architecture is assumed to be i386"<br />
Ans: Not Yet.<br />
#<br />
<b><br /></b><br />
<b>Question4</b>: In BIOS ROM code, when to set %cs value, so as to use for (item13/14)<br />
Ans: %CS為0xf0000 因為是BIOS section.<br />
#<br />
<b><br /></b><br />
<b>Question5</b>: How/What did MIT patch the QEMU?<br />
Ans: Not Yet.<br />
#<br />
<br />
<b>Question6</b>: Why did BIOS need to switch to Protected Mode?<br />
Ans: It wants to use the Protected Mode's functionality .<br />
Like ljmp mem48<span style="color: #222222; font-family: Arial, Helvetica, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px;"> :<i>In Real Address Mode or Virtual 8086 mode, the long pointer provides 16 bits for the CS register and 16 or 32 bits for the EIP register</i></span><br />
Ref Link: <a href="http://stackoverflow.com/questions/5211541/bootloader-switching-processor-to-protected-mode" target="_blank">bootloader - switching processor to protected mode By Stackoverflow</a><br />
#<br />
<div>
<div>
<ol>
<li>cr0<table class="wikitable" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-collapse: collapse; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; font-family: sans-serif; font-size: 13px; line-height: 19px; margin-bottom: 1em; margin-left: 0px; margin-right: 1em; margin-top: 1em;"><tbody>
<tr><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"><span style="color: #b6d7a8;">Bit</span></th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"><span style="color: #b6d7a8;">Name</span></th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"><span style="color: #b6d7a8;">Full Name</span></th><th style="background-attachment: initial; background-clip: initial; background-color: #f2f2f2; background-image: initial; background-origin: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"><span style="color: #b6d7a8;">Description</span></th></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">31</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">PG</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Paging</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">If 1, enable paging and use the CR3 register, else disable paging</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">30</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">CD</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;"><a href="http://en.wikipedia.org/wiki/CPU_cache" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="CPU cache">Cache</a> disable</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Globally enables/disable the memory cache</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">29</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">NW</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Not-write through</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Globally enables/disable write-back caching</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">18</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">AM</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Alignment mask</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Alignment check enabled if AM set, AC flag (in <a href="http://en.wikipedia.org/wiki/FLAGS_register_(computing)" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="FLAGS register (computing)">EFLAGS</a> register) set, and privilege level is 3</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">16</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">WP</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Write protect</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Determines whether the CPU can write to pages marked read-only</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">5</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">NE</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Numeric error</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Enable internal <a href="http://en.wikipedia.org/wiki/X87" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="X87">x87</a> floating point error reporting when set, else enables PC style x87 error detection</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">4</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">ET</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Extension type</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">On the 386, it allowed to specify whether the external math coprocessor was an <a class="mw-redirect" href="http://en.wikipedia.org/wiki/80287" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="80287">80287</a> or <a class="mw-redirect" href="http://en.wikipedia.org/wiki/80387" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="80387">80387</a></span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">3</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">TS</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Task switched</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Allows saving x87 task context only after x87 instruction used after task switch</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">2</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">EM</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Emulation</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">If set, no x87 <a class="mw-redirect" href="http://en.wikipedia.org/wiki/Floating_point_unit" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="Floating point unit">floating point unit</a> present, if clear, x87 FPU present</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">1</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">MP</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Monitor co-processor</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Controls interaction of WAIT/FWAIT instructions with TS flag in CR0</span></td></tr>
<tr><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">0</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">PE</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">Protected Mode Enable</span></td><td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"><span style="color: #38761d;">If 1, system is in <a href="http://en.wikipedia.org/wiki/Protected_mode" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="Protected mode">protected mode</a>, else system is in <a href="http://en.wikipedia.org/wiki/Real_mode" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; text-decoration: none;" title="Real mode">real mode</a></span></td></tr>
</tbody></table>
</li>
</ol>
</div>
</div>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com0tag:blogger.com,1999:blog-4835661980007977971.post-69931482398884392512012-02-14T08:33:00.001-07:002012-02-14T09:00:45.928-07:00Love it, and Hug it.<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://2.bp.blogspot.com/-vm3Shm5MlJI/TzpBB5FvEzI/AAAAAAAADGE/0CE3olJAci0/s1600/WozHug.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://2.bp.blogspot.com/-vm3Shm5MlJI/TzpBB5FvEzI/AAAAAAAADGE/0CE3olJAci0/s400/WozHug.JPG" width="241" /></a></div>
<span style="font-weight: bold;"><span style="font-size: 29px;">iWoz</span> </span>Computer Geek to Cult Icon :<br />
<span style="font-size: 14px;">How I invented the personal computer,co-founded Apple, and had fun doing it</span><br />
<ol>
<ol>
<li>在HP工作時期,利用下班時間做出了Apple-I</li>
<ul>
<li>不要吵自已沒有時間做自已熱情的研發,</li>
<li>若是真沒有時間</li>
</ul>
<ol><ul>
<li>做跟自已熱情相符的合作</li>
<li>不要去會把員工每一分的精力吃乾抹淨且無時無刻不能讓自已盡情快樂發揮的公司,</li>
<li><span style="color: #bf9000;"><b>"Boring Money" Or "Life for Fun" ,Choose One?</b></span></li>
</ul>
</ol>
<li>引自書中內容<br /><ul>
<li>如果你熱愛目前的發明工作,而且也願意竭盡所能,那成功指日可待</li>
<li>你在夜晚獨工作的分分秒秒,你花在反覆思考你的發明的時時刻,最後都會變的非常值得. 我(Steve Wozniak)敢保證,你終究會覺得很值得</li>
</ul>
</li>
<li>即使是IT發明奇才如iWoz 也深明一次只跨一步的必要耐性</li>
</ol>
<ul><ul>
<li>要走的快,絕對不是省去步驟,妄想一步一登天</li>
<li>要走的快 ,是要依靠長時努力打下的基本功, 讓自已健步如飛</li>
</ul>
</ul>
</ol>
<div>
<br />
<b>加油! 有夢就去追。 沒有時間悲傷</b>。</div>hawxhttp://www.blogger.com/profile/15693715740611885737noreply@blogger.com1