前言
前段时间有人在开发者头条推荐了几本书,其中包括《计算机是怎么跑起来的》《程序是怎么跑起来的》作者是日本的矢泽久雄。
看过之后收获很大,如书中所说很多程序员理解面向对象,精通Java php 等等,但是对于计算机和程序的基本运行原理却知之又
少,也许这就是一个程序员跟一个伟大程序员之间的差距之一吧。
本文将这两本书合二为一,加入自己的发散思维,算是读书笔记,也希望对阅读者能有所帮助,由于作者水平有限,错误不足之处
请指正。
文章没有具体的规划,大致内容以及顺序如下:
0x00 认识计算机
0x10 计算机硬件组成是这么简单
0x20 计算机程序
0x30 计算机操作系统
0x40 现代计算机
0x00 认识计算机
0x01 计算机是输入-运算-输出 的机器
计算机通过I/O设备输入输出,如 鼠标,键盘,计算器的按键,游戏机把手都是输入设备,那么 计算器 和游戏机是不是计算机呢?
是啊,当然是 绝对是,它有 输入-运算-输出,干嘛不是呢?
CPU是负责运算的,那么CPU是怎么知道该算加减还是乘除呢?是程序,CPU按照程序的指令做运算
0x02 程序是指令和数据的集合,怎么把程序发送给CPU,然后CPU又是怎么运算的呢?下面我就画一个超级简化的“CPU”来说明
在制造这个“CPU”之前,我们只需要提前约定好下面规则
5V电压代表 1
0V电压代表 0
当C指令引脚电压为5V,CPU直接将D数据引脚的电压直接输出到O引脚
当C指令引脚电压为0V,CPU将D数据引脚的电压翻转后输出到O引脚
上图的”CPU“是我们自己制造的,我们输入不同的程序(指令引脚电压和数据引脚电压),就会得到不同的输出值
罗列得到如下表格:
C指令引脚输入值 | D数据引脚输入值 | O输出引脚输出值 | 备注 |
1(指令为1) | 0 | 0 | 输入程序10-->输出0 |
1(指令为1) | 1 | 1 | 输入程序11-->输出1 |
0(指令为0) | 0 | 1 | 输入程序00-->输出1 |
0(指令为0) | 1 | 0 | 输入程序01-->输出0 |
下面我们开始编程:
11 10 00 01 这样CPU依次输出 1 0 1 0,如果接到LED灯上,就是 亮 灭 亮 灭
00 00 11 10 这样CPU依次输出 1 1 1 0 ,如果接到LED灯上,就是 亮 亮 亮 灭
看到这里你应该能理解了,所有的程序,无论是什么高级编程语言 java, php, c , python 最终都会转化成二进制的形式,然后通过高低电压接入CPU输入引脚
CPU计算后,再通过输出引脚输送出来。(真正的CPU复杂的多 有 I/O引脚 地址引脚 数据引脚 控制引脚 等等,不要着急这些我们后面都会了解的清清楚楚)。
0x03 计算机跟人不同
计算机的世界里只有高电压和低电压,也就是只有 1 和 0 ,而我们人类世界有1234567890,有赤橙红绿青蓝紫,有乘除,有汉字,这些计算机怎么表示,怎么计算呢?你肯定马上就能回答,用 二进制编码表示,二进制指令计算。
结束
下篇我们就做一个简单的计算机,有内存,有I/O口,有时钟,理解一个计算机到底是怎么运转的。