程序是如何让cpu运行的

来源:百度文库 编辑:超级军网 时间:2024/04/28 01:03:43
每当上java课我就有这么一个疑问,教材上没有解释,老师下课就溜,求解啊。我一开始想cpu应该是由指令控制,java程序中的代码就是指令,但是仔细想想,不对啊,c的程序代码很多与java都不一样,但是也能运行,所以我又想是不是所有的语言都有一个与计算机指令的接口,可以将语言代码翻译成计算机可以识别的指令驱动cpu运行,请问对吗,还有,计算机指令是有标准的吗,windows和linux下的指令一样吗,如果不一样,linux也可以用c写程序,是怎么一回事?或许从我思考这个问题的开始就进去了误区?求指导啊。每当上java课我就有这么一个疑问,教材上没有解释,老师下课就溜,求解啊。我一开始想cpu应该是由指令控制,java程序中的代码就是指令,但是仔细想想,不对啊,c的程序代码很多与java都不一样,但是也能运行,所以我又想是不是所有的语言都有一个与计算机指令的接口,可以将语言代码翻译成计算机可以识别的指令驱动cpu运行,请问对吗,还有,计算机指令是有标准的吗,windows和linux下的指令一样吗,如果不一样,linux也可以用c写程序,是怎么一回事?或许从我思考这个问题的开始就进去了误区?求指导啊。
骚年,请看计算机体系机构
楼主,了解一下cpu指令和初步的编译过程吧。
C/C++直接编译成汇编指令,Java则编译成中间代码,由虚拟机解释为汇编代码,当然汇编指令还会被cpu的译码电路转成微指令,简单说就这么回事。
另外,JAVA虚拟机原理应该基础教材上都有啊……
楼主补习计算机原理吧。
显然楼主不是个好学生
ericcui1 发表于 2012-12-19 09:54
另外,JAVA虚拟机原理应该基础教材上都有啊……
虚拟机原理什么的真没学过啊。这个学期开的JAVA课,课本上没这些内容,
bjkk 发表于 2012-12-19 10:06
显然楼主不是个好学生
哈哈~,不算好学生,但是也不算太坏。。嘿嘿
壮东风 发表于 2012-12-19 09:46
楼主,了解一下cpu指令和初步的编译过程吧。
C/C++直接编译成汇编指令,Java则编译成中间代码,由虚拟机解 ...
额,CPU指令什么的没学过,我们的JAVA课学的就是类,面向对象这些的,,
少年自负凌云 发表于 2012-12-19 10:31
额,CPU指令什么的没学过,我们的JAVA课学的就是类,面向对象这些的,,
知道有JVM这回事就行了,cpu体系、操作系统架构不是一定要掌握的。
少年自负凌云 发表于 2012-12-19 10:31
额,CPU指令什么的没学过,我们的JAVA课学的就是类,面向对象这些的,,
对不起俺说错你了,现在的计算机课程简化到了这种程度无法想象。
bjkk 发表于 2012-12-19 10:34
对不起俺说错你了,现在的计算机课程简化到了这种程度无法想象。
那请问下前辈,你们刚开始学JAVA的时候学的什么啊?不是从面向对象,类这些入手?还是说你们直接就学JAVA虚拟机,还有CPU指令之类的东西?
少年自负凌云 发表于 2012-12-19 10:39
那请问下前辈,你们刚开始学JAVA的时候学的什么啊?不是从面向对象,类这些入手?还是说你们直接就学JAVA ...
别"前辈"啊,这不是杀人么。我们当初的计算机基础课程是清华出版的《计算机组成原理和系统结构》和《汇编语言》。现在可能都是“速成”,不系统学习也算正常。但一点儿都不讲也太不负责了。
LZ学完数字逻辑电路、汇编语言、计算机组成原理了吗?
看来和我们一样,大二学编程,大三才学计算机原理,微机原理,数字电子技术,单片机,楼主爱思考很不错,如果是计算机专业那基础课放到高级语言后面就有点说不过去了。
evobus 发表于 2012-12-19 11:26
LZ学完数字逻辑电路、汇编语言、计算机组成原理了吗?
没。。。
bjkk 发表于 2012-12-19 10:50
别"前辈"啊,这不是杀人么。我们当初的计算机基础课程是清华出版的《计算机组成原理和系统结构》和 ...
我们貌似大三才讲你说的这些。。
就是一句话,最终都要翻译成机器语言的,你看到的只是人能看懂的机器可看不懂,编译过程就是把不同的语言都转成了机器语言
少年自负凌云 发表于 2012-12-19 11:54
我们貌似大三才讲你说的这些。。

