What architecture are current computers based on?

The Princeton Architecture or the Harvard Architecture? Some notes I found online state the Princeton architecture, but this creates the Princeton bottleneck. The Harvard architecture was suppose to alleviate this. Have all systems transferred to a more "Harvard" approach?


Most modern systems are Princeton in the sense that the same memory system is used for data and instructions, although memory management systems often keep instructions and data in separate pages and user code may not be able to write into memory that contains executable instructions for security reasons.

At a different level, there are typically separate caches for instructions and data. This separation of instruction and data caches helps to overcome the Princeton bottleneck. Furthermore, most modern systems don't ensure cache coherency between the data cache and the instruction cache. This means that if you write new instructions into memory they may not immediately effect execution since the instruction cache might be relying on previously cached instructions. Typically, operating system software has to clear the instruction cache after a new or modified program has been loaded into memory.

| cite | improve this answer | |
  • $\begingroup$ although memory management systems often keep instructions and data in separate pages - what do you mean by pages? $\endgroup$ – nativist.bill.cutting Sep 26 '13 at 21:29
  • $\begingroup$ See the discussion of this in the Wikipedia article on memory protection: en.wikipedia.org/wiki/Memory_protection $\endgroup$ – Brian Borchers Sep 26 '13 at 21:41
  • $\begingroup$ don't have time to read that, can you just tell me what these pages are? are they paper, how does paper go in a computer with no printer? Just kidding. $\endgroup$ – nativist.bill.cutting Sep 26 '13 at 21:43
  • $\begingroup$ To be a bit more explicit, in addition to mapping virtual addresses to physical addresses, virtual memory systems often enforce various kinds of permissions that can be set for each page in virtual memory. Thus the pages that hold your executable code are marked executable and not writable, while the pages that hold your data are marked not executable but can be written to. $\endgroup$ – Brian Borchers Sep 26 '13 at 21:46

Not the answer you're looking for? Browse other questions tagged or ask your own question.