CPU只与一种指令集架构兼容吗?

时间:2016-02-01 07:29:57

标签: instruction-set isa

我开始在计算机体系结构领域进行探索。有两个关于ISA的问题令我感到困惑。

  1. 据我所知,有各种各样的ISA,如ARM,MIPS,80x86等。我想知道CPU是否只能专门读取一种ISA。例如,处理器可以同时读取80x86和MIPS。

  2. 如果CPU是ISA独有的,我该如何检查我的PC处理器使用的是哪个ISA?我可以手动找到它吗?

  3. 谢谢

3 个答案:

答案 0 :(得分:2)

  1. 我所知道的所有CPU / MCU只支持单指令集。

    有能力将微码加载到某些较新的架构中,这些架构可能允许将指令集行为更改为某些点,因为机器人强烈怀疑它是否可以用它来更改指令集。指令集和内部 CPU / MCU 电路非常依赖。可以使用可变指令集制作通用 CPU (例如使用 FPGA )但与直接 DIE 编码相比会非常慢CPU 即可。使用类似的Die技术,时钟速度可能只有几MHz。

    像i80x86这样的架构支持可以切换到不同类型的操作(16/32/64位,真实,受保护)的模式,但很难说它是不同的指令集或只是同一个东西的子集......(透视问题)

  2. 检测指令集。

    这很疯狂。是的,可以通过程序检测您拥有哪种类型的指令集,但所有 CPU / MCU 具有不同的引脚排列,接口,架构并且不可互换(即使在同一架构类中也是如此)所以你检测指令集是没有意义的,因为你已经知道你正在为......做接线的架构。

    无论如何,检测将如下工作:

    • 具有每个支持的指令集/体系结构的测试程序集,如果正常工作,将特定内存或IO设置为预定义状态
    • 让看门狗在所有检测之间骑自行车,并停在第一个有效结果上。

答案 1 :(得分:1)

  1. 是的,每种类型的CPU都是指令集所特有的。 ARM的指令集不适用于x86,SPARC等。巧合可能会有一些重叠,但程序在架构之间不兼容。

  2. 根据您的操作系统,您可以运行命令来查看此信息。对于unix / Linux,uname -a将显示您正在运行的体系结构以及dmidecode。对于Windows操作系统,右键单击My Computer并选择Properties应该会显示您的体系结构。

  3. 例如(Windows 7):

    Windows 7 System Info

    对于Linux(我知道,这是一个超级发行版!):

    $ uname -a
    Linux hostname 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:32:27 UTC 2010 x86_64 GNU/Linux
    

    (在此示例中,架构为 x86_64 ),即64位Intel或AMD。为了确定,您可以像前面提到的那样运行dmidecode

    ~# dmidecode |grep -i proc
    Processor Information
            Type: Central Processor
            Version: AMD Opteron(tm) Processor 154
    Processor Information
            Type: Central Processor
            Version: AMD Opteron(tm) Processor 154
    

答案 2 :(得分:0)

如果实现了支持,它实际上可以读取任何指令集。现在大多数CPU支持两个/三个指令集,由于32位/ 64位寻址而略有不同。

x86支持16位,32位和64位指令集,ARM支持32位,64位,适用于Thumb和Thumb-2等。例如,对于MIPS,类似。

原始Transmeta我相信它很灵活,并且应该将任何指令集转换为内部集并在本地运行它。然而它失败了,现在没有任何类似的东西。

无论如何,一旦你运行应用程序,它就会绑定到其标题中的特定指令集,因此它不能在运行时更改它。好吧,ARM是个例外 - 它可以在完整版和Thumb版之间切换,但它们只是不同的编码...

对于第二部分 - 在OS GUI中或者通常可以阅读它 - 在Linux中通过在环境变量for i, job in enumerate(Jobs): res = process_job.apply_async(args=[job], queue='job_queue') 中的Windows上阅读$config['sess_driver'] = 'files'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_save_path'] = NULL; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE; 来阅读。