那可能是课程安排不同,实用为先。
楼主,你把我看的好纠结啊,

C,C++,操作系统,数据结构,计算机组成原理,学了不。

严格来说计算机只认识0和1,所以不管哪种语言在哪个OS下都会通过某一手段让程序变成机器指令。
学一下单片机就清楚了
LZ,您没学过微机原理这门课程吗?上来就java?攒学分?
这个还真的是基础……
不知道现在大学怎么设置课程的
先学汇编跟机器码的关系,后面就好理解了
近三年的电脑报 电脑爱好者合订本买来通读一遍再说,直接就学编程那不跟阿三一样了。


楼主应该学汇编和单片机,这两玩意猛。课程编排有问题吧,还没有学习微机原理直接就上面相对象啦?呃……

楼主应该学汇编和单片机,这两玩意猛。课程编排有问题吧,还没有学习微机原理直接就上面相对象啦?呃……
计算机能识别0和1,但是这样写程序太麻烦,于是就有了汇编语言,汇编语言与01的机器语言非常接近。所有指令,都对应着01,不同的cpu不一样,也就是不同的cpu有不同的汇编语言。但是汇编语言也麻烦,于是就发明了与人类语言思维接近的高级语言,比如c,java之类的。这类语言若想被计算机识别,必须通过编译,编译之后就变成01了。
其实java还不一样,java编译之后好像是变成了字节码。一台计算机或者手机或者平板想运行java程序的话,得先安装java虚拟机,java虚拟机能识别java字节码。java这样做的好处是,java程序在不同的平台只要安装了java虚拟机就可以运行了,而像汇编语言写出的程序,只能在一个类型的cpu下运行。显然java程序的可移植性好。但是运行效率不如汇编。
首先你要确立流程和结构的概念。

Linux和Windows的系统调用本身就是个C函数调用,也就是代表一个流程。
Java的实例方法也是一个函数,那这也是一个流程。
一个流程就是一个处理,一个流程可以是由很多小流程(即小处理)完成。所有的流程可以被正确的翻译成机器指令(是编程者能看到的也是能控制到的最小的流程单位)。

由于intel x86计算系统的设计思路,和Linux和Windows的设计思路,和现在绝大部分编程语言的设计思路,计算机在编程员的眼睛里面,是复编程的。原始的计算机上一个时间只有一个任务存储的系统中。入口点(entry point)是必要的,不然分不开每个程序(流程集合)。从最小的流程到最复杂最大的流程只要它是个流程就需要入口点。

翻译语言所提供的解释机,操作系统提供的虚拟机都是已经由可以管理的、可以执行的、可以调度的二进制机器流程集合组成。这些又叫做运行时。

二进制机器语言,编译器,翻译语言所规定的编程语言,Linux的提供的虚拟机的调用接口,Windows所提供的Win32应用编程接口都有自己的编码格式。这些格式都有自己的机制以确保完成转写,保存,进入,合体,调度它们自己看得到的运行时等重要功能。
苏联小苹果 发表于 2012-12-19 11:51
看来和我们一样,大二学编程,大三才学计算机原理,微机原理,数字电子技术,单片机,楼主爱思考很不错,如 ...
靠!这不成了欧阳锋了嘛,倒着走,这都行?
不都是先学计算机原理(同时数字电路、汇编语言)再学其他高级语言吗?
冯·诺依曼机具有一下特点:
(1)计算机由运算器、控制器、存储器、输入设备和输出设备五部分组成。
(2)采用存储程序的方式,程序和数据放在同一个存储器中,指令和数据一样可以送到运算器运算,即由指令组成的程序是可以修改的。
(3)数据以二进制代码表示。
(4)指令由操作码和地址码组成。
(5)指令在存储器中按执行顺序存放,由指令计数器指明要执行的指令所在的单元地址,一般按顺序递增,但可按运算结果或外界条件而改变。
(6)机器以运算器为中心,输入输出设备与存储器间的数据传送都通过运算器。
  现代计算机系统结构有了很大新发展,但原则上变化不大,习惯上仍称之为冯·诺依曼机。

