hilyhoo 发表于 2013-2-7 13:03:09

操作系统基于多核平台的优化

一、多核多线程技术的发展

1)内存与处理器速度的差距导致cpu浪费时间等待访存获取数据,两种基本的方法可以从物理上进行一定的改进:增大缓存;提高时钟频率。
但是,缓存成本较大,在物理上也有一定限制;时频的提高,可以在相同时间完成更多的操作,但随之也带来问题:程序间的相关性和延迟的影响随之增加。
2)于是,人们想到,不只有突破物理上的限制来提高性能,在空间和时间上并行,增加吞吐量也是一种途径。因为虽然用户最关心的是交互性程序的响应时间,管理者关心单位时间的任务完成量;但最终都是在最短时间内完成最多任务。
既然原来的瓶颈在于访问时处理器需阻塞等待而浪费硬件资源,那么可以让cpu在这个延迟时间内干其它的事,譬如从其它的指令流读取指令运行已经准备就绪的进程或线程。
二、多核多线程与传统程序运行的不同带来的问题

1、传统系统运行的程序只需很少的改变便可以运行在cmt系统中,但不可避免的某些线程会影响到另外线程的执行,这该如何处理?
2、负载平衡与热缓存有时矛盾,如何处理?比如为了减少资源的争用,将争用少的放到一个核,导致这个核负载大。
3、进程与其包含的线程的调度分别在什么时候,两者有何关系?
4、多核的调度与核内多线程的调度分别配合?先将任务调到核,再在核内调度个线程还是怎样?
5、如果任务很少,是只让部分cpu工作,避免调度分发带来的复杂冗余的工作,还是依旧负载平衡?

三、solaris对多核的支持
1)solaris中线程的体系结构
<div style="margin-left: 40px;">a、分为用户级和内核级;用户级也可以在核内或核外运行。但是核外需要上下文切换开销很大;核内更有利于并发使用cpu,同时成为多个用户线程的调度者。
b、每个进程需要一个线程作为其指令执行体,线程分配到各个cpu运行。而每个用户级线程必须绑定到一个LWP,LWP再将它关联到一个内核线程。LWP并不一定是进程创建时就建立,而是在虚要使用时再被请求创建。这个用户级线程可以作为调度的执行实体,有独立的优先级调度,这与内核的优先级调度是分离的,并且对内核不可见。
LWP存在于内核里,记录着线程的状态,但内核级线程并不一定有LWP,如服务线程。
c、用户级线程有线程库中的每个进程的调度线程调度管理。
每个线程存在于他所属的进程链表,也存在于内核级线程链表。内核级线程决定线程运行在哪个cpu上,自己则被调度什么时候执行。
页: [1]
查看完整版本: 操作系统基于多核平台的优化