《独辟蹊径品内核:Linux内核源代码导读(china-pub首发)》的前言
我觉得作者讲的学习方法很好值得看看。
下面是本书作者所写:
几乎每一个操作系统内核的学习者在初学阶段都会感觉到难以入门。这是由于内核涉及到知识面非常广泛,需要学习者从根本上掌握大量的知识,这包括:程序编译,链接,装载的细节,操作系统理论,计算机系统体系结构,数据结构与算法,深厚的C/汇编语言编程功底。如此相对较高的门槛常常令很大一部分初学者望而却步。那么是不是一定要先学好以上的各门知识后才能学习内核呢?事实上大部分学习者在学习以上各门知识都会遇到同样的问题,因为知识是一个网状结构。所以重要的不是先去学会什么知识,而是学会如何学习,学会在自己掌握的知识体系上提出问题,学会思考,进而坚持不懈的解决心中的疑问。笔者从学完C/C++ 语言开始,由于C/C++ 的示例程序都是在命令行下的,于是常常想如何才能编写出视窗程序,学习了MFC,但是同样想不通诸如WM_CHAR,WM_LBUTTONDOWN 的消息从何而来,带着MFC 中诸多疑问,笔者开始学习Windows SDK 程序开发,在这个学习过程中感觉对MFC 的认识更加深入了,但同时又有新的问题想不通,于是进而学习Windows DDK,之后开始学习操作系统内核。在这个过程中,笔者也遇到过数不尽的疑问,但是都是需要的时候再补充相关知识。因此初学者要明白,学习并不需要等到“万事具备”了才可以开始。需要的是保持好奇心,养成思考的习惯,树立解决问题的决心。很多读者渴望寻找好的入门教材,也常常有人问看什么书才能进步的快,但是当他们看了别人推荐的书却没有取得同样的收获,这是为什么呢?笔者认为,读书有以下几种境界:
1. 面对书上讲到的某个知识点,不能接合自己掌握的知识提出疑问,仅仅知识死记书本上的东西。这种状态就算学到最高境界,也仅仅只是能把书本上的知识点完好的记下来在脑海中形成孤立的知识节点。.
2. 面对书本上讲到的某个知识点,能接合自己掌握的知识提出疑问,但是大多数时候没有探索精神,仅仅局限于到其他书籍或者请教别人来排除心中的疑问。脑海中的知识形成了简单网状结构,但由于探索能力长期得不到锻炼,综合自己的知识去分析和解决问题的能力十分有限。
3. 面对书上讲到的某个知识点,能接合自己掌握的知识提出疑问,并且能根据问题补充相关必要的知识,不断综合分析各知识点的关系,提出各种假设和验证排除的方法并亲自验证,解决不了问题决不罢休。如能经过长期锻炼,其脑海中的知识点形成复杂的网状结构,综合分析能力必将加强。
4. 根据自己掌握的知识,提出全新的问题,并始终坚持找到答案为止。这种境界需要渊博的知识作为基础。
因此,不要还没学内核就被吓倒,说了这么多看似和内核无关的东西,就是要从先排除读者的心理担忧,树立正确的态度,重要的不是学会什么,而是学会学习。确定自己处于哪一种学习境界,然后通过学习某项具体的知识把自己提升到更高的境界。在现实生活中我们不难发现,能力强的学什么都又快又好。其根本原因在于他们处于更高的学习境界,并形成了良性循环!
有很多的人都渴望学习操作系统内核,但是内核涉及到的知识非常广泛,因此很多人半途而废,许多人往往抱怨没有好的书籍,教材。实际上,对于同一本书籍,不同的读者收获也是不同的,这取决于他们的态度和学习方法。笔者建议,在读书的时候,一定要以自己心中的疑问作为主线,而不要没有任何疑问就死记书本上的知识。
如何使用本书..
笔者认为对于任何知识的学习,首先是以自我为中心,任何书籍资料都是用来解答读者心中的疑问的,因此在你阅读一本书时,首先要明确自己的疑问是什么?这可以是一个非常梗概的问题,例如:“Linux 内核是什么?”;也可以是一个非常细节的问题,例如:“按下键盘上的A,到屏幕上显示出字符A 的内部原理”。当你有了来自内心深处经过独立思考的疑问后,阅读对你来说是一种享受,一种乐趣。来自内心的疑问,经过不断的综合分析,缜密的推理,坚持不懈的查阅和求索,之后拨开迷雾见天日喜悦只有经过才能体会。虽然本书是一本很厚的书,但是这不是畏惧的理由,也不要因为它厚,就给自己下一个决心,制定一个阅读计划,几个月要读完本书。学习是主动探求的过程,而不是被动接受,在这个过程中,有太多的东西,不是谁可以计划出来的。例如:在笔者学习内核之初,看到大量的传言,读完《深入理解linux内核》,读完《Linux 内核情景分析》... 就可以成为“高手”了。于是笔者常常捧着厚厚的书,寻思着自己什么时候可以读完,然而有时好几天也前进不了几页,免不了感慨自己今生将与“高手”无缘,但是又心有不甘,于是囫囵吞枣的“快速”前进,但是越前进,就越感觉到艰难。“欲速则不达”这个道理人人都懂,但是在切身体会之前,人人都会犯这个错误。在经历了很长一段曲折和郁闷之后,笔者摆脱了“书”的束缚,完全以自己的疑问为中心,例如在读到中断处理时,由于知识不够全面,于是丢开内核的书籍,阅读了大量的计算机体系结构方面的资料,同样计算机体系结构的书籍也很厚,但是我也没有想过要把它们读完,这时只捡中断相关的读,之后再来读内核的书籍,发现自己原理懂了,但是具体到理解代码时,就迷糊了,于是有补充GCC 内嵌汇编,C 代码编译到汇编代码的相关知识,反复试验等等。这个过程很慢,但是积累到最后,笔者发现自己读的非常快,甚至可以不读了,因为很多地方,只要读到前面的,就领悟了作者后面想要说什么了。
至今,我仍然没有完成当初为了成为“高手”而制定下的“宏伟”目标,因为我没有完整的读完《深入理解linux内核》、《Linux 内核情景分析》或《Linux 内核完全剖析》等等这类传说中“惊世骇俗”之作中的任何一本。但是笔者却从这些著作中受益菲浅。
现在,你应该知道要如何使用本书了吧?那就是不要拘泥如任何教条。虽然本书经笔者从初学到现在的心得体会以及相关笔记和资料整理而成,初学者的大量疑问都能在本书本书中找到答案。但是每个人都是独一无二的,笔者希望任何一个读者能综合利用本书和其它相关资料寻找你自己的答案。多问一点为什么,多一点假设,多一点思考,多一点推理,多一点试验,多一点坚持。最后,你会感慨原来传说中的任何“秘籍”都是“浪得虚名”,因为读完它,你不一定能成为“高手”,而“高手”却不需要读完它。能否成为“高手”的决定性因素取决于你的学习方法和学习态度,而好的“秘籍”仅仅只是催化剂。
相关文章:

