新書推薦:
![淮南子的思想世界](http://103.6.6.69/upload/mall/productImages/y24/8/9787010224138.jpg)
《
淮南子的思想世界
》
售價:HK$
78.2
![汉阙漫漫隐官道 : 东汉二百年政争与兵事](http://103.6.6.66/upload/mall/productImages/24/30/9787522206059.jpg)
《
汉阙漫漫隐官道 : 东汉二百年政争与兵事
》
售價:HK$
227.7
![甲骨文丛书·魏玛共和国:1918~1933](http://103.6.6.66/upload/mall/productImages/24/30/9787522834030.jpg)
《
甲骨文丛书·魏玛共和国:1918~1933
》
售價:HK$
194.4
![中文版Photoshop数码照片处理全视频实践228例(溢彩版)](http://103.6.6.66/upload/mall/productImages/24/30/9787302665465.jpg)
《
中文版Photoshop数码照片处理全视频实践228例(溢彩版)
》
售價:HK$
135.7
![大乔小乔](http://103.6.6.66/upload/mall/productImages/24/29/9787542685162.jpg)
《
大乔小乔
》
售價:HK$
67.9
![文化遗产管理规划:场所及其意义](http://103.6.6.66/upload/mall/productImages/24/29/9787577209135.jpg)
《
文化遗产管理规划:场所及其意义
》
售價:HK$
101.2
![最后的奈良(一部日本土葬风俗消亡史,堪称日本土葬资源抢救工程的“世纪奇书”)](http://103.6.6.66/upload/mall/productImages/24/31/9787220135194.jpg)
《
最后的奈良(一部日本土葬风俗消亡史,堪称日本土葬资源抢救工程的“世纪奇书”)
》
售價:HK$
98.9
![古籍目录版本校勘文选(平装)](http://103.6.6.66/upload/mall/productImages/24/31/9787211090211.jpg)
《
古籍目录版本校勘文选(平装)
》
售價:HK$
89.7
|
編輯推薦: |
本书是一本深入浅出阐释计算机工作原理的入门实践指南,旨在以一种易于理解的方式呈现计算机的基础知识,探索以下主题:如何像软件工程师一样思考,用数据描述真实世界的概念;如何用欧姆定律和基尔霍夫定律分析电路的特性;如何像计算机一样思考,练习二进制加法,一步一步地在脑海中执行一个程序。
本书涵盖从电路设计到代码编写的广泛主题,涉及二进制、电路、逻辑运算、算术运算、存储器、时钟信号、机器码、汇编语言、高级编程语言、操作系统和互联网等概念。除这些基本概念外,书中还提供了大量练习和41个动手实践的设计任务,包括搭建数字电路、设计猜谜游戏、将十进制数转换为二进制、检查虚存使用情况、运行自己的网络服务器等,帮助读者巩固所学知识。
|
內容簡介: |
本书是一本将理论与实践有机结合的计算机工作原理实践指南,包含41个实践项目,涵盖了从电路设计到代码编写的广泛主题。通过本书,读者将实践构建数字电路、设计一个猜谜游戏、将十进制数字转换为二进制、检查虚拟内存使用情况、运行自己的Web服务器等,从引人入胜的实践项目中学习如何像软件工程师一样思考、用数据描述真实世界的概念,使用欧姆定律和基尔霍夫定律分析电路的特性,以及如何像计算机一样思考、一步一步地在脑海中执行一个程序。
|
關於作者: |
马修·贾斯蒂斯(Matthew Justice)是一位在微软工作了17年的软件工程师,从事过各种工作,包括调试Windows内核、开发自动修复程序,以及领导工程师团队构建诊断工具和服务。他从事过从底层软件开发到高级网络应用程序开发的所有工作。他拥有电气工程学位。业余时间,他喜欢与家人共度时光,共同远足、阅读、编曲并玩旧式电子游戏。
|
目錄:
|
目 录 Contents
前言
致谢
技术审稿人简介
第1章 计算机的概念1
1.1 计算机的定义1
1.2 模拟和数字2
1.2.1 模拟方法2
1.2.2 数字化3
1.3 数字系统4
1.3.1 十进制数4
1.3.2 二进制数5
1.4 位和字节6
1.5 前缀7
1.6 十六进制9
1.7 总结12
第2章 二进制13
2.1 数字化表示数据13
2.1.1 数字文本13
2.1.2 ASCII14
2.1.3 数字颜色和图像16
2.1.4 表示颜色和图像的方法17
2.1.5 解释二进制数据18
2.2 二进制逻辑18
2.3 总结22
第3章 电路23
3.1 电学术语23
3.1.1 电荷24
3.1.2 电流24
3.1.3 电压24
3.1.4 电阻25
3.1.5 水类比25
3.2 欧姆定律26
3.3 电路图26
3.4 基尔霍夫电压定律28
3.5 真实世界中的电路29
3.6 发光二极管30
3.7 总结32
设计1:搭建并测量电路32
设计2:搭建简单的LED电路37
第4章 数字电路39
4.1 什么是数字电路39
4.2 用机械开关实现逻辑运算40
4.3 神奇的晶体管41
4.4 逻辑门43
4.5 用逻辑门进行设计45
4.6 集成电路46
4.7 总结48
设计3:用晶体管实现逻辑运算49
设计4:用逻辑门构建电路50
第5章 数字电路中的算术运算55
5.1 二进制加法55
5.2 半加器57
5.3 全加器58
5.4 4位加法器59
5.5 有符号数61
5.6 无符号数64
5.7 总结65
设计5:搭建半加器66
第6章 存储器和时钟信号68
6.1 时序逻辑电路和存储器68
6.2 SR锁存器69
6.3 在电路中使用SR锁存器71
6.4 时钟信号73
6.5 JK触发器74
6.6 T触发器76
6.7 在3位计数器中使用时钟76
6.8 总结78
设计6:用NOR门搭建SR锁存器78
设计7:搭建一个基本的自动贩卖机
电路79
设计8:在自动贩卖机电路中添加
延迟复位功能80
设计9:将锁存器用作手动时钟82
设计10:测试JK触发器84
设计11:搭建3位计数器85
第7章 计算机硬件88
7.1 计算机硬件概述88
7.2 主存89
7.3 中央处理器92
7.3.1 指令集架构93
7.3.2 内部结构94
7.3.3 时钟、内核和高速缓存95
7.4 其他组件98
7.4.1 辅存98
7.4.2 输入/输出99
7.5 总线通信101
7.6 总结102
第8章 机器码与汇编语言103
8.1 软件术语103
8.2 机器指令示例104
8.3 用机器码计算阶乘106
8.4 总结108
设计12:汇编语言中的阶乘运算108
设计13:检查机器码117
第9章 高级编程121
9.1 高级编程概述121
9.2 C和Python简介122
9.3 注释122
9.4 变量123
9.4.1 C中的变量123
9.4.2 Python中的变量124
9.5 栈和堆125
9.5.1 栈125
9.5.2 堆126
9.6 算术运算127
9.7 逻辑运算129
9.7.1 按位运算符129
9.7.2 布尔运算符130
9.8 程序流131
9.8.1 if语句131
9.8.2 循环132
9.9 函数133
9.9.1 定义函数134
9.9.2 调用函数135
9.9.3 使用库135
9.10 面向对象的编程136
9.11 编译或解释137
9.12 用C语言计算阶乘138
9.13 总结140
设计14:查看变量141
设计15:改变Python中变量引用的值
类型143
设计16:栈或堆144
设计17:编写猜谜游戏145
设计18:使用Python中的银行
账户类146
设计19:用C语言实现阶乘147
第10章 操作系统150
10.1 无操作系统编程150
10.2 操作系统概述151
10.3 操作系统系列152
10.4 内核模式和用户模式154
10.5 进程155
10.6 线程157
10.7 虚存158
10.8 应用程序编程接口161
10.9 用户模式气泡和系统调用163
10.10 API和系统调用164
10.11 操作系统软件库165
10.12 应用程序二进制接口166
10.13 设备驱动程序167
10.14 文件系统167
10.15 服务和守护进程168
10.16 安全169
10.17 总结169
设计20:查看运行中的进程170
设计21:创建并观察线程172
设计22:查看虚存173
设计23:尝试操作系统API175
设计24:观察系统调用177
设计25:使用glibc178
设计26:查看加载的内核模块180
设计27:了解存储设备和文件系统181
设计28:查看服务182
第11章 互联网183
11.1 网络术语183
11.2 互联网协议套件185
11.2.1 链路层186
11.2.2 网络层187
11.2.3 传输层190
11.2.4 应用层192
11.3 游历互联网192
11.4 互联网基础功能194
11.4.1 动态主机配置协议194
11.4.2 私有IP地址和网络地址
转换195
11.4.3 域名系统196
11.5 网络即计算198
11.6 总结199
设计29:查看链路层199
设计30:查看网络层200
设计31:查看端口使用情况201
设计32:跟踪到达互联网上一个主机
的路由203
设计33:查看IP地址203
设计34:查看设备IP是公有的还是
私有的204
设计35:在DNS中查找信息205
第12章 万维网206
12.1 万维网概述206
12.1.1 分布式网络206
12.1.2 可寻址网络207
12.1.3 链接网络208
12.1.4 网络协议209
12.1.5 可搜索的网络211
12.2 网络语言212
12.2.1 用HTML构造网络212
12.2.2 用CSS设计网络样式215
12.2.3 用JavaScript编写网络脚本216
12.2.4 用JSON和
|
內容試閱:
|
Preface 前 言
你是否好奇计算机是如何工作的?获得对计算机的广泛理解通常是一个漫长而曲折的过程。问题不在于缺乏相关文档,在网络上快速地搜索一下就能找到很多致力于解释计算机工作原理的书籍和网站。编程、计算机科学、电子学、操作系统……那里有大量的信息。这是件好事,却会让人望而生畏。那么,你应该从哪里开始呢?一个主题是如何联系到另一个主题的?本书的目的是为大家提供一个切入点,方便大家学习计算机的关键概念,并了解这些概念是如何结合在一起的。
在我担任工程经理时,我面试了很多软件开发方面的求职者。通过与他们的交谈,我了解到他们知道如何编写代码,但是相当一部分人似乎并不了解计算机实际上是如何工作的。他们知道如何让计算机执行命令,但并不理解幕后的情况。对这些采访结果的反思,以及我自己努力学习计算机的经历,促使我撰写了这本书。
我的目标是用一种易于理解、可动手操作的方式呈现计算机的基础知识,让抽象概念更加真实。本书并没有深入介绍每个主题,而是主要介绍计算机的基础概念,并将这些概念联系起来。我希望大家能在脑海中勾勒出计算机是如何工作的,这样就能深入挖掘感兴趣的主题了。
计算机无处不在,随着我们的社会越来越依赖于技术,我们需要广泛理解计算机的人才。我希望本书能帮助大家获得广阔的视野。
本书读者
本书适合想要了解计算机工作原理的任何人。读者不必具备与所述主题相关的预备知识,因为本书是从零开始介绍的。如果你已经有编程或电子学方面的背景,那么本书可以帮助你扩展其他领域的知识。本书是为以下这些自学者编写的,他们熟悉基础数学和科学,且熟练使用计算机和智能手机,但仍然对它们的工作原理存有疑问。本书的内容对教师也有用,我相信书中的内容设计非常适合课堂讲解。
本书内容
本书把计算机看作一个技术栈。现代计算设备(如智能手机)就是由技术层组成的。这个栈的底层是硬件,顶层是应用程序,顶层与底层之间是多个技术层。层次模型的优点在于,每一层都受益于较低层的全部功能,但任意给定层都只需要建立在其下面一层上就可以了。在介绍了一些基础概念后,我们将自下而上地逐层讲解该技术栈,从电子电路开始,一直推进到驱动网络和应用程序运行的技术。以下是各章所包含的内容。
第1章涵盖计算机的基础概念,比如模拟和数字、二进制数字系统和SI(国际单位制)前缀。
第2章探索如何用二进制表示数据和逻辑状态,介绍逻辑运算符。
第3章解释电学和电路的基本概念,包括电压、电流和电阻。
第4章介绍晶体管和逻辑门,并总结第2章和第3章的概念。
第5章展示如何用数字电路执行加法运算,进一步揭示数字是如何在计算机中表示的。
第6章介绍存储器设备和时序电路,演示如何用时钟信号进行同步。
第7章介绍计算机的主要组成部分:处理器、存储器和输入/输出。
第8章展示处理器执行的低级机器码,介绍汇编语言——一种人类可读形式的机器码。
第9章介绍不依赖于特定处理器的编程语言,包含C语言和Python语言的代码示例。
第10章介绍操作系统系列以及操作系统的核心功能。
第11章讲解互联网的工作原理及常用网络协议套件。
第12章解释网络的工作原理及核心技术:HTTP、HTML、CSS和JavaScript。
第13章概述一些现代计算机主题,如app、虚拟化和云计算。
阅读本书时,你将会看到用于解释概念的电路图和源代码。这些都是教学工具,主要是为了直白地讲解内容,而不是为了说明工程师在设计硬件和软件时需要考虑的性能、安全性等因素。换句话说,本书中的电路和代码虽然能帮助你领会计算机是如何工作的,但它们不见得是最好的例子。同样,书中的技术示例也偏向于简单,不够完整。有时,我会省去某些细节,以免介绍得太复杂。
关于练习和设计任务
本书几乎每章都配有练习和实践设计任务。这些练习是让你动脑或用纸笔来解决的问题。实践设计任务不仅是脑力练习,还经常涉及电路搭建或计算机编程。
做这些设计任务需要购买一些硬件(附录B给出了所需组件的列表)。之所以要加这些设计任务,是因为我相信最好的学习方法就是自己去尝试。如果想从本书获得最大收益,那么一定要去完成这些实践设计任务。尽管如此,即使你一个电路都不搭建,一行代码都不输入,也可以继续跟进书中所呈现的内容。
附录A中给出了练习的答案,相应章末给出了每个设计任务的详细资料。附录B包含了启动这些设计的信息,在需要时,设计文本可以为你指明方向。
各设计任务所用源代码可以从https:// www.howcomputersreallywork.com/code/获得。你还可以在https://nostarch.com/how-computers-really-work/上访问本书,了解相关更新内容。
我的计算机之旅
我对计算机的痴迷可能是从小时候玩电子游戏开始的。每当我去拜访祖父母时,我都会连着几小时玩我阿姨的Atari 2600游戏机上的Frogger、Pac-Man和Donkey Kong。后来,当我上五年级的时候,我的父母在圣诞节把任天堂娱乐系统当作礼物送给我,我好激动!虽然我喜欢玩《超级马里欧兄弟》和《双截龙》游戏,但随着时间的推移,我开始好奇电子游戏和计算机是如何工作的。可惜的是,我的任天堂游戏机并没有为我提供许多关于其内部情况的线索。
大约是在同一时期,我家购买了第一台“真正的”计算机——苹果IIGS,它为我打开了一扇新的大门,让我去探索这些机器究竟是如何工作的。幸运的是,我的初中开设了一门关于苹果II计算机的BASIC编程课程,我很快就发现我对探索编程的需求是无止境的!我会在学校写好代码,把它复制到软盘带回家,然后在家里继续编程。在整个初中和高中阶段,我学到了更多关于编程的知识,我确认自己非常喜欢它。我还开始意识到,尽管BASIC和其他类似的编程语言能相对容易地告诉计算机做什么,但它们还是隐藏了很多关于计算机工作原理的细节,我希望在这方面能更加深入。
我在大学学习的是电气工程,我开始了解电子电路和数字电路。我学习了C语言和汇编语言课程,终于了解了计算机是如何执行指令的。计算机工作原理的底层细节也开始变得有意义起来。在大学,我还开始学习被称为“万维网”(World Wide Web)的新事物,我甚至还制作了自己的网页(这在当时似乎很了不起)!我开始编写Windows应用程序,并开始接触UNIX和Linux。这些内容有时似乎与数字电路和汇编语言的硬件具体细节相去甚远,我很想知道它们是如何结合在一起的。
大学毕业后,我很幸运地在Microsoft公司找到一份工作。在那里的17年中,从调试Windows内核到开发Web应用程序,我从事过各种软件工程工作。这些经历使我对计算机有了更广、更深的理解。我和许多非常聪明且知识渊博的人一起共事,我认识到,关于计算机总是有学不完的知识。理解计算机是如何工作的,已经成为我一生的追求,我希望能通过本书把我学到的一些东西传递给大家。
致 谢 Acknowledgements
非常感谢我的妻子Suzy,她是我的非正式编辑,给我提供了宝贵的反馈意见。她通读了本书的多版草稿,仔细地检查了每个字和每个概念,帮助我完善了自己的思路并清晰地把它们表达出来。在从本书设想到完成这一过程中,她都鼓励并支持着我。
感谢我的女儿Ava和Ivy,她们阅读了本书早期的草稿,帮助我从年轻学习者的视角来审视我的作品。她们帮助我避免了混淆性语言表述,并告诉我哪里需要花更多的时间进行解释。
我还想感谢我的父母Russell和Debby Justice,他们总是信任我并给我提供许多学习的机会。我对文字的热爱来自我的母亲,而我的工程思维则来自我的父亲。
感谢No Starch出版社的整个团队,尤其是Alex Freed、Katrina Taylor和我的文字编辑Rebecca Rider。这是我第一次写书,No Starch出版社的编辑在整个过程中给予我耐心的指导。他们发现了我没有考虑到的改进机会,并帮助我清楚地表达自己的想法。我对出版团队能带来的价值有了新的认识。
我要感谢本书的技术审稿人John Hewes、Bryan Wilhelm和Bill Young,他们仔细检查了本书的细节。他们的贡献使本书内容更加准确、完整,每个人都给出了独特的见解,并分享了宝贵的专业知识。
感谢Microsoft公司多年来指导我以及和我合作的所有人员。很幸运能与他们这些才华横溢、聪明博学的人一起工作,由于篇幅所限,不能一一列出。我之所以能写出这样一本书,是因为一些杰出的微软人愿意花时间与我分享他们的知识。
|
|