我不止见过文具店卖书籍资料,还见过有本书叫什么小卖部部卖书籍资料,而且是学校指定的,神奇吗

在线巡更管理系统(EPASS门禁系统)石家庄西泰克电子科技有限公司/北京海川一通电子科技有限公司 项目描述:巡更系统主要是先登录门禁系统然后再设置巡更路线,主要包括巡更人班次,路线名称实际到达时间,正常迟到,早到未到等等。门禁系统早已超越了单纯的门道及钥匙管理它已经逐渐發展成为一套完整的出入管理系统。它在工作环境安全、人事考勤管理等行政管理工作中发挥着较大的作用用一卡通刷门禁系统则可以進入工作领域。 EPS200访客管理系统/车辆进出及人员通道管理系统/车牌识别车辆进出管理系统/后台管理/卡务管理系统 中核智能一卡通系统 项目描述:该项目要求系统灵活,可扩充性强不需要过多的投资即可对系统进行扩展。各系统可独立运行以确保在脱机的状态下能正常工莋。各子系统实时联网系统内信息变化各子系统实时响应,响应时间小于1秒;一卡通后台数据库不允许子系统直接访问必须通过一卡通中心授权后才能接入。

被这个类的service方法调用用来处理一个HTTPGET操作。这个操作允许客户端简单地从一个HTTP服务器“获得”资源对这个方法嘚重载将自动地支持HEAD方法。 GET操作应该是安全而且没有负面影响的这个操作也应该可以安全地重复。 这一方法的默认执行结果是返回一个HTTPBAD_REQUEST錯误 3、doHead 被这个类的service方法调用,用来处理一个HTTPHEAD操作默认的情况是,这个操作会按照一个无条件的GET方法来执行该操作不向客户端返回任哬数据,而仅仅是返回包含内容长度的头信息 与GET操作一样,这个操作应该是安全而且没有负面影响的这个操作也应该可以安全地重复。 这个方法的默认执行结果是自动处理HTTPHEAD操作这个方法不需要被一个子类执行。 IOException; 被这个类的service方法调用用来处理一个HTTPTRACE操作。这个操作的默認执行结果是产生一个响应这个响应包含一个反映trace请求中发送的所有头域的信息。 当你开发Servlet时在多数情况下你需要重载这个方法。 8、getLastModified protectedlonggetLastModified(HttpServletRequestrequest); 返回这个请求实体的最后修改时间为了支持GET操作,你必须重载这一方法以精确地反映最后修改的时间。这将有助于浏览器和代理服务器减少装载服务器和网络资源从而更加有效地工作。返回的数值是自日(GMT)以来的毫秒数 解析一个包含MIME类型application/x-www-form-urlencoded的数据的流,并创建一个具有关键值-数据对的hashtable这里的关键值是字符串,数据是该字符串所对应的值的列表一个关键值可以在POST的数据中出现一次或多次。这个关鍵值每出现一次它的相应的值就被加入到hashtable中的字符串所对应的值的列表中。 解析一个查询字符串并创建一个具有关键值-数据对的hashtable。这裏的数据是该字符串所对应的值的列表一个关键值可以出现一次或多次。这个关键值每出现一次它的相应的值就被加入到hashtable中的字符串所对应的值的列表中。 从查询字符串读出的数据将经过URL解码+将被转换为空格以十六进制传送的数据(例如%xx)将被转换成字符。 当查询字苻串无效时该方法抛出一个IllegalArgumentException。 bytecode 字节码:由Java编译器和Java解释程序生成的机器代码 cookie 由Web服务器建立的数据,该数据存储在用户的计算机上提供了一个Web站点跟踪用户的参数并存储在用户自己硬盘上的方法。 HTTP 加密套接字协议层一个安全协议,用来在Iternet上的客户端浏览器和服务器交換密钥和加密数据 URI 统一资源标识。定义一个Internet地址它是一个URL的超集。 URL 统一资源路径这个地址定义了到达一个WWW上的文件的路线,通常由協议前缀、域名、目录名和文件名组成

对一个体应用3D纹理 控制标准编码 体素光线计算 2D纹理映射 VolumePro绘制硬件 速度和精确度交替使用 使用vtkLODProp3D改善性能 可行性/局限性技术 第7章 建立模型 7.1

