卷一 内核源代码分析 第一章 linux内核对cortex A9多核处理器的支持 1.1 CPU的基本管理 图书试读版-请勿转载

本书卷一深入探讨了Linux内核如何为Cortex A9多核处理器提供支持,第一章主要讲解CPU的基本管理,涵盖了多核架构下的关键管理机制。
摘要由CSDN通过智能技术生成


作者 crosskernel@gmail.com


1 多核处理器


计算性能是处理器演进的第一动力,然而,尽管各种架构的高性能处理器层出不穷,真正大规模普及开来的似乎只有Intel和ARM体系。我们观察其中的现象不难发现如下规律:
如果处理器性能得到大幅改善,但是无法得到现有主流操作系统的支持,就无法大规模应用。进一步来讲,即使某种处理器得到主流操作系统的支持,但是由于其指令集的不兼容性,导致大量的应用无法运行,这种处理器也是难以普及的,安腾的失败是个很好的例子。
“兼容性”是处理器演进的第一法则。现有的软件体系是计算机世界的主宰,所有不服从现在软件体系的的指令集都只能被边缘化或者被淘汰。所以我们看到Intel和ARM不断扩展寄存器长度、增加发射单元、支持乱序、扩展总线单元等一系列手段来改进处理器架构,就是不敢废弃一条既有指令。
降低计算功耗是处理器演进的第二动力,对于服务器来说功耗就是运营成本,对于移动计算来说功耗就是生命。似乎台式机功耗要求不大,但是台式机与服务器、移动设备不仅在处理器的生产及设计上共享基础设施外,软件体系也有着相同的基础,导致整个软件体系为了照顾移动设备和服务器而收敛了扩张的步伐。这就是人们常说的“计算过剩”,其实计算永远不会过剩,只是庞大的软件体系有所收敛罢了。
频率提升是功耗的大敌,为了提高能耗比,设计频率更低而核心更多的处理器是好的方法,由此,近年来处理器的扩张由单核高频的转变为多核体系。
Linux支持的多核体系的基本特点为,所有处理器拥有完全相同的指令集,所有处理器共享同一内存。如果不符合以上任何一点,操作系统内核都需要做架构级修改才能支持。若满足这两个前提,其他方面的问题,都可以通过内核和系统小规模修改来支持。如Big.little架构下互相搭配的处理器尽管核心内部实现不同,但各核心有着相同的指令集,Linux内核可以将它们当作同样的处理器来分配线程。内核在完全不加改动的情况下,也许会出现一个重量级线程被分配到了一个little的核心上,但是内核本身可以通过处理器负载均衡将其平衡到别的处理器上。当liittle负载较高时big必定会上线运行,但是系统有可能会出现重负载线程独自霸占liittle的情形的极限情况,这时需要将调度算法稍加修改,首先记录每个处理器能力,然后监测little上单线程高负载发生的时长,若超出一定阀值则将高负载线程时间片减为零,从little摘下来,再将其挂到big处理器运行队列即可。
进一步讲,多核心之间只要基本的读写、跳转之类指令相同,其余指令集不同,Linux也可以支持的。内核只需用到基本指令即可,各核心用户空间指令可以不同。内核需做如下修改,每颗核心的调度队列记录下其核心用户态指令集特性,每个线程创建之初申明自身需要的指令集特性,内核在给线程分配核心及做负载均衡时比较两者是否匹配。用户层动态加载器也要做修改,针对当前处理器指令集特性动态加载、跳转到不同版本的动态库中,且在动态库执行过程中标记自身线程不可切换处理器。当然这种复杂情况超出了当前现状,尽管有用户态指令集不同的架构,但是运行指令集差集的线程不需要动态加载库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值