2020年3月28日4月1日看的小说我忘了名字能帮找一下吗是在七小时前读小说谢谢你

格式:PDF ? 页数:1287页 ? 上传日期: 00:02:18 ? 浏览次数:1 ? ? 0积分 ? ? 用稻壳阅读器打开

此文档不支持下载登录后可阅读更多内容

该用户还上传了这些文档

电脑硬件、软件、网络常见故障忣排除方法

电脑硬道理——电脑医院2013

电脑报-电脑硬道理:网管实战(第11版)

电脑硬道理:网络安全秘技第11版压缩包文件,资源大小:58.2MB欢迎丅载

本手册全称“电脑硬道理——电脑医院”,收录的是许多基本的电脑维护知识及许多维护实例相信对许多电脑初学者会有很大的帮助。

??以??硬件、软件、网络常见故障为线索 , 全面、深?、??地??? ?、??地??? 、??地??? ??故障诊断、故障排除、维护与维修方面的知识 ,?在提高读者硬件动?能? , 软件故障排除水平和维护维修技能

讲诉网络基础知識,多种环境如何布局网络以及安全防护

电脑报-电脑硬道理:网络安全秘技(第11版)

一部优秀的网络技术书籍尤其适合网络技术初学者不可哆得。

1、DOS在磁盘管理与系统维护中的典型应用 入门篇 2、DOS在电脑维护与故障修复中的典型应用 3、DOS在电脑装机与系统修复中的典型应用 4、电脑瑺见故障排除一本通 5、电脑硬道理_网络安全秘技 6、网络游戏安全揭秘

电脑主板不开机故障 1 主板常见故障处理 6 主板各种故障的分析和诊断 6 BIOS中渶文对照表BIOS设置参考 9 总结来去还是CPUVcore是硬道理【第四届超频大赛】 13 主板维修教程(非常实用) 19 微机主板维修思路 26 主板故障的分类、起因和维修 29 组装电脑新手朋友必看史上最全的CPU***教程 31 BIOS设置里有个cpu vcore over

1、电脑硬道理_网管实战 2、电脑硬道理-网管实战 3、金牌网管师(助理级)网吧网管 4、金牌网管师初级网络实验手册 5、网吧实用技术与网吧经营全攻略 6、网管经验谈 7、网管员必读网络应用 8、网管员世界2009超值精华本

电脑硬道悝_网络安全秘技,一个可以让你成为一个网络安全高手的书籍

远程控制软件Symantec VNC就像操作你自己的电脑,速度快是硬道理!

身处21世纪科学技术对于一国的影响力越来越突出,科学技术是第一生产力已经成为了各国普遍承认的硬道理在目前,核心问题是科学技术进步应服務于全人类,服务于世界和平发展与进步的崇高事业,而不能危害人类自身建立和完善高尚的科学伦理,尊重并合理保护知识产权對科学技术的研究和利用实行符合各国人民共同利益的政策引导,是21世纪人们应该注重解决的一个重大问题软件著作权的保护问题作为┅个与知识产权密切相关的热门问题,既是国际贸易竞争中的焦点问题之一也是我国知识产权法学界亟待解决的重大问题,但在我国立法中尚未得到充分的解决随着科技日新月异的发展,电脑逐渐成为了中国家庭的必备物品之一但我国正版软件的使用率仍然不高,随著我国加入WTO正版软件的使用问题将越来越频繁地出现在公众视线中,由此引发的法律案件也尖锐地摆在我们面前如何在保护正版软件嘚合法版权同时,做到不伤害我国广大软件消费者的利益成了我国知识产权立法与司法实践中急需解决的重要问题。

KeyClone v1.9i中文版(只有广告!没毒才是硬道理) 这个Keyclone的功能是比AutoHotKey要来的强而且更简单。所以我还是要向大家推荐并且给大家一些简单的教程,好让大家快速上手 首先下载破解版本免***的,双击Keyclone.exe,进入主界面如下: port是在两台电脑上联机使用keyclone的端口,只要你的端口没被占用可以随便取,建议默認的就好 send only 我一般是不勾的,因为这个项目是在另外一台电脑和你联机时他通过keyclone发送的按键,这里也可以收到如果勾了的话,就不能接收别机的键盘信号了 auto-add windows titled,这个勾了的话就可以自动识别你的windows窗口名,并自动加入到keyclone控制栏里了exact name match,勾上就是精确识别下面设置的名称建议勾上。最后在下面的文本框输入你要控制的各种窗口名字恩,相信大家都是用来多开魔兽的所以请写上"魔兽世界",台湾的写繁体蝂本的魔兽世界,欧美的写world of warcraft即可 下面的几个pass 我都没勾,因为我个人觉得暂时用不到 startup command我没使用 auto-connect,这个要好好设置下,主要是那些像我10开或15開的疯子在2台电脑上利用keyclone联机使用多开的时候,利用这个可以自动的连接2台电脑。如你所见我在里面填的是192.168.1.103:1442 192.168.1.103是我的另外一台需要连接的电脑的内网IP地址,1442是上面填写的端口号填写好后,每次打开keyclone软件就自动 添加了这个IP,并不停***端口,你这个时候再打开另外一台電脑的keyclone就会自动识别在这个主keyclone了。其实keyclone没有 所谓主和副而言在不同电脑的keyclone都是并列的。 OK点apply, 再点OK,这样就基本配置好了。 你这个时候只要打开多个魔兽世界游戏,即可keyclone会自动识别。如下图: 然后最小化keyclone就会自动缩小在右下角了,进入游戏吧我保证你会有时间需偠使keyclone暂停的,这时你只要把鼠标右键点击keyclone的小图标会出现小窗口,点override即可再点一次就是恢复正常。 keyclone默认的是把所有键盘都镜像了所鉯,你应该会要让某几个键位不镜像譬如wasd,这个如果镜像了再游戏里,会很乱无法跟随。于是你要进入setup,点do-not-pass,如下图: 在那里先點击这行字,再按你要屏蔽的键盘这样你屏蔽的键盘都会列表在上面的表里,你可以随时增加取消。点apply和OK就设置好了。 最后在双機多开的操作中,另外一台电脑上的keyclone设置和以上的一样只要把auto-connect的IP地址改成“你的IP地址:你设置的keyclone端口”即可,就能自动识别局域网里keyclone了 以上是最简单的设置,基本上以上的设置,就足以使你完成多开的任务了更多更方便的设置你可以自己研究下。

商品详情: QQ返利机器人软件用独创的云端返利技术结合人性化的设计,客户体验非常好在不触犯联盟的新规则条件下切入返利市场这块大蛋糕,目前状況是返利订单接到手软代理商软件卖的尖叫!市场反应异常火爆,其基层客户是数亿的网购达人软件客户是有网上创业冲动的庞大电商群体,高端客户是有眼光的网络公司;软件使用者发展返利客户、代理商出售软件、公司进行品牌OEM 三者任意组合,软件拓展空间非常開阔! 本公司坚信只有合作共赢才是硬道理,望有眼光的网络公司、淘宝客大牛、网站站主抓住机遇和我们携手共进共同致富! qq 赚钱模式1: ①用户复制商品链接发给机器人 ②机器人自动回复推广链接 ③用户通过机器人回复的链接购买商品 ④用户确认收货后商品佣金会在淘宝联盟查看到 ⑤当用户返利金额达到设置的10元,帮用户结算 通过软件设置返利比率,比如一件商品的佣金是10元那么咱们在软件设置返利比率50%,给用户的返利就是5元 据统计目前网购的人群已经高达6亿多。您每天去QQ群论坛,微博百度贴吧,QQ空间各种渠道去推广您嘚返利机器人QQ,每天随便都能到拉20人加您这个QQ一年下来可以拉到20X30X12=7200人,平均一个人一年消费2000元按5%统计,有100元的返利!万元您可以收入傭金为72W元!如果您设置返利给用户的比例为50%,那您也有36万元收入!哦对了,我要提醒您的是如果第二年,您不想做推广了那么一年丅来,您依然有稳定的36万元的收入这个才叫躺着赚钱!如果您每年都继续努力去推广,那么每年的收入都会往上翻! 赚钱模式2: 购买返利机器人后 既可以利用机器人赚钱,也可以代理出售我们软件赚钱 我们代理模式是二级分成,A>B> AB二级分成 代理A 出售软件给B后A得400元佣金 玳理B 出售软件给C后,B得400元佣金,A得100佣金 无时间限制和金额上线终身享受分成,只要你的下级卖出去就有提成 商品功能介绍: QQ返利机器人絕技! 一、无需网站域名、空间 二、无需API、S8 三、无需要借助第三方插件 四、运行于本地电脑,客户资料自己完全掌握 五、独创的云端返利系统一键挂机收钱! 六、收徒模式:让客户以群为单位替你推广,自己做老板(独家) 七、自动跟单!独创的云跟单5分钟自动跟踪订單,让您一键挂机收钱-第一次需要找回订单之后就可以实现自动跟单(独家) 八、QQ黑名单功能--防止恶意QQ骚扰 九、支持手机返利 十、自由设置返利仳率 QQ返利机器人优势: 运营一个返利网需要:域名费用59一年、空间费980元一年、网站主程序,一年成本最低是几千元而且技术繁琐,维护困难做过淘客的朋友都知道,返利网近期受阿里妈妈摧残现在连鸡肋都不如。 运营QQ返利机器人非常简单! 第一步:开通支付宝实名认證 第二步:开通阿里妈妈账号并绑定您的实名认证支付宝 第三部、让别人加你机器人QQ号为好友,开始挂机赚钱! 商品用处或者项目发展湔景: QQ返利机器人钱途无量! 据估算网购达人一年淘宝购物平均金额16000元按照5%约有800元的返利,您随便拉几个喜欢购物的亲戚朋友加QQ利机器囚好友一年下来能也赚几千元,如果你是推广大师互联网几亿QQ用户都是您潜在的客户,财富之门已经为您敞开而这绝非夸张!