弱肉强食并购秀 吴海菁 (2004年12月20日 第50期)   “今天我们公布了一个令人振奋的财季报告和收购仁科的协议。”12月13日甲骨文公司CEO拉里·埃利森兴奋地宣布。在这一天,甲骨文公司终于以103亿美元的价格收购了仁科   这时,距离甲骨文提出恶意收购仁科已经过去了18个月。在这18个月间仁科从最初的竭力抗拒,到之后的态度暧昧再到最后的完全妥协,几乎被甲骨文一轮高似一輪的报价“牵住了鼻子”最终手执103亿美元“大棒”的甲骨文将可怜的仁科彻底击倒,一场并购秀戛然而止 并购案峰回路转   故事要從2003年5月讲起。当时仁科公司通过了一项以15亿美元并购J.D. Edwards公司的决议,该项决议如果顺利实施仁科将成为商业应用软件市场的老二,而原來居第二位的甲骨文将退居第三由此点燃了甲骨文恶意收购仁科的导火索。就在仁科与J.D. Edwards达成协议之后的第四天甲骨文突然发难,决定偠强行收购仁科公司这尤其让仁科公司总裁兼CEO克雷格·康威怒火中烧。于是,康威率领仁科的董事会和股东们奋起抵制甲骨文的恶意收购,先后5次拒绝了甲骨文的报价,今年年初,甲骨文开出了高达94亿美元“高额支票”,依然遭到仁科董事会的拒绝   之后,仁科与甲骨文的并购纠纷受到双方客户、股东和美国司法部的高度关注仁科的客户康涅狄格州政府联合其他九个州政府从反垄断的角度来阻止甲骨文收购仁科,而司法部反托拉斯部门则迅速开始了对甲骨文并购仁科以及仁科合并J.D.Edwards的审查随着调查的深入,司法部决定对仁科合并J.D.Edwards大開绿灯而对甲骨文并购仁科一案则诉讼到美国联邦法院,其理由就是降低了商业应用软件市场的竞争性   2004年9月8日,联邦法官Vaughn Walker的一纸判决给仁科的防御计划予以重大打击。Walker认为司法部并没有足够的证据证明甲骨文与仁科的合并会显著降低商业应用软件市场中的竞争。然而倔强的仁科并不愿意就此屈服反而以“与更强者结盟”的方式反击甲骨文的入侵。   事态终于以最戏剧性的方式出现转折10月1ㄖ,仁科董事会突然宣布对CEO康威的领导能力“失去信心”,将这一反甲骨文的斗士解职这为甲骨文的收购扫除了最大的障碍。11月20日甲骨文24美元/股的报价,赢得了60.8%的仁科股东的“芳心”这场并购案的天平开始向甲骨文倾斜。   12月13日甲骨文竟然答应了仁科一名独立董事提出的26.5美元/股的报价,整个仁科董事会彻底被甲骨文的“金钱大棒”击倒甲骨文最终以103亿美元的代价将仁科纳入囊中。 甲骨文胜券茬握   甲骨文虽以百亿美元的代价将垂涎已久的仁科一口吞下,但是由此带来的整合难度将成为它面临的最大挑战在着手完成这一軟件产业历史上最大规模收购之一的同时,甲骨文还必须向资本界证明它完全有能力“消化”这样一个“庞然大物”。   甲骨文通过並购不仅获得了仁科12750个客户每年增加了20亿美元的营收,而且接手了仁科12000名员工对于埃利森而言,留住仁科员工中最优秀与最聪明的人昰头等大事埃利森要做到这点,就必须拿出足够的诚意努力消除员工对其恶意并购的不良印象。在收购之前甲骨文曾经说过要裁掉┅半员工,但是现在已经改变口风表示裁员幅度没有预计的大。   甲骨文另一个当务之急则是消除仁科在抵御并购期间所制定的“蝳丸计划”。所谓毒丸计划其实是一项向客户承诺的反收购方式:一旦仁科被收购,收购方将要向被收购方的客户额外支付一笔赔偿金此举将对恶意收购产生明显的制约作用。在康威的领导下仁科制定了详细的客户退款计划,其标准是将向客户返还2至5倍的产品金额甴此计算,甲骨文在支付收购金额之外还必须额外掏出20亿美元来补偿仁科的客户。   针对仁科的毒丸计划甲骨文采取了法律手段予鉯反击。11月24日特拉华州大法院就“是否宣布仁科毒丸计划无效”一案进行审理,随着整个并购案进入尾声形势越来越有利于甲骨文,無论是仁科的客户还是员工都很难从“毒丸计划”中获益 弱肉强食的游戏规则   表面看来,甲骨文和仁科并购一案的关键掌握在政府楿关部门或者法官手中其实不然,甲骨文的最终报价与仁科股东的心理价位之间的差距才是并购能否成功的关键因素随着纠纷的加剧,仁科股东“待价而沽”的心态愈发明显一旦甲骨文的报价达到了股东们的心理价位,所有的防御措施都成为了“过眼云烟”   尽管业界和媒体对“弱者”仁科表达了无尽的同情之心,对以强凌弱的甲骨文表达了无尽的厌恶之心但是甲骨文仅仅是在道义上受到谴责,但在法律上其不断提价的收购行为显得正当。事实上仁科管理层虽有一百个不情愿,但架不住股东的“利欲熏心”在资本搏杀的卋界里,本来就没有温文尔雅的绅士或许弱肉强食才是不变的真理。 域外传真 给药瓶安装“电子眼” 编译 冬旭 (2004年12月20日 第50期)   对病人而訁假药非但无益于治疗,还很可能导致生命危险目前,美国的假药市场却在不断扩大药品失窃现象也比较普遍,特别是针对一些畅銷药犯罪者的技术手段变得越来越高明。近日美国食品及药品管理局(FDA)宣布,将采用在药瓶上安装芯片进行跟踪的技术手段严厉咑击假药生产销售和窃药行为。   美国食品及药品管理局(FDA)日前通过一份政策指导告诫制药公司和药房要他们附加电子标签到药品包装上。这一政策为RFID(无线射频识别)技术应用于保障药品供应安全开辟了道路FDA还宣布,为进一步严厉打击假药生产和窃药行为将率先在部分药品的药瓶上安装RFID芯片,进行跟踪监测第一批将被安装这种芯片的药品有Viagra、Oxycontin和部分治疗艾滋病的药物。   Viagra又称sildenafil(西地那非),俗称“伟哥”是世界著名制药公司Pfizer的重要产品,在治疗勃起功能障碍方面具有显著疗效也因此招来了假药制造者和仿造商较多的關注。另外这种药也经常被盗。对此拥有秘密配方的人指出,Viagra经常失窃主要是因为它和另一种叫Oxycontin的药品相仿而Oxycontin是一种镇痛和麻醉药,它因为经常被“隐君子”当做毒品替代品食用而闻名   显然,在RFID技术日渐成熟的今天这是该技术的又一新的应用。当这些药瓶安裝了这种电脑芯片之后从生产工厂到药房,芯片都将进行实时地跟踪监测在一定程度上可以加强药品管理的作用。不法厂商试图检测絀这种微小的电磁辐射或天线是很难的   FDA的Lester Crawford博士告诉媒体,近年来美国的公共医疗系统在不断健全、扩大而另一方面,假药商贩却擁有大量没有价值的假药他们能够将这些假货渗透到整个药品销售渠道中去。假药市场已对美国公共医疗系统构成了巨大威胁据FDA工作囚员称,美国卖出去的处方药中接近1%的是假货   RFID技术使得制造商和零售商能够使销售过程比以往更密切地追踪产品。这项技术已经被許多零售商的实践证明是可行的例如,沃尔玛就用它跟踪产品的储存和流通在仓库、商店中都有扫描仪器。   Purdue公司宣布将RFID标签应用於100片装的OxyContin药瓶上以便于运输给该公司最大的两家客户这一家公司是最早提供反伪造包装设计的制药公司之一,它也是第一家执行多层通蕗方案包括RFID技术以打击伪造药品的企业Purdue公司计划把RFID标签使用到所有的瓶装OxyContin药物上,并将捐赠100台能读取各种采用RFID技术包装的手持型扫描仪来辅助执法者和帮助如何防止国家货物被偷窃的研究工作者。FBI法律强制执行发展协会(FBI-LEEDA)对这一措施表示肯定该机构执行官员Tom Stone说,“能够達到对每个瓶子追踪到底对执法来说是一项巨大的进步,这将为警察提供一项新的侦破线索以打击假药出售犯罪和防止货物被偷窃”   然而,简单跟踪和彻底地制止犯罪行为还是两回事很可能像以前一样,警察会抱怨说你指出那个药瓶是被偷来的,而犯罪嫌疑人則会坚持说这瓶药是自己买来的不过,值得注意的是美国政府对RFID的大规模应用,对制造假药和窃药的犯罪者来说将具有很大的威慑力 霍达的数字生活 编译 嘉铭 (2004年12月20日 第50期)   米迪·海克玛丽·霍达拥有两台打印机,但在过去一年多的时间里,她一台也未用过说实话,霍达记不清上次是什么时候打印过什么东西   作为因特网顾问,37岁的霍达近来每天几乎全部的生活都是面对屏幕度过的她走到哪里,就将Wi-Fi笔记本电脑带到哪里平日,霍达从网上下载电影和电视节目并在网上购物并支付所有的账单。她用博客日记Napsterization.org探讨技术将如何改變媒体前景的问题尽管霍达的活动范围在旧金山的海湾地区,但她的生活、工作和娱乐却是全球化的——在网上   实际上,除了读書以外霍达的所有活动几乎都是在网上进行的:看新闻、写博客日记、撰写学术论文、进行课题研究等等。即使是在小汽车里、火车上戓人行道上霍达也会忙着用电子邮件、即时消息或移动电话与朋友、同事、客户或业务联系人“对话”。霍达将物质世界称为老式的“模拟世界”而因特网才是严格意义上的“数字世界”。   生存主义者企图远离网络而霍达则相反,她没有网络就几乎不能活哪怕昰几分钟。她说:“不在网上时无论什么时候,我总是迫不及待地要上网用电话或我的本本都行。总之上网是压倒一切的要务。”   在某种程度上霍达所谓的数字生活已经变得比现实生活更加现实。她接收朋友的博客日记、浏览他们发表的看法、跟踪同样的链接、思考同样的信息、通过讨论来与他人共享自己的思想这些要么是超链接的,要么是可搜索的或可浏览的这取决于当时可用的工具。囿时候尽管霍达从物理距离上已经与朋友的联系切断了,但实际上朋友们离她并不遥远网络可以将他们紧紧地联系在一起。霍达说:“他们制作内容我在我的博客日记中阅读或指导修改这些内容。他们也是一样”   霍达的所作所为并非失常。相反她代表着目前媄国的一种时尚。霍达的大多数朋友(其中许多都爱追赶时髦或标新立异)都是这样生活的他们将因特网当做他们关系的中心联络点。洏今在美国,将自己的时间放在Wikipedia(一种基于网络的百科全书任何人都可以进行编辑)上的技术爱好者越来越多。霍达就是其中的一个而且,霍达现在的生活可能就是你未来生活的预演   Pew Internet American Life Project最近的一项调查表明,在美国使用因特网的人当中88%的人声称因特网是他们ㄖ常生活中不可或缺的一部分。另外数字社会化也正好吻合了人们上网的第一理由——浏览内容以获得更多的信息。美国“在线出版协會”的调查显示有1.27亿的美国人用因特网浏览内容,而通信为1.18亿搜索为1.12亿,电子商务为1.06亿   美国“在线出版协会”主席米歇尔·辛巴里斯特说,“现在,随着使用宽带的家庭数量的不断增加,我们正在出现一场消费者使用网络方式的转变很明显,网络现在远远不只是┅种工具了它已经成为信息、娱乐和消遣的主要源头。” 高速公路上的“千里眼” 编译 杜龙德 (2004年12月20日 第50期)   12月一个星期五的下午4时镓住西雅图的泽尼·嘉丁驾车行驶在本地一条高速公路上。他在前一天通过电话订好了海边一个景点附近酒店的房间,打算去那儿过周末洅过10英里,就会出现一个岔道口这时,他掏出一个形似PDA的东西扫了一眼他似乎看出了什么问题。到岔道口时嘉丁驶离经常行驶的道蕗,拐弯选择了另一条路线原来,是那个形似PDA的东西告诉他前方不远处拥堵,行车缓慢而另一条公路则畅通无阻。   嘉丁手里的“千里眼”叫做TrafficGauge是一种手持交通指示数字地图,专门显示车辆行驶地区内高速公路上的路况TrafficGauge可爱之处很多,其中之一就在于它小巧简潔它有一个平滑的长方形显示屏,形似PDA但显示内容与PDA的完全不同,而是动态显示当地高速公路的交通路况显示屏显示着许多线条,這就是当地的各条高速公路这些线条分为实线和闪动的虚线。实线表示通畅闪烁的虚线则表示拥堵。司机因此可以获得路况的通报   目前,TrafficGauge还只在美国两个地区使用:西雅图和洛杉矶的奥伦奇县还有一些城市则正在筹备。这种地图最远可以覆盖方圆约850英里以内的高速公路交通情况TrafficGauge的操作非常简便。整个设备只有一个控制按钮它就是背光灯开关,必要时可以将它打开照明显示的内容也许,它鈈够亮但足以让人在黑暗中一眼看出显示的内容。   TrafficGauge的显示数据来自当地的“高速运输管理局”“高速运输管理局”将相关数据通過无线寻呼网以无线方式发送给TrafficGauge。另外如果司机行驶的城区有体育赛事(如足球、棒球、篮球等),比赛项目也会通过一个相应的符号顯示出来如果司机想观看比赛,路上却又拥堵司机便可以尽早择路而行。   常常在星期五的下午4时,TrafficGauge显示屏上会爬满“蚂蚁”原来,在行车高峰期地图上的细小的线条几乎都在闪烁。这一小小的设备无法施展回天之力消除拥堵却能向你预报哪些道路拥堵,这叒何偿不是一种欣慰呢   TrafficGauge的数据更新频繁,每4分钟就会更新一次嘉丁已经使用了一个月,驾车行驶的几个地区TrafficGauge上都不曾出现“死區”。这比相同地区的手机服务要好多了嘉丁本周周末来到拉斯韦加斯时,相伴而行的TrafficGauge仍在“实况转播”西雅图的路况信息TrafficGauge售价80美元。数据服务收费则是每月7美元

  本书从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中鈈仅关注代码本身,同时关注完成这些代码的思路和过程本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者鈳以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感书中讲解了大量在开发操莋系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇共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的过程,这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序于是也就保证了每一步的可操作性,毫无疑问顺着这樣的思路走下来,每一章的成果都需要努力但又尽在眼前步步为营是我   们的战术,成就感是我们的宗旨   我们将从二十行代码開始,让我们最简单的操作系统婴儿慢慢长大变成一个翩翩少年,而其中的每一步你都可以在书中的指导下自己完成,不仅仅是看到而是自己做到!你将在不断的实践中获得不断的成就感,笔者真心希望在阅读本书的过程中你的学习过程可以变得愉快而有效。   學习的过程应该是从感性到理性   在你没有登过泰山之前无论书中怎样描写它的样子你都无法想象出它的真实面目,即便配有插图伱对它的了解仍会只是支离破碎。毫无疑问一千本对泰山描述的书都比不上你一次登山的经历。文学家的描述可能是华丽而优美的可這样的描述最终产生的效果可能是你非去亲自登泰山不可。反过来想呢假如你已经登过泰山,这样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗可能事实恰恰相反,你可能再也不想去看那些文字描述   是啊,再好的讲述又哪比得上亲身的体验?人们嘚认知规律本来如此有了感性的认识,才能上升为理性的理论反其道而行之只能是事倍功半。   如果操作系统是一座这样的大山夲书愿做你的导游,引领你进入它的门径传统的操作系统书籍仅仅是给你讲述这座大山的故事,你只是在听讲并没有身临其境,而随著这本书亲身体验则好像置身于山门之内,你不但可以看见眼前的每一个细节更是具有了走完整座大山的信心。   值得说明的是夲书旨在引路,不会带领你走完整座大山但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲箌的各种原理和算法,从而对操作系统有个从感性到理性的清醒认识   暂时的错误并不可怕   当我们对一件事情的全貌没有很好理解的时候,很可能会对某一部分产生理解上的误差这就是所谓的断章取义。很多时候断章取义是难免的但是,在不断学习的过程中峩们会逐渐看到更多,了解更多对原先事物的认识也会变得深刻甚至不同。   对于操作系统这样复杂的东西来说要想了解所有的细節无疑是非常困难的,所以在实践的过程中可能在很多地方,会有一些误解发生这都没有关系,随着了解的深入这些误解总会得到澄清,到时你会发现自己对某一方面已经非常熟悉了,这时的成就感一定会让你感到非常愉悦。   本书内容的安排遵从的是代码编寫的时间顺序它更像是一本开发日记,所以在书中一些中间过程不完美的产物被有意保留了下来并会在以后的章节中对它们进行修改囷完善,因为笔者认为一些精妙的东西背后,一定隐藏着很多中间的产物一个伟大的发现在很多情况下可能不是天才们刹那间的灵光┅闪,背后也一定有着我们没有看到的不伟大甚至是谬误笔者很想追寻前辈们的脚步,重寻他们当日的足迹做到这一

  本书从只有②十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中不仅关注代码本身,同时关注完成这些代码的思蕗和过程本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使讀者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇共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的过程这样的回忆录性质保证了章节的安排完全}

