写这篇是因为simohayha在C++圈子里的留言:
simohayha 写道
希望圈子能专门开个报道贴,置顶的。
然后就是不知道老大们对linux源码了解多少?希望能就此发些文章,哈哈。
本来是想在留言里面回simohayha的,结果越写越多,改成博客算了,也许对别人也有帮助。没什么中心思想,大家胡乱看看。
我在读大学的时候是努力试图学习过linux源码的,在机房里打印出厚厚一叠纸,闷在计算机旁边猛看了好几天,饭也没好好吃,那些纸的质量不太好,有股怪味,空着肚子钻研,到后来闻那股味道,差点呕吐,于是放弃,出去大吃了一顿。
这是上世纪末的事情了,那时其实水平还没到,心里好奇,完全是赖蛤蟆想吃天鹅肉。学习这个事情,还是得循序渐进的。
要想学深入学习操作系统,推荐从这本书开始: Operatiing Systmes, Design and Implementation (by Tanenbaum, Woodhull),里面有个用于教学的操作系统Minix。Linux的某些方面,现在还可以找到Minix的影子。
我手里的这本书,是第二版,现在书最新版是第三版。Minix 3.0,也已经有点难度了, X Window System都有了。
http://www.minix3.org/
要是觉得还是太复杂,还有个更简单的GeekOS,
http://geekos.sourceforge.net/
OS的设计是受限于硬件的,尤其是CPU。当代OS的不同进程之间的内存保护,虚拟地址,都要通过硬件。所以对一个CPU的深刻了解,必不可少。对于Intel的CPU,应该读下面三本:
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 Programming,by John Waldron。里面用的处理器MIPS,可以下载个SPIM Simulator,在PC上跑。
http://www.cs.wisc.edu/~larus/spim.html
Knuth老先生在The Art of Computer Programming一书里的例子,都是汇编,现在用的虚拟机是访RISC设计的,叫做MMIX,Knuth写了本书,叫做MMIXware, A RISC Computer for the Third Millennium, 呵呵,口气好大啊。
讲计算机架构的两本计算机学科经典书,是Patterson和Hennessy合写的两本: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的人说(Yahoo用FreeBSD),FreeBSD最新版下用MySQL threading library重新编译性能可以接受了。Java也不尽如意,Sun 现在提供Java 5的binary给FreeBSD。但我在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 Richter的Programming Application for MS Windows那本书写的太好了,Process, Job, Thread, Fiber, Critical Section, Event, Waitable Timer, Semaphore, Mutex,Virtual Memory, IO,写的非常详尽清楚。要是Linux/BSD下面也有这么一本书,该有多好啊。Linux, BSD里面的线程,家家各有不同,把人搞得糊里糊涂。
如果从研究操作系统是怎么实现的,那么正好反过来,Linxu/BSD/Solaris简单明了多了.除了代码公开,他们内部结构没有Windows那么复杂。Windows的源码,要是成为微软的MVP,也是可以看到的。Windows 2000的大部分源码,还泄露出来了,在网上流传了一阵子。
我个人觉得搞应用的去学习编译器回报可能更大,首先就是对语言了解很深入,写码,读码容易。如果会了编译器前台技术,可以自己写个分析代码的程序啊,那么读别人的码不久容易很多。现在虽然有现成的源码分析器,但是想想你有个数据库,一种是只能使用别人写好的界面,一种是可以用SQL自由查找,哪个好?如果学会了编译器后台技术,恭喜你,写任何一行代码都知道在计算机里怎么执行的,这是一种多么自由自在的境界啊。
分享到:
相关推荐
通过学习单片机编程结构和操作系统的原理,可以更好地理解计算机系统的工作原理,提高自己的编程能力和技术水平。同时,本文还将提供一些有用的资源和参考书籍,供读者进一步学习和研究。 在学习单片机编程和操作...
本篇将详细介绍推荐的学习书籍以及如何系统地学习操作系统,特别是Linux系统的搭建与编程。 首先,推荐的学习书籍是《Unix操作系统设计》。这本书详细介绍了Unix操作系统的设计原理,从内核架构到文件系统,再到...
根据提供的信息,我将展开关于“一步一步写嵌入式操作系统--ARM编程的方法与实践”这一主题下的知识点。 首先,我们从标题中可以提炼出两个核心内容,即“嵌入式操作系统”的编写以及“ARM编程”的方法和实践。这两...
因此,学习操作系统首先要了解早期的编程环境和CPU工作原理,例如Intel的CPU文档中提到的系统级编程,它包括内存寻址、虚拟存储管理、中断处理和资源保护等关键内容。 操作系统主要分为应用级编程和系统级编程两...
### RT-Thread实时操作系统编程指南知识点总结 #### 一、实时系统概念 **实时系统**是一种特殊的计算机系统,其能够对外部事件或内部任务在指定的时间内作出响应。这类系统的特性在于时间敏感性,即系统必须能够在...
从给定的文件信息中,我们可以提取到一些重要的知识点。首先,文件标题中包含的“操作系统”表明这个压缩包...对于希望学习操作系统开发,并且对Rust编程感兴趣的读者,这个压缩包可能包含了一系列有价值的学习资源。
内容概要:本文详细介绍了树莓派的开发资源,涵盖硬件资源、操作系统、编程语言与开发工具、学习资源与社区等多方面。具体包括树莓派的核心器件、板载资源、扩展接口、专为其设计的Raspberry Pi OS操作系统,常用的...
这两个标签表明这份学习资料可能涉及到如何在这些编程语言中与操作系统进行交互。 C++和C#都是强大的编程语言,但它们与操作系统的联系各有不同。C++,作为一种静态类型的、编译式的、通用的、大小写敏感的、不仅...
综上所述,《2010年Linux系统编程讲义》是一份全面的教程,涵盖了从操作系统基础到高级编程技术的多个方面,对于希望深入学习Linux系统编程的开发者或学生来说,是一份极其有价值的学习资料。通过学习这份讲义,可以...
学习嵌入式系统编程的好资料,包括存储器,操作系统,优化等
Linux/UNIX系统编程是计算机...总结来说,这本手册是Linux和UNIX系统编程学习者和专业人员必备的参考书籍之一,它不仅覆盖了广泛的系统编程知识,还提供了大量的实例和图表,帮助读者快速掌握复杂的编程概念和技巧。
学习Linux系统编程C语言是基础,能够在Linux系统下通过指令完成文件的创建、复制、剪切、删除;文件夹的创建和删除;软件的下载和安装就可以。 Linux系统编程主要是学习Linux系统调用的接口,学习这些接口的功能、...
【VB游戏编程学习系统】是一款专为初学者设计的编程教育软件,主要针对Windows XP操作系统。该系统基于Visual Basic(VB)环境,旨在帮助用户掌握基础的VB编程技能,特别是对于游戏开发感兴趣的用户。然而,需要注意...
在这个资源包中,我们有一个项目,旨在帮助学习者理解和开发操作系统的基础——Simple kernel for learning operating systems(用于学习操作系统的简)。这一项目使用C语言编写,C语言的选择是为了能与硬件直接交互...
在操作系统中,多线程编程和多进程编程是并发执行任务的重要手段,特别是在Java这样的高级编程语言中,它们的应用尤为广泛。 首先,我们要理解“多线程”这一概念。线程是操作系统中的一个基本执行单元,每个线程都...
新代编程操作手册是针对新代品牌的编程系统提供的一份...通过深入学习新代编程操作手册,用户不仅可以掌握基本的编程技能,还能深入了解系统性能,提高加工效率和质量。无论是新手还是经验丰富的程序员,都能从中受益。
Linux操作系统是自由和开放源代码的类Unix操作系统。Shell编程是Linux系统管理的重要组成部分,它使得用户可以通过编写...在企业级卓越人才培养方案中,熟悉这些编程语言和系统编程技能是学习Linux操作系统的重要目标。
Linux系统编程是IT领域中一个重要的学习主题,它涉及到操作系统层面的编程技术,包括与内核交互、进程管理、文件操作、网络通信等多个方面。在这个"最新C、C++全栈培训第24期高清无密-Linux系统编程(课件源码)"中,...