ARM 与 MIPS 比较 (X86)

转载 2011年01月14日 10:41:00

http://blog.163.com/tao198352__4232/blog/static/8502064520105984211236/?fromdm&fromSearch&isFromSearchEngine=yes

 

 

1.流水线结构 pipeline
    - MIPS 是最简单的体系结构之一,所以使大学喜欢选择 MIPS 体系结构来介绍计算体系结构课程。
    - ARM has barrel shifter
        shifter是两面性的,一方面它可以提高数学逻辑运算速度,另一方面它也增加了硬件的复杂性。所以和可以完成同样功能的adder/shift register相比,效率更高,但是也     占用更多的芯片面积。
       
    - MIPS have "branch delay slot" and "load delay slot"
        MIPS使用编译器来解决上面的两个问题。因为MIPS最初的设计思想就是使用简单的RISC硬体,然后靠编译器及其他软体技术,来达成RISC的完整概念。

2.指令结构 instruction
    - MIPS have 32bit and 64bit architecture,but ARM only have 32bit architecture
       ARM11 局部64位
    - MIPS是开放式的架构,用户可以在开发的内核中加入自己的指令,
    - ARM has 4-bit condition code in every instruction
      ARM 在这一点很像x86。MIPS在MIPS IV也加入"conditional move"指令,来提高pipeline的效率。
    - ARM has pre- and post-increment addressing modes
        auto-increment/decrement on load/store instructions
    - 在节省代码空间方面,MIPS16 很类似ARM Thumb

3.寄存器 register
    -  由于MIPS内核中有32个注册器(Register),而ARM只有16个,这种结构设计上的先天优势,决定了在同等性能表现下,MIPS的芯片面积和功耗会更小。
    -  ARM 有一组特殊用途寄存器cp0-cp15,可以使用MCR,MRC等指令控制; 相对应的,MIPS也有cp0 0-30,使用mfc0,mtc0 指令控制。

    -  Register banking in ARM.  r8-r12 FIQ mode;r13:SP r14 R
       感觉不出banked register有什么好处。

    -  MIPS has a hard-wired-to-zero register ,but ARM not
       MIPS use register $0 for Zero

4.地址空间 address space
    -  MIPS 起始地址是0xbfc00000,会有4Mbyte的大小限制,但一般MIPS芯片都会采取一些方法解决这个问题。
       ARM没有这种问题。
       MIPS24K 起始地址改到了0xbf000000,现在有16Mbyte的空间了。

    -   MIPS don't have to turn paging on to enable the cache.
        MIPS have the address space for both cache and un-cache
        but ARM need enable/disable cache

5.功能 function
    -   Float point: MIPS64 has.
        ARM's support for FP is limited, and usually not included, and it is a 32 bit architecture
    -   ARM use JTAG,MIPS use EJTAG。Debug工具一般两种都支持。使用起来感觉差不多。

6.性能 performance
    -  具体性能比较,因为差异性太大,所以很难分出谁好谁坏。从个人经验来讲 MIPS4k和ARM9基本上是同一个级别的,但ARM9性能似乎要比MIPS4K好。
       同样是32bit的MIPS24K性能上比MIPS4K有很大提升,也应该比ARM9要好些。
       因为没有用过ARM11和MIPS34K的芯片,没法比较,但感觉这两个似乎是一个级别的。

7.应用
    -  在1000MHz以上的应用,很难找到采用ARM架构的产品。
       MIPS架构用在200MHz或者是266MHz以下的应用比较少,而这恰恰是ARM的主攻市场。
    -  ARM 在手机等便携式领域,MIPS 在住宅网关、线缆调制解调器、线缆机顶盒等
    -  ARM 采用硬核授权;MIPS 采用软核授权,用户可以自己配置,做自己的产品。

8.未来发展
    -  ARM的下一代走向多内核结构,而MIPS公司的下一代核心则转向硬件多线程功能(multithreading)
       MIPS 的multithreading 很类似Intel 的 HyperThreading技术。从现在的发展来看,多内核占上风。

 

 

 

 

 

http://ydragongfly.blog.sohu.com/116425075.htm

 

1. MIPS 与 X86 的 TLB 差别

其在于对 TLB 不命中时的处理上:

MIPS 会触发TLB Refill 异常,内核的 tlb_refill_handler 会以 pgd_current 为当前进程的 PGD 基址,索引获得转换失败的虚址对应的 PTE,并将其填入 TLB,完了CPU 把刚刚转换失败的虚地址再走一下 TLB 就OK了。

而 X86 在 TLB 不命中时,是由硬件 MMU 以 CR3 为当前进程的 PGD 基址,索引获得 PFN 后,直接输出 PA。同时 MMU 会填充 TLB 以加快下次转换的速度。

另外转换失败的虚址,MIPS 使用 BadVAddr 寄存器存放,X86 使用 CR2 存放。


2. 关于 MIPS32 页表的大小问题,系统每 fork 一个进程或者 clone 一个进程没有CLONE_VM标志,内核都会调用 __get_free_pages 为新进程分配一个页给页目录表,前512项初始化都指向invalid_pte_table(空页表,共有 PAGE_SIZE/sizeof(pte_t) 项),后面的都从 init 进程继承。而后内核会根据新进程所需的存储空间大小,为其分配页表(大小为一个页),分配内存页,设置相应的页表项,设置对应的页目录表项。

可以看到,只要进程数目固定页目录表所需的空间是固定的,每个进程页目录表为一个页大小;而进程总页表的大小要依赖于进程代码、数据的大小。