原标题:特朗普:“尸体太多了我从未见过这样的景象。”欧美沦陷后才发现原来中国抗疫成功的关键是这个!

国外疫情,一片水深火热

截至3月31日,全球新冠肺炎感染人数超过70万人死亡3万多人。

目前已经有60多个国家宣布进入紧急状态有的直接「封国」,这在人类历史上还是第一次。

连之前打算放弃抵抗的英国也彻底改口,推出英国史上最强禁足令:全民封锁3周!

(英国首相呼吁所有国民待在家中全力抗疫)

就连英国首相洎己也感染新冠病毒,还有英国卫生大臣同样被感染!

美国更是一天新增一万多例目前确诊人数已超16万例,成为全球确诊人数最多的国镓

美国国会、白宫及美国军队,都已遭病毒「侵入」

汤姆汉克斯、哈佛大学校长夫妇等多位明星、名流、球星也都已确诊。

24日特朗普专门致电韩国总统文在寅,希望韩国能提供些医疗设备

美国疫情形势,越来越严峻成为新冠疫情大流行的又一个「震中」。

29日特朗普在白宫玫瑰园召开新冠疫情新闻发布会,在会上描述了纽约市皇后区埃尔姆赫斯特医院(Elmhurst Hospital)的“惨状”

特朗普说:“我一直看着他們把冷藏卡车叫来。因为尸体太多了他们无法处理。”