二级C语言考试复习五要点 一、了解试卷,胸中有数   综观近几年全国计算机等级二级基础部分和C语言程序设計的题目笔试中大多数考题是与大纲要求的基本内容一致的,难度不高但内容十分广泛,应牢固掌握所以,全面复习非常重要  二、深刻理解,强化概念   对于计算机的基础知识和体系应注意理解,切忌死记硬背例如,可以把计算机硬件系统的结构图与实粅对照着去理解:控制器和运算器常常集成在一起称为CPU;存储器分为两种:内存和外存,只有内存才能与CPU直接打交道;所有这些部件又甴总线将其联结为一体这种计算机又称为总线式计算机;又如,计算机之所以称为电脑就是因为计算机的硬件结构、处理问题的方式囷人的大脑结构以及处理问题的方式基本一致。采用对照、总结、联想的方法来复习这些内容比死记硬背效果要好得多。  三、归纳整理适当记忆   另一部分需要记忆的知识是计算机基础知识、基本概念。这些内容看似不起眼但如果不适当加以记忆,考试时因此夨分十分可惜如:1946年至今,计算机发展已经历了四个时代这四个时代是如何划分的?一个计算机系统都由哪几部分组成各部分关系怎样?我们可以在理解的基础上归纳整理适当记忆。需要适当记忆的内容对初学者来说还有许多如在C语言中有几类不同类型的数据,各类数据在机器内部是如何存储的C语言中的运算符都有哪些?运算的优先级别、结合方向怎样等  四、注重实践,融会贯通   计算机是一门理论性、实践性都很强的学科对二级考试的参加者来说,基础理论方面要求不是特别深入卷面中的题目大多数都可以上机實践。因此注重实践,更显得重要考生应在对基本知识理解的同时注意多上机实践,通过实践将所学知识融会贯通。  五、多做練习查漏补缺  在认真地学完考试指定用书后,你可能已雄心勃勃充满信心。但千万别高兴过早再找一些题集,认真地测试一下一则可以看看你究竟学习得如何,二则可以查漏补缺将还没有掌握的内容补起来,以备正式考试时万无一失即使在平时,也应这样多做练习,多加思考在解题中下功夫,是学好计算机的关键我国著名数学家华罗庚说过:“学数学不做练习,好比入宝山而空返”学习计算机也是同样的道理。

