首页 > 范文大全 > 正文

Mac OS X v10.6 Snow Leopard操作系统底层技术分析

开篇:润墨网以专业的文秘视角,为您筛选了一篇Mac OS X v10.6 Snow Leopard操作系统底层技术分析范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:桌面操作系统随着个人计算机硬件的进步飞速发展。以Unix为基础的mac os X在最近一次主要升级Mac OS X 10.6 Snow Leopard中对底层技术进行了重要的革新,引入了64位内核、 Grand Central Dispatch、OpenCL等新技术。底层技术的更新为开发人员提供了更友好的多线程,更深入的发掘了硬件的潜力,也为操作系统的进一步的发展奠定了基础。

关键词:Mac OS X;操作系统;底层技术;64位;多线程;OpenCL

中图分类号:TP316文献标识码:A文章编号:1009-3044(2010)02-278-03

The New Technologies under the Fur of Mac OS X v10.6 snow leopard

LIU Zhao

(Post-graduate Department, Chinese People's Public Security University, Beijing 100038, China)

Abstract: Desktop operating systems interact with us every minute. The OS venders have put dramatic efforts in integrating new technologies into their products. Based on Unix, the Mac OS X has reached its 6th major updates. The OS is refined from the bottom up and many new technologies are introduced. These new technologies radically simplify the code needed to make best use of multiple processors, improve the performance, efficiency, and will deliver great benefits to developers.

Key words: Mac OS X; Operating System; 64bit; multi-threading; OpenCL

自2001年起,苹果电脑公司的操作系统Mac OS X选择Unix作为其基础。最近的第6次主要升级――Mac OS X v10.6 Snow Leopard被定义为“精炼”,这意味着用户界面上没有特别显著的变化。随着2009年8月底新操作系统的到来,本次升级所带来的底层技术可以一窥个人桌面操作系统领域的发展动向。

1 64位内核

64位运算的一个重要优点就是可以访问高达16EB的内存,从而使大部分的数据处理直接在内存中进行,不需要临时的磁盘存储,大大提高了数字计算和其他任务的处理速度。64位运算的优势显而易见,服务器及专业应用等领域已经开始广泛转向64位,但个人桌面操作系统从32位向64位过渡的过程却超出想像的漫长。这其中主要的原因包括64位驱动程序的缺乏,以及日常软件需要使用超过4G内存的情况微乎其微。不过Snow Leopard有意推动64位在个人桌面领域的深入。

Snow Leopard同时包含了64位的内核和32位的内核。除了在服务器Xserve和特别内存配制的Mac Pro上,其他情况下Snow Leopard默认均会以32位内核启动。用户可以手动选择以64位内核启动。默认以32位内核启动保证了新系统兼容现有的32位驱动及内核扩展,允许以64位内核启动则为未来预留的选择的空间。32位的内核同样受限于4G的地址空间。内核的一个主要作用就是跟踪和管理系统内存,Mac OS X使用64-byte内存纪录内存中每个页面(4KB)的状态。假设计算机安装了96GB内存,那么完整纪录这96GB内存的状态需要占大约1.5GB的地址空间,这已经接近32位内核全部地址空间的三分之一。单纯的内存管理就使用去三分之一的地址空间对内核效率会产生负面的影响。64位内核理论上将不受这一限制,16EB的地址空间为应对内存的飞速增长做了充足的准备。

Mac OS X个人桌面和服务器均只有一个发行版本,因此对默认是否开启64位内核的判断完全交给操作系统本身。Windows操作系统则通过提供32位和64位不同发行版本将这一选择交给最终用户本身。64位Windows通过WoW64(Windows-on-Windows-64)模拟层使32位应用程序得以运行。WoW64将32位系统调用转译成64位的系统调用。但WoW64固有的局限性使得在其上运行32位进程无法调用64位DLL,同时无法运行依赖32位内核驱动的32位程序。如果用户手中的硬件设备暂时没有64位驱动则很可能需要重新安装32位Windows操作系统。

2 操作系统层面的多线程:Grand Central Dispatch

随着多核心处理器的普及,越来越多精力被投入到如何有效的发挥多核心的真正工效之中。在传统模式下,为了实现多核心多线程,开发人员本身需要做大量的工作。利用线程为多核处理器编程需要小心的把程序分成可以单独执行的线程,将敏感数据锁定,管理线程数,同时检查是否要和其他程序争夺处理器资源。现有的程序很大程度上需要重新优化。多核心及多线程编程的复杂程度使得很多应用软件从成本出发并未针对其真正优化。为走出这一困境,Mac OS X v10.6 Snow Leopard提出了Grand Central Dispatch技术,试图将多核心及多线程的操作交给操作系统本身,而不再是交给应用程序,根据处理器的数量调整应用程序的工作负荷,使用任务所需数量的线程,从而提高应用程序的效率。

GDC是Mac OS X底层的C库。GDC主要通过Blocks、Queues和线程池(Thread pools)来实现。

Blocks是对C的扩展,是GDC的任务单元。Blocks将函数及其变量封装成便于调用的形式。例如:

b = 2;

simpleAdder = ^int( int a ){ return a + b };

r = simpleAdder(5) // 5 + 2 = 7

GDC按照FIFO的顺序对任务“enqueued”和“dequeued”。

每当一个Queue中有任务需要运行,GDC会将该任务“dequeued”,并交给线程池中的一个空闲的线程。

传统多线程编程的过程中,为一个应用程序创建多少个线程才能使性能最优化这一问题一直困扰着开发人员。这一问题解答并不是确定的,其很大程度上取决于该程序运行时有多少系统资源可分配。例如一个被划分为8个任务的程序以4个线程运行在一个8核心处理器上,但同时这个处理器的其中6个核心已经在忙于别的程序的任务,那么此时创建4个线程并不是最优化的,很多时间均浪费在切换线程上;假设另6个内核已经完成其任务,此时的线程数4也不是最优化的,有4个内核将没有任务。开发人员无法预知系统运行时的状态,因此最好有单独的机制全局把握最优线程数。在GDC中,线程池中的线程数目交由GDC根据系统资源决定。这样开发人员不必要再把大量的精力花费在考虑创建线程数目上。同时由于GDC的全局性,GDC动态根据系统资源的占用来创建线程。当线程处理完毕当前任务后会回到线程池,当前Queue的任务全部完成后,GDC可以将此线程分配给其他Queue,这样也同时节约了创建新线程的时间和资源。随着硬件水平的提高,越来越多的核心将会集成进处理器内,而开发人员也不必为此而重新优化程序,GDC会自动调整。

GDC鼓励开发人员从“同步”转向“异步”:从主线程中分离出可能会导致等待的部分,例如对文件的操作,或者等待用户输入等等。例如下面的这段代码:

{

NSDictionary *stats = [myDoc analyze];

[myModel setDict:stats];

[myStatsView setNeedsDisplay:YES];

[stats release];

}

第一行代码执行文件分析,第二行更新程序内部状态,第三行刷新显示,典型的对文件操作并提示用户相关信息的程序,且每一步都在主线程中进行。假设用户试图分析的文件很大或者结构很复杂,那么第一步分析的过程可能有20-30秒,在此期间,整个程序将不会有任何响应,用户需要等待。利用GDC可以很容易的将分析文件的部分从主线程剥离,从而避免程序暂时无响应:

{

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSDictionary *stats = [myDoc analyze];

dispatch_async(dispatch_get_main_queue(), ^{

[myModel setDict:stats];

[myStatsView setNeedsDisplay:YES];

[stats release];

});

});

}