他补充道“我见过死亡,在电视上发生在遥远的国家,但在我们的国家我從未见过这样的景象。”

同时世卫组织表示,新冠肺炎蔓延的速度正在加快

截至北京时间3月31日10时,全球新冠肺炎确诊病例累计确诊782365萬。

难以想象两天增长近10万!

这还只是官方统计到的数字。

意大利官员说该国感染的真实人数,可能是官方统计数字的10倍

疫情最严偅的贝加莫市市长也表示:

该市新冠肺炎死亡患者大约有四分之三生前尚未确诊,就已经死在了家中

医院每出现1例死亡病例,贝加莫就囿3个尚未确诊的患者死于家中

许多因新冠疫情去世的死者来不及火化下葬,教堂就变成了临时的停尸间

牧师介绍,火化1人约需1小时泹每天有上百人死亡,部分遗体在教堂堆积5天后仍未下葬

因为当地墓地已超负荷运转,公墓不得不宣布关闭这是二战以来的第一次。

意大利总理也说新冠肺炎疫情是意大利自二战结束以来面临的最严峻危机。

另一边的西班牙日子也不好过

医院人满为患,很多病人住鈈上院只能躺在地上,等待治疗

一位西班牙老妇人发出视频,声嘶力竭地哭着说:

「我老伴就快要不行了医院却一直让我们等床位!

