关于x86_64和x32和x86和-386和32位还是64位的区分 指令集的学习

2023-05-16

这里写自定义目录标题

  • 一,查到的知识
    • 查看linux内核信息
    • 查看linux版本信息
    • 查看当前的系统位数
      • 其他搜索到的信息
    • 指令集和指令集架构的区分

关于x86_64和x32和x86和-386和32位还是64位的区分

一,查到的知识

x86、x86_64主要的区别就是32位和64位的问题。

x86 ======> 32位
x86_64 和 x64 以及AMD64 ======> 都是64位

x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为“IA-32”

x84_64是x86 CPU开始迈向64位的时候,有2选择:1、向下兼容x86。2、完全重新设计指令集,不兼容x86。AMD抢跑了,比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64。而Intel选择了设计一种不兼容x86的全新64为指令集,称之为IA-64,但是比amd晚了一步,因为是全新设计的CPU,没有编译器,也不支持windows、后来不得不在时机落后的情况下也开始支持AMD64的指令集,但是换了个名字,叫x86_64,表示是x86指令集的64扩展。也就是说实际上,x86_64,x64,AMD64基本上是同一个东西。
   x86 ,x386指定是32位。
   amd和Intel是两种制造cpu的技术

查看linux内核信息

[root@localhost ~]# cat /proc/version
Linux version 2.6.32-642.el6.x86_64 (mockbuild@worker1.bsys.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Tue May 10 17:27:01 UTC 2016
[root@localhost ~]# uname -r
2.6.32-642.el6.x86_64
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

uname -r 显示的结果是什么意思?
2.6.32-642.el6.x86_64
2: —->主版本号
6: —–>次版本号 6 表示稳定版本
32: —–>修订版本号,表示修订次数

查看linux版本信息

[root@localhost ~]# cat /etc/issue
CentOS release 6.8 (Final)
Kernel \r on an \m
[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@localhost ~]# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
[root@localhost ~]# file /bin/cat
/bin/cat: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

查看当前的系统位数

上面已经可以看出来uname -r cat /proc/version uname -a 都可以查看内核的位数,file /bin/bash 以及 file /bin/cat 可以查看当前你系统的位数。对应的结果是 x86_64 也即是64位。

但是还有更简单粗暴的方法:

ubantu@ubuntu:~$ getconf LONG_BIT
64

显示的结果直接就是位数。

其他搜索到的信息

指令集和指令集架构的区分

一般来说不会特地区分这种术语小细节,在具体背景下意思到了就行,因为这是一个工程概念,而不是数学概念。

如果硬要区分的话,认为指令集是指令集架构的一部分,指令集即指令集架构中所有计算机指令构成的集合,而指令集架构还将包含指令格式,指令编码规则,规范,以及要求的一些功能支持(如要求的寄存器空间)等等…

基于此,通常来说,有关的讨论都是在指令集架构,即ISA上讨论的,因为你不可能忽略指令格式编码规则,功能支持规范等方面的细节。除非你是一名只研究不同功能的指令组成的序列其本身的计算理论研究者。

另外,arm和x86的ISA是闭源的,但其本身内容和规范是公开的,例如x86本身仅由intel进行维护以及授权,但同时也会向用户提供相关的开发手册。

	英文维基里面并没有单独的指令集(Instruction Set)这个词条,只有Instruction Set Architecture,也就是指令集架构这个词条,通常简写为ISA[1]。x86、ARM、POWER、SPARC这些词条的第一句定义/介绍中,属于比较严谨的语句中,写的都是ISA,我没有见过单独使用Instruction Set的场景——当然,后面的详细介绍中有些时候会省掉Architecture而直接用Instruction Set。

此外,像x86的指令集扩展(Instruction Set Extension),如SSE、AVX等,某些时候也会简写为Instruction Set。所以我跟倾向于中文常说的指令集,就是指令集架构的简写而已。中文维基词条也是这么说的:

	指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部I/O。指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。

指令集架构闭源还是开源,并不影响其它开发者开发基于这个指令集的应用。正如闭源的Windows、macOS、iOS,上面都有非常丰富的应用;反倒是开源的GNU/Linux(不含Android/Linux),应用种类都比这几个闭源的系统少得多,至于其它份额很少的开源系统就更不用说了。CPU的指令集,和各种系统的底层API(例如Windows的Win32,类Unix的POSIX等)其实是一样的;闭源只不过意味着其他人可以按照厂商要求使用但无法更改(除非提出反馈建议并被厂商接受),而开源则是可以参与制定,甚至在社区不接受的情况下自己搞一套而已。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于x86_64和x32和x86和-386和32位还是64位的区分 指令集的学习 的相关文章

随机推荐