当前位置: 技术问答>linux和unix
关于软件与硬件接壤的理解
来源: 互联网 发布时间:2016-04-30
本文导语: 当刚入软件行业的时候就有一个问题,一直没有解决,就是软件到底是怎样操作硬件的,总觉得这件事情很奇妙。直到今天突然有个想法,想说出来请大家指正一下。 就拿我们的打印语句printf来说,毫无疑问它...
当刚入软件行业的时候就有一个问题,一直没有解决,就是软件到底是怎样操作硬件的,总觉得这件事情很奇妙。直到今天突然有个想法,想说出来请大家指正一下。
就拿我们的打印语句printf来说,毫无疑问它是让显示设备显示了信号,那么我在程序中的一条printf语句怎么就让显示设备显示了信号了,如果说最终是把它交给了内核处理,那么内核又是怎样让显示设备显示了信息呢。又如果说它是初始化并控制uart的寄存器,使得显示设备有了输出。那么我又想问,它又是如何设置寄存器的呢?
寄存器终究是硬件,内核是软件,他们的接壤处到底是什么东西。这让我很头痛。
我今天突然的一个想法是:软件其实是一个虚拟的硬件电路。
软件最终是以二进制的方式存储在硬件上,二进制在硬件是以高低电平的方式表现的,从某种意义上说它已经成了硬件,即从我们的应用程序一开始,设备就在我们设置的
虚拟电路中运行了,当我们的应用程序改变了某个参数时,也就是改变了这个虚拟电路,从而使这块虚拟电路跑出了我们想要的结果,这里没有任何软件向硬件的转换,
即根本就没有接壤处,它一直是一块完整的硬件电路在跑。只不过这块电路是实时变化的。
不知道我这样理解是否正确,请高人指正。
就拿我们的打印语句printf来说,毫无疑问它是让显示设备显示了信号,那么我在程序中的一条printf语句怎么就让显示设备显示了信号了,如果说最终是把它交给了内核处理,那么内核又是怎样让显示设备显示了信息呢。又如果说它是初始化并控制uart的寄存器,使得显示设备有了输出。那么我又想问,它又是如何设置寄存器的呢?
寄存器终究是硬件,内核是软件,他们的接壤处到底是什么东西。这让我很头痛。
我今天突然的一个想法是:软件其实是一个虚拟的硬件电路。
软件最终是以二进制的方式存储在硬件上,二进制在硬件是以高低电平的方式表现的,从某种意义上说它已经成了硬件,即从我们的应用程序一开始,设备就在我们设置的
虚拟电路中运行了,当我们的应用程序改变了某个参数时,也就是改变了这个虚拟电路,从而使这块虚拟电路跑出了我们想要的结果,这里没有任何软件向硬件的转换,
即根本就没有接壤处,它一直是一块完整的硬件电路在跑。只不过这块电路是实时变化的。
不知道我这样理解是否正确,请高人指正。
|
楼主你没学过数字电路吗?
任何语言写的软件最后都会转化为2进制码,也就是说只有1和0的区别,对于硬件电路来说它们只能根据信号是高还是低来触发不同的状态,你直接也说了任何程序到最后就是连续的高低电平,那么硬件中的电路就根据电平的高低来决定执行的方式,也就是说软件到最后就成了连续的数字信号。你甚至可以把这些信号想象成电流!!!但它觉不是硬件!说得更简单点,为什么灯泡通电会亮?因为有电流通过,很简单的道理,软件操作硬件原理也一样~~但你能说电流就是虚拟的灯泡吗?
任何语言写的软件最后都会转化为2进制码,也就是说只有1和0的区别,对于硬件电路来说它们只能根据信号是高还是低来触发不同的状态,你直接也说了任何程序到最后就是连续的高低电平,那么硬件中的电路就根据电平的高低来决定执行的方式,也就是说软件到最后就成了连续的数字信号。你甚至可以把这些信号想象成电流!!!但它觉不是硬件!说得更简单点,为什么灯泡通电会亮?因为有电流通过,很简单的道理,软件操作硬件原理也一样~~但你能说电流就是虚拟的灯泡吗?
|
除了0/1,一般还有这两种状态 X 和 Z 状态
这个东西有计算机组成原理和数点基础应该不难理解的
这个东西有计算机组成原理和数点基础应该不难理解的