分类:
2008-04-10 11:01:19
Since the introduction of Mac OS X, its Objective-C-based Cocoaframeworks have allowed developers to produce some amazing software atan incredible pace. All of the resulting innovation in the marketplacehas made it pretty easy for us to stay captivated on the desktop andforget all about the engineering marvel that makes all of thispossible. Let's take a trip down into the core of OS X--Darwin--tolearn more about the foundation that gives us one of the best userexperiences in computing.
Mac OS X development started shortly after Apple's acquisition of all the way back in 1996. After the buyout, development on what would evolve into Mac OS X was code-named until Mac OS X was officially released in 2001.
Sometime during Rhapsody's development, its code was forked and opensourced into what we know as Darwin. By April 2000, Apple's team hadalready completed their version 1.0 build. Although they'd beenreleasing the Darwin source prior to that time, the version 1.0 buildwas especially significant because it was based on a new hybrid corethat we now know as the kernel. Like the 's recursive acronym , XNU stands for "XNU is Not Unix."
Now that you know a bit about Darwin's past, let's take a moment tolook at where it fits into the overall OS X architecture before divingoff into the details. Generally speaking, most of Darwin fits intowhat's called the Core OS, which sits directly on top of thehardware and comprises the kernel, device drivers, and other low-levelresources of the OS. Other layers, including core services, applicationservices, graphics, and multimedia, sit between the Core OS and theuser experience that is defined by Aqua: the standard that defines theoverall appearance and behavior of Mac OS X apps. For some good readingon all of the ins and outs of how all of the OS X technology fits together, check out the Mac OS X Technology Overview. It's a good way to spend a rainy day.
A
good starting point for discussing any OS is the kernel: the coreof the
OS that provides access to and scheduling for the underlyinghardware
that's available. To fully appreciate Darwin, you'll want toknow some
of the details associated with its kernel, XNU, which is aninteresting
blend of the 3.0 microkernel that's been modified to include portions of inside
the kernel space for performance reasons. Mach's foundations goback to
Carnegie Mellon University out of Pittsburgh while FreeBSD is
adescendant of (Berkeley Software Distribution), which hails from--you guessed it--the University of California at Berkeley. XNU
is the result of an effort to combine the strengths of twodifferent
approaches to kernel design: the monolithic approach and themicrokernel
approach. While the jargon might already sound complicated,the primary
difference between the two is pretty simple and basicallyboils down to
what programs run inside the kernel itself and whatprograms run in .Whereas
monolithic kernels typically are defined by a fairly completeset of
rich abstractions that access the hardware all within the sameaddress
space, microkernels tend to provide a fairly minimal set ofservices
within the kernel and use daemon (server) processes running in userland for the rest of the core services. There
are frequently debated trade-offs between the two approaches,but just
about all of them eventually come back to efficiency as thepivotal
point of discussion. The tightly coupled nature of a monolithickernel
allows it to make very efficient use of the underlying hardware,which
is a very desirable thing. The drawbacks of monolithic kernels,however,
are that they're very difficult to write and a single mistakein the
kernel's code can crash the entire system. Microkernels, on the
other hand, run a lot more of the coreprocesses in userland. This
approach simplifies the actual kerneldesign and can provide a great
deal of stability in the system.Unfortunately, these benefits come at
the cost of the microkernelhaving to pass a lot of information in and
out of the kernel spacethrough a process known as a context switch.
Context switches introduceconsiderable overhead and therefore result in
a performance penalty. You're probably beginning to see the
underpinnings of the debatethat unravels when you start to make a case
for one kernel design overthe other. Perhaps the most famous of all
these debates was betweenLinus Torvalds and Andrew Tanenbaum. Torvalds
makes a case for themonolithic kernel, while Tanenbaum defends the
microkernel approach.You can read the original messages that were part
of a world famousflame war back in 1992 . (It's fortunate for us that the decision for Darwin's kernel has already been made.) We've
been harping on XNU for a while now, but there's still a lotmore to be
said about Darwin besides its kernel. Some of the mostnotable features
worth mentioning include its facilities providedthrough I/O Kit, its
Virtual File System (VFS), and its networkingsupport. Darwin's
I/O Kit (Input/Output Kit) is a Mach-based device driverframework. It's
modular, extensible, and offers a true plug-and-playsolution for
dynamic device management. Unlike Cocoa, which is writtenin
Objective-C, the I/O Kit is written in a restricted subset of C++that's
based on the specification.
Much of the justification behind the choice of C++ as alanguage for I/O
Kit was based upon C++'s mature compiler andlong-standing support for
systems programming. Fitting into the Mach-based kernel
methodology, device driversderived from I/O Kit are special types of
kernel extensions thatprovide the information necessary to handle a
device or entire familyof devices. Unless you're writing device drivers
or interfacing tohardware at its lowest levels, you probably won't need
to work with I/OKit. But just in case you do, I/O Kit Fundamentals is a great starting point. Darwin's
file system and networking support comes from its rich BSDheritage. Its
VFS design enables features like long filenames,URL-based volume
mounting, and to take place. Darwin's file system can handle just about anything you throw at it: , , , , and .As
the web becomes more and more pervasive, complementary
networkingsupport for file system support is a must have, and don't
worry--youwon't be disappointed. If
you've ever tried to set up networking on a Windows box, you knowthat
it can often be a nightmare. At one point, you might have beenchanging
all sorts of settings on multiple tabs that opened newwindows, which
also had tabs that had multiple properties with a poorhelp system. But
with Darwin, there's none of that. Darwin's BSD-basedextensible network
protocol stack gives rise to OS X features such as ,a
zero-configuration networking implementation that eliminates justabout
all of the hassles that are normally associated with networking.It
really can't get much simpler than that. Although features likethese
are easy to take for granted, they really are gems in Darwin'soverall
design. Apple releases a new version of Darwin on their open source site for each major update to OS X, and it's not long after Apple's release that the folks at provide
a corresponding build of OpenDarwin. OpenDarwin is essentiallyApple's
latest release with modifications to give it some extrafeatures that
Apple doesn't provide. These additional features areusually things like
GUI support, device drivers, utilities, and support for legacyhardware--basically features that don't directly support Mac OS X. Although the releases of Darwin under the versions less than 2.0 of the APSL (Apple Public Source License) were ,the
APSL as of version 2.0 does qualify as a free software license, andthis
is the license that most of Darwin is released under. The FSF,however,
considers the APSL 2.0 to still have : it allows linking with other files that can be entirely proprietary, and it is generally incompatible with the .I
don't think we'll be seeing any trade secrets like QuickTime,Spotlight,
or the Cocoa frameworks being open sourced anytime (ever),so don't hold
your breath on this one. You
can download Apple's version of Darwin or OpenDarwin if you wantto
tinker around and get into the guts of Mac OS X. If you'reinterested in
trying out yet another possibility that comes with someadditional
bells, whistles, and software mods, take a look at --a project that aims to be the "most free" version of Darwin. When
Steve Jobs announced the Intel switch, a lot of people freakedout and
wondered how on earth an entire OS could be turned around torun on a
different architecture in such a short amount of time. Littledid they
know that Darwin had been leading the way by alongside
of Mac OS X since the conception of OS X--a practice that nodoubt
provides a significant boost to the overall effort. In fact, youcan
read about Darwin's 1.0 build right herein
an old Advogato diary entry. I guess if you couldn't be there, thenthis
is the next best thing. In the entry you'll even see a referenceto (universal binaries), a technology we've been hearing a lot about lately that also dates back to the days of NeXT. For a good grin, check out --a weblog entry that comments on an old Wired news article from 2000. It has some interesting quotes regarding the Intel switch in light of what we now know today. Now
you'll never have to wonder what that friendly little messageyou see in
Terminal ("Welcome to Darwin!") ever means again. Hopefullythis
background has provided you with a better understanding of how MacOS X
works, where it comes from, and how it powers OS X. Now get outthere, download the Darwin source, and take a look at how OS X works under the hood. 原文:http://www.macdevcenter.com/pub/a/mac/2005/09/27/what-is-darwin.html?page=1XNU--Darwin's Kernel
Conceptual views of monolithic kernel (left) and microkernel (right) designThe Rest of Darwin
I/O Kit
File System and Network Support
Darwin and Open Source
The Intel Switch
Now Ya Know