小册上新 | 计算机是怎样运行的:从根儿上理解计算机

3,681 阅读8分钟

《计算机是怎样运行的:从根儿上理解计算机》, 是MySQL 系列小册(热销超 20000 册)作者小孩子,时隔两年推出的新小册,它完全面向零基础用户,让你一次理解计算机相关的核心概念。

🎤 作者介绍

小孩子是《MySQL是怎样运行的:从根儿上理解MySQL》《MySQL是怎样使用的:从零蛋开始学习MySQL》小册,以及公众号「我们都是小青蛙」作者。

他致力于研究怎样可以写出深入浅出的技术书籍,觉得把复杂的问题讲清楚是一件很牛逼的事儿

🚀 这本小册的诞生

作为一名程序员,无论你是从事前端开发、后端开发、数据分析还是算法,还是使用C、Java、PHP、Javascript、Python来编写程序,其实都是和计算机在打交道

随着计算机的功能越来越强大,你有没有想过这样一个问题:计算机到底是怎样运行的?

我相信大部分人都想过这个问题,在学校可能也学过《计算机组成原理》这样的课程。但是,大部分人提到这个话题的时候,要么认为它太过底层、没必要学,要么认为它太难了、学不懂。

那么,底层的知识真的没必要学吗?其实关于这个问题,已经很多人给出过答案。小孩子想说的只有一句话,「底层知识可以帮助我们在学习新技术的时候,成为那个啥都一点就通的最靓的仔,所以一定要学。

但是,“难”的问题该怎么解决呢?小孩子认真思考了一下,大家认为“难”的原因无非有以下几种:

  • 概念简直不要太多。刚打开一本讲解计算机原理的书,各种概念像是从加特林机枪里射出来的,打得人喘不上气。而且知识点像是散装起来的,彼此貌似有联系但又没太大联系。

  • 自上向下的讲述策略。即先将计算机分成几个部分,再将它们划分成更小的部分。这是方式非常简单粗暴,对知识的传播者足够友好(因为这样写的确很简单),却对知识的接收者足够不友好(因为人们的认知并不是先整体再具体的)。

  • 引用尚未接触过的概念去解释新概念。这一点可能是因为作者假定读者已经掌握了某些知识,或者是作者一开始就没考虑各个概念之间的因果关系(因为大人长大后很难回忆起自己还是一个小孩子的时候是个啥样了)。

  • 细节!细节!还是细节!细节是魔鬼,细节对于理解问题的本质起着至关重要的作用,学习了缺乏细节的知识会让人觉得好像学了点儿什么,可吃完一顿饭之后又会觉得啥都没学。

  • 枯燥的语言带来了浓浓的“学术”气息,一个个冷冰冰的知识点被我们不情愿的装入脑中,让小伙伴们不禁感叹:学习真是一件苦差事啊。

那么,《计算机是怎样运行》这本小册都做了哪些改进呢?

  • `给各种概念分清层次,尽最大努力保证一次只介绍一个概念。

  • 按照人们的认知顺序讲解。先介绍简单的知识,再在简单知识基础上扩展新的知识,力求为大家打造一个十分平缓的学习曲线。

  • 本小册是完全零基础的(不过需要各位有中学电学知识基础),并且尽最大努力避免引用未介绍过的概念去介绍新概念。

  • 沿着计算机从简单到复杂的发展历程,我们会保留其中最核心的一些东西,并力求给出足够多的细节去实现它们。

  • 小孩子写东西不喜欢那么严肃,大家在读本小册的时候可能会觉得有个人在和你扯淡,在扯淡中学习的过程还是蛮愉悦的嘛!

🏆 小册是如何设计的?

小册的设计借鉴了人们在管理复杂事物时的经验,即把复杂的事物分成若干层次。上层与下层之间只暴露简单的沟通接口,上层无需了解下层是怎么实现的,这样每一层中所面临的问题的复杂性就降低了很多。

比方说治理一个国家很困难,所以将国家分成了省、市、县、乡、村;治理一支军队很困难,所以将军队分成了军、师、旅、团、营、连、排、小工兵(这样旅长只需要给李云龙下命令:干掉狗日的山崎大队!而不用关心李云龙到底是通过集团冲锋还是土工作业的方式把山崎大队干掉的)。

对于降低计算机这个庞然大物的复杂度,我们可以将其拆分为如下图所示的多个层次:

image.png

为什么这么划分呢?假设,我们用C语言敲了一行printf的代码,把它编译运行,在屏幕上把它显示出来。这样的一个简单的操作,其实是经过层层调用得到的。

首先,我们的应用程序会调用操作系统提供的往屏幕上输出一行字的接口,称之为系统调用,应用程序是不关心操作系统将这行字儿输出到屏幕的具体细节的。

然后,操作系统接收到需要往屏幕上输出一行字儿的系统调用之后,会调用相关硬件的驱动程序来真正操作硬件。程序其实是由一条一条的机器指令构成的,我们编写程序时只需要按照我们所使用CPU采用的指令集体系结构中所指定的格式来编写指令即可,而不用关心指令是如何实现的。

接着,针对同一个指令集体系结构来说,不同的厂商可以针对同样的机器指令画出不同的电路图。比方说,对于x86指令集体系结构,Intel公司和AMD公司可以真对同一个机器指令开发出不同的电路图,这个电路图就是所谓的微体系结构

而微体系结构又是由若干电路组件组成的。比方说,做加法需要加法器,做乘法需要乘法器,存储数据需要寄存器等等。针对同一个电路组件也可以有不同的实现,比方说,对于加法器来说,我们可以使用行波进位加法器,也可以使用先行进位加法器。

其中,电路组件其实是由逻辑门组成的,而完成同样功能的逻辑门,又可以被继电器、真空管或者晶体管这些器件实现。

至于继电器、真空管、晶体管这些器件是怎样导电的,就是物理学家们所要研究的话题了。

总的来说,本小册将从物理的电学知识开始,从最底层逐层向上唠叨,直到计算机体系结构层次。关于操作系统的知识,我们只能留在下一本书里再详细唠叨了。

在《计算机是怎样运行的》这本小册中,小孩子从 0 实现了一个支持 14 条指令的单操作数 miniCPU,并在 FPGA 上做了实现。这些指令分别是:

表格.png

基于这些指令,我们可以进行顺序、分支、循环结构的软件程序编写。除了从头唠叨 CPU 的设计之外,小册还会介绍总线、中断、指令集体系结构(以现实生活中真实使用的 MIPS 为例)等高级概念。

❤️ 写在最后

小孩子创作的《MySQL是怎样运行的:从根儿上理解MySQL》和《MySQL是怎样使用的:从零蛋开始学习MySQL》上线到现在已经有2年多的时间了。目前,一共有两万多名小伙伴和小孩子一起学习过MySQL。

小孩子想用若干年的时间去编写若干本极富小孩子特色的计算机学科的书籍,从而搭建一个计算机学科书籍的金字塔,而这本《计算机是怎样运行的》无疑就是这个金字塔中最底层的那块砖。

💬 互动交流群

小册购买成功后,即可申请加入互动交流群。入群方式如下:

image.png