计算机是怎样运行的:从根儿上理解计算机--掘金小册课程推荐/优惠
版权声明
本站非掘金小册官网,与官方无任何关系。我们不提供课程下载或详细内容,仅作为课程分享和推荐平台。我们鼓励大家支持正版,尊重创作者的劳动成果,这样不仅能帮助创作者持续产出优质内容,也能让自己获得更好的学习体验。请通过官方渠道购买和学习课程,感谢您的理解与支持。
课程详情
课程介绍
小册介绍
之前小孩子写了《MySQL是怎样运行的》,虽然挺受欢迎的,但受众实在太少,只有后端开发小伙伴以及部分DBA才会用到。所以这次小孩子憋了个大招,搞了一本各方通吃的小册《计算机是怎样运行的》,这是一本从完全零基础,讲解计算机是如何一步一步搭建起来的书籍。
小贴士:
小孩子想用若干年的时间去编写若干本极富小孩子特色的计算机学科的书籍,从而搭建一个计算机学科书籍的金字塔,而这本《计算机是怎样运行的》无疑就是这个金字塔中最底层的那块砖。
不论大家从事前端开发、后端开发、数据分析还是算法岗位,不论使用C、Java、PHP、Javascript还是Python编写程序,我们都是在和计算机打交道,如果不清楚计算机是怎样运行的话,很大概率上在程序员的道路上走不太远。相反,如果您熟知计算机底层运行的一些原理,那之后学习新技术的时候,一定会成为那个啥都一点就通的最靓的仔!
以往在谈到计算机组成原理的话题时,很多同学会认为这个太过于底层,直呼太难了学不懂。小孩子认真思考了一下,其实给大家造成“难”的这个错觉的原因大致有下边这些:
-
概念简直不要太多,刚打开一本讲解计算机原理的书籍,各种概念像是从加特林机枪里射出来的,打的人都喘不上气。而且知识点像是散装起来的,彼此貌似有联系但又好像没太大联系,很难形成统一的整体。
-
采用自顶向下的讲述策略,即先将计算机分成几个部分,再将各个部分分成各个小部分。这是一种非常简单粗暴的讲述策略,这种策略对知识的传播者足够友好(因为这样写的确很简单),却对知识的接收者足够不友好(因为人们的认知并不是先整体再具体的)。复杂事物的组成不是一开始就是那个样子的,一个凶神恶煞的怪兽的初期可能就是一个非常可爱的小宝宝,我们想要了解复杂怪兽,其实最好的手段是从它还是个小宝宝的时期开始,之后一步步的随着它的长大来了解更多信息,这样才会足够深入的理解它。
-
引用尚未接触过的概念去解释新概念。这一点可能是因为作者假定读者已经掌握了某些知识,或者是作者一开始就没考虑各个概念之间的因果关系(因为大人长大后很难回忆起自己还是一个小孩子的时候是个啥样了)。
-
细节!细节!还是细节!细节是魔鬼,细节对于理解问题的本质起着至关重要的作用,学习了缺乏细节的知识会让人觉得好像学了点儿什么,可吃完一顿饭之后又会觉得啥都没学。
-
枯燥的语言带来了浓浓的“学术”气息,一个个冷冰冰的知识点被我们不情愿的装入脑中,让小伙伴们不禁感叹:学习真是一件苦差事啊。
针对上边所述的问题,本小册做了针对性的改造:
-
给各种概念分清层次,尽最大努力保证一次只介绍一个概念。并且将所有知识点串成一条线,希望大家在读完全书后有一种看了一整部电视剧或者游戏不断通关最后干掉大BOSS的感受。
-
按照人们的认知顺序,先介绍简单的知识,再在简单知识基础上扩展新的知识,力求为大家打造一个十分平缓的学习曲线。我们觉得“是什么”的重要性远没有“为什么”重要,小册的基本讲述套路就是先抛出一个问题,然后针对问题提出较为简单的解决方案,再分析该方案的不足之处,之后逐渐改进。
-
本小册是完全零基础的(不过需要各位有中学电学知识基础),并且尽最大努力避免引用未介绍过的概念去介绍新概念。
-
沿着计算机从简单到复杂的发展历程,我们会保留其中最核心的一些东西,并力求给出足够多的细节去实现它们。当然,一考虑到篇幅有限,并不能在一本书中详细讲解所有内容;二考虑到大家的用户体验,短时间内介绍大量内容会影响心情。所以我们有时会只介绍某个东西如何使用,而不去纠结它是如何实现的了(比方说内存控制器),遇到这种情况我们会明确强调。
-
小孩子写东西不喜欢那么严肃,大家在读本小册的时候可能会觉得有个人在和你扯淡,在扯淡中学习的过程还是蛮愉悦的嘛!
现代计算机所能完成的任务五花八门,大家可以使用计算机看电视、听音乐、打游戏、做报表等等等等,但计算机大厦的基石其实就是由非常简单的开关组成。我们将从最基本的电路知识开始出发,使用电压信号来表示二进制数字,然后使用电控开关去改变信号,由于改变的方式五花八门,从而引入各种各样的逻辑门,从逻辑门再走向逻辑运算和逻辑函数。有了足够多的基础知识后,可以在此基础上搭建各种算术/逻辑运算电路,将其汇总起来作为算术/逻辑单元,之后从狗哥的实际问题出发引入寄存器概念,从而可以在时钟信号的控制下完成运算,之后再引入用户友好的存储设备以完成自动运算。为更方便的解决现实问题,我们逐渐引入各种指令,之后就诞生了“编程”的概念。然后就可以引入计算机中的各种高级主题,诸如指令集体系结构、总线、中断、汇编语言与高级语言等等。
在《计算机是怎样运行的》小册中,小孩子从零实现了一个支持14条指令的单操作数miniCPU,并在FPGA上做了实现。这些指令分别是:
指令名称 | 指令的二进制形式 | 指令的十进制形式 | 描述 |
---|---|---|---|
add_m | 0000 | 0 | 加法,操作数为地址 |
sub_m | 0001 | 1 | 减法,操作数为地址 |
and_m | 0010 | 2 | 按位与,操作数为地址 |
or_m | 0011 | 3 | 按位或,操作数为地址 |
halt | 0100 | 4 | 停止执行 |
store | 0101 | 5 | 向数据RAM中写入数据(操作数为地址) |
load_m | 0110 | 6 | 将数据RAM中的数据加载到累加器中,操作数为地址 |
jmp | 0111 | 7 | 跳转到某条指令执行(操作数为地址) |
je | 1000 | 8 | 如果上次ALU运算结果为0,就跳转到某条指令执行(操作数为地址) |
add_i | 1001 | 9 | 加法,操作数为立即数 |
sub_i | 1010 | 10 | 减法,操作数为立即数 |
and_i | 1011 | 11 | 按位与,操作数为立即数 |
or_i | 1100 | 12 | 按位或,操作数为立即数 |
load_i | 1101 | 13 | 将一个立即数加载到累加器中 |
另外需要强调的一点是,虽然文中使用了较多的电路来解释问题,但本小册确确实实是写给软件开发同学看的,以至于电路结构能简化就简化,硬件开发同学是无需看的。
作者介绍
《MySQL是怎样运行的:从根儿上理解MySQL》以及《MySQL是怎样使用的:从零蛋开始学习MySQL》书籍作者,公众号「我们都是小青蛙」作者,辞掉工作专门研究怎样可以写出通俗但又深入的技术书籍,觉得把复杂的问题讲清楚是一件很牛逼的事儿。
你会学到什么?
从0到1搭建计算机,深刻理解计算机中的各种概念。
适宜人群
仅需中学电学知识基础,适用于使用计算机编程,却对底层原理不清楚的各种同学。
课程目录
- 万里长征第一步 —— 概述与阅读建议
- 半斤对八两 —— 进制转换
- 像原始人一样数数 —— 计数
- 信息的不同表示 —— 用电压表示信号
- 再上一次物理课 —— 中学电学知识回顾
- 信号从这里发生改变 —— 逻辑门
- 计算机的基石 —— 电控开关
- 知识升华一下 —— 逻辑变量和逻辑运算
- 机器是怎么算1 +1=2的 —— 加法器
- 时间是一场轮回,数字也是 —— 补数和减法
- 人类的霸气解释权 —— 负数的表示
- 器件的大杂烩 —— ALU的诞生
- 解放双手 —— 自动执行
- 是时候让软件登场了 —— 指令的诞生(一)
- 让指令更省地方 —— 指令的诞生(四)
- 加载和保存 —— 指令的诞生(二)
- 直肠子的缺点 —— 组合电路的不足之处
- 条件转移 —— 指令的诞生(三)
- 更灵活的指令—— 指令升级
- 冯·诺伊曼结构 —— 只保留一个RAM
- 保持自我是一种美德 —— 锁存器和寄存器
- 大肚能容 —— 存储器
- CPU和内存的通信中介 —— RAM控制器
- 给小孩子的书打个广告
- 源码和参考资料
- 条条大路通罗马 —— 总线
- 软件程序员的基操——软件程序结构
- 像金字塔一样——存储器层次结构和I/O设备
- 还让不让人好好干活了 —— 中断和异常
- 程序员能看到的一切 —— 指令集体系结构