95后架构师晒出工资单:狠补了这个,真香...
经常会有很多人说:“不是谁都可以成为架构师的。”“我们公司用的就是那点东西,不需要会太多。”“技术够用就行了。”…其实他们说的不错,但我也总觉得,程序员可以是一个非常热血的职业。即使不是人人都可以成为架构师࿰…

趣味图形之 余弦函数cos与直线相交(另一种相交)
高中的时候做的,前两天看了看,挺好玩的。只想说,当初的代码风格,,,,咳咳,算不上风骚!#include <math.h> #include <stdio.h> int main (void) {double y;int…

AI时代:推荐引擎正在塑造人类
We shape our tools and afterwards our tools shape us. ------Marshall McLuhan 麦克卢汉说:“我们塑造了工具,反过来工具也在塑造我们。” 我本人不反感AI,也相信人工智能会开创一个伟大的时代,但是我们要思考一些东西…

mogileFS 分布式存储-安装手记
环境是centos 呃,装个玩意儿走了好多弯路,以为依赖太多的包河模块,搞了很久. 后来发现其实安装可以简化的,yum没有mogilefs,可以通过epel来安装. 第一种安装方法,用epel # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm # yum…

英特尔成立物联网视频事业部,这届IESS还揭露了哪些信息?
随着5G技术的深入发展与落地,物联网已然成为当下炙手可热的技术话题。当万物相互连接,一个潜力丝毫不亚于互联网的市场就此诞生。驱动互联网的可能是网络,可能是算力,也可能是无数个开发者的开源和共享。那么驱动物联网的力量究竟…