我们好不容易等到了,医院却把床位给了一个44岁的人!

医院现在开始选择性救人!他们就让我老伴在这等死!

真是糟糕透了!求求你们!帮帮我们!!!」

而这个说法也得到了医生的验证

西班牙一名医生在推特上含泪说:

「一家医院不得不放弃65岁以上的老年患者,把呼吸机让给年轻病人对那些老年患者只能用镇静剂,减少他们死亡的痛苦」

「我每天晚上都在哭,但第二天还要工作这个世界已经疯叻。」

每个人都想活下去但医生能救的人是有限的。

很难想象当医生拔掉老人的呼吸机,任他死去内心会承受怎样的压力。

而那个洇「不如年轻生命更有价值」而被放弃的老人又是怎样的哀痛与绝望。

其实西班牙明明可以不到这一步的

2月底,在中国抗疫40多天后覀班牙才确诊13例新冠病毒病例。

可是3月上旬西班牙举办了多次大规模的游行和节日活动。

随后疫情开始大爆发,导致16天确诊人数过万21天过两万,现在已经4万死亡2696人。

三月上旬西班牙人毫无防范参加集体活动

还记得早期意大利疫情刚刚爆发时的新闻吗?

那时意大利政府果断出手封了几个城市,但市民们根本不买账高举“还我自由”的牌子上街集会,对政府的禁令也视而不见

还有那位怒摔话筒嘚议员,我也不时想起

2月26日,他因戴口罩开会而被群嘲愤怒之下,他摘掉口罩大骂:“真的疯了!我去过三个疫区戴口罩是为大家咹全着想,如果你们是聪明人你们也早就戴上口罩了!”

现在看来,这位议员是多么有先见之明而嘲笑他的人,又是多么无知

其实茬三个星期以前,意大利民众对疫情的普遍态度还是这样的:

雪崩之前每一片雪花都在勇闯天涯。

有评论说意大利人自由惯了,被要求戴口罩会觉得受到了侵犯更别说关在家里。

所以尽管意大利政府非常努力地想赶紧控制住疫情,3月10日就已经宣布全国封城之后也對中国的建议照单全收,甚至有一天就起诉了7000人但疫情依然爆发到了今天。

因为意大利人毕竟不是中国人在每天死人无数、医院床位爆满、救护车排着长队送患者的时候,意大利人仍然保持着惯有的“乐观散漫”

由于意大利的“封城”并不是特别严厉,市民只要手写┅张声明说要出去做正经事,就可以出门

所以人们每天找各种各样的理由外出。

为了阻止市民出门意大利政府操碎了心。

来看看气箌爆炸的意大利市长合集

有越说越气,最后破口大骂的:

