多核操作系统

  • 格式:docx
  • 大小:227.44 KB
  • 文档页数:9

多核操作系统摘要:对多核操作系统的发展状况进行了综述,指出了多核操作系统的发展滞后于多核技术发展的现状,介绍了多核操作系统的起源和国内外研究状况,分析了多核操作系统研究中面临的一些主要问题及已有的研究成果,对多核操作系统的一些研究方法进行了总结,最后,设计了一种异构多核处理器的操作系统。

关键词:多核操作系统; 操作系统模型; 任务调度; 存储器管理; 内核同步;HMP第一章引言操作系统构建于硬件设备之上,目的在于最大限度发挥硬件的工作性能,同时也受限于硬件设备的工作能力和方式。

所以操作系统的发展,首先是来源于硬件的发展,而硬件中的核心就是处理器。

提高处理器的性能从根本上来说有两种办法: 通过改进制造工艺来提高CPU 的主频; 提高指令的执行效率,即提高IPC( instructions per cycle)。

从提高主频的角度来看,高主频会带来巨大的功耗问题。

以NetBurst 架构的处理器为例,当运行主频达到最高3.8 GHz 的情况下,发热功耗会达到115 W。

很显然,要解决高主频带来的功耗问题并不是一件容易的事情。

与此同时,制造工艺在提高CPU 主频的过程中也会引入严重的漏电流问题,漏电流问题是制约CPU 主频提高的最重要因素。

从提高指令执行效率的角度来看,指令流水线、超长指令字、超标量结构、超线程技术等都在提高指令执行效率上起到了一定的作用,但是均受限于单核处理器的执行能力,并不能从根本上显著提升CPU 系统的整体性能。

对于单核处理器在性能提升中遇到的瓶颈,近年来,AMD、IBM、Intel、SUN 等公司纷纷推出了自己的多核处理器或多核架构设计[1]。

多核处理器的出现,使处理器的主频大幅度降低,同时也提升了指令执行效率,普遍认为多核处理器将会是今后处理器发展的方向。

但是与处理器发展不相适应的是,基于多核处理器之上的操作系统和软件对于多核的支持并不完美。

微软Windows 核心操作系统部门内核设计师Dave Probert提到了关于多核技术发展的一些问题。

芯片厂商在生产多核处理器时一厢情愿地认为软件开发者将为多核处理器开发软件,问题是目前的桌面系统软件不能有效地利用多核处理器,因为开发者需要利用并行编程技术才能充分利用多核处理器的处理能力。

除专业的科学计算软件外,并行软件并不普及,而且并行编程技术也相对难以掌握。

一种更好的方法是重新考虑操作系统管理多核处理器的方式,“问题不在于并行编程,而在于操作系统如何管理处理器”,微软正在开发针对多核处理器的全新一代多核操作系统。

从目前来看,多核操作系统滞后于多核处理器的发展,而多核技术作为一个系统,其中的“短板”将严重制约计算机整体性能的提升。

可以说,多核操作系统技术的突破,将会带来从嵌入式领域到桌面计算机、服务器等所有计算机系统的性能的一个整体性提高,因此对于多核操作系统的研究意义非常重大。

第二章多核操作系统的研究进程2.1国外研究进程虽然多核是近年来才出现的新概念,涵义是指在一个芯片上,集成了多个CPU 的内核以达到多内核协同工作,提高处理器性能的目的。

但是从操作系统的角度来说,早在20 世纪70年代出现的多处理器操作系统可以说是多核操作系统的前身。

因此,多核操作系统的思想最早可以追溯到1974 年由卡内基梅隆大学提出的HYDRA 操作系统[2]。

HYDRA 内核是最早针对多处理器系统设计的操作系统之一,并且能在c.mmp 硬件上运行。

HYDRA 内核把“对象”的概念引入操作系统中,将物理上的或者虚拟的资源都当作对象进行处理。

另外,HYDRA还提供了一种灵活的保护策略,针对不同的对象可以提供不同的保护机制。

随后,在1979 年,卡内基梅隆大学又推出了一个多处理器操作系统StarOS[3]。

StarOS 继承了部分HYDRA 的思想,提出了如模块、功能、模块调用等新的概念。

这些概念在后来的很多基于面向对象的操作系统中得到应用,如iMAX[4]、Choices[5]、CHAOS[6]等。

由于UNIX 操作系统的流行,从20 世纪80 年代开始,逐渐出现了一些类UNIX 的多处理器操作系统。

包括DYNIX[7]、UMAX[8]、Chrysalis[9]、RP3[10]等。

这些操作系统的综合特性包括支持多用户,支持多线程和进程,基于优先级的进程调度,可抢占调度,基于锁、信号量、事件的进程同步,支持虚拟内存等。

从1996 年多核处理器架构提出开始,斯坦福大学、卡内基梅隆大学、麻省理工学院等院校最早开始了关于多核操作系统的研究,并推出了自己的多核操作系统。

随着多核技术的迅猛发展,IBM、SUN 等商业公司也发现了多核技术的发展潜力,纷纷投入多核技术的研究。

为了保证多核技术的健康发展,多核协会( Multicore Association) 在2005 年成立。

多核协会是一个开放性的非营利组织,由不同的工作组负责多核处理器、操作系统、开发调试工具、应用程序等不同类别的研究,致力于解决多核技术发展中的问题,制定相关的标准。

2.2 国内研究进程国内在多核操作系统方面的研究主要集中在一些学术机构中,而且研究机构比较少,起步也相对比较晚,这与多核技术的巨大发展潜力不相适应。