JS数字转换成货币格式
2019独角兽企业重金招聘Python工程师标准>>> // Extend the default Number object with a formatMoney() method:// usage: someVar.formatMoney(decimalPlaces, symbol, thousandsSeparator, decimalSeparator)// defaults: (2, "$", ",", &q…

CentOS 部署 flask项目
原文地址 最近在学习 python,使用 flask 实现了个个人博客程序,完了想部署到服务器上。因为是新手,一路磕磕绊绊最终把它基本搞定。网上资料对新手感觉都不太友好,都是零零碎碎的,所以我整理了一下,一方面作…

Linux系统JDK安装和配置
以下步骤均为root登录状态下进行执行。 一、卸载JDK Linux会自带JDK,如果不使用自带版本的话需要卸载。 1、卸载系统自带的jdk版本 查看自带的jdk #rpm -qa | grep gcj 看到如下信息: libgcj-4.1.2-44.el5 java-1.4.2-gcj-compat-1.4.2.0-40jpp.1…

4000字,详解 Python 操作 MySQL 数据库!
作者 | 黄伟呢出品 | 数据分析与统计学之美本文的重点,就是教会大家,如何用Python来操作MySQL数据库。1. 通用步骤其实,这里有一个通用步骤,都是写死了的,大家照做就行。# 1. 导入相关库 import pymysql# 2. 链接MySQL…

php跨域共享session
、 $gb_DBHOSTname "127.0.0.1"; //主机的名称或是IP地址 02 $gb_DBname "dbname"; //数据库名称 03 $gb_DBuser "username"; //数据库用户名称 04 $gb_DBpass "pwd"; //数据库密码 05 $gb_COOKIE_DOMAIN .a.com; 06 $SESS_DBH …

centos6 防火墙iptables操作整理
使用语句 前言: iptables的启动文件位置再: /etc/init.d/iptables , srevice iptables调用的就是这里的执行文件 查看防火墙状态 service iptables status开启防火墙 service iptables start 关闭防火墙 service iptables stop永久关闭防火墙(开机不启动) chkconfig i…

分布式计算开源框架Hadoop入门实践
在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用M…