外部的dispatch_async将一个任务放入 global GDC queue,这个任务包含了耗时的文件分析和第二次调用dispatch_async―将刷新用户界面放入主线程的queue(Cocoa程序用户界面的刷新必须在主线程中进行)。经过这样简单的修改后,对文件的分析被放入后台异步运行。当文件分析完成后,并不需要任何消息机制,也不需要在程序中添加任何处理消息的代码,只需将刷新用户界面的任务再次放入主线程的queue中执行。

苹果电脑公司将GDC开源后,开源社区已经将其并入Unix和Linux之中,帮助开发人员在更广泛的平台上更便捷的开发支持多线程的应用程序。相信其他操作系统也会为开发者提供类似的友好环境。

3 OpenCL:挖掘GPU的通用运算能力

作为个人桌面计算机的重要组成部分,新型Graphic Processing Units(GPUs)也得到了飞速发展。当常用桌面处理器还以4核为主的时候,GPU已经同时有上百个处理单元。GPU的计算能力已经向1,000GFLOPS进发:每秒1兆次的浮点运算。虽然GPU主要负责图像的处理,但其并行快速的特点也适合一些通用计算。挖掘GPU的通用计算能力需要面对不同种类GPU的不同体系结构、数据类型和指令集。类似在3D领域广泛使用的OpenGL,OpenCL为GPU用于通用计算提供支持。