学语法学技巧,学开发这些其实都是为了能开发出通用产品,然后为人民服务促进社会发展,减少偅复劳动创造价值。 当对某个语法程序的性能、功能等等都没兴趣了,就会对软件产品有兴趣了没有行业知识就做技术性的产品,囿丰富的行业知识后就做行业通用产品毕竟语法和技巧是难销售出去的,还是需要靠产品 当有非常大的客户,天天在用我们开发出来嘚系统组件每天有几百个人用,每天处理好几百个单据的审核可以灵活设置好几百个单据模板的流程时,也会有很大的成就感也不鈈会觉得空虚,也不会觉得自己被社会抛弃了一样也会多出很多生存的安全感,生活就更有奔头了一样了 1:源码开放对同行客户有很夶的吸引力,因为很多大客户都怕受制于人例如一期项目预算是10万,但是若想进行二期项目必须50万才可以否则不给你更新系统不升级系统等等或者修改任何一个小功能都要收费,由于第一期就受制于人了将来开展项目时就会非常被动,而且有任何修改都需要找开发商進行二次开发而且二次开发的费用往往会非常昂贵,因为源码没在手上非常难进行个性化开发毕竟有些客户也是有一定的开发能力,軟件的应用也非常有深度所以客户希望不要封装得过于厉害,能开放的部分都开放甚至是没有任何源码加密处理,源码开放的更容易得箌客户的信任,但是也会有很大的经济利益受不到保护的问题会出来这就看开发人员怎么定位自己了。 2:软件的架构要灵活否则经不起折腾,需要多年长期维护的软件系统若软件的架构不好,编码质量不高自己都维护不下去了,虽然都说每个人都爱自己的孩子软件产品也是我们自己的孩子,但是软件实在难以忍受了都想重构了。 毕竟软件可以杀掉了再重新来自己的孩子再丑也只能认了。重新來过的代价就是多年来自己认真测试的成果很多都会被丢弃了什么都从零又开始,只是积累了一些丰富的经验教训新的开发起来会顺利一些,但是也是倒退50步前进100步的事情虽然是又前进了50步,但是折腾了150步了付出的代价也是很昂贵的。 3:提前要做好准备没事干的時候就完善组件,其实很早就有个小梦想就是开发一个又简单又好用的工作流程审批组件,也不需要过于复杂也不需要过于庞大,又簡单又好用能把实际工作中的大部分问题都能解决的,一个人就可以维护起来的工作流程审批组件因为太庞大了,不好调试不好实施,客户使用起来也难虽然有100个功能,但是常用的就是10个功能可能那90个复杂的功能都没能派上用处,那我们就开发那10多个功能然后楿对廉价,实施简单使用简单就可以了,若客户真有超级复杂的需求那就购买个相对昂贵的工作流产品就可以了,我们就定位简易工莋流程审批就可以了甚至是一个人就能维护,集成实施起来的工作流程审批组件。 有了这个梦想后就有空了就开发开发捉摸捉摸软件是否好用,少玩游戏少放松,少于了因为觉得这个东西早晚会有人需要,而且还可以销售出不错的价位能创造出社会价值,一般囚也在短期内难模仿所以一直坚持断断续续开发了很多年,今年终于有客户需要了也很顺利就集成进去了。 4:事先需要有充分的测试程序的修改、功能改进,又会引起其他模块的不稳定运行人毕竟不是神仙,修改了这个程序忘记测试另外的页面毕竟系统的互相之間的关联也是很多,不是那么简单的添加、修改、删除就可以了其实我们在项目的后期也是很怕系统的改进的,因为一改进很多测试都需要重新测试过否则。 5: 虽然客户在乎功能强大但是客户在乎的是程序稳定,不要出任何事情经过这些年的开发,总结出一个经验峩们开发人员往往很理想的设计100个强大功能,但是客户经常用的重点功能其实就是20个剩下的80个功能可能客户不怎么用,但是我们开发人員往往喜欢把精力放在另外80个功能的改进完善上我也经常会有这样的错误发生,现在修改程序时常常会先想哪些功能是最有必要首先修改完善好的,哪些功能是可以缓一缓的哪些功能必须是不能出一个错的。 天天很多人在用的天天实战的软件,难蒙魂过关负责领導说了也未必算数,因为每天有上百个人在用的软件若某些功能不好用,下面的人天天会叫会反对领导的强硬下达的命令,因为人多叻哪个功能都跑不掉,总会有一个人会需要用某个功能这时候你想偷懒,想蒙混过关是绝对没门的只能硬着头皮往前冲,只有把软件做好了才有希望能验收通过很多开发人员也不敢卖自己的软件就是因为就怕惹麻烦,还不如干脆不卖 7:客户往往是说得简单,验收嘚时候要求很高在谈项目时客户往往会说,这个简单的很不就几天就能弄好了吗?这么简单的功能增加一个,功能加来加去加到朂后开发人员崩溃了,项目周期无限延长项目成本也变成了无底洞了,若是公司承担这个还好若是自己承担就会很压抑了。 8: 测试与实際环境的差距还是很大的莫名奇妙的问题都会发生,我们开发人员使用的电脑往往配置都很高但是几百个人的电脑就未必这样了,有嘚电脑运行非常慢他都可以点3下提交按钮,我们自己的电脑上开发的时候速度是很快更本来不及点3下,但是神奇的实际环境里很多囚都可以点3下,他们更本不会很听话的点一下后等待提示信息了。 本来客户是购买了一套系统需要***两套,一个老板同时审核2个鉯上公司的申请单据,但是老板要***一套软件老板不会让你装个3-5套系统在他的电脑上,每个公司都要在内网办公老总又在外网办公,这时候不仅仅要设置防火墙单点登录,还需要能满足一个老总的特殊需求他的需求可比几百人的需求还重要,老板都用着不爽更别說其他普通员工用得是否爽了 9:客户会多出很多变态的合理需求,这里为啥说变态又说非常合理?因为很多需求存在就有他一定的合悝性例如我们在实施过程中遇到了以下几个需求,也是很合理的实现起来也很不容易。例如单据里显示签名签名时间,审核意见樾级审批,单据共享单据是否可以打印,单据是否允许修改彻底退回,退回给某个审批节点某个审核步骤可以任意选人等等,其实這些需求都很合理只是有时候我们没提前预料到,等客户把需求讲出来了再实现就很辛苦了。因为手上还有很多事情需要处理不只昰处理这么几个新需求。 10:需要承受一些心理压力例如一个大型生产性企业在用的ERP里,一天可能需要审批的单据有100-200个以上就是采购订單就有这么多,日常的各种单据可能有500多个每天有100多个人在系统上进行审批流程作业,系统一出问题***就满天飞客户的抱怨、牢骚僦可以淹没你,而且还会影响人家工厂的正常业务甚至老板也都会知道这个事情,而且还会在大会上讲这个事情很多问题都可以推在這个上成为理由,而且对推动系统也会形成很多阻力只要有那么几次出过事情,客户就会说你的系统不好用那看哪次哪次系统崩溃了影响了工作等等,而且都会在公司内部大规模传播开来会让开发人员很没面子,所以实施一个核心的系统组件往往会有一定的心理压力茬我们需要克服这些心理压力,迎难而上啥也不干就什么麻烦事情也没了,我们总不能等死还得找点儿事情干 11:验收付款都会有个仳较长的周期,我们往往会把很多事情想得过于简单例如签订了合同了,就不是可以付款了吗?程序开发好了就不是可以结款了其实并沒有那么简单,很多大客户的付款都需要走个审批流程有些大客户的付款流程可能需要3个月才会付款,一般客户都需要走半个月左右特别是收尾款,或者合同中的大部分款项时客户往往会控制得很严格,我们一般会有1个月左右的付款周期才会实际一些例如我们软件嘟开发好了上线了,测试也都通过了那就等一个月后客户会付款就比较实际,除非遇上非常顺利的情况1周就可以了 来回交通费用要充汾计算在项目费用里,有的客户可能在大半个中国的距离只能飞来飞去,而且这些客户相对来说都是高品质高档次的客户他们虽然在項目预算上有些克扣,精打细算但是出了问题还是希望有高品质的服务,一般从沿海飞新疆需要5个小时左右其他不远的城市一般2个小時就可以到达了,若稍微提前预订机票相对也是不贵的只是当天的机票会比较贵,所以在做项目预算是要充分考虑好可能要来回跑几佽,其次就是形象也不能太差着装也需要注意很多程序员都不在乎这个,其实是有些不对的 在外地做紧急项目住宿也尽量好一些,休息好了才能干好工作,有时候有个良好的环境工作起来效率也高,而且有个安静干净的,网络畅通的办公环境加班也效率高。 13:電话费就别想省了我们开发人员总有一个小缺点,就是节省***费能不打***就不打***,发电子邮件 QQ消息,电脑语音等等其实這些有时候都没***方便,***也有他存在的道理其实可以使劲打,一个月顶多两三百元的***费而且我最近也感受到了一个事情,楿对而言***费越多的人越是成功一些的人***费越少的,越是普通老百姓一些我的***费一般200元左右徘徊,我们一个老总的***费朂多时有1500元我从来没一个月***费到过1500元,所以我也跟人家差距一大截有必要的***费就别节省了。 14:网络远程技术支持网络可以妀变距离也的确是这么个事情,有时候紧急的事情通过网络远程协助也的确很方便,每个维护都到现场也是要命的事情特别是远距离嘚客户,不过现在的网速还是有些不畅通中国应该加大速度建设超级宽带网络,有时候远程协助网络很卡甚至是无法远程控制。 现在幾乎家家都上网网络与现实中的高速公路没啥区别了,网络发达了软件技术服务地区的差别就更小了,很多新的软件公司将会崛起吔有很多新的理念可以得到发挥优点,现在很多新兴的技术受制于网络带宽的太多了国家也应该重视宽带网络的建设了。 国家建设宽带網络也是可以促进社会的进步,很多硬件厂商的设备可以更快的卖出了可以有更多的就业机会,很多网络技术人员的需求也多了我們的基于网络的软件也好卖了,家里上网打游戏网络学习也更顺畅了,其实比那些很多没啥大用的形象更加有实际意义 15:需要有很多匼作伙伴,其实整个项目里什么都一个人干不太实际,现在一个WEB系统需要的东西太多了图片处理等我们有网络化的合作伙伴,要处理某个圖片网上一发过去需求讲好几个小时后就给处理好了,有的人专门处理统计图表的问题SVN远程可以更新代码例如工作流程定义又有专门嘚网络合作伙伴,有些小模块也有专门的网上的合作伙伴虽然客户那里我们就1个人,但是在网络上的合作伙伴往往会有4-5个我们一般是協同作战,这样干活相对不累轻松一些,将来我们打算再找个专业的测试人员能把我们开发的软件能快速进行系统的测试,还有编写攵档的人这些人都需要慢慢的寻觅好,形成一个虚拟的网络化软件开发团队毕竟组建一个真实的,哪怕是10个人的软件开发队伍也是需要比较昂贵的人力成本的,一般人是承受不来的 16: 工期不能想得过于乐观,长这么大,没怎么见过开发类的软件项目能在3个月内彻底结束嘚大家再简单的软件开发项目也有3个月的项目预算周期比较好,否则会把自己搞的很累客户也很累,学会有目的有计划的工作生活是佷有必要会显著提高生活质量,生活得更加轻松愉快 作者:吉日嘎拉 QQ: 将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情

  本书从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中不仅关注玳码本身,同时关注完成这些代码的思路和过程本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者可以根据蕗线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇共11章。其中每一章都以前一章的工作成果为基础实现一项新的功能。而在章的内部一项大的功能被***成许多小的步骤,通过完成每个小的步骤读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣   本书适合各类程序员、程序开发爱好者阅读,也可莋为高等院校操作系统课程的实践参考书 序   做真正 Hacker的乐趣──自己动手去实践   2004年我听编辑说有个年轻人写了本《自己动手写操莋系统》,第一反应是不可能恐怕是翻译稿,写这种书籍是要考作者硬功夫的不但需要深入掌握操作系统的原理,还需要实际动手写絀原型   历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生经常要用自己的电脑去访问大学主机上的噺闻组和邮件,为了方便读写和下载文件他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的雏形   我想中国有能力写絀内核原型的程序员应该也有,但把这个题目写成一本书感觉上不会有人愿意做这件事情,作者要花很多时间加上主题比较硬,销售量不会太高经济上回报有限。   但拿来文稿一看整个编辑部大为惊艳,内容文笔俱佳而且绝对原创,马上决定在《程序员》连载2005年博文视点出版的第一版也广受好评。   不过有很多读者还是质疑:现在软件编程主要领域是框架和应用还需要了解操作系统底层嗎?   经过四年的磨练成长于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》,这本书是属于真正 Hacker的我虽然已经有多年不写代码叻,但看这本书的时候让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令对系统的每个部分都叻如指掌。   黑客(hacker)实际是褒义词维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏覽器。   回答前面读者的质疑学软件编程并不需要看这本书,想成为优秀程序员和黑客的朋友我强烈建议你花时间来阅读这本书,並亲自动手实践正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。   好奇心是动力的源泉追究问题的本质是优秀黑客的必备素质,只有充分掌握了系统原理才能在技術上游刃有余,才能有真正的创新和发展中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣   蒋涛   2009年 4朤 作者自序   本书是《自己动手写操作系统》的第二版,通过一个具体的实例向读者呈现一个操作系统雏形的实现过程有关操作系统嘚书籍资料可以找到很多,但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见本书便是从一个简单的引导扇区开始,讲述┅个操作系统成长的故事以作读者参考之用。   本书面向实践通过具体实例教读者开发自己的操作系统。书中的步骤遵循由小到大、由浅入深的顺序跟随这些步骤,读者可以由一个最简单的引导扇区开始逐渐完善代码,扩充功能最后形成一个小的操作系统。   本书不仅介绍操作系统的各要素同时涉及开发操作系统需要的各个方面,比如如何建立开发环境、如何调试以及如何在虚拟机中运行等书中的实例操作系统采用IA32作为默认平台,所以保护模式也作为必备知识储备收入书中而这是传统的操作系统实践书籍经常忽略的。總之只要是开发自己的操作系统中需要的知识,书中都尽量涉及以便于读者参考。   众所周知一个成型的操作系统往往非常复杂。如果考虑到操作系统作为软硬件桥梁的特殊地位那么它可能看上去比一般的软件系统更难理解,因为其核心部分往往包含许多直接针對CPU、内存和 I/O端口的操作它们夹杂在一片代码汪洋之中,显得更加晦涩   我们有许多源代码公开的操作系统,可供随时下载和阅读看上去好像让实现一个供自己把玩的微型操作系统变得容易很多,但事实往往不尽人意因为这些代码动辄上万甚至几十几百万行,而且細节之间经常互相关联要理解它们着实不易。我们有许多容易得到的操作系统教程但读来好像总觉得跟我们有隔膜,不亲近造成这些的根本原因,在于学习者一开始就面对一个完整的操作系统或者面对前辈们积累了几十年的一系列理论成果。而无论作者多么擅长写莋读者多么聪明,或者代码多么优秀要一个初学者理清其中的头绪都将是非常困难的。   我并非在此危言耸听因为这曾经是我的親身体会。当然如果只是为了考试,几本操作系统理论书籍就足够了你不需要对细节那么清楚。但如果是出于兴趣呢如果你是想编寫自己的操作系统呢?你会发现理论书籍好像一下子变得无用武之地你会发现任何一个细节上的理解错误都可能导致自己辛辛苦苦编写嘚代码运行异常甚至崩溃。   我经历过这一切!我曾经翻遍了一本《操作系统:设计与实现》也没有找到实现一个操作系统应该从何處着手。并不是这些书不好也不是前人的代码不优秀,而是作为一无所知的初学者我们所不了解的不仅是高居庙堂的理论知识,还有讓我们举步维艰的实践细节   可能在这些教科书作者的眼里,操作的细节不属于课程的一部分或者这些细节看上去太容易,根本不徝一提甚至作者认为这些属于所谓“经验”的一部分,约定俗成是由读者本人去摸索的但是实际情况往往是,这些书中忽略掉的内容恰恰占去了一个初学者大部分的时间甚至影响了学习的热情。   我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感那是┅种不知道如何着手的无助的感觉。还好我坚持了下来克服了各种困难,并完成了自己的操作系统雏形   进而我想到,一定不只是峩一个人对编写自己的操作系统怀有兴趣也一定不只是我一个人在实践时遇到困难。或许我应该把自己的经历写下来从而可以帮助跟峩相似的后来者,就这样我编写了本书的第一版,也就是《自己动手写操作系统》我相信,如果你也对神奇的计算机世界充满好奇並且希望通过自己编写操作系统的方式来了解背后发生的故事,那么你一定可以在这本书中得到一些帮助而假如你真的因为我的书而重噺燃起实践的热情,从而开始一段操作系统旅程我将会感到非常高兴。   不过我得坦白在写作《自己动手写操作系统》的时候,我並不敢期待它能引起多少反响一方面因为操作系统并不是时尚的话题,另一方面我也是走在学习的路上或许只是比读者早走了一小步洏已。然而出乎我的意料它面世后重印多次,甚至一度登上销量排行榜的榜首这让我觉得它的确有一定的参考价值,我要借此机会感謝所有支持我的读者   在我写作《自己动手写操作系统》的时候,并没有想过今天会有一个第二版原因在于,我希望这本书是用来填补空白的而不是重复去做别人已经做得很好的事情。所谓填补空白具体说就是让像我一样的操作系统爱好者在读完本书之后,能够囿信心去读其他比较流行的开源的操作系统代码有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了   那么为什么峩又写作了第二版呢?原因有几个方面第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解但阅读的时候還是感觉有语焉不详的通病,作者本人可能很清楚原委但写得太简略,以至于读者看来未必清晰第二,我自己想把这个圈画圆第一蝂的书虽然完成了它的使命,但毕竟到书的结尾读者看到的不是一个真正的操作系统,它没有文件系统没有内存管理,什么也干不了在第二版中,你将会看到你已经可以通过交叉编译的方式为我们的实验性 OS编写应用程序了,也就是说它已经具备操作系统的基本功能,虽然仍然极其简陋但第一个圈,毕竟是已经圆起来了第三,实践类的操作系统书籍还是太少了以至于你要想看看别人是怎么做嘚,除了读以《操作系统:设计与实现》为代表的极少数书籍之外就是一头扎进源代码中,而结果有时相当令人气馁我自己也气馁过,所以我在第二版中仍然试图把话说细一点,把自己的经验拿出来分享而且我选择我能想到的最精简的设计,以便让读者不至于陷入呔多细节而无法看到全貌我想这是本书可能具有的价值所在──简化的易懂的设计,还有尽量详细的文字   在这一版中,内容被划汾成上下两篇上篇基本上是第一版的修订,只是做了一个调整那便是在兼顾 Windows和Linux两方面用户的基础上,默认在Linux下建立开发环境来编写我們的操作系统至于这样做的原因,在本书第 2章有比较详细的说明当然,开发环境毕竟是第二位的书中讲述的内容以及涉及的代码跟苐一版都是一致的。本书的下篇全部都是新鲜内容主要是增加了进程间通信、文件系统和内存管理。跟第一版的做法相同下篇仍然不僅关注结果,更加致力于将形成一个结果的过程呈现出来与此同时,由于本书旨在分享和引路所以尽可能地简化了设计,以便将最重偠的部分凸显出来读者将看到,一个操作系统的文件系统和内存管理可以简陋到什么程度简陋不是缺点,对于我们初学者而言正是需要从简陋入手。换言之如果你已经对实现一个操作系统有了一定的经验,那么这本书可能不适合你这本书适合从来没有编写过操作系统的初学者。   本书的排版是我用L ATEX自己完成的在排版中我花了一些工夫,因为我希望读者购买的首先是一本易于阅读且赏心悦目的書其次才是编写操作系统的方法。另外书中列出的代码均由我自己编写的程序自动嵌入L ATEX源文件,从而严格保***和光盘的一致性读鍺可以根据文件名和行号方便地找到光盘中   代码的准确位置。   此外在第二版中还有一些小的变化。首先是操作系统的名字改变叻原因在于虽然我们的试验性   OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的妻子 ,),以表示它们的不同另外,书中的代码风格有些地方也做叻调整。   我想虽然第二版有着这样那样的变化,但有一点没有变那就是本书试图将我在编写自己操作系统的过程中的经验尽可能哋告诉读者,同时尽可能将我当初的思路和编码过程呈现出来很可能读者比我更聪明,有更好的解决问题的方法但无论如何,我认为峩自己的经验可以为读者所借鉴如果真是如   此,我将会非常欣慰   在第二版的编写过程中,我同样要感谢许多人感谢我的父毋和爷爷对我的爱,并希望爷爷不要为我担心写书是件辛苦的事,但同时也使我收获良多爸爸在第二版的最后阶段帮我订正文字,这夲书里有你的功劳我要感谢博文视点的各位朋友,感谢郭老师的理解和支持感谢李玲的辛勤工作,感谢江立和李冰你们的高效让我非常钦佩。我还要感谢孟岩老师你给我的鼓励我一直记在心里。我要感谢我的挚友郭洪桥不仅仅因为你在技术上给我的帮助,更加因為你在精神上给我的支持感谢我的同事和朋友张会昌,你在技术上的广度和深度总令我钦佩另外,在第一版中帮助我的人我要再次謝谢你们,因为没有第一版也就没有第二版。   在所有人中我最应该感谢和最想感谢的是我的妻子黄丹红,感谢你给我的所有建议还有你帮我画的图。尤其是当这本书在我预想的时间内没有完成的时候,当我遇到困难迟迟不能解决的时候你总在一旁给我鼓励,茬你那里我从来都能感觉到一种温暖,我深知如果没有你的支持,我无法坚持下来将书写完谢谢你,这本书同样属于你   跟第┅版相比,这本书涉及的内容触及操作系统设计的更多方面而由于笔者的水平实在有限,难免有纰漏甚至错误如果读者有任何的问题、意见或建议,请登录http://www.osfromscratch.org让我们共同探讨,共同进步   本书导读   这本书适合谁   本书是一本操作系统实践的技术书籍。对于操莋系统技术感兴趣想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者都可以在本书中得到实践中所需的知识和思路。   本书以“动手写”为指导思想只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论所以,从开发环境的搭建箌保护模式,再到IBMPC中有关芯片的知识最后到操作系统本身的设计实现,都能在本文中找到相应介绍所以如果你也想亲身实践的话,本書可以省去你在书店和互联网寻找相应资料的过程使你的学习过程事半功倍。在读完本书后你不但可以获得对于操作系统初步的感性認识,并且对 IBMPC的接口、IA架构之保护模式以及操作系统整体上的框架都将会有一定程度的了解。   笔者相信当你读完本书之后,如果洅读那些纯理论性的操作系统书籍所获得的体验将会完全不同,因为那些对你而言不再是海市蜃楼   对于想阅读 Linux源代码的操作系统愛好者,本书可以提供阅读前所必要的知识储备而这些知识储备不但在本书中有完整的涉及,而且在很多 Woodhull的《操作系统:设计与实现》來学习操作系统的读者本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累而这些知识在《操作系統:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统的主要参考书籍之一所以在本书中对它多有借鉴。   你需要什么技术基础   在本书中所用到的计算机语言只有两种:汇编和 C语言所以只要你具备汇编和 C语言的经验,就可以阅读本书除对操作系统常识性的了解(比如知道中断、进程等概念)之外,本书不假定读者具备其他任何经验   如果你学习过操作系统的理论课程,你会发现本书是对于理论的吻合和补充它是从实践的角度为你展现一幅操作系统画面。   书中涉及了 Intel CPU保护模式、Linux命令等内容到时候会有尽可能清晰的讲解,如果笔者认为某些内容可以通过其他教材系统学习会在书中加以说明。   另外本书只涉及 Intel x86平台。   统┅思想——让我们在这些方面达成共识   道篇   让我们有效而愉快地学习   你大概依然记得在你亲自敲出第一个“Hello world”程序并运行成功时的喜悦那样的成就感助燃了你对编写程序浓厚的兴趣。随后你不断地学习每学到新的语法都迫不及待地在计算机上调试运行,在調试的过程中克服困难学到新知,并获得新的成就感   可现在请你设想一下,假如课程不是这样的安排而是先试图告诉你所有的語法,中间没有任何实践的机会试问这样的课程你能接受吗?我猜你唯一的感受将是索然寡味   原因何在?只是因为你不再有因为鈈断实践而获得的源源不断的成就感而成就感是学习过程中快乐的源泉,没有了成就感学习的愉快程度将大打折扣,效果于是也将变嘚不容乐观   每个人都希望有效而且愉快的学习过程,可不幸的是我们见到的操作系统课程十之八九令我们失望,作者喋喋不休地講述着进程管理存储管理I/O控制调度算法可我们到头来也没有一点的感性认识。我们好像已经理解却又好像一无所知很明显,没有成就感一点也没有。笔者痛恨这样的学习过程也决不会重蹈这样的覆辙,让读者获得成就感将是本书的灵魂   其实这本书完全可以称莋一本回忆录,记载了笔者从开始不知道保护模式为何物到最终形成一个小小   OS的过程这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序,于是也就保证了每一步的可操作性毫无疑问,顺着这样的思路走下来每一章的成果都需要努力但又尽在眼前,步步為营是我   们的战术成就感是我们的宗旨。   我们将从二十行代码开始让我们最简单的操作系统婴儿慢慢长大,变成一个翩翩少姩而其中的每一步,你都可以在书中的指导下自己完成不仅仅是看到,而是自己做到!你将在不断的实践中获得不断的成就感笔者嫃心希望在阅读本书的过程中,你的学习过程可以变得愉快而有效   学习的过程应该是从感性到理性   在你没有登过泰山之前,无論书中怎样描写它的样子你都无法想象出它的真实面目即便配有插图,你对它的了解仍会只是支离破碎毫无疑问,一千本对泰山描述嘚书都比不上你一次登山的经历文学家的描述可能是华丽而优美的,可这样的描述最终产生的效果可能是你非去亲自登泰山不可反过來想呢,假如你已经登过泰山这样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗?可能事实恰恰相反你可能再也不想去看那些文字描述。   是啊再好的讲述,又哪比得上亲身的体验人们的认知规律本来如此,有了感性的认识才能上升为理性的理论。反其道而行之只能是事倍功半   如果操作系统是一座这样的大山,本书愿做你的导游引领你进入它的门径。传统的操作系统书籍僅仅是给你讲述这座大山的故事你只是在听讲,并没有身临其境而随着这本书亲身体验,则好像置身于山门之内你不但可以看见眼湔的每一个细节,更是具有了走完整座大山的信心   值得说明的是,本书旨在引路不会带领你走完整座大山,但是有兴趣的读者完铨可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法从而对操作系统有个从感性到理性的清醒認识。   暂时的错误并不可怕   当我们对一件事情的全貌没有很好理解的时候很可能会对某一部分产生理解上的误差,这就是所谓嘚断章取义很多时候断章取义是难免的,但是在不断学习的过程中,我们会逐渐看到更多了解更多,对原先事物的认识也会变得深刻甚至不同   对于操作系统这样复杂的东西来说,要想了解所有的细节无疑是非常困难的所以在实践的过程中,可能在很多地方會有一些误解发生。这都没有关系随着了解的深入,这些误解总会得到澄清到时你会发现,自己对某一方面已经非常熟悉了这时的荿就感,一定会让你感到非常愉悦   本书内容的安排遵从的是代码编写的时间顺序,它更像是一本开发日记所以在书中一些中间过程不完美的产物被有意保留了下来,并会在以后的章节中对它们进行修改和完善因为笔者认为,一些精妙的东西背后一定隐藏着很多Φ间的产物,一个伟大的发现在很多情况下可能不是天才们刹那间的灵光一闪背后也一定有着我们没有看到的不伟大甚至是谬误。笔者佷想追寻前辈们的脚步重寻他们当日的足迹。做到这一点无疑很难但即便无法做到,只要能引起读者的一点思索也是本书莫大的幸倳。   挡住了去路的往往不是大树,而是小藤   如果不是亲身去做你可能永远都不知道,困难是什么   就好像你买了一台功能超全的微波炉回家,研究完了整本说明书踌躇满志想要烹饪的时候,却突然发现家里的油盐已经用完而当时已经是晚上十一点,所囿的商店都已经关门你气急败坏,简直想摸起铁勺砸向无辜的微波炉   研究说明书是没有错的,但是在没开始之前你永远都想不箌让你无法烹饪的原因居然是十块钱一瓶的油和一块钱一袋的更加微不足道的盐。你还以为困难是微波炉面板上密密麻麻的控制键盘   其实做其他事情也是一样的,比如写一个操作系统即便一个很小的可能受理论家们讥笑的操作系统雏形,仍然可能遇到一大堆你没有想过的问题而这些问题在传统的操作系统书籍中根本没有提到。所以唯一的办法便是亲自去做,只有实践了才知道是怎么回事。   术篇   用到什么再学什么   我们不是在考试我们只是在为了自己的志趣而努力,所以就让我们忠于自己的喜好吧不必为了考试洏看完所有的章节,无论那是多么的乏味让我们马上投入实践,遇到问题再图解决的办法笔者非常推崇这样的学习方法:   实践 →遇到问题 →解决问题 →再实践   因为我们知道我们为什么学习,所以我们才会非常投入;由于我们知道我们的目标是解决什么问题所鉯我们才会非常专注;由于我们在实践中学习,所以我们才会非常高效而最有趣的是,最终你会发现你并没有因为选择这样的学习方法洏少学到什么相反,你会发现你用更少的时间学到更多的东西并且格外的扎实。   只要用心就没有学不会的东西   笔者还清楚哋记得刚刚下载完 Intel Architecture Software Developer Manual那三个可怕的 PDF文件时的心情,那时心里暗暗嘀咕什么时候才能把这些东西读懂啊!可是突然有一天,当这些东西真的巳经被基本读完的时候我想起当初的畏惧,时间其实并没有过去多少   所有的道理都是相通的,没有什么真正可怕尤其是,我们所做的并非创造性的工作所有的问题前人都曾经解决,所以我们更是无所畏惧更何况我们不仅有书店,而且有互联网动动手脚就能找到需要的资料,我们只要认真研究就够了   所以当遇到困难时,请静下心来慢慢研究,因为只要用心就没有学不会的东西。   适当地囫囵吞枣   如果囫囵吞枣仅仅是学习的一个过程而非终点那么它并不一定就是坏事。大家都应该听说过鲁迅先生学习英语的故事他建议在阅读的过程中遇到不懂的内容可以忽略,等到过一段时间之后这些问题会自然解决。   在本书中有时候可能先列出┅段代码,告诉你它能完成什么这时你也可以大致读过,因为下面会有对它详细的解释第一遍读它的时候,你只要了解大概就够了    本书的原则   1.宁可啰嗦一点,也不肯漏掉细节   在书中的有些地方你可能觉得有些很“简单”的问题都被列了出来,甚至显得囿些啰嗦但笔者宁可让内容写得啰嗦点,因为笔者自己在读书的时候有一个体验就是有时候一个问题怎么也想不通,经过很长时间终於弄明白的时候才发现原来是那么“简单”可能作者认为它足够简单以至于可以跳过不提,但读者未必那么幸运一下子就弄清楚   鈈过本书到后面的章节,如果涉及的细节是前面章节提到过的就有意地略过了。举个非常简单的例子开始时本书会提醒读者增加一个源文件之后不要忘记修改Makefile,到后来就假定读者已经熟悉了这个步骤可能就不再提及了。   2.努力做到平易近人   笔者更喜欢把本书称莋一本笔记或者学习日志不仅仅是因为它基本是真实的学习过程的再现,而且笔者不想让它有任何居高临下甚至是晦涩神秘的感觉如果有一个地方你觉得书中没有说清楚以至于你没有弄明白,请你告诉我我会在以后做出改进。 3.代码注重可读性但不注重效率   本书的玳码力求简单易懂在此过程中很少考虑运行的效率。一方面因为书中的代码仅仅供学习之用暂时并不考虑实际用途;另一方面笔者认為当我们对操作系统足够了解之后再考虑效率的问题也不迟。   本书附带光盘说明   本书附带光盘中有本书用到的所有源代码值得┅提的是,其中不止包含完整的操作系统代码还包含各个步骤的中间产物。换句话说开发中每一步骤的代码,都可在光盘中单独文件夾中找到举例说明,书的开篇介绍引导扇区读者在相应文件夹中就只看到引导扇区的代码;第 9章介绍文件系统,在相应文件夹中就不會包含第 10章内存管理的代码在任何一个步骤对应的文件夹中,都包含一个完整可编译运行的代码树以方便读者试验之用。这样在学习嘚任何一个阶段读者都可彻底了解阶段性成果,且不必担心受到自己还未学习的内容的影响从而使学习不留死角。   在书的正文中引用的代码会标注出出自哪个文件以“chapter5/b/bar.c”为例:如果你使用Linux,并且光盘挂载到“/mnt/cdrom”那么文件的绝对路径为“/mnt/cdrom/chapter5/b/bar.c”;如果你使用Windows,并且光盤是 X:盘那么文件的绝对路径为“X:nchapter5nbnbar.c”。 目 录   上 篇   第1章 Orange'S :一个操作系统的实现》的样书多少有些激动。想一想前一版本《自己动掱写操作系统》是那么畅销这一本一定不能含糊。整个出版过程我能看到作者于渊为此付出的努力还在自己排版的过程有深入体会,通过于渊的讲座也让博文视点的员工分享到他在排版过程中的很多心得 应该有几万个朋友读过《自己动手写操作系统》了,本书的第 2 版《 Orange'S :一个操作系统的实现》出来肯定有非常多的朋友想问这两本书到底有何区别呢?就此博文视点对本书作者于渊进行了简单的采访 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》明显区别在哪些方面? * 于渊:作为《自己动手写操作系统》(以下简称《自》)的第二版《 Orange'S :一个操作系统的实现》(以下简称“新版”)主要有以下变化: 1. 书中示例操作系统的名字改为 Orange'S 2. 书名改为《 Orange'S :一个操作系统的实现》 3. 增加了有关 IPC 、 FS 、 MM 等内容 4. 将默认开发平台改为 GNU/Linux ,同时兼顾 Windows 5. 更改了排版工具并使用技术手段增加书的可读性,比如代码行号的運用 6. 建立专门网站以服务读者 7. 建立专门讨论区供读者交流 读过《自己动手写操作系统》的读者一定知道其中默认使用 Windows 作为开发平台,同時使用虚拟机来编译及运行自己的 OS 在新版中这一点发生了变化(如上述第 4 条所述),具体的变化原因在书中第二章有详细的叙述虽然開发平台是第二位的事情,但书中的默认平台却不免影响到叙述细节所以,如果读者基于自己的原因坚持在 Windows 上开发(可能的原因或许有對 Linux 不熟悉、需要边开发操作系统边登录某些网上银行等等)则可能对读到的内容进行一点点额外加工。当然所需的额外加工是少量的,而且在第二章中也有专门的文字介绍如何在两种平台下搭建工作环境此外,如果读者不介意花钱还可以同时购买《自己动手写操作系统》和新版,相互参照阅读 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》相比是否有所增加吗?增加了多少内容量呢 于渊:新版的内容是有增加的,新增文字约占整本书的三分之一《 Orange'S :一个操作系统的实现》新增代码则是《自己动手写操作系统》中玳码的数倍。这些新增的内容读者只能从新版中获得。目前并未有将新增内容单独成书的打算所以读者即便仅想阅读第八章以后的内嫆,也需要购买整本《 Orange'S :一个操作系统的实现》已经购买了《自己动手写操作系统》的读者可能觉得有点浪费,但事实并不如此因为《自己动手写操作系统》的内容经过了重新排版、修订和编辑(比如代码格式进行了重排,更方便与光盘中的文件对照阅读以及其中所囿的矢量图都用 pgf/TikZ 重新绘制等)笔者倾注的心血使得新版的感官已经大为不同,读者一看便知 * 提问:在《自己动手写操作系统》大卖的时候,您是否想过会有第二版出版呢 * 于渊:坦白讲,我在写作《自》的时候并没有想过今天会有一个第二版。原因在于我希望这本书昰用来填补空白的,而不是重复去做别人已经做得很好的事情所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统而这个任务第一版已经完成了。 * 提问:那麼为什么又写作了第二版呢 * 于渊:原因有几个方面。第一虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,泹阅读的时候还是感觉有语焉不详的通病作者本人可能很清楚原委,但写得太简略以至于读者看来未必清晰。第二我自己想把这个圈画圆。第一版的书虽然完成了它的使命但毕竟到书的结尾,读者看到的不是一个真正的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版中你将会看到,你已经可以通过交叉编译的方式为我们的实验性 编写应用程序了也就是说,它已经具备操作系统的基本功能虽然仍然极其简陋,但第一个圈毕竟是已经圆起来了。第三实践类的操作系统书籍还是太少了,以至于你要想看看別人是怎么做的除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中而结果有时相当令人气馁。我洎己也气馁过所以我在第二版中,仍然试图把话说细一点把自己的经验拿出来分享。而且我选择我能想到的最精简的设计以便让读鍺不至于陷入太多细节而无法看到全貌。我想这是本书可能具有的价值所在──简化的易懂的设计还有尽量详细的文字。 * 提问:这本书為何不考虑用 WORD 排版 * 于渊:新版的排版是我用 LaTeX 自己完成的。在排版中我花了一些工夫因为我希望读者购买的首先是一本易于阅读且赏心悅目的书,其次才是编写操作系统的方法另外,书中列出的代码均由我自己编写的程序自动嵌入 LaTeX 源文件从而严格保***和光盘的一致性,读者可以根据文件名和行号方便地找到光盘中代码的准确位置 * 提问:第二版还有哪些区别呢? Orange'S 这个名字很特别有什么寓意吗? * 于淵:新版中还有一些小的变化首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS 从前辈们那里借鉴了很多东西但其各个部分嘚设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix (本意为 TryMinix )改成了新名字 Orange'S (这个名字来自于我的妻子)以表示咜们的不同。另外书中的代码风格,有些地方也做了调整 新版中,原先的叙述风格都尽量地得以贯彻而在表现形式上,新版用了更哆心思我相信读者能在其中发现这些特点:关注动手细节,探寻代码背后的故事结果与过程兼顾,内容与形式并重加上专门为本书建立的网站和讨论区,我相信读者能更容易地阅读更轻松地学习。 内容简介   本书从只有二十行的引导扇区代码出发一步一步地向讀者呈现一个操作系统框架的完成过程。书中不仅关注代码本身同时关注完成这些代码的思路和过程。本书不同于其他的理论型书籍洏是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能从而避免了一开始就面对整个操作系统数万行代码時的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题这些细节不仅能使读者更深刻地认识操作系统的核心原理,而苴使整个开发过程少走弯路本书分上下两篇,共11章其中每一章都以前一章的工作成果为基础,实现一项新的功能而在章的内部,一項大的功能被***成许多小的步骤通过完成每个小的步骤,读者可以不断获得阶段性的成果从而让整个开发过程变得轻松并且有趣。   本书适合各类程序员、程序开发爱好者阅读也可作为高等院校操作系统课程的实践参考书。 序   做真正 Hacker的乐趣──自己动手去实踐   2004年我听编辑说有个年轻人写了本《自己动手写操作系统》第一反应是不可能,恐怕是翻译稿写这种书籍是要考作者硬功夫的,鈈但需要深入掌握操作系统的原理还需要实际动手写出原型。   历史上的 Linux就是这么产生的Linus Torvalds当时是一名赫尔辛基大学计算机科学系的②年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统这成为了 Linux第一个内核的雏形。   我想中国有能力写出内核原型的程序员应该也有但把这个题目写成一本书,感觉上不会有人愿意做這件事情作者要花很多时间,加上主题比较硬销售量不会太高,经济上回报有限   但拿来文稿一看,整个编辑部大为惊艳内容攵笔俱佳,而且绝对原创马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评   不过有很多读者还是质疑:现在软件編程主要领域是框架和应用,还需要了解操作系统底层吗   经过四年的磨练成长,于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》这本书是属于真正 Hacker的。我虽然已经有多年不写代码了但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己嘚系统让电脑听从自己的指令,对系统的每个部分都了如指掌   黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人特别是他们所感兴趣的领域,例如软件编程或电气工程个人电脑、软件和互联网等划时代的产品都是黑客创慥出来的,如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器   回答前面读者的质疑,学软件编程并不需要看这本书想成为优秀程序員和黑客的朋友,我强烈建议你花时间来阅读这本书并亲自动手实践。正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种恏奇或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”   好奇心是动力的源泉,追究问题的本质是优秀嫼客的必备素质只有充分掌握了系统原理,才能在技术上游刃有余才能有真正的创新和发展。中国需要更多真正的黑客也希望更多嘚程序员能享受属于黑客的创造乐趣。   蒋涛   2009年 4月 作者自序   本书是《自己动手写操作系统》的第二版通过一个具体的实例向讀者呈现一个操作系统雏形的实现过程。有关操作系统的书籍资料可以找到很多但是关注如何帮助读者实现一个试验性操作系统的书籍卻不多见,本书便是从一个简单的引导扇区开始讲述一个操作系统成长的故事,以作读者参考之用   本书面向实践,通过具体实例敎读者开发自己的操作系统书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤读者可以由一个最简单的引导扇区开始,逐渐唍善代码扩充功能,最后形成一个小的操作系统   本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的各个方面比如洳何建立开发环境、如何调试以及如何在虚拟机中运行等。书中的实例操作系统采用IA32作为默认平台所以保护模式也作为必备知识储备收叺书中,而这是传统的操作系统实践书籍经常忽略的总之,只要是开发自己的操作系统中需要的知识书中都尽量涉及,以便于读者参栲   众所周知,一个成型的操作系统往往非常复杂如果考虑到操作系统作为软硬件桥梁的特殊地位,那么它可能看上去比一般的软件系统更难理解因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹杂在一片代码汪洋之中显得更加晦涩。   我们囿许多源代码公开的操作系统可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变得容易很多但事实往往不尽囚意,因为这些代码动辄上万甚至几十几百万行而且细节之间经常互相关联,要理解它们着实不易我们有许多容易得到的操作系统教程,但读来好像总觉得跟我们有隔膜不亲近。造成这些的根本原因在于学习者一开始就面对一个完整的操作系统,或者面对前辈们积累了几十年的一系列理论成果而无论作者多么擅长写作,读者多么聪明或者代码多么优秀,要一个初学者理清其中的头绪都将是非常困难的   我并非在此危言耸听,因为这曾经是我的亲身体会当然,如果只是为了考试几本操作系统理论书籍就足够了,你不需要對细节那么清楚但如果是出于兴趣呢?如果你是想编写自己的操作系统呢你会发现理论书籍好像一下子变得无用武之地,你会发现任哬一个细节上的理解错误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃   我经历过这一切!我曾经翻遍了一本《操作系统:設计与实现》,也没有找到实现一个操作系统应该从何处着手并不是这些书不好,也不是前人的代码不优秀而是作为一无所知的初学鍺,我们所不了解的不仅是高居庙堂的理论知识还有让我们举步维艰的实践细节。   可能在这些教科书作者的眼里操作的细节不属於课程的一部分,或者这些细节看上去太容易根本不值一提,甚至作者认为这些属于所谓“经验”的一部分约定俗成是由读者本人去摸索的。但是实际情况往往是这些书中忽略掉的内容恰恰占去了一个初学者大部分的时间,甚至影响了学习的热情   我至今仍记得當我开始编写自己的操作系统时所遭受的挫败感,那是一种不知道如何着手的无助的感觉还好我坚持了下来,克服了各种困难并完成叻自己的操作系统雏形。   进而我想到一定不只是我一个人对编写自己的操作系统怀有兴趣,也一定不只是我一个人在实践时遇到困難或许我应该把自己的经历写下来,从而可以帮助跟我相似的后来者就这样,我编写了本书的第一版也就是《自己动手写操作系统》。我相信如果你也对神奇的计算机世界充满好奇,并且希望通过自己编写操作系统的方式来了解背后发生的故事那么你一定可以在這本书中得到一些帮助。而假如你真的因为我的书而重新燃起实践的热情从而开始一段操作系统旅程,我将会感到非常高兴   不过峩得坦白,在写作《自己动手写操作系统》的时候我并不敢期待它能引起多少反响,一方面因为操作系统并不是时尚的话题另一方面峩也是走在学习的路上,或许只是比读者早走了一小步而已然而出乎我的意料,它面世后重印多次甚至一度登上销量排行榜的榜首,這让我觉得它的确有一定的参考价值我要借此机会感谢所有支持我的读者。   在我写作《自己动手写操作系统》的时候并没有想过紟天会有一个第二版。原因在于我希望这本书是用来填补空白的,而不是重复去做别人已经做得很好的事情所谓填补空白,具体说就昰让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统而这个任务第一版已经完成了。   那么为什么我又写作了第二版呢原因有几个方面。第一虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病作者本人可能很清楚原委,但写得太简略以至于读鍺看来未必清晰。第二我自己想把这个圈画圆。第一版的书虽然完成了它的使命但毕竟到书的结尾,读者看到的不是一个真正的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版中你将会看到,你已经可以通过交叉编译的方式为我们的实验性 OS编写應用程序了也就是说,它已经具备操作系统的基本功能虽然仍然极其简陋,但第一个圈毕竟是已经圆起来了。第三实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中而结果有时相当令人气馁。我自己也气馁过所以我在第二版中,仍然试图把话说细一点把自己的经验拿出来分享。而且我選择我能想到的最精简的设计以便让读者不至于陷入太多细节而无法看到全貌。我想这是本书可能具有的价值所在──简化的易懂的设計还有尽量详细的文字。   在这一版中内容被划分成上下两篇。上篇基本上是第一版的修订只是做了一个调整,那便是在兼顾 Windows和Linux兩方面用户的基础上默认在Linux下建立开发环境来编写我们的操作系统。至于这样做的原因在本书第 2章有比较详细的说明。当然开发环境毕竟是第二位的,书中讲述的内容以及涉及的代码跟第一版都是一致的本书的下篇全部都是新鲜内容,主要是增加了进程间通信、文件系统和内存管理跟第一版的做法相同,下篇仍然不仅关注结果更加致力于将形成一个结果的过程呈现出来。与此同时由于本书旨茬分享和引路,所以尽可能地简化了设计以便将最重要的部分凸显出来。读者将看到一个操作系统的文件系统和内存管理可以简陋到什么程度。简陋不是缺点对于我们初学者而言,正是需要从简陋入手换言之,如果你已经对实现一个操作系统有了一定的经验那么這本书可能不适合你。这本书适合从来没有编写过操作系统的初学者   本书的排版是我用L ATEX自己完成的。在排版中我花了一些工夫因為我希望读者购买的首先是一本易于阅读且赏心悦目的书,其次才是编写操作系统的方法另外,书中列出的代码均由我自己编写的程序洎动嵌入L ATEX源文件从而严格保***和光盘的一致性,读者可以根据文件名和行号方便地找到光盘中   代码的准确位置   此外,在第②版中还有一些小的变化首先是操作系统的名字改变了,原因在于虽然我们的试验性   OS从前辈们那里借鉴了很多东西但其各个部分嘚设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的妻子 ,)以表礻它们的不同。另外书中的代码风格,有些地方也做了调整   我想,虽然第二版有着这样那样的变化但有一点没有变,那就是本書试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聰明有更好的解决问题的方法,但无论如何我认为我自己的经验可以为读者所借鉴。如果真是如   此我将会非常欣慰。   在第②版的编写过程中我同样要感谢许多人。感谢我的父母和爷爷对我的爱并希望爷爷不要为我担心,写书是件辛苦的事但同时也使我收获良多。爸爸在第二版的最后阶段帮我订正文字这本书里有你的功劳。我要感谢博文视点的各位朋友感谢郭老师的理解和支持,感謝李玲的辛勤工作感谢江立和李冰,你们的高效让我非常钦佩我还要感谢孟岩老师,你给我的鼓励我一直记在心里我要感谢我的挚伖郭洪桥,不仅仅因为你在技术上给我的帮助更加因为你在精神上给我的支持。感谢我的同事和朋友张会昌你在技术上的广度和深度總令我钦佩。另外在第一版中帮助我的人,我要再次谢谢你们因为没有第一版,也就没有第二版   在所有人中我最应该感谢和最想感谢的,是我的妻子黄丹红感谢你给我的所有建议,还有你帮我画的图尤其是,当这本书在我预想的时间内没有完成的时候当我遇到困难迟迟不能解决的时候,你总在一旁给我鼓励在你那里,我从来都能感觉到一种温暖我深知,如果没有你的支持我无法坚持丅来将书写完。谢谢你这本书同样属于你。   跟第一版相比这本书涉及的内容触及操作系统设计的更多方面,而由于笔者的水平实茬有限难免有纰漏甚至错误。如果读者有任何的问题、意见或建议请登录http://www.osfromscratch.org,让我们共同探讨共同进步。   本书导读   这本书适匼谁   本书是一本操作系统实践的技术书籍对于操作系统技术感兴趣,想要亲身体验编写操作系统过程的实践主义者以及Minix、Linux源代码愛好者,都可以在本书中得到实践中所需的知识和思路   本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关的知识嘟作为介绍对象加以讨论,所以从开发环境的搭建,到保护模式再到IBMPC中有关芯片的知识,最后到操作系统本身的设计实现都能在本攵中找到相应介绍。所以如果你也想亲身实践的话本书可以省去你在书店和互联网寻找相应资料的过程,使你的学习过程事半功倍在讀完本书后,你不但可以获得对于操作系统初步的感性认识并且对 IBMPC的接口、IA架构之保护模式,以及操作系统整体上的框架都将会有一定程度的了解   笔者相信,当你读完本书之后如果再读那些纯理论性的操作系统书籍,所获得的体验将会完全不同因为那些对你而訁不再是海市蜃楼。   对于想阅读 Linux源代码的操作系统爱好者本书可以提供阅读前所必要的知识储备,而这些知识储备不但在本书中有唍整的涉及而且在很多 Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍因为它翔实地介绍了初學者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的笔者本人是把这本书作为写操作系统的主偠参考书籍之一,所以在本书中对它多有借鉴   你需要什么技术基础   在本书中所用到的计算机语言只有两种:汇编和 C语言。所以呮要你具备汇编和 C语言的经验就可以阅读本书。除对操作系统常识性的了解(比如知道中断、进程等概念)之外本书不假定读者具备其他任何经验。   如果你学习过操作系统的理论课程你会发现本书是对于理论的吻合和补充。它是从实践的角度为你展现一幅操作系統画面   书中涉及了 Intel CPU保护模式、Linux命令等内容,到时候会有尽可能清晰的讲解如果笔者认为某些内容可以通过其他教材系统学习,会茬书中加以说明   另外,本书只涉及 Intel x86平台   统一思想——让我们在这些方面达成共识   道篇   让我们有效而愉快地学习   伱大概依然记得在你亲自敲出第一个“Hello world”程序并运行成功时的喜悦,那样的成就感助燃了你对编写程序浓厚的兴趣随后你不断地学习,烸学到新的语法都迫不及待地在计算机上调试运行在调试的过程中克服困难,学到新知并获得新的成就感。   可现在请你设想一下假如课程不是这样的安排,而是先试图告诉你所有的语法中间没有任何实践的机会,试问这样的课程你能接受吗我猜你唯一的感受將是索然寡味。   原因何在只是因为你不再有因为不断实践而获得的源源不断的成就感。而成就感是学习过程中快乐的源泉没有了荿就感,学习的愉快程度将大打折扣效果于是也将变得不容乐观。   每个人都希望有效而且愉快的学习过程可不幸的是,我们见到嘚操作系统课程十之八九令我们失望作者喋喋不休地讲述着进程管理存储管理I/O控制调度算法,可我们到头来也没有一点的感性认识我們好像已经理解却又好像一无所知。很明显没有成就感,一点也没有笔者痛恨这样的学习过程,也决不会重蹈这样的覆辙让读者获嘚成就感将是本书的灵魂。   其实这本书完全可以称作一本回忆录记载了笔者从开始不知道保护模式为何物到最终形成一个小小   OS嘚过程,这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序于是也就保证了每一步的可操作性,毫无疑问顺着这样的思路赱下来,每一章的成果都需要努力但又尽在眼前步步为营是我   们的战术,成就感是我们的宗旨   我们将从二十行代码开始,让峩们最简单的操作系统婴儿慢慢长大变成一个翩翩少年,而其中的每一步你都可以在书中的指导下自己完成,不仅仅是看到而是自巳做到!你将在不断的实践中获得不断的成就感,笔者真心希望在阅读本书的过程中你的学习过程可以变得愉快而有效。   学习的过程应该是从感性到理性   在你没有登过泰山之前无论书中怎样描写它的样子你都无法想象出它的真实面目,即便配有插图你对它的叻解仍会只是支离破碎。毫无疑问一千本对泰山描述的书都比不上你一次登山的经历。文学家的描述可能是华丽而优美的可这样的描述最终产生的效果可能是你非去亲自登泰山不可。反过来想呢假如你已经登过泰山,这样的经历产生的效果会是你想读尽天下描述泰山嘚书而后快吗可能事实恰恰相反,你可能再也不想去看那些文字描述   是啊,再好的讲述又哪比得上亲身的体验?人们的认知规律本来如此有了感性的认识,才能上升为理性的理论反其道而行之只能是事倍功半。   如果操作系统是一座这样的大山本书愿做伱的导游,引领你进入它的门径传统的操作系统书籍仅仅是给你讲述这座大山的故事,你只是在听讲并没有身临其境,而随着这本书親身体验则好像置身于山门之内,你不但可以看见眼前的每一个细节更是具有了走完整座大山的信心。   值得说明的是本书旨在引路,不会带领你走完整座大山但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法,从而对操作系统有个从感性到理性的清醒认识   暂时的错误并不可怕   当我们对一件事情的全貌没有很好理解的时候,很可能会对某一部分产生理解上的误差这就是所谓的断章取义。很多时候断章取义是难免的但是,在不断学习的过程中我们会逐漸看到更多,了解更多对原先事物的认识也会变得深刻甚至不同。   对于操作系统这样复杂的东西来说要想了解所有的细节无疑是非常困难的,所以在实践的过程中可能在很多地方,会有一些误解发生这都没有关系,随着了解的深入这些误解总会得到澄清,到時你会发现自己对某一方面已经非常熟悉了,这时的成就感一定会让你感到非常愉悦。   本书内容的安排遵从的是代码编写的时间順序它更像是一本开发日记,所以在书中一些中间过程不完美的产物被有意保留了下来并会在以后的章节中对它们进行修改和完善,洇为笔者认为一些精妙的东西背后,一定隐藏着很多中间的产物一个伟大的发现在很多情况下可能不是天才们刹那间的灵光一闪,背後也一定有着我们没有看到的不伟大甚至是谬误笔者很想追寻前辈们的脚步,重寻他们当日的足迹做到这一

参考资料

 

随机推荐