浙江大学在2008 年设计实现了一个支持异构多核的嵌入式实时操作系统SmartOSEK OS-M[11],实现了多核之间的同步与通信,并设计了一种多核操作系统之上的编程模型。

电子科技大学在2009 年实现了在四核处理器PB11MPCore 上的操作系统aCoral[12],并且通过改进的位图映射优先级调度算法,将优先级队列查找复杂度控制在O(1) ,以保证多核系统的实时性能。

复旦大学联合西安交通大学以及麻省理工学院和微软亚洲研究院在2008 年共同开发出多核操作系统Corey。

Corey 的设计思想是“应用程序控制数据的共享”[13],即通过应用程序对内核间共享资源的控制,减少多核之间不必要的资源传递和更新,以达到更高效利用多个内核的目的。

实验表明这种思想对系统整体性能提升的效果明显,在16 核的系统上,Corey系统的Map Reduce 性能比Linux 提高了25%。

第三章多核操作系统的关键问题多核操作系统应该包含传统单核操作系统的所有功能,然而由于内核数量的增加,多核操作系统的复杂性和设计的可能性也急剧增加[14]。

多核操作系统的关键问题主要有以下四方面:a) 既然处理器有同构多核和异构多核,那么让所有内核运行同一个操作系统的代码映像,还是各个内核根据自己不同的特点运行不同的操作系统?b) 如何决定任务的调度机制和策略,使每个内核都充分发挥自己的性能并且保证所有内核的负载均衡?c) 在多核环境下,存储器成为了多个内核共享的临界资源,如何解决多内核系统存储器管理的问题?d) 如何保证多个内核之间在任务处理过程中的同步?3.1 多核操作系统的运行模式针对多核环境,一种很显然的操作系统运行模式是每个内核都运行同一个操作系统的镜像,从而使每个内核都能够工作起来。

然而这种办法对于发挥多核技术的性能并不是很有利,CPU 的内核数量会不断增加,内核的异构性也是一大发展趋势,传统的操作系统并不能够适应多核技术的高速发展。

因此,有一些新的操作系统运行模式被提出。

主从式( master-slave) 多核操作系统模型[15],如图1所示。

这种模型为多核的负载均衡以及资源管理问题带来了一个新的思路。

其主要思想是系统总是从一个主内核启动,主内核负责整个系统的初始化以及创建其他的从内核。

运行过程中,只有主内核能够访问系统的所有资源,如果从内核要对系统资源进行访问,必须通过主内核。

从内核只能执行自己的用户程序,并且可以直接访问自己的高速缓存,从内核之间的通信需要通过主内核完成。

图1 主从式多核操作系统模型在解决多内核的异构性方面,文献[16]提出了一种新的操作系统模型multikernel,其结构如图2 所示。

这种模型中的每个内核都运行自己的操作系统,更好地支持了内核的异构性。

同时multikernel 继承了分布式系统的思想,将各个内核作为独立单元,而这些单元组成一个“网络”,“网络”中的内核通过消息传递进行通信。

这种模型带来更好的模块化性能,而且使得分布式算法可以直接应用到多内核系统当中。

图2 Multikernel3.2 内核的管理与调度如何通过恰当的调度机制和策略保证多核的负载均衡,并充分发挥各个内核的性能特点、提高整个系统的吞吐量和实时性,是多核操作系统研究中的核心问题。

当前关于多核的任务调度机制主要有全局队列调度、局部队列调度和共生队列调度[17]三种方式。

a) 全局队列调度是指操作系统维持一个全局的任务等待队列,当任意内核出现空闲时,就从任务等待队列中取出任务执行,这样的好处是保证了各个内核的利用率。

由于全局队列调度实现相对简单,也能够在一定程度上保证多个内核的充分利用,目前多数的多核操作系统采用的是全局队列的任务调度机制[18]。

b) 局部队列调度是指操作系统为每个CPU 内核都维护一个局部的任务等待队列,每个内核都从自己的任务等待队列中取出任务执行,局部队列调度的优点是任务基本上无须在各个内核之间进行切换,这样就提高了内核缓存的命中率,但缺点是内核的利用效率较低。

c) 共生队列调度的思想是将访问共享资源较多的任务和访问共享资源较少的任务调度到同一时刻执行,从而最大程度地减少资源冲突的可能性。

在任务调度策略上,已有的操作系统调度算法如先来先服务( FCFS) 、短作业优先( SJF) 、优先级调度、时间片轮转( RR) 、多级队列调度以及多级队列反馈调度等均适用于多内核的系统中。

但是旧有的调度算法一个普遍的特点是算法的关注点是任务,因为这些算法的产生都是基于单处理器的条件下,而在多内核系统中,不仅任务是多样性的,需要不同的调度策略,而且内核也是多样性的。

为了充分利用内核的重复性或多样性,更好地发挥多内核系统的性能,出现了一些新的针对多内核系统的调度思想或算法。

更快内核优先调度( faster core first scheduling)算法的主要思想是让性能更好的内核优先执行任务,而且允许线程动态迁移到更快内核上执行。

这种算法的使用需要考虑到系统的负载均衡以及线程迁移的开销预测。

针对异构多核的特点,文献[19]提出了动态的调度策略优于静态调度的观点,并通过动态的调度算法对其进行了验证。

动态调度更符合运行线程状态会动态变化的特点,而且动态调度能够最大限度地利用异构内核中性能较高的内核。

文献[20]提出了一种针对异构多核的自适应性能优化算法RL( reinforcement learning) ,其算法的思想是根据系统状态的不断变化,系统能够不断地学习并找到更优化的任务调度策略。