软件与硬件的关系
硬件和软件互相依存。硬件是软件赖以工作的物质基础,软件的正常工作是硬件发挥作用的唯一途径。
计算机系统必须要配备完善的软件系统才能正常工作,且充分发挥其硬件的各种功能。
软件是如何控制硬件的
本质上并没有软件控制硬件,就和你是不能用意念控制一个东西一个道理,而是硬件控制硬件。
软件操作硬件流程图![软件操作硬件流程图](https://i-blog.csdnimg.cn/blog_migrate/5fad63dbade7ef6a54b5352a346eea8b.png#pic_center)
说明如下:
-
硬件的本质是电路, 通过输入高低电平控制电路的接通和断开来完成工作。
高低电平是:物理状态、能量的表现、物理信号,微观的实际状态
二进制1和0是:抽象的标志符号,语言,宏观的抽象 -
控制硬件工作的方式的发展过程
- 最早是通过拨开关来控制电路接通和断开来控制硬件工作。
- 然后程序时,程序的0和1代码通过专职的录入员将其用打孔和不打孔的方式转化为纸条上的一串孔洞,然后通过纸带通过光照区,有孔无孔转为光点和暗点,然后通过光敏元件转化为高低电平,通过输入高低电平来控制电路接通和断开来控制硬件工作。
- 现在通过键盘输入时,通过按键的接通和断开直接输入的就是电信号高低电平。
- 现代编程,集成电路的出现带来了开关的电子化,可以用晶体管模拟开关,不论你以什么形式输入了01的数据,最后都会转化为这些储存电路中储存的数据
-
知道了硬件是通过输入高低电平来工作的,那么软件是用什么来代表高低电平呢,这就是我们说的二进制机器语言。
-
1679年,莱布尼茨提出了二进制,可以通过0和1来代表所有数字,计算机科学家发现二进制和计算机工作需要的高低电平非常契合,于是使用二进制作为现代计算机理论的基础,规定1和0分别代表电路的高低电平
-
有了数字理论,怎么做出逻辑电路?于是人们又引入了逻辑门理念,靠他们来做运算。
-
与门
除非两个输入都是1,则输出1, 否则输出0
-
或门
除非两个输入都是0,则输出0,否则输出1.
-
非门
它会对输入取反(1变0,0变1 )
-
或非门
除非两输入相同则输出0,否则输出1
-
以加法为例,逻辑门完成二进制加法计算方式如下图:
1. 当两个输入都是0,高位输出0,低位也是0,结果是00, 换成十进制就是0
2. 当两个输入都是1,高位输出1,低位输出0,结果是10,换成十进制就是2
3. 当输入一个0一个1,高位输出0,低位输出1,结果是01,换成十进制就是1
所以逻辑电路其实并不明白加法,它只是按步就搬的给我们了碰巧正确的结果
-
编程:程序本身就是指令的集合。
每个CPU都有自己的指令集,而CPU只能识别自己支持的指令集,指令集作为软件和硬件的接口。
所谓编程就是将程序员想要实现的效果,用CPU支持的指令集写下来,指令集有很多,程序员可以(也仅能)在支持的指令集中任意组合来完成想要的效果。
高级语言的各种助记符都是对指令集的抽象,从而让人们以更符合人类思想的方式来运用指令集,通过完成【高级语言->编译->汇编语言->cpu指令集->二进制机器码】这个过程,将其转化为高低电平存储到存储器。 -
软件程序经过编译器最终会转化为二进制机器语言,即1和0的数字组合,
-
CPU控制硬件:
- 总线:计算机内部通信,信息传输的通道,这些信息包含数据,指令,地址等,是计算机完成各项计算和操作任务的物理基础,在计算机内部,每一个硬件设备都以特定的方式与CPU相连(直接或间接)
- CPU通过总线向其他硬件发布指令,使其工作。
-
通讯协议: 就像人和人之间互相高效的传递消息需要统一的语言一样,通讯协议就像一门语言,确保双方所言所闻都能被正确的处理。总线也一样,需要一套既定的协议,来让CPU和其他硬件之间正常的沟通,协议规定了:什么指令代表什么含义,什么时候可以发信息,有几条数据线,电压,频率等等,事无巨细,一律都有非常严谨统一的规定。例如SPI,I2C,UART协议等等。
-
最后总结:整个工作过程如软件操作硬件流程图。
文字举例:程序员在电脑终端写下命令->编译->运行->CPU把数据写到内存里特定的位置->通过总线呼叫一下硬件->硬件到约定的内存地址去读取数字->根据1和0输出高低电压->结束