聊聊开关和CPU之间故事
作者:小牛呼噜噜 | https://xiaoniuhululu.github.io
大家好,我是呼噜噜,在先前的一篇文章计算机中数值和字符串怎么用二进制表示?中,我们知道了计算机为什么会采用 0 和 1 组成的二进制,来表示所有的信息,比如机器指令、数字、字符串、声音、图片、视频等等。
我们本篇文章来看看计算机在硬件层面究竟是怎么表示二进制的,CPU究竟是怎么实现的?通过本文的学习,我们也可以反过来明白为什么计算机会采用二进制了。
开关
我们在生活中,处处都是开关,比如控制灯的开关
我们可以发现一个很简单的现象:
- 串联的开关,只有2个开关都闭合,灯泡才亮。这也就是布尔代数中"逻辑运算与"
- 并联的开关,只要有1个开关闭合,灯泡就会亮。这也就是布尔代数中"逻辑运算或"
我们以最简单的2个数,0和1来举个例子,写出其布尔代数的真值表:
电报和继电器
在人类信息传递发展的历史上,长途信息传递一直是非常困难的时,当时常见的方式有,比如人骑马送信,训练信鸽、点燃烽火,但信息传递的效率都非常低效。直到电报的出现,电报思想的正式成形是在19世纪早期,它的让人类传递信息的效率得到极大的提升。
电报利用电的特性来传递信息,早期设计复杂且不稳定,传递的信息复杂度又比较低,1837年美国人摩尔斯通过电磁感应改良了发报机,并发明了摩尔斯电码。他将电报划分为2种信号,短促的"点信号"和长一点的"划信号", 将把“点”当成“1”,把“划”当成“0”(这不就是二进制嘛),并编写了个“字典”将字母及数字编码一一对应,这样就能传递复杂的信息,在未来产生了巨大影响力,意味着现代通信的开始。
由于早期的电报传输,需要铺设电线,但是随着电线越长,其电阻就越大,电信号常常传输过程中被消耗点,这样接受方就无法接收到信息了。幸运的是,工程师发明了继电器,其原理就是接收微弱的信号,然后不断地通过新的电源重新放大已经开始衰减的原有信号,最后把它增强后发送出去。
当开关是打开的话,灯泡是不亮的;但当开关是闭合的话, 电流流过围绕在铁棒上的线圈,会发生电磁效应,铁棒就具有了磁性,会将弹簧片吸下来,右边电路就通了,灯泡就会亮了。这样通过继电器,一段段放大信号,电报就能长距离传输信息了。
虽然继电器有放大信号的作用,但和开关一样继电器也可以串联或并联以执行逻辑中的简单任务,继电器比起普通的开关的优势在于继电器无需直接被输入者控制,可以被其他继电器控制,这样就可以组合完成更复杂的操作。比如我们可以通过继电器实现: 当我们闭合开关时,灯泡关闭;当我们打开开关时,灯泡去点亮这种灯泡的状态和开关的闭合状态相反的操作,普通开关是无法实现这种操作的。这些电路物理的表象下隐藏的逻辑关系,一直没有被人发现。
直到1938年,克劳德·香农在麻省理工学院所写的硕士论文《A Symbolic Analysis of Relay and Switching Circuits》中阐述了继电器和开关电路中的符号分析之间的关系,他将开关、继电器、二进制、布尔代数联系起来。也就是发现人类可以通过开关和继电器这些普通的电路,直接就能实现布尔代数各种逻辑运算操作。这些继电器的组合被称为逻辑门,他们构造基本的逻辑电路,也叫门电路。
门电路
上面是3种最最基本的门:
- 与门,两个开关只有同时打开,电流才会通过,灯泡才会亮
- 非门,当开关闭合时,电流会通过,灯泡会亮;开关打开,电流不能通过反而,灯泡熄灭
- 或门,两个开关中只要有一个打开电流就能通过,灯就会点亮
这些门其实就是一个个"开关"的抽象, 以后我们需要的各种复杂的逻辑都可以通过这3个门来实现,真的是非常奇妙
我们再来看一个常见的门:异或门XOR
我们先写出其真值表(真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效):
A | B | X(输出) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | 0 |
1 | 0 | 1 |
其表达式也就是:
通过表达式我们就能知道,把非A与B的值 和非B与A的值 通过或门加起来
就能得到异或门
了
材料学的发展
上世纪材料学的发展也大力推动了计算机的蓬勃发展,计算机的硬件出现了3次大的更新换代
继电器与哈佛Mark1号
在1944年,为了给美国曼哈顿计划跑模拟,IBM建造出来首台自动按序控制计算机哈弗Mark1号,有76万五千个组件,300万个连接点和500英里长的导线,重达4500公斤,占地面积有房间那么大。其大脑是由继电器组成的,其一秒能做3次加或减,乘法花费6秒,除法花费15秒
由于继电器的金属臂有“质量”,无法快速开关,1940年一个好的继电器一秒钟可以翻转50次,但是任何会动的机械都会随着时间出现物理磨损,部件会损坏,随着继电器数量增加,故障概率也会增加。真的是又慢又容易坏的大家伙,但瑕不掩瑜,其依旧具有跨时代的意义。
真空管与巨人一号
在1904年,英国物流学家弗莱明就已经开发了一种新的电子组件,叫做真空管,也就是把两个电极装在一个气密的玻璃灯泡里,但弗莱明的这个电子部件,电流只能单向流动,俗称称为 "二极管"。要想制作计算机,需要能够控制电子的流动的东西。
在 1906 年,美国发明家"李·德富雷斯特"在"弗莱明"设计的两个电极之间,加入了第三个"控制"电极(一 种栅栏式的金属网,形成电子管的第三个极),向"控制"电极施加正电荷,它会允许电子流动;但如果施加负电荷,它会阻止电子流动。被命名为真空三极管,这样就能形成一个"开关",可以“断开或闭合电路”。
由于真空管内没有会动的组件,想较于机械装置,磨损更少,又没有金属臂的限制,每秒可以开闭数千次,继电器一秒钟只能翻转50次左右,效率大大的提升。
第一个大规模使用真空管的计算机是"巨人1号",标志着计算机从机电转向电子,电子计算机的大门自此打开。由工程师Tommy Flowers设计,完工于1943年12月,用于二战时破解德国军事通讯密码。
晶体管与IBM608
虽然真空管做计算机的大脑,解决了继电器许多缺陷,但是其还是容易损坏,就像灯泡一样烧坏。到1950年代,真空管计算机都达到了极限。
1947年,贝尔实验室发明了晶体管,其成为了新的"开关",也标志着一个全新的计算机时代到来。晶体管不仅体积小,响应速度快(每秒切换开关能达到上百万次),而且使用寿命也非常悠远,准确 性高,稳定性好,不易损坏。关键它可以做得非常小,一块集成电路即可容纳十几亿到几十亿 个晶体管。
晶体管泛指一切以半导体材料为基础的单一元件,半导体顾名思义,可导电也可不导电,是常温下导电性能介于导体与绝缘体之间的材料,一般有硅、锗、砷化镓等
IBM608第一个完全用晶体管,消费者也可以买的起计算机。该计算机有3000个晶体管,每秒执行4500次加法,80次左右的乘除法。
计算机2大特性:计算能力和记忆能力
通过本文的阅读,我们知道了开关是一个生活中很普通的东西,但香农将开关、布尔代数联系的一起后,产生了化学反应。可以用一个个开关组合起来,成为门电路,从而能够造成CPU。
随着材料学等发展,开关也从继电器到真空管,再到晶体管,相应速度,提交,使用寿命,成本都得到了明显的改善。他们制造出来的计算机也慢慢的变成了我们现在熟悉的计算机。
计算机的大脑就是CPU,我们知道CPU内最重要的2个部件是寄存器和计算单元
,那么如何用开关来让计算机拥有计算能力和记忆能力?大家可以思考一下,后面的文章让我们抛开硬件,通过抽象出来的逻辑门来一步步设计和实现一个CPU。
参考资料:
《深入理解计算机系统》
《编码:隐匿在计算机软硬件背后的语言》
《深入浅出计算机组成原理》
《数字电子技术基础》
《穿越计算机的迷雾》
百度百科
全文完,感谢您的阅读,如果我的文章对你有所帮助的话,还请点个免费的赞,你的支持会激励我输出更高质量的文章,感谢!
原文镜像:聊聊开关和CPU之间故事
计算机内功、源码解析、科技故事、项目实战、面试八股等更多硬核文章,首发于公众号「小牛呼噜噜」,我们下期再见!
聊聊开关和CPU之间故事的更多相关文章
- java内存模型及内存与cpu之间的关系
主内存和cpu之间的关系,因为cpu是在是处理速度太快了.所以一般cpu都有一个cpu缓存,上图的意思是主内存--->cpu缓存--->cpu寄存器--->cpu执行处理,写的时候反 ...
- 计算机支持的最大内存与CPU之间的关系
在使用计算机时,其最大支持的内存是由 操作系统 和 硬件 两方面决定的. 先说一下硬件方面的因素,在计算机中 CPU的地址总线数目 决定了CPU 的 寻址 范围,这种由地址总线对应的地址称作为物理地 ...
- 内存、缓存、cpu之间的关系
一.缓存和内存 许多人认为,“缓存”是内存的一部分 许多技术文章都是这样教授的 但是还是有很多人不知道缓存在什么地方,缓存是做什么用的 其实,缓存是CPU的一部分,它存在于CPU中 CPU存取数据的速 ...
- 电脑结构和CPU、内存、硬盘三者之间的关系
前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
- 网络互联技术(2)——前篇—【转载】电脑结构和CPU、内存、硬盘三者之间的关系
原文链接:传送门 详细内容: 电脑结构和CPU.内存.硬盘三者之间的关系 前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑 ...
- 鸿蒙内核源码分析(线程概念篇) | 是谁在不停的折腾CPU? | 百篇博客分析OpenHarmony源码 | v21.06
百篇博客系列篇.本篇为: v21.xx 鸿蒙内核源码分析(线程概念篇) | 是谁在不断的折腾CPU | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调 ...
- Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State
目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...
- 【UEFI】---关于BIOS,EIST和PState&CState和CPU主频变化得关系
Intel处理器都支持Turbo和EIST,且一般情况下,各家厂商在BIOS中都会设置EIST和PState的开关,那么这些开关与CPU的频率的关系是什么呢?今天对此做个总结: 按照国际惯例,本次梳理 ...
- linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np
=============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主 ...
- KVM 介绍(2):CPU 和内存虚拟化
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
随机推荐
- Eclipse's Import error and remove
1.导入项目之前,请确认工作空间编码已设置为utf-8:window->Preferences->General->Wrokspace->Text file encoding- ...
- MybatisPlus 实现多表联合分页条件查询
方式一:XML 有点繁琐,不太想用 mapper接口 public interface RoomMapper extends BaseMapper<Room> { List<Room ...
- 将map转成vo实体
//将map转成vo实体 AssetManagementProductsVO param= JSON.parseObject(JSON.toJSONString(map), AssetManageme ...
- Java8-聚合操作
Java聚合操作(Aggregate Operations)是对一堆数据进行处理的新的操作方法,我们知道,如果想对一堆数据进行处理,比如一个List对象中的数据进行处理,传统的操作就是遍历List数据 ...
- Android笔记--案例:登录界面以及登录逻辑
登录界面的实现 就是说,界面的绘制,并没有什么难度,只要控制好空间的分配就可以了 登录的逻辑实现 获取验证码.忘记密码的界面跳转.登录的实现: 确认文本框的输入内容是否符合题意:
- SpringBoot使用邮件发送
使用场景: 定时任务报错 消息推送 日志报错提醒 1.导入依赖 <dependency> <groupId>org.springframework.boot</group ...
- 本地搭建Stable-Diffusion 教程
前置条件 有一些python的基础 会使用git 有梯子(最好可以全局代理) Windows系统 + 英伟达1060以上显卡 (mac或者linux 以及电脑是AMD显卡,安装的话,可以自行搜索相关教 ...
- Tarjan强连通分量(scc)
概念解释 节点强连通:\(v_i\)与\(v_j\)(\(v_i ≠ v_j\))强连通是指从\(vi\)到\(vj\)和从\(vj\)到\(vi\)都存在路径,即两节点互相可达 强连通图:在有向图\ ...
- 德国坦克傲龙7.1PCIe | 魔音师 声源PCIe MaX 声卡驱动皮肤
适用于德国坦克傲龙7.1PCIe和魔音师 声源PCIe MaX 声卡驱动皮肤的皮肤. 皮肤使用方法:退出声卡驱动程序(托盘图标右键退出),之后删除声卡驱动目录里面的TERRATECAudioCente ...
- python入门教程之九日期时间常用操作
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. Py ...