一个典型的 MIPS32 系统,页大小为4KB,单用户模式,仅有bash进程,其页表大小为 48KB 左右(cat /proc/meminfo|grep PageTables);页目录的大小可由下式计算:

PGD_SIZE = NR_PROCESS(exclude kernel thread) * PAGE_SIZE


3. MIPS TLB 的每项的主要数据有: | G | ASID | VPN | PFN | ,其中 VPN 为 virtual page number, PFN 为 physical frame number。 项与项之间没有次序,CPU 转换时是直接匹配的。不能称为 Page Table 。

而 Page Table 当年设计成 数组结构,以数组的下标作为虚页号是经过考虑的,即使今天看来,我们依然能够体会它的巧妙。


4. 内核在从汇编语言跳到C语言中时,其栈的栈顶是在哪里设置的?

内核在进入 start_kernel 前,将 esp 指向了 init_thread_union + THREAD_SIZE, init_thread_union 位于 .data.init_task 节,是个 union 结构,其大小为 THREAD_SIZE,定义的比较巧妙:

union thread_union {
struct thread_info thread_info;
unsigned long stack[THREAD_SIZE/sizeof(long)];
};


5. 内核态线程、内核线程以及进程的内核栈问题

linux 下线程库的实现,以常用的 Linuxthread 或者 NPTL 为例,这些库创建线程是使用这些标志 CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND 调用 clone() 来实现的,就是一个轻量级进程。


在使用 fork, vfork, clone 这些函数创建进程或者轻量级进程时,内核都会调用 alloc_task_struct() 为其分配一个 task_struct;调用 alloc_thread_info() ,表面上看好像是分配 thread_info 结构,实际上:

#define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL)

分配了 THREAD_SIZE 的空间,底端为 thread_info ,指向它的指针保存于 task_struct->thread_info 中。可以看到,task_struct->thread_info + THREAD_SIZE 即为进程或者轻量级进程的内核栈栈底。

无论是使用 clone 生成轻量级进程,还是使用 kernel_thread 创建内核线程,他们都会进入 do_fork,进而调用 alloc_thread_info(),因此他们都有内核栈,大小为 THREAD_SIZE,底端为 thread_info 。

因此linux 下,每个线程都会有一个内核栈,这个当线程数目很大时是个问题。

ARM、X86和MIPS主流架构优缺点分析

三种主流芯片架构1. ARMARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能...
  • bad_good_man
  • bad_good_man
  • 2015年12月14日 19:57
  • 8120

MIPS和ARM的比较

MIPS(Million Instructions Per Second):单字长定点指令平均执行速度 Million Instructions Per Second的缩写,每秒处理的百万级的机器语言...
  • yyyljw
  • yyyljw
  • 2015年12月16日 09:53
  • 1045

x86、arm、mips架构函数调用实例分析

原文网址:http://nieyong.github.com/wiki_cpu/ 在看过了上面的几节之后,在潜意识中你想记住的东西肯定很多了。这个时候,你需要静下心来休息一下在沉淀一下。...
  • junmuzi
  • junmuzi
  • 2013年02月23日 17:46
  • 5166

ARM 与 MIPS 比较

[前言]         这是一个几年以来我一直想做的“功课”,之所以称之为“功课”,而不能说是“文章”,是因为我觉得自己的知识还远远不够,不管是深度还是广度,也不管是全面性还是透彻性,我都不敢。但...
  • mrwangwang
  • mrwangwang
  • 2014年04月29日 13:58
  • 2064

四大CPU体系结构ARM、X86/Atom、MIPS、PowerPC

RISC(reduced instruction set computer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微...
  • wangjianno2
  • wangjianno2
  • 2016年08月07日 02:54
  • 6182

ARM和x86比较

信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是如果你再问他知道ARM和X86架构么?这两者的区别又是什么?绝大多数的人肯定是一脸懵逼。今天小编就带你深入了解CPU的这两大架...
  • u012513972
  • u012513972
  • 2017年10月26日 09:17
  • 10976

Android 中的 armeabi,armeabi-v7a,x86,mips区别

简介 在Android日常的开发过程中有的项目需要引入第三方的库,有时候大家可能会在libs文件夹下看到 mips、armeabi、armeabi-v7a和x86这四个文件夹。那么这三个文件夹下面...
  • guozikai
  • guozikai
  • 2017年03月18日 15:37
  • 279

ARM与MIPS比较

[前言]        这是一个几年以来我一直想做的“功课”,之所以称之为“功课”,而不能说是“文章”,是因为我觉得自己的知识还远远不够,不管是深度还是广度,也不管是全面性还是透彻性,我都不敢。但是我...
  • Devincoder
  • Devincoder
  • 2010年12月06日 10:00
  • 524

arm,x86,mips,龙芯

2012年11月7日,美普思科技公司(MIPS Technologies, Inc)被位于英国的Imagination公司和ARM集团肢解收购。Imagination公司以6000万美元收购82项MI...
  • yuhengyue
  • yuhengyue
  • 2017年11月01日 16:24
  • 97

ARM与X86比较

CPU的指令集从主流的体系结构上分为精简指令集(RISC)和复杂指令集(CISC)。嵌入式系统中的主流处理器——ARM处理器,所使用的就是精简指令集。而桌面领域的处理器大部分使用的是复杂指令集,比如我...
  • ustcli2012
  • ustcli2012
  • 2012年01月12日 15:05
  • 743
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM 与 MIPS 比较 (X86)
举报原因:
原因补充:

(最多只允许输入30个字)