网络配置文件、命令详解
一、网络服务、配置文件二、ifconfig常用命令三、route常用命令四、ip命常用命令五、其他一、网络服务、配置文件修改网络服务配置文件不会立即生效,重启网络服务或主机后生效且永久有效1、配置文件1.1、网络配置文件:/etc/sysconfig/network[rootTESTHO…

面了一个大佬,一看就背了很多面试题
2021都说工作不好找,其实也是对开发人员的要求变高了。正好前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档(1000道高频题),同时也整理一些图文解析及笔记。今天在这免费分享给大家,希望大…

swift的特点
swift与OC的区别: swift是一门强语言,而OC是一门弱语言。强语言比弱语言更加严谨 每写一行代码系统都会自动检测是否有错误,这样就减少了运行后出错的可能。swift支持开源,所以可以引用到其他语言开发的项目中,OC是闭源…

Apache模块开发helloworld无错版
环境:CentOS 5.4 第一步:安装Apache的apxs 首先来介绍下apache的一个工具apxs。apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadM…

Golang+Python 实现安全动态开机密码+服务器存储
作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 引言: 如果谈到近几年来新起的语言,必然离不开Python语言和Go语言,正如python在人工智能领域的发展火热,Go语言在服务器并发处理也有着非常优势。 Go语言…

《中国顶尖技术团队访谈录·第二季》发布
卷首语(InfoQ中国总编辑 崔康)\\在提笔写这篇卷首语的时候,我们刚刚为InfoQ中国过完八岁生日。回溯到2007年的3月28日,InfoQ中文站正式上线运营,从此中国的IT技术人有了一个崭新的学习和成长的平台,InfoQ中…

record-09 ATM 过程思想 综合练习
#__author: hasee #date: 2018/1/16 # user_info.txt包含内容: # zhangsan1 123456 3500 # zhangsan2 123456 4000 # zhangsan3 123456 4500 # zhangsan4 123456 5000 # zhangsan5 123456 5500 # zhangsan6 123456 6000 # zhangsan7 123456 6500 # zhangsan8 12345…

在ApacheHTTPD服务器中使用DSO完全分析
Apache HTTP 服务器是一个模块化(或说积木式)的程序,管理员可以选择一些模块来增加服务器的某些功能。这些模块,可以在创建服务器程序时静态地编译到httpd服务器的二进制代码中,也可以编译成一些独立于服务器程序的Dyn…

apache 2.4.12 + tomcat 7.0.61 + jk connectors 1.2.40实现tomcat负载均衡集群
实验环境: CentOS 5.11 final hostname:T1.getg.com IP地址:192.168.50.138软件准备: CentOS Linux 5.*系统光盘中的“Development tools”工具包组 jdk-8u45-linux-x64.tar.gz pcre-8.36.tar.gz apr-util-1…

有哪些新手程序员不知道的小技巧?
提到新手程序员,大家想到的第一个词可能就是:刷题。尤其是通过LeetCode刷题,想必新手程序员们都经历过这一步,甚至不少人认为只要在LeetCode上刷的题目够多,就一定能够进阶为大神。但是,不难发现࿰…

cocostudio UI编辑器中UITextField输入框控件光标
http://www.cocoachina.com/bbs/read.php?tid194533

在apache中使用 memcache 来作 session 存储
session.save_handler memcache session.save_path "tcp://127.0.0.1:11211" 使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weigh…

Android WebView访问SSL证书网页(onReceivedSslError)
Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebViewClient() {Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 不要使用su…

改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 美东时间10月28日周四,在名为 Facebook Connect 的年度大会上,Facebook 宣布,Facebook 将公司名称更改为“Meta”,这个新名字反映了该公司在社交媒体之外…

Android NDK开发之旅31 FFmpeg音频解码
###前言 #####基于Android NDK开发之旅30--FFmpeg视频播放这篇文章,我们已经学会视频解码基本过程。这篇文章就对音频解码进行分析。 #####音频解码和视频解码的套路基本是一样的, 否则怎么会做到音视频同步播放呢? ###1.FFmpeg音视解码过程分…

整理了 65 个 Matplotlib 案例,这能不收藏?
作者|周萝卜来源|萝卜大杂烩Matplotlib 作为 Python 家族当中最为著名的画图工具,基本的操作还是要掌握的,今天就来分享一波文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的。启用和检查交互模式在…

负载均衡工具haproxy安装,配置,使用
一,什么是haproxy HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运…

【文章】本站收集与转载文章目录
1.关于推荐系统中的特征工程 2.Java程序员最喜欢的11款免费IDE编辑器 3.人工智能和机器学习领域的一些有趣的开源项目 4.微软发布Project Oxford,供Azure户免费集多项功能 5.微软推Azure机器学习工具:Algorithm Cheat Sheet