跳转到内容

XNU:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
Jimmy-bot留言 | 贡献
机器人: 尚未清空的已重定向分类(CAT:OS_XCAT:MacOS
Tyfulcrum留言 | 贡献
根据英文维基百科同条目内容作翻译、更新。
第1行: 第1行:
{{Expand English|XNU}}
{{Expand English|XNU}}
{{Infobox software
{{Infobox software
|name = XNU kernel
| name = XNU kernel
|logo =
| logo =
|caption =
| caption =
|developer = [[Apple Inc.]]
| developer = [[Apple Inc.]]
| family = [[类Unix]]
|latest_release_version =
| working state = 开发中
|latest_release_date =
| source model = [[Open-source software|Open-source]]
|operating_system = [[Apple Darwin|Darwin]]、[[IOS]]及[[Mac OS X]]
| released = {{Start date and age|1996|12}}
|genre = [[作]][[核心]]
| programmed in = [[C语言|C]], [[C++]]
|kernel_type = [[Hybrid kernel|Hybrid]]
| language = 英文, 其他
|license = [[Apple Public Source License]] 2.0
| supported platforms = [[IA-32]], [[x86-64]], [[ARM架构|ARM]]
|working_state = In production / development
| operating_system = [[Apple Darwin|Darwin]]、[[iOS]]、[[tvOS]]、[[watchOS]]及[[macOS]]
|website = {{URL|https://opensource.apple.com/source/xnu/}}
| genre = [[作系]][[核心]]
| kernel_type = [[Hybrid kernel|Hybrid]]
| license = [[Apple Public Source License]] 2.0
| working_state = In production / development
| website = {{URL|https://opensource.apple.com/source/xnu/}}
}}
}}
{{Portal|自由软件}}


'''XNU'''由[[電腦]]展的[[作業系統]][[內核]],被使用於[[Mac OS X]]。它是[[Apple Darwin|Darwin]]作的一部,跟隨著Darwin一同作[[自由及开放源代码软件]]被布。XNU是'''X is Not Unix'''的縮寫
'''XNU'''是一个由[[电脑]]展的用于[[macOS]]操作系统的[[操作系统]][[内核]]。它是[[Darwin (操作系统)|Darwin]]作系的一部,跟随着Darwin一同作[[自由及开放源代码软件]]被。它还是[[iOS]]、[[tvOS]]和[[watchOS]]操作系统的内核。XNU是'''X is Not Unix'''的缩写<ref>{{cite web |year=2005 |url=https://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/glossary/glossary.html |title=Porting UNIX/Linux Applications to Mac OS X: Glossary |publisher=Apple Computer |accessdate=March 27, 2009}}</ref><!-- Please read the footnote before making changes to the last line. XNU is NOT a recursive abbreviation, and it does NOT stand for "XNU is not Unix."-->


XNU最早是[[NeXT]]公司了[[NeXTSTEP]] 作系展的。它是一[[混合式核心]](Hybrid kernel),合了由[[卡基美隆大]]展的[[Mach]] 2.5版,[[BSD|4.3BSD]],与称为Driver Kit的[[对象]][[用程序界面]]。
== 歷史 ==
XNU最早是[[NeXT]]公司了[[NeXTSTEP]] [[統]]展的。它是一[[混合式核心]](Hybrid kernel),合了由[[卡基美隆大]]展的[[Mach]] 2.5版,[[BSD|4.3BSD]],與稱為[[Driver Kit]]的[[物件導向]][[用程式介面]]。


電腦購[[NeXT]]公司之,XNU的Mach微核被升到Mach 3.0,BSD的部至[[FreeBSD]],Driver Kit改成[[I/O Kit]],一套以[[C++]]撰用程式介面。
电脑NeXT公司之,XNU的Mach微核被升到Mach 3.0,BSD的部至[[FreeBSD]],Driver Kit改成[[I/O Kit]],一套以[[C++]]撰用程序界面。


== 核心設計 ==
== 设计 ==
XNU是一个[[混合内核]],将[[宏内核]]与[[微内核]]两者的特性兼收并蓄,以期同时拥有两种内核的优点————比如在微内核中提高操作系统模块化程度以及让操作系统更多的部分接受[[内存保护]]的[[消息传递(软件)|消息传递]]机制,和宏内核在高负荷下表现的高性能。
{{Expand section|time=2013-08-01T15:32:21+00:00}}
{{Template:行動作業系統}}
{{FreeBSD}}
{{Operating-system-stub}}
{{DEFAULTSORT:Xnu}}


到2007年为止,XNU支持单核和具有[[对称多处理模块]]的[[ARM]]<ref>[http://www.engadget.com/2007/07/01/iphone-processor-found-620mhz-arm/ iPhone processor found: 620MHz ARM CPU] (July 1, 2007) Retrieved January 6, 2008</ref>,[[IA-32]]和[[x86-64]]处理器。在第10版(即[[Mac OS X Snow Leopard|Mac OS X 10.6]])之后,不再支持[[PowerPC]]。
[[Category:MacOS]]

[[Category:苹果操作系统]]
=== Mach ===
[[Category:自由操作系统]]
XNU内核以一个被深度定制的[[Mach]]3.0内核作为基础。如此这般,它便可以把操作系统的核心部分作为独立的进程运行,由此带来极大的灵活性(Mach核心之上可平行运行多个操作系统)。但是因为内核态/用户态的上下文切换会额外消耗时间,同时内核与服务进程之间的消息传递也会降低运行效率,所以这种设计通常会降低性能。为了提高效率,在 Mac OS X 中BSD部分与Mach一起内建于核心部分。深度定制的「混合」Mach3.0内核与传统BSD内核融合一体的产物就是一个「混合」内核,同时具有两者的优点与缺点。
=== BSD ===

内核的[[伯克利软件套件|BSD]](BSD)部分提供了[[POSIX]]应用程序接口(BSD系统称为API):基于Mach的[[作業 (電腦)|任务]]之上的[[Unix]]进程模型,基本安全策略,用户和用户组,权限,[[网络协议栈]],[[虚拟文件系统]](包括一个文件系统无关的[[日志]]层),几个本地文件系统(例如[[HFS/HFS+]]),[[网络文件系统]](NFS)客户端与服务器,加密框架,[[UNIX System V]][[进程间通信]](IPC),审计机制,[[强制访问控制]],和一些锁原语<ref>{{cite mailing list|url=http://lists.freebsd.org/pipermail/freebsd-advocacy/2008-August/003674.html|title=Re: freebsd-advocacy Digest, Vol 248, Issue 1|last=Watson|first=Robert|authorlink=Robert Watson (computer scientist)|mailinglist=freebsd-advocacy|date=August 2, 2008|accessdate=October 24, 2013}}</ref>。XNU中的BSD代码来自[[FreeBSD]]内核。尽管其中相当一部分代码都被深度修改过,苹果和FreeBSD项目之间依然会交换代码<ref>{{cite web|url=http://www.freebsd.org/news/status/report-2009-04-2009-09.html#Grand-Central-Dispatch---FreeBSD-port|title=FreeBSD Quarterly Status Report (Grand Central Dispatch - FreeBSD port)|date=April 2009|accessdate=October 24, 2013}}</ref>。

=== K32/K64 ===

XNU在[[Mac OS X Snow Leopard|Mac OS X 10.6 Snow Leopard]]([[Darwin]]版本号10)及之后演化为两个分支,称为K32的[[32位]]版和称为K64的[[64位]]版<ref>[http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/5 Mac OS X 10.6 Snow Leopard: the Ars Technica review, page 5]</ref>。K32可以在用户态运行64位应用。Mac OS X 10.6 的新特性是在64位[[内核态|用户空间]]运行XNU。在除2008年及之后的[[Mac Pro]]和[[Xserve]]外的所有设备上,K32是10.6 Server系统的默认内核,并且可以运行64位应用<ref>[http://support.apple.com/kb/HT3770 Mac OS X Server v10.6: Macs that use the 64-bit kernel]</ref>。K64相比K32有如下几点优势<ref>[http://developer.apple.com/mac/library/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_6.html What's New in Mac OS X: Mac OS X v10.6]</ref>:

* 可以管理超过32GB的内存,内存地址空间相比32位内核有巨大增长。
* 缓存容量可以超过32位内核空间的限制,潜在提升I/O性能。
* 当使用高性能网络设备或多个[[GPU]]时性能会提升,因为即使在[[直接存储器访问]]DMA缓存很大的情况下内核也可以把所有设备映射在64位地址空间中。

在支持64位内核的机器启动时按下6和4按键会使机器使用K64启动。K64可以运行32位应用,但不会运行32位的内核模块,所以这些内核模块需要移植到K64才能被加载。

=== I/O Kit ===
I/O Kit 是一个[[设备驱动]]框架,用基于[[Embedded C++]]的[[C++]]子集编写<ref>[http://osxbook.com/book/bonus/ancient/whatismacosx/arch_xnu.html I/O Kit uses a restricted subset of C++]</ref>。借助它的[[面向对象]]设计,框架提供每种设备驱动需要的常见特性,以使驱动程序可以用更少的时间和代码完成。I/O Kit 具有多线程设计,[[对称多处理器]]安全,支持热拔插设备和自动动态配置设备等特性。
很多设备驱动可以编写运行于[[用户态]],进一步提升了系统的稳定性。如果用户态的驱动崩溃,内核不会因此崩溃。但是,内核态的驱动崩溃会导致内核崩溃。磁盘适配器和网络适配器驱动、显卡驱动、[[USB]]驱动和[[IEEE 1394|火线控制器]]驱动以及[[虚拟机]]软件如[[VirtualBox]],Parallels Desktop for Mac和[[VMware|VMware Fusion]]等的驱动都是典型的内核态驱动。

== 共享资源保护 ==
为了在多核设备上安全运行,对共享资源(文件、数据结构等) 的访问必须被序列化,这样线程和进程就无法在同一时间修改同一资源。原子操作、自旋锁、[[临界区块]]、[[互斥锁]]("mutexes")和[[序列化标记]]都可以实现防止访问冲突发生。从Mac OS X 10.4与Darwin8.0开始,XNU如较新版本的Linux与FreeBSD一样使用一种折中的互斥模型来获得在[[多处理器]]系统上的高性能表现。

== 参见 ==
{{Portal|自由软件}}
*[[内核]]
*[[A/UX]]
*[[mkLinux]]
*[[Darwin (操作系统)|Darwin(操作系统)]]{{snd}}苹果公司以XNU为内核发布的开源操作系统
*[[macOS]]{{snd}}苹果公司以XNU为内核发布的操作系统

== 参考资料 ===
{{Reflist|30em}}

== 外部链接 ==
* [http://opensource.apple.com/source/xnu/ Apple Open Source Browser{{snd}} XNU]
* [https://github.com/opensource-apple/xnu Unofficial mirror of XNU at GitHub]
* [http://osxbook.com/book/bonus/ancient/whatismacosx/arch_xnu.html XNU: The Kernel]{{snd}} Amit Singh 于 2003年12月写的对XNU结构组成的概述
* [http://www.derchris.eu/ccc/24C3/mp4/24c3-2303-en-inside_the_macosx_kernel-COMPATIBLE.mp4 Inside the Mac OS X Kernel]{{snd}} "This talk intends to clear up the confusion by presenting details of the Mac OS X kernel(这次演讲旨在通过深入介绍Mac OS X 内核来澄清误解)"
{{移动操作系统}}
{{macOS}}
{{DEFAULTSORT:Xnu}}
[[Category:Mach]]
[[Category:Mach]]
[[Category:宏内核]]
[[Category:macOS]]

2017年4月8日 (六) 07:23的版本

XNU kernel
開發者Apple Inc.
首次发布1996年12月,​28年前​(1996-12
当前版本
  • 1228(2007年10月30日)[1]
  • 8796.101.5(2023年6月14日)[2]
編輯維基數據鏈接
源代码库 編輯維基數據鏈接
操作系统DarwiniOStvOSwatchOSmacOS
语言英文, 其他
类型操作系统核心
许可协议Apple Public Source License 2.0
网站opensource.apple.com/source/xnu/

XNU是一个由苹果电脑发展的用于macOS操作系统的操作系统内核。它是Darwin操作系统的一部分,跟随着Darwin一同作为自由及开放源代码软件被发布。它还是iOStvOSwatchOS操作系统的内核。XNU是X is Not Unix的缩写[3]

XNU最早是NeXT公司为了NeXTSTEP 操作系统而发展的。它是一种混合式核心(Hybrid kernel),结合了由卡内基美隆大学发展的Mach 2.5版,4.3BSD,与称为Driver Kit的面向对象应用程序界面

在苹果电脑收购NeXT公司之后,XNU的Mach微内核被升级到Mach 3.0,BSD的部分升级至FreeBSD,Driver Kit则改成I/O Kit,一套以C++撰写的应用程序界面。

内核设计

XNU是一个混合内核,将宏内核微内核两者的特性兼收并蓄,以期同时拥有两种内核的优点————比如在微内核中提高操作系统模块化程度以及让操作系统更多的部分接受内存保护消息传递机制,和宏内核在高负荷下表现的高性能。

到2007年为止,XNU支持单核和具有对称多处理模块ARM[4]IA-32x86-64处理器。在第10版(即Mac OS X 10.6)之后,不再支持PowerPC

Mach

XNU内核以一个被深度定制的Mach3.0内核作为基础。如此这般,它便可以把操作系统的核心部分作为独立的进程运行,由此带来极大的灵活性(Mach核心之上可平行运行多个操作系统)。但是因为内核态/用户态的上下文切换会额外消耗时间,同时内核与服务进程之间的消息传递也会降低运行效率,所以这种设计通常会降低性能。为了提高效率,在 Mac OS X 中BSD部分与Mach一起内建于核心部分。深度定制的「混合」Mach3.0内核与传统BSD内核融合一体的产物就是一个「混合」内核,同时具有两者的优点与缺点。

BSD

内核的BSD(BSD)部分提供了POSIX应用程序接口(BSD系统称为API):基于Mach的任务之上的Unix进程模型,基本安全策略,用户和用户组,权限,网络协议栈虚拟文件系统(包括一个文件系统无关的日志层),几个本地文件系统(例如HFS/HFS+),网络文件系统(NFS)客户端与服务器,加密框架,UNIX System V进程间通信(IPC),审计机制,强制访问控制,和一些锁原语[5]。XNU中的BSD代码来自FreeBSD内核。尽管其中相当一部分代码都被深度修改过,苹果和FreeBSD项目之间依然会交换代码[6]

K32/K64

XNU在Mac OS X 10.6 Snow LeopardDarwin版本号10)及之后演化为两个分支,称为K32的32位版和称为K64的64位[7]。K32可以在用户态运行64位应用。Mac OS X 10.6 的新特性是在64位用户空间运行XNU。在除2008年及之后的Mac ProXserve外的所有设备上,K32是10.6 Server系统的默认内核,并且可以运行64位应用[8]。K64相比K32有如下几点优势[9]

  • 可以管理超过32GB的内存,内存地址空间相比32位内核有巨大增长。
  • 缓存容量可以超过32位内核空间的限制,潜在提升I/O性能。
  • 当使用高性能网络设备或多个GPU时性能会提升,因为即使在直接存储器访问DMA缓存很大的情况下内核也可以把所有设备映射在64位地址空间中。

在支持64位内核的机器启动时按下6和4按键会使机器使用K64启动。K64可以运行32位应用,但不会运行32位的内核模块,所以这些内核模块需要移植到K64才能被加载。

I/O Kit

I/O Kit 是一个设备驱动框架,用基于Embedded C++C++子集编写[10]。借助它的面向对象设计,框架提供每种设备驱动需要的常见特性,以使驱动程序可以用更少的时间和代码完成。I/O Kit 具有多线程设计,对称多处理器安全,支持热拔插设备和自动动态配置设备等特性。 很多设备驱动可以编写运行于用户态,进一步提升了系统的稳定性。如果用户态的驱动崩溃,内核不会因此崩溃。但是,内核态的驱动崩溃会导致内核崩溃。磁盘适配器和网络适配器驱动、显卡驱动、USB驱动和火线控制器驱动以及虚拟机软件如VirtualBox,Parallels Desktop for Mac和VMware Fusion等的驱动都是典型的内核态驱动。

共享资源保护

为了在多核设备上安全运行,对共享资源(文件、数据结构等) 的访问必须被序列化,这样线程和进程就无法在同一时间修改同一资源。原子操作、自旋锁、临界区块互斥锁("mutexes")和序列化标记都可以实现防止访问冲突发生。从Mac OS X 10.4与Darwin8.0开始,XNU如较新版本的Linux与FreeBSD一样使用一种折中的互斥模型来获得在多处理器系统上的高性能表现。

参见

参考资料 =

外部链接