Virtual Machine books

For a while, I've been awaiting a scholarly book on the topic of virtual machines. Bill Blunden's book ain't it; and the other books (until recently) which were relevant were all practical works on particular VMs, usually that of Java or the MS CLR.

Now, it appears that two textbooks on the topic are in print: One is Iain Craig's Virtual Machines (ISBN:1852339691) published by Springer; the other is Virtual Machines: Versatile Platforms for Systems and Processes by Smith and Nair, (ISBN:1558609105), published by Morgan Kaufmann.

Judging strictly from the summaries at Powell's website; the former appears to be a slightly more academic treatment of the topic; the latter looks a bit more practical-oriented. (I'm interested in both). The latter also seems highly concerned with topics like CPU emulation and OS-level virtual machines (like VMware), as opposed to VMs as a programming model/programming language runtime (like JVM or CLR). A summary is here.
I couldn't find any in-depth reviews of the Craig book online, especially from reputable reviewers.

Has anyone read either book (someone mentioned the first one in another thread), and have any recommendations, pro or con? The second book is on the shelf at Powells, so I might go check it out. The first book is on backorder.


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

On Smith and Nair

My roommate recently bought Smith and Nair for his research. I glanced through it, and it definitely seems very comprehensive.

I didn't get the impression that the book focused more on virtualization or OS-level VMs than any other type of VM. Then again, most of the available VM literature involves Java and the JVM. I would guess that the authors' approach is focused on the implementation of VMs. Smith and Nair are architecture guys, not PL guys.

I will say this, though. I attended a talk on VMs by Jim Smith last fall. (I've heard that he gives the same one often nowadays.) His description of the various categories and where they fall in the structure of things was really interesting. I haven't heard of anybody else breaking it down so clearly, though I haven't looked at Craig.

I can take a look at S&N some more if you'd like and give you a fairer response. Since I heard Smith talk and talked to him myself, I've been wanting to (find time to) read his book.

Smith and Nair

I've read the first four chapters, and judged it worth the money if you're interested in low-level virtual machines and how to make them run fast. (I am, and I'm glad I bought it.) The writing seemed a bit sloppy and 'mainstream' to me, e.g. the old error of calling Lisp an "interpreted Language", or writing a sentence meaning the exact opposite of what I think they meant to say. The index doesn't list any HLL VM besides p-code, JVM, and CLR.

as opposed to VMs as a programming model/programming language runtime (like JVM or CLR)

There are two long chapters on that (mostly dealing with the JVM), which I haven't read, but most of the book does keep its focus lower-level.

I bought Smith and Nair...

...and I concur with Darius' remarks so far. Most of the book is outside the scope of PLT--it's primarily a systems programming text. A couple chapters do focus on so-called "high-level process VMs", VMs designed to be the target of a HLL compiler, rather than to virtualize an existing system. Haven't read the chapters which cover the JVM and such either.

If you're interested in VMs, it's a good book. The book isn't heavy on formal theory; unsurprising given that many of the details of VM construction (how to deal with caches, peculariaties of particular ISAs or ABIs, and how to handled things like self-modifying code) are not amenable to formal analysis. Instead, the book focuses on studying existing research and industrial VMs. It's a well-written, professional treatise on the subject.

Probably about 60% of the book deals with so-called "process" VMs; those which host applications. (This includes all the VMs of interest to the PLT community). The last 40% or so examines "system" VMs; defined roughly as VMs which host operating systems. (Things like VMWare, partition managers on mainframes, the x86 emulation layer in a Transmeta chip, etc.)

I'm still awaiting comments on the Craig book; which has yet to grace the shelves of a local bookstore--at least not that I can find.