关于C#:为什么32位内核可以运行64位二进制文??件?

关于C#:为什么32位内核可以运行64位二进制文??件?

How come a 32 bit kernel can run a 64 bit binary?

在我的OS X机器上,内核是32位二进制文??件,但它可以运行64位二进制文??件。
这是怎么工作的?

1
2
3
4
5
6
7
8
9
cristi:~ diciu$ file ./a.out
./a.out: Mach-O 64-bit executable x86_64
cristi:~ diciu$ file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386):   Mach-O executable i386
/mach_kernel (for architecture ppc):    Mach-O executable ppc
cristi:~ diciu$ ./a.out
cristi:~ diciu$ echo $?
1

当CPU陷入内核上下文时,可以从64位执行模式切换到32位,并且仍然可以构建32位内核来理解从64位用户空间应用程序传入的结构。

MacOS X内核无论如何都不会直接从用户应用程序取消引用指针,因为它驻留在其自己的单独地址空间中。例如,必须先将ioctl调用中的用户空间指针解析为其物理地址,然后再解析为内核地址空间中创建的新虚拟地址。 ioctl中的指针是64位还是32位并不重要,内核在任何情况下都不会直接取消引用它。

因此可以将32位内核和64位二进制文??件混合使用,反之亦然。您无法做的是将32位库与64位应用程序混合使用,因为在它们之间传递的指针将被截断。在每个发行版中,MacOS X均提供32位和64位版本的更多框架。


请注意,并非所有32位内核都能够运行64位进程。 Windows当然没有此属性,而且我从未在Linux上看到它。


不是运行二进制文件的内核。是处理器。

该二进制文件确实会调用库函数,而这些函数必须是64位的。而且,如果他们需要进行系统调用,则他们有责任解决自己本身是64位而内核只有32位这一事实。

但是您不必担心。


能够加载和运行64位二进制文??件的32位内核必须具有一些64位代码才能处理内存映射,程序加载和其他一些64位问题。

但是,不需要调度程序和许多其他操作系统操作就可以在64位模式下工作以解决其他问题-它可以将处理器切换到32位模式,并根据需要将其切换回以处理驱动程序,任务,内存分配和映射,中断等。

事实上,操作系统所做的大多数事情并不一定能以64位运行速度更快-操作系统不是繁重的数据处理器,而这些部分(流,磁盘I / O等)可能会转换为64位(无论如何都已插入操作系统)。

但是裸内核本身可能不会更快地切换任务,依此类推,如果是64位的话。

在大多数人仍在运行32位应用程序的情况下尤其如此,因此,尽管这是一项低开销的操作,但并不总是需要模式切换,但这确实需要一些时间。

-亚当


ELF32文件可以包含64位指令,并以64位模式运行。唯一的问题是标头和符号的组织采用32位格式。符号表的偏移量是32位。符号表条目为32位宽等。同时包含64位代码和32位代码的文件可以将自身显示为32位ELF文件,其中使用64位寄存器进行内部计算。 mach_kernel就是这样的一种可执行文件。它获得的好处是32位驱动器ELF可以链接到它。如果照顾到将位于4GB以下的指针传递给其他链接的ELF二进制文件,它将正常工作。


将内核设为64位只会带来内核扩展(即通常为驱动程序)可以为64位的有效优势。实际上,您将需要具有所有64位内核扩展,或者具有(现在是所有情况)所有32位内核扩展。它们必须是正在运行的内核体系结构的本机。


推荐阅读

    linux进程运行命令?

    linux进程运行命令?,系统,工作,状态,地址,信息,进程,基础,命令,管理,软件,lin

    linux显示运行命令?

    linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

    linux运行vim命令?

    linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令

    linux监控命令运行?

    linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,lin

    linux中命令停止运行?

    linux中命令停止运行?,系统,代码,第一,命令,进程,指令,程序,方法,接线,硬盘,l

    linux自动运行命令?

    linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,l

    linux显示内核命令?

    linux显示内核命令?,地址,发行,信息,工具,电脑,系统,名称,内核,版本,状态,如

    linux开启运行命令?

    linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,lin

    linux运行wps命令?

    linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps

    linux二进制执行命令?

    linux二进制执行命令?,系统,工作,情况,代码,信息,位置,地址,命令,文件,目录,L

    linux运行cmd命令?

    linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑

    linux运行两个命令?

    linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Lin

    linux内核发行版命令?

    linux内核发行版命令?,发行,系统,地址,软件,设备,信息,内核,版本,工具,公司,l

    加载linux内核的命令?

    加载linux内核的命令?,系统,信息,地址,电脑,发行,设备,简介,平台,发展,基础,l

    linux内核配置的命令?

    linux内核配置的命令?,系统,工作,管理,地址,时间,命令,信息,设备,目录,内核,

    linux内核总调用命令?

    linux内核总调用命令?,工作,地址,系统,信息,管理,策略,命令,目录,时间,基础,

    linux命令运行代码?

    linux命令运行代码?,代码,单位,系统,环境,连续,保险,工具,命令,文件,音乐,Lin

    linux内核编译命令?

    linux内核编译命令?,系统,软件,环境,电脑,内核,最新,下来,官网,体系,名字,在l

    linux命令运行脚本?

    linux命令运行脚本?,代码,系统,工作,设计,状态,命令,脚本,文件,目录,终端,运

    linux上运行的命令?

    linux上运行的命令?,系统,工作,软件,网络,地址,信息,情况,命令,灵活,基础知