Talk:Popek and Goldberg virtualization requirements

Summary
It would be nice to have a summary of the requirements, examples of processors that do and do not meet the requirements, and explanations of why some do not.

Architectures that do not meet the Popek and Goldberg virtualization requirements:
 * IBM System/360
 * Motorola MC68000
 * Intel x86

Architectures that do meet the Popek and Goldberg virtualization requirements:
 * IBM System/370
 * Motorola MC68010

Example of an architectural change to support virtualization:
 * On the Motorola MC68000, the instruction move from status register was not a privileged instruction, but inspected a portion of the privileged machine state. Thus it was not possible for a hypervisor to efficiently trap that instruction when executed by a guest operating system in order to provide the virtual machine status register in place of the host machine status register.  The MC68010 fixed this by making move from status register a privileged instruction, and adding a new unprivileged instruction move from condition code register which could be used to read only the portion of the status register not containing privileged state.

I agree, I clicked on the link to this page to get the list of requirements but was met with a fluffed up version of what was stated on the linking page.

"The Popek and Goldberg virtualization requirements are a set of necessary and sufficient conditions for a computer architecture to efficiently support self-virtualization..."

This statement is logically contradictory to the following one:

"It is possible for a computer that does not satisfy the Popek and Goldberg virtualization requirements to support a virtual machine, but generally this requires a much more complex virtual machine monitor program and imposes a higher performance penalty."

As stated on the link to Necessary and sufficient conditions if the first statement is true, then the only way for a computer architecture to efficiently support self-virtualization is to meet the Popek and Goldberg virtualization requirements. It is then stated that there is another way for a computer to support self-virtualization without satisifying P&G. Can't have it both ways.
 * I think this article is pretty unclear, but I disagree that there's a logical contradiction. The first quote says "efficiently support", while the second says virtualization is possible but with a higher performance penalty. Of course, any computer can simulate any other computer inefficiently (assuming unlimited resources). Brighterorange 17:59, 16 November 2005 (UTC)

17 or 18 IA32 instructions?
Has anybody counted the IA32 instructions? If I'm right, it's 18. Why does everybody speak about 17 instructions (even Robin&Irvine)?! Is SMSW considered outdated?

I agree, this is confusing; however, Robin & Irvine don't exactly say that their list has 17 entries. The enumeration of problematic instructions takes place in Section 3, & there are definitely 18 items listed there. Later (Section 4, para. -3, sentence 2), they say "First, all seventeen unprivileged, sensitive instructions of the Intel architecture could be changed to privileged instructions."; not "First, all the seventeen unprivileged, sensitive instructions of the Intel architecture could be changed to privileged instructions.". It may be that they aren't counting SMSW or some other instruction. Has anyone thought of contacting them for clarification?

Does z/Architecture meet the requirements?
The article states that System/370 meets the requirements, but it seems to me that the part of z/Architecture described in Principles of Operation (the main publicly available reference on zArchitecture) does not meet them. There is instruction Extract PSW, which will tell unprivileged user the setting of privileged bit (similar to that Motorola instruction described in the article). If the privileged part of the operating system to be virtualized must run unpriviliged on virtualized machine, and it can find the state if they are privileged or not, it can behave differently in virtualized and non-virtualized environment (by the way, I think this should be made clear in the article). So it seems to me that it's impossible to virtualize zArchitecture by means of privileged instructions. However, on zArchitecture, there is undocumented instruction SIE (Start Interpretive Execution), which dates back to System/370, that is used by LPAR and zVM hypervisors, thus allowing virtualization. But I think that the published instruction set of zArchitecture alone doesn't meet the requirements. Samohyl Jan (talk) 18:41, 31 January 2008 (UTC)

MMIX
I think that the GET instruction in MMIX does not meet the requirements. Is it? --Zzo38 (talk) 04:36, 30 March 2019 (UTC)