计算机只会按指令计数器指定的地址读取指令。指令被译码器转换成对应的指令动作:一般是寄存器的数据转移,累加,改变状态寄存器标志位用于判断。可以理解为一个会按严密的逻辑自己安排后续动作的算盘。

所以计算机不复杂,不神奇。复杂而又神奇的是数学体系。不理解这一点,就难以提高。


冯诺伊曼机器只是图灵的一种。把数学扶的那么正有何必要。未来的计算必定会有新paradigm,而不特别需要数学来教我们应该怎样编程。数学只是工具。

冯诺伊曼机器只是图灵的一种。把数学扶的那么正有何必要。未来的计算必定会有新paradigm,而不特别需要数学来教我们应该怎样编程。数学只是工具。
sanzoh 发表于 2012-12-24 21:46
冯诺伊曼机器只是图灵的一种。把数学扶的那么正有何必要。未来的计算必定会有新paradigm,而不特别需要数学 ...
非诺依曼化

必须看到,传统的冯·诺依曼型计算机从本质上讲是采取串行顺序处理的工作机制,即使有关数据巳经准备好,也必须逐条执行指令序列.而提高计算机性能的根本方向之一是并行处理.因此,近年来人们谋求突破传统冯·诺依曼体制的束缚,这种努力被称为非诺依曼化.对所谓非诺依曼化的探讨仍在争议中,一般认为它表现在以下三个方面的努力.

(1)在冯·诺依曼体制范畴内,对传统冯·诺依曼机进行改造,如采用多个处理部件形成流水处理, 依靠时间上的重叠提高处理效率;又如组成阵列机结构,形成单指令流多数据流,提高处理速度.这些方向已比较成熟,成为标准结构;

(2)用多个冯·诺依曼机组成多机系统,支持并行算法结构.这方面的研究目前比较活跃;

(3)从根本上改变冯·诺依曼机的控制流驱动方式.例如,采用数据流驱动工作方式的数据流计算机,只要数据已经准备好,有关的指令就可并行地执行.这是真正非诺依曼化的计算机,它为并行处理开辟了新的前景,但由于控制的复杂性,仍处于实验探索之中.


为了克服CPU数据总线宽度的限制,尤其在处理器的情况下,进一步提高微处理器的处理速度,采用高度并行处理技术-(HarVard)哈佛结构已成为其人注目的趋势.


前面我只是提了目前主流的冯·诺依曼体系,但不等于重视数学理论的基础作用就只能走这一条路。正象你指出的,未来的计算必定会有新paradigm,但这些新的发展也必然首先是数学理论的发展。也许你误解我意图拔高数学的作用,我只是想指出更深入的理解离不开对数学的掌握。
糖果屋 发表于 2012-12-24 19:26
靠!这不成了欧阳锋了嘛,倒着走,这都行?
不都是先学计算机原理(同时数字电路、汇编语言)再学其他高 ...
一样的,高级语言一点底层的都不用,只要你不想底层的东西到了大三自然就懂了。。不过我不是计算机专业的,这都是我们开的小课 我们主要学电机 控制
mmgm 发表于 2012-12-24 22:50
非诺依曼化

必须看到,传统的冯·诺依曼型计算机从本质上讲是采取串行顺序处理的工作机制,即使有关数据 ...
你用自己的语言回复就更好了。
计算机械设计真正把数学往前推的内容真不多,绝大多数就是应用。恰恰是计算机应用对应用数学的发展贡献大去了。

数学是我们用来描述,约束,和预测的工具。数学跟设计本身是两码事。跟具体实现是完全两个世界。一个人我们说他能不能设计,当然极大取决于他对各种类的工具使用的熟练程度,但是我在这里给你一个38.5摄氏度的proposition,工具是永远不可能成为设计的原点滴:D 夸张了。其实是一个设计者想把一个设计往数学结构上靠也是可以滴:D

你 毛病主要在”但这些新的发展也必然首先是数学理论的发展“这句话上,这和实际有距离。

计算的发展必然走上你在上面粘贴的第3项的道路。很快的。
汇编语言都不教直接上Java……楼主这学校坑爹!
你的问题反了……
反正我一看这个就头疼