OpenCL为GPU用于通用计算提供C语言的API。开发人员可以不用再考虑GPU之间的区别而专注于程序本身。OpenCL支持对向量的直接运算,可以直接对向量进行操作,同时其内在对并行的支持,数据不再需要被手动分解,可以整体发送给GPU,由GPU分配到各个计算单元计算完毕后直接返回结果。

和OpenGL类似,随着GPU的升级,OpenCL程序的执行速度也会得到相应的提升。每当GPU升级,通过更新操作系统的OpenCL实现,而开发人员不需要重写代码,程序速度自然提升,这一机制类似OpenGL驱动升级。这与几年前使用MMX指令集编写的代码,随着CPU的加速,很可能要用SSE4指令集重新编写有所不同。

将一个技术购建在另一个技术之上是软件开发中通常的做法:在Snow Leopard中,OpenCL构建在GDC之上。这一结果并不意外。OpenCL所需要的并行特性,以及对数据的操作,均适合使用Blocks。

4 未来:The Road Ahead

Snow Leopard已经了4个月,第三方应用程序已经逐步开始向64位迁移,同时开源社区也完成了GDC向Unix/Linux的整合。视频、图像处理,科学计算等专业软件已经开始64位化:Matlab已经完成64位迁移,Adobe也将在下一代的Creative Suite中实现64位。Snow Leopard通过引入底层新技术,将异步及多线程大力向前推动,随着个人桌面计算机硬件继续朝多核心方向发展,异步及多线程必将得到进一步发展。可以预见科学计算软件很快会收获OpenGL带来的速度提升。

Snow Leopard将Mac OS X的内在发展方向定义在更好的使用整体系统资源上,并尽其所能的让开发人员跟容易利用及分配这些资源。革新操作系统的底层技术暂时无法让最终用户明显感觉到速度的提升和用户界面的飞跃,但能够帮助开发人员更好的使用系统资源,更便捷的发挥硬件的效能。随着越来越多的开发人员开始将新技术应用到程序之中,更多的新特性将被发掘,并最终反馈到用户的使用过程中。个人桌面操作系统通过底层技术革新正在使越来越多的人可以以更低的成本使用更强大的运算能力。

参考文献:

[1] Page D.A Practical Introduction to Computer Architecture[M].Springer,2009.

[2] Siracusa J.Mac OS X 10.6 Snow Leopard: the Ars Technica review[M].Condé Nast Digital Business Group,2009.

[3] Singh A.Mac OS X Internals: A Systems Approach[M].Addison Wesley Professional,2006.

[4] Russinovich M.Windows Administration:Inside the Windows Vista Kernel[M].Microsoft Corporation and CMP Media,LLC,2008.

[5] Microsoft Corporation.Best Practices for WOW64[S].2009.

[6] Microsoft Corporation.Running 32-bit applications on 64-bit Windows (including information on Redirection)[S].