做真正Hacker 的乐趣──自己动手去实践

本文选自《Orange'S:一个操作系统的实现 》一书 序言

2004 年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能,恐怕是翻译稿,写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理,还需要实际动手写出原型。
    历史上的Linux 就是这么产生的,Linus Torvalds 当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这成为了Linux 第一个内核的雏形。
    我想中国有能力写出内核原型的程序员应该也有,但把这个题目写成一本书,感觉上不会有人愿意做这件事情,作者要花很多时间,加上主题比较硬,销售量不会太高,经济上回报有限。
    但拿来文稿一看,整个编辑部大为惊艳,内容文笔俱佳,而且绝对原创,马上决定在《程序员》连载。2005 年博文视点出版的第一版也广受好评。不过有很多读者还是质疑:现在软件编程主要领域是框架和应用,还需要了解操作系统底层吗?
    经过四年的磨练成长,于渊又拿出第二版的书稿《Orange’S:一个操作系统的实现》,这本书是属于真正Hacker 的。我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。
    黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的,如苹果的Apple 电脑、微软的Basic 解释器、互联网的Mosaic 浏览器。
    回答前面读者的质疑,学软件编程并不需要看这本书,想成为优秀程序员和黑客的朋友,我强烈建议你花时间来阅读这本书,并亲自动手实践。正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质,只有充分
    掌握了系统原理,才能在技术上游刃有余,才能有真正的创新和发展。中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣。

蒋涛
2009 年4 月

本书购买地址:当当网    卓越网  互动网

蒋涛:《Orange’S:一个操作系统的实现》属于真正Hacker的相关推荐

  1. 《Orange’s 一个操作系统的实现》3.保护模式3----DOS加载.EXE过程

    在<<Orange's 一个操作系统的实现>>一书中有时使用了org 0100h,为何是0100h?因为书中的例子是为了突破引导扇区512字节的限制, 而将asm文件编译为.c ...

  2. 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-无特权级转换)...

    在上次的代码基础上,添加一个代码段作为通过调用门转移的目标段.了解一下调用的工作方法,代码分析如下: <<红色标识部分为新增代码>> ; =================== ...

  3. Orange‘s’ 一个操作系统的实现

    突然想要随时记录一下实验过程中的各种问题,因此有了此文档: 由于是中途开始的,所以就偷懒直接跳过了vm.ubuntu32位16.04.bochs2.6.8.nasm的安装,下面开始正文内容: 2022 ...

  4. 《Orange’s 一个操作系统的实现》3.保护模式1----pm.inc分析

    1.pm.inc定义了描述符.选择子及相关位数的取值 ; 描述符图示 ; 图示一 ; ;  ------ ┏━━┳━━┓高地址 ;         ┃ 7  ┃ 段 ┃ ;         ┣━━┫  ...

  5. 《Orange’s 一个操作系统的实现》1.搭建操作系统开发环境

    书中给出了两种环境:windows和linux,平台选择根据自己喜好.本人这里选择ubuntu10.04+virtualbox作为开发平台. 1.下载.安装VirtualBox     http:// ...

  6. 《Orange’s 一个操作系统的实现》3.保护模式4----LDT(Local Descriptor Table)

    还是在原有代码基础上进行修改,加入LDT的使用,代码分析如下(红色部分为新增代码): 本程序是在原有完成大内存读写测试完成后,调用局部任务显示字符L ; ======================= ...

  7. 《Orange's 一个操作系统的实现》学习笔记--LDT

    LDT(Local Descriptor Table)它和GDT差不多,都是描述符表(Descriptor Table)区别仅仅在于全局(Global)和局部(Local)的不同.局部描述符表可以有若 ...

  8. Orange‘s 一个操作系统的实现--Bochs遇到的问题

    1.Message: dlopen failed for module 'x': file not found 这是未安装bochs-x的缘故 解决方案: sudo apt-get install b ...

  9. orange's系统可以装mysql 吗?_bochs 2.4.2 ubuntu 安装运行问题《orange#39;s 一个操作系统的...

    用源码安装完后会遇到的问题: <1> 运行可能碰到如下问题: Event type: PANIC Device: [ ] Message: dlopen failed for module ...

  10. Orange's:一个操作系统的实现 Descriptor 3宏详解

    补充:关于GDT/LDT.段选择子和段描述符的解释       GDT/LDT:GDT/LDT是段描述符表,里面定义了每个段的段描述符的界限和属性,而段描述符的基址是在代码段中初始化的.        ...

最新文章

  1. HTTP 协议的通用头域via 的意义以及作用
  2. C#:消息队列应用程序
  3. js获取及判断按键的方法
  4. Ribbon负载均衡策略配置
  5. python单目运算_Python -- 数字
  6. 怎样理解Linux的文件系统
  7. Android 为控件设置阴影
  8. 有问有答 | AWS使用精华问答,带您开启 AWS 上的云计算之旅!
  9. 操作系统hpf算法事例_操作系统中常见算法汇总
  10. Repository 仓储,你的归宿究竟在哪?(一)-仓储的概念
  11. Spring/Spring boot正确集成Quartz及解决@Autowired失效问题
  12. 【离散数学】欧拉图与哈密顿图的区别
  13. MTK LED驱动异常检测步骤
  14. 论算法人的语言表达能力
  15. Strategy模式简述
  16. Windows系统中的睡眠时间和关闭屏幕时间的设置
  17. [MySQL光速入门]020 事务
  18. COERCE_DOUBLE的含义
  19. 初探Meterpreter-emaste_r
  20. c++primer读书笔记

热门文章

  1. Magento显示多货币,Magento 多货币设置
  2. LeetCode每日一题——无重复字符的最长子串
  3. C++编程语言中类对象的赋值与复制介绍(一)
  4. 用指针实现对二维数组元素的访问
  5. System.Data.OracleClient.OracleConnection的类型初始值设定项引发异常.
  6. 浅谈Js对象的概念、创建、调用、删除、修改!
  7. Makefile--基本规则(零)
  8. Spring事务-1
  9. Ksplice:不再重启你的Linux
  10. 文件读、写、追加的区别 Python