您的位置:首页 > 其它

32位与64位 CPU、编译器、操作系统与应用程序的区别

2014-04-18 16:56 519 查看
1.64b的操作系统和64b的CPU是如何诞生的?

我们都知道,制造多少位的CPU是相对独立的,但是,操作系统呢?我们能在32b的机器上编写一个64b的操作系统吗?想一想,如果我需要用C语言编写一个64b的操作系统,那么需要哪些条件?

2.32b应用程序是否可以运行在64b机器上?64位系统是否可以运行在32b机器上?

前者可以,后者不可以。

3.应用程序、编译器、操作系统、CPU的关系是什么样的?

答:CPU的位数是固定的,64b和32b系统的CPU指令集和操作数位数等都不相同,但是是不是64b的CPU就没法运行32b的指令集呢?不是!!!但是CPU在设计初始,往往考虑到了兼容性,就是说,用户更新了CPU之后,如果发现原来的程序或者操作系统无法运行,这样的CPU市场肯定是不好的。所以我们可以在64b的CPU上装32b的操作系统—— 既然如此,OS封装了硬件细节,那么编译器和上层软件就都可以是32b的了。

反过来,32b的CPU能够运行64b的os呢(实际上是运行64b的指令集),很显然,操作系统运行在硬件之上,操作系统本身也是一个软件,实际上可以看作一系列64b的指令流,很显然,32b的CPU是没法运行64b的操作系统的。这就相当于火车可以跑到驴车的速度,但反过来却是不行的。

那么应用程序呢?首先思考一下,什么是32b或者64b的应用程序?如果我们将应用程序理解为目标文件(在linux上是ELF格式),也就是一堆机器指令,那么恨显然,64b的应用程序没法在32b的机器上运行。但是,如果是64b CPU,装上32b OS,然后安装64位相关的库,可以运行64位的应用程序—— 这样当然很鸡肋。总结一下,就是下面一副图。有一点可以概括—— 上小下大。

4.解答1中的疑问:

首先,我需要一个编译器,能够将C程序编译成64bELF文件,而且这个编译器要运行在32b的os之上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: