Computer Architecture
Computer architectures deal with computer hardware
configurations and how they interface with software. The two main entities of
computer architecture are the CPU (central
processing unit) and memory. Memory stores data and instructions in blocks or
cells, and the CPU is responsible for fetching and executing instructions from
memory. Memory is partitioned into a hierarchical structure such that storage
size increases going down the pyramid but the access time increases going up the
pyramid. There is a lot of research in operating systems and computer
architecture for making access time quicker and memory cheaper.
6
As just described these concepts of memory and CPU are
pretty basic, but whatÕs not basic are the details of how we (as programmers)
communicate with a computer. As you may already know computers only understand
electronic pulses, that is, on or off, hence 0 or 1. Ever since the birth of
modern-day digital/programmable computers we have made significant progress
into providing an interoperable means for humans and computers to effectively
interact. In other words, there is essentially a mapping between user level
language and binary language. This complexity is handled with a layered
structure of abstractions:

![]()
![]()
![]()
![]()

![]()
![]()
Since I mostly live at the high-level
(OO/C++/Java programming) environment, I wonÕt go into great detail regarding
architectures. However, it is important (for us) to have a fundamental
understanding of computer architectures not only to appreciate what goes on
underneath the covers, but you never know when you need to potentially work at
the level. For instance, IÕve had some embedded (C/Assembly) programming
experience as well as other research endeavors that dove head first into
primitive instruction sets, etc.
Links.
http://www.cs.princeton.edu/introcs/50machine
http://www.cs.wisc.edu/~arch/www
http://www.cs.iastate.edu/~prabhu/Tutorial/title.html