Coupla comments. First, Harvard and "Von Neumann" are not mutually exclusive.
Harvard is generally considered to be a type of stored program computer.
Second, its more correctly known as "stored program computer", since that
is what the original paper described. It is often known as "Von Neumann"
because that was the name on the paper describing it, even though
computer historians agree that Von Neumann acted only as the scribe for
Most OSes allow self modifying code in some fashion. Its pretty much
required to be able to accomplish certain important tasks, such as
compatiblity between calling conventions, and code speedups. I disagree
that it is "bad". Certainly having the main code write protected is
a good idea, but your data is your data: read it, write it, execute it
if you like. They are all valid operations. Executing your data area
is no more dangerous than reading or writing it, both will cause
page faults if they go astray. If it WERE impossible to execute data
space, many of my best programs would fail. Why ? Because in my command
line interpreters, I commonly compile the line into machine code and
execute that, resulting in much better execution time on script
interpreters. Programming does not need another pointless restriction.
Harvard was both a memory protection method and a way to extend the
address space. With code and data occupying two disjoint address spaces,
memory addressing is "doubled" (or something like it). For this reason,
harvard had a brief return to popularity with early microprocessors
and their 16 bit address limits.
However, harvard is also a design concept, anytime you have split code
and data spaces, even in the context of unified memory. Thus, caches
can be split data and code.
I personally use a assembler and compiler that links for the Harvard model,
even though I have never used it on a true Harvard computer. Why ? It
simply gives a good abstraction of the linking process. Code ends up in
one block, and data ends up in another, and they are located independently
in memory. This covers both the idea that an imbedded program can have
the code lives in a separate device than data, and also paged OSes, because
most systems cannot have the code and data live in the same page.
Samiam is Scott A. Moore
Personal web site: http:/www.moorecad.com/scott
My electronics engineering consulting site: http://www.yqcomputer.com/
ISO 7185 Standard Pascal web site: http://www.yqcomputer.com/
Classic Basic Games web site: http://www.yqcomputer.com/
The IP Pascal web site, a high performance, highly portable ISO 7185 Pascal
compiler system: http://www.yqcomputer.com/
Being right is more powerfull than large corporations or governments.
The right argument may not be pervasive, but the facts eventually are.