很多人做了“一切都会变好”的海报让我来解释一下什么叫 “一切会变好”!

如果我们像往常一样出门,情况怎么会变好

好多人还出去慢跑!我们市以前也就20个习惯跑步的人,为什么现在都开始跑步了

你们跑什么啊跑?我猜你上次跑步还是小学的时候!

还有人在家开派对他们说大家都住一栋楼,都很健康!

这就是传染会发生的原因啊!

待在镓里是指和家人在一起而不是和邻居开派对!

咱们这什么时候邻里关系变这么好了?!

你们是拿自己生命开玩笑!!!

尽管市长们如此聲嘶力竭但意大利现在仍有一半以上市民出门不肯戴口罩。

顺便说一句英国情况也差不多。

在英国首相宣布封国又苦口婆心劝了一夶通的第二天,英国地铁是这样的景象:

估计英国首相也快气炸了

没有对比,就没有伤害

看看他们,再看看我们你会发现中国的老百姓都多么通情达理、明辨是非。

中国虽然也有类似的硬核火爆村长但都是在信息不发达的农村,其他绝大多数国人只要接收到了防控指示,基本都照做了

这应该也是我们国家能取得抗疫全面胜利的根本原因。

中国作为疫情爆发最早、也曾经最严重的国家最初毫无經验可参照,谁也不知道该怎么办

但政府说什么,老百姓就配合做什么

中国老百姓所做的一切,可能是很多西方国家想都不敢想的

囿些西方人甚至无法相信,他们觉得民众不可能自愿在家隔离一定是政府用了什么非常手段。

但事实上你我都知道,中国绝大部分民眾是完全理解并且支持政府的各项措施的大家都知道,这是为了保护我们自己

中国老百姓可能知识不多、见识不广,但是我们都有超強的生存智慧

尤其在灾难面前,中国人的优秀品质表现得淋漓尽致

中国人,是一群怎样的人

通过这次疫情,我们大体可以看到中国囚的六大品质

第一,中国人能很快认清形势

疫情来得十分突然,当时正全心迎接春节的中国人忽然就被告知要全体抗疫了。

但人们反应神速几天时间,全民戴起了口罩14亿人基本都乖乖关门闭户,闷在了家里

因为我们都迅速明白了这个病是怎么回事,明白了这么莋最能保障自己的健康

这是中国人审时度势的能力,是历经几千年文明修炼出来的高级智慧

第二,中国人乐观又灵活

本来是要欢欢囍喜过大年的,突然计划全被打乱了

走亲访友的、出门旅行的、回家团圆的……全都不能如愿了。

但人们也没有太沮丧太抱怨大家立刻调整计划,转身就自己在家乐乐呵呵玩了起来

一场疫情,让人们学了很多神技能:做美食、做手工、玩游戏、跳广场舞......

玩得不亦乐乎还各种自我调侃。

这就是中国人的灵活和乐观

他们不顽固,不任性懂得顺势而为。

他们无法都去一线参与救援但基本都可以做好洎己。

第三中国人有大局观和牺牲精神。

疫情前期情况危急,一线需要支援

谁都知道危险,但依然有大量的医护人员、公安干警、社区工作者毫不畏惧地顶上去

那时,每天都有类似的请战书刷屏话语朴实,但特别触动人心:

迎难而上遇险无畏,这其实并不是人嘚本性

但中国人自古就具备了这种精神,也正是因此我们才历经无数灾难,依然强盛于世

第四,中国人有家国情怀

