美文网首页
64位OS支持32位应用分析

64位OS支持32位应用分析

作者: Little熊猫 | 来源:发表于2018-12-19 13:20 被阅读0次

目前市面上大部分处理器都是64位的,我们知道32位的程序可以无缝的运行在64位系统上。那么一个32bit的程序如何在64位的系统上运行呢?

一 cpu支持

目前主流的arm 和x86 64位的CPU对于32bit指令是无缝兼容的,所以32bit bin运行在64bit CPU上是没有问题的。


64bit_supoort.png

二 应用库支持

如果应用的elf文件为32bit,那么他依赖的库必须也是32bit,这就要求在/lib下也有一套32位的支持库,常见的32bit 64bit都支持的系统中会看到两套库,一套是/lib一套是/1ib64

三 Kernel支持

32bit的应用程序运行32bit的指令,32bit的用户空间,由于Kernel是64bit的,kernel如何支持32bit的调用呢?
以我们使用的close调用为例,其libc的syscall调用指令如下:

  ENTRY(___close)
    mov     ip, r7
    .cfi_register r7, ip
    ldr     r7, =__NR_close
    swi     #0
    mov     r7, ip
    .cfi_restore r7
    cmn     r0, #(MAX_ERRNO + 1)
    bxls    lr
    neg     r0, r0
    b       __set_errno_internal
END(___close)
.hidden ___close

使用swi软中断进入到kernel模式,那么如何将32_EL0进入到64_EL1级别呢?

32_64_entry.png

从上面的图可以看出,在64bit的中断向量表中有一部分是预留给32使用,比如我们使用的swi在此处切换为SVC。至此完成了64bit kernel空间的进入。

四 地址空间
如果我们通过系统调用返回地址空间给user,由于User部分使用的是32bit的地址空间,那么32bit的app如何进行进程空间的映射呢?
先看一下64bit MMU的vmm的内存分配

armv8_mmu.png

“Any 32-bit code will of course be limited to operating in the first 4 GB of address space, and as such the hardware will automatically zero-extend the virtual address into any elevated 64-bit call.

从上面的话可以看出,32bit的app用户空间生长在0~4G起始的空间中。

相关文章

网友评论

      本文标题:64位OS支持32位应用分析

      本文链接:https://www.haomeiwen.com/subject/rgfjkqtx.html