Structured Computer Organization, by Tanenbaum
Highlights of Chapter 1

p. 2-4  Virtual machine - a hypothetical computer working at a particular
        level
 
        A machine level defines a language for that level.
        Also, a language defines a machine, one that can execute all the
           programs written in that language.  
           (We work in our "C++ machine/computer")

        N levels computer - N different virtual machines
        Working at level n, a programmer tends not to be interested in
           the lower levels.

p. 4-7  A 6 level computer

        L0  Digital logic level
            Gates - digital devices built from analog components
 
            Examples: 
              AND, OR
              1 bit memories that store 0's and 1's
              1 bit memories used in groups of 16, 32, 64 
                  to form registers
              Registers can hold a binary number up to some maximum

        L1  Microarchitecture level (microprogramming)
            8 to 32 registers that form a local memory
 
            ALU circuit for simple arithmetic operations

            Registers are connected to the ALU to form a "data path"
            The operation of the data path is to select one or two
               registers, the ALU operates on them and stores the 
               result back in a register.

            Microprogram (software) - operates the data path

            Microarchitecture - hardware/software operating the 
                data path

        L2  Instruction Set Archictecture level - ISA

        L3  Operating System

 -------------------

        L4  Assembly language level

            Assembly language - symbolic form for one of the underlying
               languages.  This provides a method for people to write
               programs for levels 1, 2, and 3 in a form that is not as
               unpleasant as the virtual machine languages themselves.

            Assembly language is translated by an assembler

        L5  Languages used by applications programmers with problems
               to solve.  These are called high level languages.

            Translated/interpreted by compilers/interpreters to 
               levels 3 or 4

        
p. 7-8  Architecture - the set of data types, operations, and features
            at each level

        Hardware and software are logically equivalent

p. 9-13 Microprogramming

        1st digital computers - 1940's
        Two levels - ISA and digital logic level used to execute the
           programs

        1951 - Wilkes designs a 3 level computer
           Digital logic level, microprogram, and ISA

        1960 - operating system

        1970's - redesign - eliminate the microprogram/reduce the
            instruction set
            

History of computer evolution

p. 13-16  Zeroth Generation - Mechanical computers, 1642-1945

          Pascal (1623-1662) - calculating machine, + and -
          Leibniz (1646-1716) * and /

          Babbage (1792-1871) - difference engine, + and -

             Analytical engine: 4 components
                Store - memory, 1000 words of 50 decimal digits
                        Holds the variable and results
                Mill - computation
                Input - punched card reader
                Output - punched and printed output

                Programmable - Ada Lovelace hired to produce the
                   software

          1930's Attanasoff, Iowa State, binary arithmetic for his
               calculator

p. 16-19  First Generation - Vacuum tubes 1945 - 1955

          ENIAC 18000 vacuum tubes and 1500 relays
             Programs - 6000 multiposition switches and a forest of
                        jumper cables

          Von Neumann - machine used in EDSAC, 1949

             Memory, Control Unit, ALU and accumulator, Input/Output

             Memory - 4096 words, 40 bits each
                20 bit instructions - 8 bits for the type of instruction,
                      12 bits for specifying one the 4096 words
                40 bit register called the accumulator

p. 19-21  Second Generation - Transitors, 1955 - 1965

          1948 - transistor invented at Bell Labs (1956 Nobel Prize)
              Bardeen, Brattain, and Schockley

          1961 - PDP1  4K of 18 bit words
                 Cycle time of 5 microseconds

          Units: milli = 10^-3
                 micro = 10^-6
                 nano =  10^-9
                 kilo =  10^3
                 mega =  10^6
                 giga =  10^9

                 1K = 2^10 = 1024
                 1KB = 1024 bytes
                 1M = 2^20
                 1MB = 1,048,576 bytes

p. 21-23  Third Generation - Integrated Circuits 1965-1980

p. 23-24  Fourth Generation - VLSI 1980
  
          8080 chip  CP/M - Gary Kildall - a true floppy disk 
             operating system, with a file system and user commands
             typed in from the keyboard
          Apple, DOS, IBM PC

p. 24-26  The Computer Zoo - Moore's Law
           Number of transistors doubles every 18 months
           New generation every 3 years, each generation had 4 times
              the memory of its predecessor.  
              Observation - The number of transistors increases at 
                a constant rate.

p. 29-37  Example Computer Families
          
          Introduction to the Pentium
 
          1978 - 8086
                 8088 - 8 bit bus (cheaper than 8086)
                     used for the IBM PC

          Early 1980's - 80286 ("286")  IBM PC/AT, 16 MB memory

          1985 - 80386 ("386"), 32 bit CPU on a chip

          Intel's downward compatability

          1989 - 80486 ("486"), floating point unit, 8K cache memory
                  on the chip. Cache memory is used to hold the 
                  most commonly used memory words inside or close
                  to the CPU inorder to avoid slow accesses to
                  main memory.  Also - multiprocessor support.

          Intel - cannot trademard numbers (like 80586)

          1993 - Pentium, two pipelines, makes it twice as fast.
                 MMX
          1995 - Pentium Pro, two levels of cache built in.
                 8 KB cache on the processor for commonly used 
                    instructions, and 8KB of memory to hold commonly
                    used data.  Second cache memory of 256 KB not
                    on the chip itself.
                 Could execute up to five instructions at a time.

          1997 - Pentium II, MMX multimedia extensions

          1998 - Celeron, low price Pentium II

          Sun - SPARC
                Java - JVM, the Java Virtual Machine,
                    Portable byte code

                Java-to-machine-language compiler 
                   Just In Time compilers JIT