编程菜鸟关于硬件、OS、和JAVA的关系想法(初级)

因为我作为非计算机专业的从业人员,对于操作系统、编译原理的书籍并没有涉猎过,所以从某种程度上是一个伪程序猿。

最近在学习一些JAVA的知识,之前对java的跨平台性好像已经比较清楚了,理解为JAVA程序到哪里都带着JRE,主要指里面的JVM。

就像篮球外籍教练似的,带着翻译,去中国就带个会普通话的,去法国带个会法语的,JAVA程序带着对应不同的平台(即OS,或者叫操作系统)JVM,

这就是JAVA所谓的跨平台,就好像教练说,老子去哪里都能混的开,其实背地里带了不同的翻译。好在核心OS平台不多,就是windows、liunx、mac,不然折腾死了

比如中国增加了一些网络流行语,教练要想用,首先要翻译支持对这句话翻译的功能,然后才是教练会用。如果大量平台在更新好用的特性,编写jvm的人估计得忙死。


从以上层面上来说,深入的想想又产生一个比较白的问题(有时间对我这种喜欢一万个为什么的人,经常是为捡个芝麻,最后发现转向摘西瓜去了),下面理理我

理解的编程的发展之路:

怎么指挥硬件做事,首先想到就是0,1机器吗,(此处又跟javac编程后二进制流文件(class)纠结上了),不是已经生成了嘛?其实是用来给jvm执行的。

那么想到操作硬件,首先硬件是由电路组成的,只有高低电压,就是编程中0、1,只能通过给硬件传输0和1,转换到电路中就是高低电压。

那么0、1组合怎么实现那多功能的,想不通,然后就用电路很强大的心理安慰自己,比如Intel的CPU,简直比微软垄断。最后上网查看一些资料发现,其实硬件能

识别叫机器语言,其实就是0和1的组合,所有组合其实就是指令集(容许我忏悔一下,好像这部分大学计算机原理有教,可惜忘了),那么硬件通过电路上的设计,完成了

可以识别一部分0和1的组合(指令集),那么就用它编程呗。当然后面的结果都知道,就是这样编程太生涩难懂了,接着就考虑用更加易懂和易读的语言来设计了,

接着出现编程语言设计人员说,没事按照我语言规则来写,我的语言对程序员更加友善,我给你个工具,你编写完了,用工具对你编写的文件执行一下,就可以直接

在硬件上运行了(又可耻想起了好像汇编语言有介绍过,哎,入错行的赶脚),其实上面的工具就是编译器,我觉得解释器更加贴切,就是把高级语言直接按一定规则

(编译器要做的事情,也扯不动)转换成机器语言。后来我们设计了C语言和编译器,一个叫盖茨的家伙用C编写一个软件,可以在电脑上运行,当然底层就是对硬件操作,就是操作系统,随着个人电脑的发展成了首富。

1.好了问题来了,为什么后来语言都需要跨平台,也就是为什么要依赖操作系统,为什么不直接跳过OS,直接调用硬件。

首先想到的,是不是硬件指令的调用十分难以控制,毕竟微软做了怎么多年操作系统,从以前的一直蓝屏到现在依旧要打补丁,所以舍远求近,就用现成的?

另外,不同的硬件厂商的指令集不一定,猜测CUP可能比较规范,但是随着硬件的升级,功能想要扩展,是否指令也需要扩展呢,所以比较麻烦。

但是我又想如果硬件如果怎么搞,微软怎么办,不是操作系统天天要升级,然后上网查了查,发现好像是微软指定规则(接口apI),你们硬件根据我的接口开发程序,也就是

所谓的驱动,不然我操作系统就不识别你,真是店大欺客,对intel是不是比较乖一点呢,毕竟旗鼓相当?,所以大部分硬件厂商都被操作系统绑架了,JAVA刚出来的时候

不可能大喊“我给你提供接口,你们要按我的来”,应该没人理,所以从开始设计的阶段,就是考虑依赖于操作系统,然后不同的操作系统,提供的API接口又是不一样的

所以就有了跨平台的说法,jvm底层应该就是通过C语言实现对OS中API的调用,向上给java程序员提供JAVA API。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上网有查看了一下,不同CPU的指令集不同,也就是没有通用的指令集,所以JAVA很难实现,毕竟优势不在兼容硬件上,而OS已经发展了很多年,它通过自带通用兼容程序,比如INTEL X86的,或者可以提供接口,让硬件厂商去实现驱动,然后进行安装,所以必须依赖OS。


转:https://www.zhihu.com/question/22672994


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页