我之前写过,疫情初期物资奇缺,无数海外华人第一时间组织起来全世界淘口罩、防护服,一箱一箱背回中国

也有很多大企业迅速站了出来,出錢出力一线缺什么他们就给什么。

做汽车的五菱开始做口罩卖空调的格力投入做防护服,车企比亚迪产起了消毒液

当然,还有更多惢怀家国的普通人

37岁的骆名良,听说火神山医院需要建筑工人大老远赶来干活。

之后他每天清晨7点赶到工地,加班到晚上11点一日彡餐都在工地上,连上厕所都跑着去

这样奋战了6天半,他拿到了7500元工钱

拿到钱后,他立刻全部买了牛奶送到了附近的同济医院。他覺得医护人员比他更辛苦需要增加营养。

记者找到他他诚恳地说:“有国才有家,国家有难你这个小家,要付出”

正是这些二话鈈说,为国效力的人保障了我们这次战疫的胜利。

第五中国人能吃苦、能战斗。

还是以建设火神山医院为例

工人们本来在家过年呢,听说武汉需要放下筷子就匆忙赶过去了。

几千名建设者24小时不间断施工,艰苦奋战10天10夜3万多平方米的火神山医院拔地而起。

有媒體在国外网站发了火神山施工视频许多外国网友都惊呆了:

“太不可思议了!这在加拿大要花4年。”

“要是在英国光决定是否要建一所医院就要花7年的时间。”

“我家路边的一个坑要花几年去填上。”

“上帝在7天之内创造了宇宙我认为上帝就是中国人。”

中国人当嘫不是上帝中国人只是特别能吃苦,特别能战斗特别肯奉献。

所以中国才有那么多奇迹发生。

第六中国人有“为他人着想”的善良。

疫情期间确诊的新冠肺炎患者吃饭都是免费的。

在武汉同济医院有位老奶奶。

一天护士发晚饭时她说“不要了,我还有”然後从抽屉里拿出了昨天的剩饭。

护士劝奶奶吃新饭她操着方言说:

我们来看病不花一分钱。虽说不掏钱但这是国家的钱,你叫我把吃剩的倒了我舍不得。

我年纪大了做不了太多贡献了,我要给国家省点粮食

这是最淳朴的中国老百姓,骨子里流淌着中国味儿的善良

别人对她的好,她都念着

她也一心想做点什么,回报别人的好

这样的奶奶,中国有千千万万个

还有一位叫李宝民的山东司机。

疫凊期间他开着大卡车为武汉送菜,无意间遇到记者

他咬着煎饼,特别质朴地说:没钱可以出力是吧

质朴的话里,藏着高贵的心

有媒体随后给他颁了奖,奖金两万元

没想到这个大汉得知后,忽然哭了说:

非常感谢你们,帮我把钱捐给没有爹娘的孩子吧我四五岁僦成孤儿了,我受过的罪我知道。

一个山东汉子两次感动中国。

像这样善良的普通人中国还有千千万万个。

平常我们也察觉不到泹这次疫情一来,无数个这样的中国好人忽然冒了出来期中情义,感人至深

中国人,总是在最艰难的时候迸发出最闪光的品质。

我們有集体意识有生存智慧。

我们有勇敢善良的大多数有坚韧顽强的大多数。

我们逢山开路遇水架桥,遇到再大麻烦都有办法咬牙过關

  • 为什么中国这一次能迅速控制疫情?

  • 为什么中国能用世界7%的耕地养活世界22%的人口

  • 为什么四大文明古国,只有中华文明完整地延续

  • 為什么中国在被列强侵略、遍体鳞伤后,只用了几十年就又一次奇迹崛起

你可以从深植在每个中国人骨髓里的中国精神中,找到答案

芉百年来,我们一直为自己是中国人而骄傲

而这一次,我们终于知道了为什么中国人值得骄傲。

因为中国人真的了不起!

点个“在看”吧,为每一个闪光的中国人

*作者:李月亮。高人气作家新女性主义者,扎实写字的手艺人以理性和智慧陪万千女性成长。新书《你要活成一束光》当当网热卖中微信公众号:李月亮。新浪微博:李月亮

关注教育,后台回复“非暴力沟通”

参与本期“非暴力沟通”学习

}

室内精准定位完整的源代码,范围在1米以内需要参数设置!

网格状表示的室内定位APP,采用三边定位法适合做毕业设计(手动滑稽)。

}

我要回帖

更多关于 有本书叫什么小卖部 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信