﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-烟皑-随笔分类-操作系统学习笔记</title><link>http://www.cppblog.com/kangnixi/category/12813.html</link><description>人要时刻保持谦虚和谨慎的态度。
                            ——烟皑留 2010年1月29日 14：07</description><language>zh-cn</language><lastBuildDate>Thu, 18 Feb 2010 00:49:11 GMT</lastBuildDate><pubDate>Thu, 18 Feb 2010 00:49:11 GMT</pubDate><ttl>60</ttl><item><title>如何学习操作系统？——整理篇，非个人感悟</title><link>http://www.cppblog.com/kangnixi/archive/2010/02/18/107992.html</link><dc:creator>烟皑</dc:creator><author>烟皑</author><pubDate>Wed, 17 Feb 2010 17:42:00 GMT</pubDate><guid>http://www.cppblog.com/kangnixi/archive/2010/02/18/107992.html</guid><wfw:comment>http://www.cppblog.com/kangnixi/comments/107992.html</wfw:comment><comments>http://www.cppblog.com/kangnixi/archive/2010/02/18/107992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kangnixi/comments/commentRss/107992.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kangnixi/services/trackbacks/107992.html</trackback:ping><description><![CDATA[<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （下面的文字还为整理）</p>
<p><span>本来是想在留言里面回</span><span>simohayha</span><span>的，结果越写越多，改成博客算了，也许对别人也有帮助。没什么中心思想，大家胡乱看看。</span><span> <br><br></span><span>我在读大学的时候是努力试图学习过</span><span>linux</span><span>源码的，在机房里打印出厚厚一叠纸，闷在计算机旁边猛看了好几天，饭也没好好吃，那些纸的质量不太好，有股怪味，空着肚子钻研，到后来闻那股味道，差点呕吐，于是放弃，出去大吃了一顿。</span><span> <br><br></span><span>这是上世纪末的事情了，那时其实水平还没到，心里好奇，完全是赖蛤蟆想吃天鹅肉。学习这个事情，还是得循序渐进的。</span><span> <br><br></span><span>要想学深入学习操作系统，推荐从这本书开始：</span><span> Operatiing Systmes, Design and Implementation (by Tanenbaum, Woodhull)</span><span>，里面有个用于教学的操作系统</span><span>Minix</span><span>。</span><span>Linux</span><span>的某些方面，现在还可以找到</span><span>Minix</span><span>的影子。</span><span> <br><br></span><span>我手里的这本书，是第二版，现在书最新版是第三版。</span><span>Minix 3.0</span><span>，也已经有点难度了，</span> <span>X Window System</span><span>都有了。</span><span><a href="http://www.minix3.org/" target=_blank>http://www.minix3.org/</a> <br><br></span><span>要是觉得还是太复杂，还有个更简单的</span><span>GeekOS</span><span>，</span><span><a href="http://geekos.sourceforge.net/" target=_blank>http://geekos.sourceforge.net/</a> <br><br>OS</span><span>的设计是受限于硬件的，尤其是</span><span>CPU</span><span>。当代</span><span>OS</span><span>的不同进程之间的内存保护，虚拟地址，都要通过硬件。所以对一个</span><span>CPU</span><span>的深刻了解，必不可少。对于</span><span>Intel</span><span>的</span><span>CPU</span><span>，应该读下面三本：</span><span> <br><br>1. Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture <a href="http://www.intel.com/design/PentiumII/manuals/243190.htm" target=_blank>http://www.intel.com/design/PentiumII/manuals/243190.htm</a> <br><br>2. Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual <a href="http://www.intel.com/design/PentiumII/manuals/243191.htm" target=_blank>http://www.intel.com/design/PentiumII/manuals/243191.htm</a> <br><br>3. Intel Architecture Software Developer&#8217;s Manual Volume 3: System Programming <a href="http://www.intel.com/design/PentiumII/manuals/243192.htm" target=_blank>http://www.intel.com/design/PentiumII/manuals/243192.htm</a> <br><br></span><span>尤其是第三本</span><span>,</span><span>编</span><span>OS</span><span>必看，虚拟内存，内存保护的东西全在里面。</span><span> <br><br></span><span>操作系统里面代码最多的，实际是</span><span>IO</span><span>部分，理论不多，可事关重要。</span><span>Mindshare</span><span>出了一系列书，写的非常深入详细。</span><span><a href="http://www.mindshare.com/" target=_blank>http://www.mindshare.com/</a> <br><br></span><span>学汇编开始直接学</span><span>CISC</span><span>的指令集太费劲了，推荐先从</span><span>RISC</span><span>汇编开始，西方大学计算机专业走的也是这条路。可以看的一本书是</span><span>Introduction to RISC Assembly Language Programming</span><span>，</span><span>by John Waldron</span><span>。里面用的处理器</span><span>MIPS</span><span>，可以下载个</span><span>SPIM Simulator</span><span>，在</span><span>PC</span><span>上跑。</span><span><a href="http://www.cs.wisc.edu/~larus/spim.html" target=_blank>http://www.cs.wisc.edu/~larus/spim.html</a> <br><br>Knuth</span><span>老先生在</span><span>The Art of Computer Programming</span><span>一书里的例子，都是汇编，现在用的虚拟机是访</span><span>RISC</span><span>设计的，叫做</span><span>MMIX</span><span>，</span><span>Knuth</span><span>写了本书，叫做</span><span>MMIXware, A RISC Computer for the Third Millennium, </span><span>呵呵，口气好大啊。</span><span> <br><br></span><span>讲计算机架构的两本计算机学科经典书，是</span><span>Patterson</span><span>和</span><span>Hennessy</span><span>合写的两本：</span><span>Computer Organization and Design: The Hardware/Software Interface 3rd edition</span><span>，以及</span><span>Computer Architecture, Fourth Edition: A Quantitative Approach <br><br></span><span>学汇编要注意一点，每个汇编器，其语法都不一样。在</span><span>Windows</span><span>下面写汇编，微软的</span><span>Macro Assembler</span><span>不是很合适，里面的</span><span>Macro</span><span>太多，都赶上高级语言了。有个开源的</span><span>Netwide Assembler, <a href="http://sourceforge.net/projects/nasm" target=_blank>http://sourceforge.net/projects/nasm</a>, </span><span>倒是挺不错，推荐使用。</span><span> <br><br></span><span>关于学习操作系统内核，如果不是非抱着</span><span>Linux</span><span>的话，</span><span>BSD</span><span>是个挺好的选择。代码的结构可能还清晰些。我有一台</span><span>FreeBSD</span><span>服务器，基本非常满意，有两点不足，</span><span>MySQL</span><span>是针对</span><span>Linux</span><span>优化的，在</span><span>FreeBSD</span><span>下性能不够好，但是根据</span><span>Yahoo</span><span>的人说（</span><span>Yahoo</span><span>用</span><span>FreeBSD</span><span>）</span><span>,FreeBSD</span><span>最新版下用</span><span>MySQL threading library</span><span>重新编译性能可以接受了。</span><span>Java</span><span>也不尽如意，</span><span>Sun </span><span>现在提供</span><span>Java 5</span><span>的</span><span>binary</span><span>给</span><span>FreeBSD</span><span>。但我在</span><span>FreeBSD</span><span>如果启动</span><span>Tomcat</span><span>开的内存太大，启动会失败。</span><span> <br><br></span><span>想看看</span><span>FreeBSD</span><span>的源码，可以看看这里：</span><span><a href="http://www.leidinger.net/FreeBSD/src_docs/" target=_blank>http://www.leidinger.net/FreeBSD/src_docs/</a></span><span>，里面列的都是内核各个部分的</span><span>Code Reference Manual</span><span>。里面那个讲</span><span>kernel</span><span>的文件有</span><st1:chmetcnv UnitName="m" SourceValue="23" HasSpace="False" Negative="False" NumberType="1" TCSC="0" w:st="on"><span>23M</span></st1:chmetcnv><span>，共</span><span>2205</span><span>页，可见钻研这些是件极为费时费力的事情。</span><span> <br><br><a href="http://www.chinaunix.net/" target=_blank>http://www.chinaunix.net/</a></span><span>也有很多</span><span>BSD</span><span>的资料。</span><span> <br><br></span><span>现在主流操作系统，就两大家了，一边是微软的以</span><span>NT</span><span>为内核的</span><span>Win2k/XP/2003/Vista,</span><span>另一边是以</span><span>UNIX</span><span>为根基的</span><span>Linux/BSD/Solaris</span><span>等等</span><span>. <br><br>Tanenbaum</span><span>说过这么一句话，操作系统是什么呢，就是操作系统定义的</span><span>API</span><span>。</span><span> <br><br></span><span>学习</span><span>Windows</span><span>下的</span><span>API</span><span>，容易许多，资料全，另外</span><span>Jeffrey Richter</span><span>的</span><span>Programming Application for MS Windows</span><span>那本书写的太好了</span><span>,Process, Job, Thread, Fiber, Critical Section, Event, Waitable Timer, Semaphore, Mutex</span><span>，</span><span>Virtual Memory, IO</span><span>，写的非常详尽清楚。要是</span><span>Linux/BSD</span><span>下面也有这么一本书，该有多好啊。</span><span>Linux, BSD</span><span>里面的线程，家家各有不同，把人搞得糊里糊涂。</span><span> <br><br></span><span>如果从研究操作系统是怎么实现的，那么正好反过来，</span><span>Linxu/BSD/Solaris</span><span>简单明了多了</span><span>.</span><span>除了代码公开，他们内部结构没有</span><span>Windows</span><span>那么复杂。</span><span>Windows</span><span>的源码，要是成为微软的</span><span>MVP</span><span>，也是可以看到的。</span><span>Windows 2000</span><span>的大部分源码，还泄露出来了，在网上流传了一阵子。</span><span> <br><br></span><span>我个人觉得搞应用的去学习编译器回报可能更大，首先就是对语言了解很深入，写码，读码容易。如果会了编译器前台技术，可以自己写个分析代码的程序啊，那么读别人的码不久容易很多。现在虽然有现成的源码分析器，但是想想你有个数据库，一种是只能使用别人写好的界面，一种是可以用</span><span>SQL</span><span>自由查找，哪个好？如果学会了编译器后台技术，恭喜你，写任何一行代码都知道在计算机里怎么执行的，这是一种多么自由自在的境界啊。</span><span>&nbsp; &nbsp; </span></p>
<img src ="http://www.cppblog.com/kangnixi/aggbug/107992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kangnixi/" target="_blank">烟皑</a> 2010-02-18 01:42 <a href="http://www.cppblog.com/kangnixi/archive/2010/02/18/107992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>