C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

常用链接

留言簿(8)

搜索

  •  

最新评论

阅读排行榜

评论排行榜


        (下面的文字还为整理)

本来是想在留言里面回simohayha的,结果越写越多,改成博客算了,也许对别人也有帮助。没什么中心思想,大家胡乱看看。

我在读大学的时候是努力试图学习过linux源码的,在机房里打印出厚厚一叠纸,闷在计算机旁边猛看了好几天,饭也没好好吃,那些纸的质量不太好,有股怪味,空着肚子钻研,到后来闻那股味道,差点呕吐,于是放弃,出去大吃了一顿。

这是上世纪末的事情了,那时其实水平还没到,心里好奇,完全是赖蛤蟆想吃天鹅肉。学习这个事情,还是得循序渐进的。

要想学深入学习操作系统,推荐从这本书开始: Operatiing Systmes, Design and Implementation (by Tanenbaum, Woodhull),里面有个用于教学的操作系统MinixLinux的某些方面,现在还可以找到Minix的影子。

我手里的这本书,是第二版,现在书最新版是第三版。Minix 3.0,也已经有点难度了, X Window System都有了。http://www.minix3.org/

要是觉得还是太复杂,还有个更简单的GeekOShttp://geekos.sourceforge.net/

OS
的设计是受限于硬件的,尤其是CPU。当代OS的不同进程之间的内存保护,虚拟地址,都要通过硬件。所以对一个CPU的深刻了解,必不可少。对于IntelCPU,应该读下面三本:

1. Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture http://www.intel.com/design/PentiumII/manuals/243190.htm

2. Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual http://www.intel.com/design/PentiumII/manuals/243191.htm

3. Intel Architecture Software Developer’s Manual Volume 3: System Programming http://www.intel.com/design/PentiumII/manuals/243192.htm

尤其是第三本,OS必看,虚拟内存,内存保护的东西全在里面。

操作系统里面代码最多的,实际是IO部分,理论不多,可事关重要。Mindshare出了一系列书,写的非常深入详细。http://www.mindshare.com/

学汇编开始直接学CISC的指令集太费劲了,推荐先从RISC汇编开始,西方大学计算机专业走的也是这条路。可以看的一本书是Introduction to RISC Assembly Language Programmingby John Waldron。里面用的处理器MIPS,可以下载个SPIM Simulator,在PC上跑。http://www.cs.wisc.edu/~larus/spim.html

Knuth
老先生在The Art of Computer Programming一书里的例子,都是汇编,现在用的虚拟机是访RISC设计的,叫做MMIXKnuth写了本书,叫做MMIXware, A RISC Computer for the Third Millennium, 呵呵,口气好大啊。

讲计算机架构的两本计算机学科经典书,是PattersonHennessy合写的两本:Computer Organization and Design: The Hardware/Software Interface 3rd edition,以及Computer Architecture, Fourth Edition: A Quantitative Approach

学汇编要注意一点,每个汇编器,其语法都不一样。在Windows下面写汇编,微软的Macro Assembler不是很合适,里面的Macro太多,都赶上高级语言了。有个开源的Netwide Assembler, http://sourceforge.net/projects/nasm, 倒是挺不错,推荐使用。

关于学习操作系统内核,如果不是非抱着Linux的话,BSD是个挺好的选择。代码的结构可能还清晰些。我有一台FreeBSD服务器,基本非常满意,有两点不足,MySQL是针对Linux优化的,在FreeBSD下性能不够好,但是根据Yahoo的人说(YahooFreeBSD,FreeBSD最新版下用MySQL threading library重新编译性能可以接受了。Java也不尽如意,Sun 现在提供Java 5binaryFreeBSD。但我在FreeBSD如果启动Tomcat开的内存太大,启动会失败。

想看看FreeBSD的源码,可以看看这里:http://www.leidinger.net/FreeBSD/src_docs/,里面列的都是内核各个部分的Code Reference Manual。里面那个讲kernel的文件有23M,共2205页,可见钻研这些是件极为费时费力的事情。

http://www.chinaunix.net/
也有很多BSD的资料。

现在主流操作系统,就两大家了,一边是微软的以NT为内核的Win2k/XP/2003/Vista,另一边是以UNIX为根基的Linux/BSD/Solaris等等.

Tanenbaum
说过这么一句话,操作系统是什么呢,就是操作系统定义的API

学习Windows下的API,容易许多,资料全,另外Jeffrey RichterProgramming Application for MS Windows那本书写的太好了,Process, Job, Thread, Fiber, Critical Section, Event, Waitable Timer, Semaphore, MutexVirtual Memory, IO,写的非常详尽清楚。要是Linux/BSD下面也有这么一本书,该有多好啊。Linux, BSD里面的线程,家家各有不同,把人搞得糊里糊涂。

如果从研究操作系统是怎么实现的,那么正好反过来,Linxu/BSD/Solaris简单明了多了.除了代码公开,他们内部结构没有Windows那么复杂。Windows的源码,要是成为微软的MVP,也是可以看到的。Windows 2000的大部分源码,还泄露出来了,在网上流传了一阵子。

我个人觉得搞应用的去学习编译器回报可能更大,首先就是对语言了解很深入,写码,读码容易。如果会了编译器前台技术,可以自己写个分析代码的程序啊,那么读别人的码不久容易很多。现在虽然有现成的源码分析器,但是想想你有个数据库,一种是只能使用别人写好的界面,一种是可以用SQL自由查找,哪个好?如果学会了编译器后台技术,恭喜你,写任何一行代码都知道在计算机里怎么执行的,这是一种多么自由自在的境界啊。   

posted on 2010-02-18 01:42 烟皑 阅读(11493) 评论(1)  编辑 收藏 引用 所属分类: 操作系统学习笔记

Feedback

# re: 如何学习操作系统?——整理篇,非个人感悟 2016-02-10 21:26 星空不远
收藏,先把现代操作系统过一遍,有个基本概念后,再来好好学习一番  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理