Download The Essentials of Computer Organization and Architecture

Document related concepts

Spring (operating system) wikipedia , lookup

CP/M wikipedia , lookup

Paging wikipedia , lookup

Transcript
The Essentials of Computer Organization and Architecture—Linda Null and Julia Lobur
Contents:
Chapter 1—Introduction
1. Overview
--Complexity emanates from concepts that are fundamentally very simple. These simple ideas are
the ones that have brought us to where we are today and are the foundation for the computers
of the future.
--Some things are infeasible today (computationally infeasible) could be feasible tomorrow.
--Computer scientists are usually more concerned with writing complex program algorithms than
with designing computer hardware.
--Program optimization and system tuning are perhaps the most important motivations for
learning how computers work.
--All computer professionals should be familiar with the concepts of benchmarking and be able to
interpret and present the results of benchmarking systems.
--Technical managers in charge of buying hardware also use benchmarks to help them buy the
best system for a given amount of money, keeping in mind the ways in which performance
benchmarks can be manipulated to imply results favorable to particular systems.
--Computer Organization addresses issues such as control signals, signaling methods and memory
types. It encompasses all physical aspects of computer systems.
--Computer Architecture focuses on the structure and behavior of the computer system and
refers to the logical aspects of system implementation as seen by the programmer. Computer
architecture includes many elements such as instruction sets and formats, operation codes, data
types, the number of types of registers, addressing modes, main memory access methods and
various I/O mechanisms.
--The computer architecture for a given machine is the combination of its hardware components
plus its instruction set architecture (ISA). ISA is the agreed-upon interface between all the
software that runs on the machine and the hardware that executes it.
--Computer architecture and Computer organization are interrelated and interdependent. Each
individual cannot stand alone.
2. The Main Components of a Computer
--Principle of Equivalent of Hardware and Software: Anything that can be done with software can
also be done with hardware, and anything that can be done with hardware can also be done with
software.
--High Level LanguagesAssembly Languages (Instruction set)Machine Languages (CMOS)
--At the most basic level, a computer is a device consisting of three pieces:
a) A processor to interpret and execute programs
b) A memory to store both data and programs
c) A mechanism for transferring data to and from the outside world
3. An Example System: Wading Through the Jargon
--PICTURES: A typical computer advertisement & Common prefixes associated with computer
organization and architecture
--1KB. Base of 2=1Kibi Bytes=1024=210 Bytes. Base of 10=1Kilo Bytes=1000=103 Bytes.
--The number of instructions per second that a microprocessor can actually execute is
proportionate to its clock speed.
--“400MHz 256MB DDR SDRAM” = speed of system bus + memory capacity + double data rate +
synchronous dynamic random access memory
--PICTURES: A Look Inside a Computer
--“32 KB L1 cache”=a type of memory to provide even faster access to data from memory to the
processor
--serial ATA (advanced technology attachment) disk interface (7200 RPM—fast for HDD, usually
millisecond is good)IDE=integrated drive electronic; EIDE=enhanced integrated drive
electronics=cost-effective hardware interface alternative for mass storage devices.
--Ports (serial/parallel) allow movement of data to and from devices external to the computer.
The system bus is responsible for all data movement internal to the computer. (eg. USB supports
Plug-and-Play & hot plugging)
--PCI is I/O bus that supports the connection of multiple peripheral devices. PCI modem (data/fax
modem); Sound card; Video card
--“19’’ monitor, .24mm AG, 1280x1024 at 75Hz”=refresh rate of 75Hz + Resolution: .24mm dot
pitch supported by an Aperture Grill display. (dot pitch: closest dot of the same color) (AG direct
the electron beam that paints the monitor picture on the phosphor coating inside the glass of the
monitor)
--The more dots to refresh, the longer it takes for each refresh cycle. Experts recommend a
refresh rate of at least 75Hz.
--“48x CD-RW”= x translates to 153000bytes of data per second, 48x is the speed for read and w.
--PCIe video card is an interface specification designed to improve system graphic performance
by increasing the overall bandwidth.
--By speeding up the communication flow between the CPU and the graphic controller, PCIe
allows graphics applications to run faster than AGP
--Ethernet: network interface card (NIC—connect to the motherboard via a PCI slot) & integrated
Ethernet. (Laptop: wireless card)
4. Standards Organizations
--Institute of Electrical and Electronic Engineers (IEEE) is an organization dedicated to the
advancement of the professions of electronic and computer engineering.
--International Telecommunications Union (ITU) concerns itself with the interoperability of
telecommunications systems, including telephone, telegraph, and data communication systems.
--American National Standards Institute (ANSI). British Standards Institution (BSI). Comite
European de Normalization (CEN).
--International Organization for Standardization (ISO) is the entity that coordinates worldwide
standards development, including the activities of NSI with BSI among others.
5. Historical Development
a) Generation Zero: Mechanical Calculating Machines (1642-1945)
b) The First Generation: Vacuum Tube Computers (1945-1953)
c) The Second Generation: Transistorized Computers (1954-1965)
d) The Third Generation: Integrated Circuit Computers (1965-1980)
f) The Fourth Generations: VLSI Computers (1980-???)
--Fifth generation??? Parallel processing and the use of networks and single-user
workstations? Neutral network, DNA, or optical computing systems?
g) Moore’s Law—‘the density of silicon chips doubles every 18 months’
--Rock’s Law—‘the cost of capital equipment to build semiconductors will double every
four years.
6. The Computer Level Hierarchy
--PICTURE: Abstract levels of modern computing systems
--Control unit makes sure that instructions are decoded and executed properly and that data is
moved where and when it should be. Control units can be designed in one of two ways:
hardwired or microprogrammed.
--In hardwired control units, control signals emanate from blocks of digital logic components.
These signals direct all of the data and instruction traffic to appropriate parts of the system. It is
fast but difficult to be modified because they are actually physical components.
--A microprogram is a program written in a low-level language that is implemented directly by the
hardware. It interprets the instructions by activating hardware suited to execute the original
instruction. It is slower but flexible to be modified.
7. The von Neumann Model
--All stored-program computers is known as von Neumann systems using the von Neumann
architecture.
--Today’s stored-program machine architecture at least:
a) Consists of three hardware systems:
i. A central processing unit (CPU) with a control unit, an arithmetic logic unit (ALU),
registers (small storage areas), and a program counter;
ii. A main-memory system, which holds programs that control the computer’s
operation;
iii. An I/O system
b)Capacity to carry out sequential instruction processing
c)Contains a single path, either physically or logically, between the main memory system and
the control unit of the CPU, forcing alternation of instruction and execution cycles. This
single path is often referred to as the von Neumann bottleneck.
--PICTURE: von Neumann Architecture
--This architecture runs programs in what is known as the von Neumann execution cycle (or
fetch-decode-execution cycle), which describes how the machine works.
--One iteration of the cycle:
a) The control unit fetches the next program instruction form the memory, using the
program counter to determine where the instruction is located.
b) The instruction is decoded into a language the ALU can understand
c) Any data operands required to execute the instruction are fetched from memory and
placed into registers within the CPU.
d) The ALU executes the instruction and places the results in registers or memory.
NOTE: the idea of von Neumann architecture have been extended so that programs and data
stored in a slow-to-access storage medium, such as a hard disk, can be copied to a fast-access,
volatile storage medium such as RAM prior to execution. This architecture has also been
streamlined into what is currently called the system bus model. The data bus moves data form
main memory to the CPU registers. The address bus holds the address of the data that the data
bus is currently accessing. The control bus carries the necessary control signals that specify how
the information transfer is to take place. Other enhancements including using index registers for
addressing, adding floating point data, using interrupts and asynchronous I/O, adding virtual
memory and adding general registers.
--PICTURE: Modified von Neumann Architecture, Adding a System Bus
8. Non-von Neumann Models
--The von Neumann model executes instructions sequentially, therefore, extremely well-suited to
sequential processing.
--Today, most of the models has different processing units running in parallel. They are non-von
Neumann models, including neural networks, genetic algorithms, quantum computation,
dataflow computation, and parallel computers.
--Amdahl’s Law: ‘make sure the slowest parts of the system are the ones that are used the least’
states how the tasks are distributed in parallel processing.
Chapter 2—Data Representation in Computer Systems
1. Introduction
--bit, byte, words, nibbles
2. Positional Numbering Systems
--radix=base, weighted numbering system by a power of the radix (eg. 1012=1x22+1x20=510)
3. Decimal to Binary Conversions
a) Converting Unsigned Whole Numbers
--A binary number with N bits can represent unsigned integers from 0 to 2N-1
--Overflow: 30 cannot represent by only 4 bits.
b) Converting Fractions
c) Converting between Power-of-Two Radices
4. Signed Integer Representation
a) Signed Magnitude
--N bits can represent –(2(N-1)-1) to 2(N-1)-1
--Overflow: in signed numbers occurs when the sign of the result is incorrect.
--Double-dabble: fastest way to convert a binary number to decimal. PICTURE
b) Complement Systems
--Complement & One’s Complement
--Two’s Complement
--A Simple Rule for Detecting an Overflow Condition in Signed Numbers: If the carry into the
sign bit equals the carry out of the bit, no overflow has occurred. If the carry into the sign bit
is different from the carry out of the sign bit, overflow (thus error) has occurred. PICTURE
--INTEGER MULTIPLICATION AND DIVISION
--DIVISION can use either iteratively subtract the denominator from the divisor or use trial
and error of long division (NOTE: most efficient methods used for binary division out of
scope) <Newton-Raphson Division etc.>
--Divide underflow: the divisor is much smaller than the dividend.
c) Unsigned Versus Signed Numbers
--A computer programmer must able to manage both signed and unsigned numbers.
d) Computers, Arithmetic and Booth’s Algorithm
--The basic focus is on the implementation of arithmetic functions, which can be realized in
software, firmware, or hardware.
--Researches are looking for schemes that use non-traditional approaches such as the fast
carry look-ahead principle, residue arithmetic and Booth’s algorithm.
--“Regular” multiplication clearly yields the incorrect result. There are a number of solutions
such as converting both values to positive numbers, performing conventional multiplication,
then remembering if one or both values were negative to determine if the result should be
positive or negative.
--Booth’s algorithm not only solves this dilemma, but also speeds up multiplication in the
process. It looks for consecutive zeros and ones in the multiplier.
--PICTURES: standard multiplication vs. Booth’s algorithm
--We are interested in pairs of bits in the multiplier and proceed according to:
i. If the current multiplier bit is 1 and preceding bit was 0, we are at the beginning of a string
of ones, so subtract the multiplicand for the product
ii. if the current multiplier bit is 0 and the preceding bit was 1, we are at the end of a string
of ones, so we add the multiplicand to the product.
iii. If it is a 00 pair, or a 11 pair, do no arithmetic operation. Simply shift. The power of the
algorithm is in this step: we can now treat a string of ones as a string of zeros and do nothing
more than shift. PICTURES.
--Booth’s algorithm does not like alternating string of zeros and ones. Registers are used and
a special type of shift called an arithmetic shift is necessary to preserve the sign bit.
e) Carry Versus Overflow
--The rule of thumb used to determine when carry indicates an error depends on whether
we are using signed or unsigned numbers. For unsigned numbers, a carry (out of the
leftmost bit) indicates the total number of bits was not large enough to hold the resulting
value, and overflow has occurred. For signed numbers, if the carry in to the sign bit and the
carry (out of the sign bit) differ, then overflow has occurred. The overflow flag is set only
when overflow occurs with signed numbers.
5. Floating-Point Representation
a) A Simple Model
--Mantissa=fractional part; Significand=fractional part+implied binary point+implied 1
--PICTURE: simple floating-point representation
--Excess-16 representation: we have to subtract 16 to get the true value of the exponent.
--Normalization: the leftmost bit of the significand must always be 1
b) Floating-Point Arithmetic
c) Floating-Point Errors
--Error tripled after six iterations. The challenge to computer scientists is to find efficient
algorithms for controlling such errors within the bounds of performance and economics.
d) The IEEE-745 Floating-Point Standard
--Single precision; Double precision; Hidden bit
e) Range, Precision, and Accuracy
--Range: the interval from the smallest value to largest value in a given format.
--Precision: how much information we have about a value and the amount of information
used to represent the value. (eg. apply to significant figures)
--Accuracy: how close a number to its true value.
f) Additional Problems with Floating-Point Numbers
--Overflow & Underflow; (a+b)+c~= a+(b+c) etc. due to rounding error. See ece4077 course
6. Character Codes
a) Binary-Coded Decimal
--BCD is common in display numerical data. It encodes each digit of a decimal number into a
4-bit binary form.
--packed BCD: stores two digits per byte and allows numbers to be signed, the sign is stored
at the end. The standard values for this ‘sign digit’ are 1100 for +, 1101 for – and 1111 to
indicate the value is unsigned.
--zoned decimal format, stores a decimal digit in the low order nibble of each byte. However,
instead of padding the high-order nibbles with zeros, a specific pattern is used. Two choices
for the high-order nibble, called the numeric zone.
--EBCDIC zoned decimal format requires the zone to be all ones (hex: F)
--ASCII zoned decimal format requires the zone to be 0011 (hex: 3)
b) EBCDIC
--Extended Binary Coded Decimal Interchange Code
c) ASCII
--American Standard Code for Information Interchange
d) Unicode
7. Error Detection and Correction
--Parity is the most basic of all error detection schemes
a) Cyclic Redundancy Check (CRC)
--it is a type of checksum used primarily in data communications that determines whether
an error has occurred within a large block or stream of information bytes. Checksums and CRCs
are a type of systematic error detection scheme, meaning that the error-checking bits are
appended to the original information byte. The group of error-checking bits is called a syndrome.
See ece2041 or ece 4024 courses notes
--Arithmetic Modulo 2
--Calculating and Using CRCs
Info. Bytes I
Remainder
Message M
A new remainder other than zero indicates an error has occurred.
b) Hamming Codes
--Hamming Codes are an adaptation of the concept of parity, whereby error detection and
correction capabilities are increased in proportion to the number of parity bits (check bits or
redundant bits) added to an information word.
--Code word: n=m+r (data bits + check bits)
--Hamming distance: the number of bit positions in which two code words differ
--minimum Hamming distance D(min) determines its error detecting and correcting
capability.
--To detect k single-bit errors, the code must have a Hamming distance of D(min)=k+1.
Hamming codes can always detect D(min)-1 errors and correct (D(min)-1)/2 errors.
This means for m=4 implies r>=3. For data words of 4 bits to correct single-bit errors, we
must add 3 check bits.
--To construct error correcting codes for any size memory word:
i) Determine the number of check bits, r, necessary for the code and then number the n
bits (n=m+r), right to left, starting with 1 (not 0).
ii) Each bit whose bit number is a power of 2 is a parrity bit—the others are data bits.
iii) Assign parity bits to check bit positions as follows: Bit n is checked by those parity bits
b1,b2,…,bj such that b1+b2+…+bj=b (‘+’ indicates the modulo 2 sum)
If we receive 0101 1101 0110 (bit 9 has error)
To implement a Hamming code using simple binary circuits.
c) Reed-Soloman (RS)
--Hamming codes are useless in situations where there is a likelihood that multiple adjacent
bits will be damaged. These kinds of errors are called burst errors.
--A Reed-Soloman code can be thought of as a CRC that operates over entire characters
instead of only a few bits. RS codes are systematic.
--The generator polynomial for a Reed-Soloman code is given by a polynomial defined over
an abstract mathematical structure called a Galois field.
Focus on Codes for Data Recording and Transmission
--Magnetic storage devices record data using changes in magnetic polarity called flux reversals.
--Data encoding, to mean the process of converting a simple character code such as ASCII to
some other code that better lends itself to storage or transmission.
A1. Non-Return-to-Zero Code
--Its ‘highs’ and ‘lows’ represent ones and zeros. (±3, ±5 volts)
--The slices and specks are called bit cells
‘O’
‘K’
‘A’
‘Y’
A2. Non-Return-to-Zero-Invert Code
--NRZI provides a transition—either high-to-low or low-to-high for each binary one and no
transition for binary zero.
A3. Phase Modulation (Manchester Code)
--It deals with the synchronization problem head-on. PM provides a transition for each bit,
whether a one or zero. ‘1’ is up transition; ‘0’ is down transition.
A4. Frequency Modulation
--Synchronizing transitions occur at the beginning of each bit cell. To encode a binary 1, an
additional transition is provided in the center of the bit cell.
*A5. Run-Length-Limited Code
--RLL is a coding method in which block character code words such as ASCII or EBCDIC are
translated into code words specially designed to limit the number of consecutive zeros
appearing in the code
--An RLL(d,k) code allows a minimum of d and a maximum of k consecutive zeros to appear
between any pair of consecutive ones.
--RLL contain more bits than the original character code, however, RLL using NRZI on the disk,
its data occupies less space on magnetic media because few flux transitions are involved.
--Theoretically, RLL is a form of data compression called Huffman coding, where the most
likely information bit patterns are encoded using the shortest code word bit patterns.
--RLL is 50% more efficient than MFM in terms of flux reversals.
*A6. Partial Response Maximum Likelihood Coding
--RLL by itself is insufficient for reliable encoding on today’s ultra high capacity magnetic disk
and tape media. As data density increases, encoded bits are necessarily written closer
together.
--This causing decreased magnetic signal strength, interference occurs. This phenomenon,
known as superpositioning.
--Partial response maximum likelihood or PRML, a encoding scheme use Viterbi detector
circuit matches the partial response pattern to a relatively small set of possible response
patterns and the closest match is passed to the digital decoder.
Chapter 3—Boolean Algebra and Digital Logic
1. Introduction
--Symbolic logic or Boolean algebra
--John Vincent Atanasoff applied Boolean algebra to computing
2. Boolean Algebra
a) Boolean Expressions
--Boolean expressions; A Boolean function typically has one or more input values and yields
a result, based on these input values, in the set {0,1}.
--Three common Boolean operators are AND, OR, and NOT.
--Boolean sum; Boolean product; Truth table; PICTURE
b) Boolean Identities
--identities, or laws, that apply to Boolean algebra instead of regular algebra is needed.
--duality principle, which has both an AND (product) form and OR (sum) form.
c) Simplification of Boolean Expressions
--Consensus Theorem: F(x,y,z)=xy+x’z+yz.
d) Complements
--DeMorgan’s Law
e) Representing Boolean Function
--There are an infinite number of Boolean expressions that are logically equivalent to one
another.
--sum-of-products form (SOP), requires that the expression be a collection of ANDed
variables (or product terms) that are ORed together.
--product-of-sum form (POS), consists of ORed variables (sum terms) that are ANDed
together.
--SOP and POS are equivalent ways of expressing a Boolean function. They can be converted
with one another.
3. Logic Gates
--Digital circuits, is the actual physical components perform arithmetic operations or make
choices in a computer, are constructed from a number of primitive elements called gates.
a) Symbols for Logic Gates
b) Universal Gates
c) Multiple Input Gates
4. Digital Components
a) Digital Circuits and Their Relationship to Boolean Algebra
b) Integrated Circuits
5. Combinational Circuits
a) Basic Concepts
--Digital logic chips are combined to give us useful circuits. These logic circuits can be
categorized as either combinational logic or sequential logic.
b) Examples of Typical Combinational Circuits
--half-adder; full-adder; ripple-carry adder; black box; decoder; multiplexer
See ece2072 course notes
--Another useful set of combinational circuits to study includes a parity generator and a
parity checker
--A parity generator is a circuit that creates the necessary parity bit to add to a word
--A parity checker checks to make sure proper parity is present in the word.
--Bit shifting, moving the bits of a word or byte one position to the left or right is a very
useful operation.
--ALU, arithmetic logic unit, the control lines, f0 and f1, determine which operation is to be
performed by the CPU. The signal 00 is used for addition (A+B); 01 for NOT A; 10 for A OR B;
and 11 for A AND B. C is the output.
6. Sequential Circuits
--The major weakness of combinational circuits is that there is no concept of
storage—memoryless.
a) Basic Concepts
--flip flop-the storage element
b) Clocks
--Some sequential circuits are asynchronous, which means they become active the moment
any input value changes.
--Synchronous sequential circuits use clocks to order events.
--A clock is a circuit that emits a series of pulses with a precise pulse width and a precise
interval between consecutive pulses. This interval is called the clock cycle time.
(can be used to generate 010101… clock frequency)
c) Flip-Flops
--A level-triggered circuit is allowed to change state whenever the clock signal is either high
or low.
--A latch is level triggered, whereas a flip-flop is edge triggered.
--SR flip-flop (set/reset) PICTURE
--JK (Jack Kilby) flip-flop
--D (data) flip-flip
See ece2072 for more details
e) Finite State Machines (FSM)
--An equivalent graphical depiction of characteristic tables for the behavior of flip-flops and
sequential circuits
--Moore machine: circle=state, bracket=output, arcs=transition, (output with state)
--Mealy machine: circle=state, arcs=transition, (output with transition)
--In the actual implementation of either a Moore or Mealy machine, two thins are required:
a memory (register) to store the current state and combinational logic components that
control the output and transitions from one state to another.
(Block diagram for Moore and Mealy machines)
--Algorithm state machine (ASM), consists of blocks that contain a state box, a label, and
optionally condition and output boxes.
--Each has at least one entry and one exit. Moore type outputs are indicated inside the state
block; Mealy-type outputs are indicated in the oval output ‘box’. If a signal is asserted when
‘high’, its is prefixed with an H, otherwise, it is prefixed with an L. If the signal is asserted
immediately, it is also prefixed with an I; otherwise, the signal asserts at the next clock cycle.
The input conditions that cause changes in state are expressed by elongated, six-sided
polygons called condition boxes.
--ASM for microwave oven: PICTURE
--Hardware-free Machines: Moore and Mealy machines are only two of many different types
of finite state machines that you will encounter in computer science literature. Finite state
machines are just a different way of thinking about the computer and computation.
--An understanding of FSMs is essential in the study of programming languages, compilers,
the theory of computation, and automata theory. We refer to these abstractions as
machines because machines are devices that respond to a set of stimuli (events) by
generating predictable responses (actions) based on a history of prior events (current state).
One of the most important of these is the deterministic finite automata (DFA) computational
model.
--Formally speaking, a DFA, M, is completely described by the quintuple M=(Q,S,Σ,σ,F)
where:
- Q is a finite set of states that represents every configuration the machine can assume
- S is an element of Q that represents the start state, which is the initial state of the
machine before it receives any inputs
- Σ is the input alphabet or set of events that the machine will recognize
- σ is a transition function that maps a state in Q and a letter from the input alphabet to
another state in Q
- F is a set of states (elements of Q) designated as the final (or accepting) states.
f) Examples of Sequential Circuits
--Latches and flip-flops are used to implement more complex sequential circuits. Registers,
counters, memories, and shift registers all require the use of storage and are therefore
implemented using sequential logic.
--Logically Speaking, How’d They Do That?-Logic families
i) TTL (transistor-transistor logic)
ii) NMOS
iii) CMOS
iv) ECL
v) BiCMOS
g) An Application of Sequential Logic: Convolutional Coding and Viterbi Detectioin
--Several coding methods employed in data storage and communication.
i) Partial response maximum likelihood (PRML) encoding method. The salient feature of
the decoding process is that only certain bit patterns are valid.
ii) Viterbi decoder, reads the bits that have been output by a convolutional encoder and
compares the symbol stream read with a set of ‘probable’ symbol streams. The one
with the least error is selected for output.
iii) Hamming code, a type of forward error correction that uses blocks of data (or block
coding) to compute the necessary redundant bits.
iv) Convolutional coding, a method that operates on an incoming serial bit stream
(including redundant bits) that enables it to correct errors continuously. A convolutional
code is an encoding process whereby the output is a function of the input and some
number of bits previously received.
--PICTURES: Convolutional Encoder for PRML; Stepping Through Four Clock Cycles of a
Convolutional Encoder; Characteristic Table for the Convolutional Encoder; Mealy Machine
for the Convolutional Encoder; Trellis Diagram Illustrating State Transitions for a Sequence;
Trellis Diagram Illustraing Hamming Errors for the Sequence.
7. Designing Circuits
--Digital logic design requires someone not only familiar with digital logic, but also well
versed in digital analysis (analyzing the relationship between inputs and outputs), digital
synthesis (starting with a truth table and determining the logic diagram to implement the
given logic function), and the use of computer-aided design (CAD) software.
--It is easier to write a program than it is to design the hardware necessary to implement the
algorithm. However, there are situations in which the hardware implementation is better (eg.
a real-time system, the hardware implementation is faster and faster is better)
Focus on Karnaugh Maps
A1. Introduction
--Minimizing circuits help to reduce the number of components in the actual physical
implementation.
A2. Description for Kmaps and Terminology
--Karnaugh maps are a graphical way to represent Boolean functions.
A3. Kmap Simplification for Two Variables
A4. Kmap Simplification for Three Variables
A5. Kmap Simplification for Four Variables
(NOTE: There is another way to construct Kmap, that is, a 3D Kmap)
A6. Don’t Care Conditions
--Don’t Care can be used as 0 or 1 to simplify the Kmaps.
Chapter 4—MARIE: An Introduction to a Simple Computer
1. Introduction
--MARIE-a Machine Architecture that is Really Intuitive and Easy; overview of Intel and MIPs
machines to reflecting the CISC and RISC design philosophies
2. CPU Basics and Organization
--Central Processing Unit (CPU) is responsible for fetching program instructions, decoding
each instruction fetched, and performing the indicated sequence of operations on the
correct data.
--CPU can be divided into two pieces:
i) Datapath, a network of storage units (registers) and arithmetic and logic units (for
performing various operations on data) connected by buses (capable of moving data
from place to place) where the timing is controlled by clocks.
ii) Control unit, a module responsible for sequencing operations and making sure the
correct data are where they need to be at the correct time.
a) The Registers
--register, a hardware device that stores binary data. (D flip-flops, 16bits, 32bits, 64bits)
--registers has different types: registers to shift values, registers to compare, registers to
store information etc.
--Pentium architecture has a data register set and an address register set.
--Certain architectures have very large sets of registers that can be used in quite novel ways
to speed up execution of instructions.
b) The ALU
--Arithmetic logic unit (ALU), carries out the logic operations (eg. comparisons) and
arithmetic operations (eg. add) required during the program execution.
--Operations performed in the ALU often affect bits in the status register (bits are set to
indicate actions such as whether an overflow has occurred)
--The ALU knows which operations to perform because it is controlled by signals from the
control unit.
c) The Control Unit
--Control unit, is the ‘traffic manager’ of the CPU. It monitors the execution of all
instructions and the transfer of all information.
--The control unit extracts instructions from memory, decodes these instructions, making
sure data are in the right place at the right time, tells the ALU which registers to use, services
interrupts, and turns on the correct circuitry in the ALU for the execution of the desired
operation.
--The control unit uses a program counter register to find the next instruction for execution
and a status register to keep track of overflows, carries, borrows and the like.
3. The Bus
--A bus, is a set of wires that acts as a shared but common datapath to connect multiple
subsystems within the system.
--The speed of the bus is affected by its length as well as by the number of devices sharing it.
--Devices are usually divided into master and slave categories; a master device is one that
initiates actions and a slave is one that responds to requests by a master.
--A bus can be point-to-point, connecting two specific components or it can be a common
pathway that connects a number of devices, requiring these devices to share the bus
--Bus protocol; Data bus <contain data>; Control lines <indicate permission to use the bus>;
Address lines <indicate location>; Power lines <electric power>; Bus cycle;
Processor-memory buses; I/O buses; Backplane bus
--Bus transaction include sending an address (R/W), transferring data from memeory to a
register (memory read), and transferring data to the memory from a register (a memory
write).
--Each type of transfer for I/O from peripheral devices occurs within a bus cycle, the time
between two ticks of the bus clock.
--Bus types:
a) Processor-memory buses: short, high-speed buses that are closely matched to the
memory system on the machine to maximize the bandwidth (transfer of data) and are
usually design specific.
b) I/O buses: longer than processor-memory buses and allow for many types of devices
with varying bandwidths. These buses are compatible with many different
architectures.
c) A backplane bus is actually built into the chassis of the machine and connects the
processor, the I/O devices, and the memory (so all devices share one bus).
--Personal computers have their own terminology for buses: System bus (internal bus);
External buses (expansion buses); Local buses
--Synchronous buses are clocked, and things happen only at the clock ticks. Clock skew (drift
in the clock) has the potential to cause problems.
--Asynchronous buses, control lines coordinate the operations and a complex handshaking
protocol must be used to enforce timing. 1.ReqREAD 2. ReadyDATA 3. ACK
--In systems with more than one master device, bus arbitration is required. Bus arbitration
schemes must provide priority to certain master devices and, at the same time, make sure
lower priority devices are not starved out. They have four categories:
a) Daisy chain arbitration: This scheme uses a “grant bus” control line that is passed
down the bus from the highest priority device to the lowest priority device. This
scheme is simple but no fair.
b) Centralized parallel arbitration: Each device has a request control line to the bus, and
a centralized arbiter selects who gets the bus. Bottlenecks can result using this type of
arbitration.
c) Distributed arbitration using self-selection: This scheme is similar to centralized
arbitration but instead of a central authority selecting who gets the bus, the devices
themselves determine who has highest priority and who should get the bus.
d) Distributed arbitration using collision detection: Each device is allowed to make a
request for the bus. If the bus detects any collisions, the device must make another
request.
4. Clocks
--The CPU requires a fixed number of clock ticks to execute each instruction. Therefore,
instruction performance is often measured in clock cycles—the time between clock
ticks—instead of seconds.
--The clock frequency/clock rate/clock speed is measured in megahertz or gigahertz.
--The clock cycle time is simply the reciprocal of the clock frequency.
--Most machines are synchronous: there is a master clock signal, which ticks at regular
intervals. Registers must wait for the clock to tick before new data can be loaded.
𝑆𝑒𝑐𝑜𝑛𝑑𝑠
--𝐶𝑃𝑈 𝑡𝑖𝑚𝑒 = 𝑝𝑟𝑜𝑔𝑟𝑎𝑚 =
𝑖𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑖𝑜𝑛𝑠
𝑝𝑟𝑜𝑔𝑟𝑎𝑚
𝑥
𝑎𝑣𝑒𝑟𝑎𝑔𝑒 𝑐𝑦𝑐𝑙𝑒𝑠
𝑖𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑖𝑜𝑛
𝑥
𝑠𝑒𝑐𝑜𝑛𝑑𝑠
𝑐𝑦𝑐𝑙𝑒
--Bus clocks; Overlocking, where people pushes the bounds of certain system components in
an attempt to improve system performance.
5. The Input/Output Subsystem
--I/O is the transfer of data between primary memory and various I/O peripherals.
--These devices are not connected directly to the CPU. There is an interface that handles the
data transfers. This interface converts the system bus signals to and from a format that is
acceptable to the given device.
--In memory-mapped I/O, the registers in the interface appear in the computer’s memory
map and there is no real difference between accessing memory and accessing an I/O device.
This is advantageous from the perspective of speed, but it uses up memory space in the
system.
--Instruction-based I/O, the CPU has specialized instructions that perform the input and
output. Although this does not use memory space, it requires specific I/O instructions,
which implies it can be used only by CPUs that can execute these specific instructions.
Interrupts play a very important part in I/O to notify the CPU for input or output availability.
6. Memory Organization and Addressing
--Normally, memory is byte addressable, which means that each individual byte has a
unique address. It is also possible that a computer might be word addressable.
--If we wish to read a 32-bit word on a byte-addressable machine, we must make sure that
a) the word was stored on a natural alignment boundary,
b) the access starts on that boundary.
--In general, if a computer has 2N addressable units of memory, it requires N bits to uniquely
address each byte.
--Each chip addresses 2K words. Addresses for this memory must have 15 bits (32K=2 5x210
words to access). But each chip holds only 211 words. A decoder is needed to decode the
leftmost 4 bits of the address to determine which chip holds the desired address.
--A single shared memory module causes sequentialization of access. Memory interleaving,
which splits memory across multiple memory modules/banks, can be used to help relieve
this.
--With low-order interleaving, the low-order bits of the address are used to select the bank;
in high-order interleaving, the high-order bits of the address are used.
7. Interrupts
--How the CPU, buses, control unit, registers, clocks, I/O, and memory interact with
processor? Interrupts are events that alter (or interrupt) the normal flow of execution in the
system. An interrupt can be triggered: I/O requests; Arithmetic errors; Arithmetic underflow
or overflow; Hardware malfunction; User-defined break points; Page faults; Invalid
instructions; Miscellaneous.
--The actions performed for each of these types of interrupts are very different.
--An interrupt can be initiated by the user or the system, can be maskable/disable/ignored
or nonmaskable/high priority interrupt, can occur within or between instructions, may be
synchronous or asynchronous, and can result in the program terminating or continuing
execution once the interrupt is handled.
8. MARIE—Machine Architecture that is Really Intuitive and Easy
a) The Architecture--Characteristics
--Binary, two’s complement
--Stored program, fixed word length
--Word (but not byte) addressable
--4K words of main memory (12 bits per address)
--16 bit data (words have 16 bits)
--16 bit instruction, 4 for the opcode and 12 for the address
--A 16 bit accumulator (AC); …instruction register (IR); …memory buffer register (MBR)
--A 12 bit program counter (PC); … memory address register (MAR)
--An 8 bit input register; … output register
b) Registers and Buses
--Registers
i)AC: The accumulator, which holds data values. (general-purpose register)
ii)MAR: The memory address register
iii)MBR: The memory buffer register
iv)PC: The program counter
v)IR: The instruction register
vi)InREG: The input register
vii)OutREG: The output register
viii)Status/Flag register
c) Instruction Set Architecture (ISA)
--ISA is essential an interface between the software and the hardware.
--Binary instructions are called machine instructions.
--Mnemonic instructions are referred to as assembly language instructions.
d) Register Transfer Notation
--Digital systems consist of many components, including arithmetic logic units, registers,
memory, decoders, and control units. These units are interconnected by buses to allow
information to flow through the system.
--Load instruction loads the contents of the given memory location into the AC register. But,
observing from the component level, multiple ‘mini-instructions’ are being executed. First,
the address from the instruction must be loaded into the MAR. Then the data in memory at
this location must be loaded into the MBR. Then the MBR must be loaded into the AC. These
mini-instructions are called microoperations and specify the elementary operations that can
be performed on data stored in registers.
--Register transfer notation (RTN) or register transfer language (RTL): the symbolic notation
used to describe the behavior of microoperations.
--We use M[X] to indicate the actual data stored at location X in memory, and  to indicate
a transfer of information.
--Store X
--Load X; Add X; Subt X; Input; Output; Halt; Skipcond; Jump X
--RTN is sensitive to the datapath, in that if multiple microoperations must share the bus,
they must be executed in a sequential fashion, one following the other.
9. Instruction Processing
a) The Fetch-Decode-Execute Cycle: steps that a computer follows to run a program.
--MARPC; then IRM[MAR], PCPC+1; then MARIR[11-0], decode IR[15-12]; then
MBRM[MAR], execute the actual instruction.
b) Interrupts and the Instruction Cycle
--All computers provide a means for the normal fetch-decode-execute cycle to be
interrupted. Reasons: a program error; a hardware error; an I/O completion; a user interrupt;
or an interrupt from a timer set by the operating system.
--Hardware interrupts can be generated by any peripheral on the system, including memory,
the hard drive, the keyboard, the mouse, or even the modem. Instead of using interrupts,
processors could poll hardware devices on a regular basis to see if they need anything done.
However, this would waste CPU time.
--Computers also employ software interrupts/traps/exceptions used by various software
applications. Modern computers support both software and hardware interrupts by using
interrupt handlers. These handlers are simply routines (procedures) that are executed when
their respective interrupts are detected. The interrupts, along with their associated interrupt
service routines (ISRs), are stored in an interrupt vector table.
--How do interrupts fit into the fetch-decode-execute cycle? The CPU finishes execution of
the current instruction and checks, at the beginning of every fetch-decode-execute cycle, to
see if an interrupt has been generated. Once the CPU acknowledges the interrupt, it must
then process the interrupt.
--Before doing anything else, the system suspends whatever process is executing by saving
the program’s state and variable information. The device ID or interrupt request number of
the device causing the interrupt is then used as an index into the interrupt vector table,
which is kept in very low memory. The address of the interrupt service routine (address
vector) is retrieved and placed into the program counter, and execution resumes
(fetch-decode-execute cycle begins again) within the service routine. After the interrupt
service has completed, the system restores the information it saved from the program that
was running when the interrupt occurred, and program execution may resume—unless
another interrupt is detected, whereupon the interrupt is serviced as described.
--It is possible to suspend processing of non-critical interrupts by use of a special interrupt
mask bit found in the flag register. This is called interrupt masking, and interrupts that can
be suspended are called maskable interrupts. Nonmaskable interrupts cannot be suspended,
because it may cause the system enter an unstable or unpredictable state.
--Processing an Interrupt: StartInterrupt signal detectedSave variables and
registersLook up ISR address in interrupt vector tablePlace ISR address in PCBrach to
ISRStartPerform Work specific to interruptReturnRestore saved variables and
registersBranch to top of fetch-decode-execute cycle
c) MARIE’s I/O
--MARIE has two registers to handle input and output. InREG and OutREG.
10. A Simple Program
11. A Discussion on Assemblers—We prefer words and symbols over long numbers
a) What Do Assemblers Do?
--To convert assembly language (using mnemonics) into machine language (0s & 1s).
--The assembler reads a source file (assembly program) and produces an object file
(machine code)
--Labels are nice for programmers. However, they make more work for the assembler. The
assembler reads the program twice, from top to bottom each time. On the first pass, the
assembler builds a set of correspondences called a symbol table. On the second pass, the
assembler uses the symbol table to fill in the addresses and create the corresponding
machine language instructions.
--assembler directive (specify which base is to be used to interpret the value); comment
delimiter (special characters that tell the assembler/compiler to ignore all text following the
special character.
b) Why Use Assembly Language?
--To give you an idea of how the language relates to the architecture
--To optimize this 10% of the code using CPU time
--If the overall size of the program or response time is critical, assembly language often
becomes the language of choice.
--Embedded systems, to accomplish certain operations not available in a high-level language
in terms of both response performance and space-critical design. These devices are
designed to perform either a single instruction or a very specific set of instructions. They are
perfect applications for assembly language programming.
12. Extending our Instruction Set
--4 bit of opcode means 16 available unique instructions.
--Addressing mode: direct & indirect
--Example
13. A Discussion on Decoding: Hardwired Versus Microprogrammed Control
--How does the control unit really function? There are two methods by which control lines
can be set. The first approach, hardwired control, directly connects the control lines to the
actual machine instructions. The instructions are divided into fields, and bits in the fields are
connected to input lines that drive various digital logic components. The second approach,
microprogrammed control, employs software consisting of microinstructions that carry out
an instruction’s microoperations.
a) Machine Control
Connection of MARIE’s MBR to the Datapath
Add instruction:
P0P1P2P3T0: MAR X
P3P4T1: MBR M[MAR]
A0P0P1P5T2: AC AC+MBR
CrT3: [Reset the clock cycle counter]
(Timing diagram)
b) Hardwired Control
--The advantage of hardwired control is that it is very fast. The disadvantage is that the
instruction set and the control logic are tied together directly by complex circuits that are
difficult to design and modify. If someone designs a hardwired computer and later decides
to extend the instruction set, the physical components in the computer must be changed.
c) Microprogrammed Control
--Signals control the movement of bytes along the datapath in a computer system. The
manner in which these control signals are produced is what distinguishes hardwired control
from microprogrammed control. In hardwired control, timing signals from the clock are
ANDed using combinational logic circuits to raise and lower signals. In microprogrammed
control, instruction microcode produces changes in the datapath signals.
--All machine instructions are input into a special program, the microprogram, that converts
machine instructions of 0s and 1s into control signals. The microprogram is essentially an
interpreter, written in microcode, that is stored in firmware (ROM, PROM, EPROM), which is
often referred to as the control store. A microcode microinstruction is retrieved during each
clock cycle. The particular instruction retrieved is a function of the current state of the
machine and the value of the microsequencer, which is somewhat like a program counter
that selects the next instruction from the control store.
--When MARIE is booted up, hardware sets the microsequencer to point to address 0000000
of the microprogram.
MARIE’s Microinstruction Format
Microoperation Codes and Corresponding MARIE RTL
Selected Statements in MARIE’s Microprogram
14. Real-World Examples of Computer Architecture
--To allow for parameters, MARIE would need a stack, a data structure that maintains a list
of items that can be accessed from only one end.
--Last-in-first-out stack; pushing onto; popping from; stack pointer: keeps track of the
location to which items should be pushed or popped.
--Each member of the x86 family of Intel architectures is known as a CISC (complex
instruction set computer) machine, whereas the Pentium family and the MIPS architectures
are examples of RISC (reduced instruction set computer) machines.
a) Intel Architectures
--the 8086 (Intel’s first popular chip) Its CPU was split into two parts: the execution unit,
which included the general registers and the ALU, and the bus interface unit, which include
the instruction queue, the segment registers, and the instruction pointer.
--The 8066 had four 16-bit general purpose registers named AX (primary accumulator), BX
(base register used to extend addressing), CX (count register), and DX (data register). Each of
these are divided into two pieces: AH, BH, CH, DH (higher half) and AL, BL, CL, DL (lower
half)
--The 8086 also had three pointer registers: the stack pointer(SP), the base pointer(BP), the
instruction pointer(IP). Two index registers: the source index register (SI), the destination
index register (DI) for string operations. A status flags register. (each individual bit indicates
conditions.
--The program was divided into different segments: a code segment (hold the program), a
data segment (hold the data), a stack segment (hold the stack). Then there is a code
segment register (CS), a data segment register (DS), a stack segment register (SS), a fourth
segment register called the extra segment register (ES) <to handle memory addressing>.
Addresses were specified using segment/offset addressing in the form: xxx:yyy, where xxx
was the value in the segment register and yyy was the offset.
--Designers wanted these architectures to be backward compatible, that is, programs
written for a less powerful and older processor should run on the newer, faster processors.
--Evolution: 16bit32bitadded a high-speed cache memoryPentium series (stop using
numbers to name) <CPU had multiple ALUs and could issue more than one instruction per
clock cycle>Pentium Pro added branch predictionPentium II added MMX technology for
multimediatrends of moving away from CISC to RISCPentium IV implements a NetBurst
microarchitecture and hyper-pipelining instruction and hyperthreading (HT).
--Threads are tasks that can run independently of one another within the context of the
same process. A thread shares code and data with the parent process but has its own
resources, including a stack and instruction pointer. Because multiple child threads share
with their parent, threads require fewer system resources than if each were a separate
process. Systems with more than one processor take advantage of thread processing by
splitting instructions so that multiple threads can execute on the processors in parallel.
However, Intel’s HT enables a single physical processor to simulate two logical (or virtual)
processors—the operating system actually sees two processors where only one exists. HT
does this through a mix of shared, duplicated, and partitioned chip resources, including
registers, math units, counters, and cache memory.
--HT duplicates the architectural state of the processor but permits the threads to share
main execution resources. This sharing allows the threads to utilize resources that might
otherwise be idle, resulting in up to a 40% improvement in resource utilization and potential
performance gains as high as 25%.
b) MIPS Architectures
--MIPS chips used in embedded systems, in addition to computers and various computerized
toys. Cisco, a very successful manufacturer of Internet routers, uses MIPS CPUs as well.
--MIPS is a load/store architecture, which means that all instructions must use registers as
operands. NOP instructions does nothing but eat up time.
--Thirty-two 32-bit general-purpose registers numbered r0 through r31.
--Two special purpose registers, HI and LO, which hold the results of certain integer
operations. Four special-purpose floating-point control registers for use by the floating-point
unit.
--SPIM, a self-contained simulator for running MIPS R2000/R3000 assembly language
programs.
Chapter 5—A Closer Look at Instruction Set Architectures
1. Introduction
--With assembly language backgrounds, people can understand computer architecture to
write more efficient and more effective programs.
2. Instruction Formats
--Instruction sets are differentiated by:
i. Operand storage in the CPU
ii. Number of explicit operands per instruction
iii. Operand location
iv. Operations
v. Type and size of operands
a) Design Decisions for Instruction Sets
--Instruction set architectures are measured by:
i. the amount of space a program requires
ii. the complexity of the instruction set
iii. the length of the instructions
iv. the total number of instructions
b) Little Versus Big Endian
--The term endian refers to a computer architecture’s ‘byte order’, or the way the computer
stores the bytes of a multiple-byte data elements. A byte at a lower address has lower
significance. These machines are called little endian machines. Other machines store this
same two-byte integer with its most significant byte first, followed by its least significant
byte. These are called big endian machines (store the most significant byte at the lower
addresses).
--There is a trend towards big endian.
--Any program that writes data to or reads data from a file must be aware of the byte
ordering on the particular machine.
c) Internal Storage in the CPU: Stacks Versus Registers
--Once byte ordering in memory is determined, the hardware designer must make some
decisions on how the CPU should store data.
--Three choices to differentiate ISAs:
i. A stack architecture (execute instruction, LIFO/FIFO etc)
ii. An accumulator architecture (allow for short instruction)
iii. A general-purpose register (GPR) architecture (faster than memory)
--Memory-memory architectures may have two or three operands in memory, allowing an
instruction to perform an operation without requiring any operand to be in a register.
--Register-memory architectures require a mix, where at least one operand is in a register
and one is in memory.
--Load-store architectures require data to be moved into registers before any operations on
those data are performed.
--Intel and Motorola are examples of register-memory architectures; Digital Equipment’s
VAX architecture allows memory-memory operations; and SPARC, MIPS, Alpha, and the
PowerPC are all load-store machines
d) Number of Operands and Instruction Length
--Instructions on current architectures can be formatted in two ways:
i. Fixed length—Wastes space but is fast and results in better performance when
instruction-level pipelining is used
ii. Variable length—More complex to decode but saves storage space.
--Common instruction formats:
i. OPCODE only (zero addresses)
ii. OPCODE + 1 Address (usually a memory address)
iii. OPCODE + 2 Addresses (usually registers, or one register and one memory address)
v. OPCODE + 3 Addresses (usually registers, or combinations of registers and memory)
--Stack and reverse Polish notation (RPN)
Using push and pop stack instruction
--Note that as we reduce the number of operands allowed per instruction, the number of
instructions required to execute the desired code increases. This is an example of a typical
space/time trade-off in architecture design—shorter instruction but longer programs.
e) Expanding Opcodes
--Expanding opcodes represent a compromise between the need for a rich set of opcodes
and the desire to have short opcodes, and thus short instructions.
Trade opcode space for operand space
3. Instruction Types
a) Data Movement
--Data movement instructions include MOVE, LOAD, STORE, PUSH, POP, EXCHANGE, and
multiple variations on each of these.
b) Arithmetic Operations
--ADD, SUBTRACT, MULTIPLY, DIVIDE, INCREMENT, DECREMENT, and NEGATE (change sign)
c) Boolean Logic Instructions
--AND, NOT, OR, XOR, TEST, and COMPARE
d) Bit Manipulation Instructions
--Bit manipulation instructions are used for setting and resetting individual bits within a
given data word.
--In addition to shifts and rotates, some computer architectures have instructions for
clearing specific bits, setting specific bits, and toggling specific bits.
e) Input/Output Instructions
--I/O instructions vary greatly from architecture to architecture. The input (or read)
instruction transfers data from a device or port to either memory or a specific register.
--There may be separate I/O instructions for numeric data and character data.
f) Instructions for Transfer of Control
--Control instructions are used to alter the normal sequence of program execution. There
instruction include branches, skips, procedure calls, returns, and program termination.
g) Special Purpose Instructions
--Including those used for string processing, high-level language support, protection, flag
control, word/byte conversions, cache management, register access, address calculation,
no-ops, and any other instructions that don’t fit into the previous categories.
h) Instruction Set Orthogonality
--An orthogonal instruction set encompasses both independence and consistency. It makes
writing a language compiler much easier; however, orthogonal instruction sets typically have
quite long instruction words, which translate to larger programs and more memory use.
4. Addressing
a) Data Types
--Numeric data types: integer, floating-point
--Nonnumeric data types: strings, Booleans and pointers.
b) Address Mode
--Addressing modes allow us to specify where the instruction operands are located.
--Most basic addressing modes:
i. Immediate addressing—the value to be referenced immediately follows the operation
code in the instruction.
ii. Direct addressing—specifying its memory address directly in the instruction
iii. Register addressing—a register, instead of memory, is used to specify the operand.
iv. Indirect addressing—provides an exceptional level of flexibility. The bits in the
address field specify a memory address that is to be used as a pointer.
v. Register indirect addressing, works exactly the same as indirect addressing mode,
except it uses a register instead of a memory address to point to the data.
vi. Indexed addressing, an index register is used to store an offset, which is added to the
operand, resulting in the effective address of the data.
vii. Based addressing, similar except a base address register, rather than an index
register, is used.
viii. Stack addressing mode, the operand is assumed to be on the stack.
viiii. Others include: indirect indexed addressing; base/offset addressing;
auto-increment and auton-decrement modes; self-relative addressing.
5. Instruction-Level Pipelining
--Pipelining: CPUs break the fetch-decode-execute cycle down into smaller steps, where
some of these smaller steps can be performed in parallel. This overlapping speeds up
execution.
--“mini-steps”: Fetch instructionDecode opcodeCalculate effective address of
operandsFetch operandsExecute instructionStore result
--Pipelining is analogous to an automobile assembly line.
--If pipeline stages are not balanced in time, after a while, faster stages will be waiting on
slower ones.
--Suppose we have a k-stage pipeline. Assume the clock cycle time is tp, that is, it takes tp
time per stage. Assume also we have n instructions (tasks) to process. Task 1 (T1) requires
kxTp time to complete. The remaining n-1 tasks emerge from the pipeline one per cycle,
which implies a total time for these tasks of (n-1)tp. Therefore, to complete n tasks using a
k-stage pipeline requires:
Or k+(n-1) clock cycles.
--Without a pipeline, the time required is ntn cycles, where tn=kxtp. Therefore, the speedup
(time without a pipeline divided by the time using a pipeline) is:
--More stages, k increases, the better and better performance for pipeline.
--However, there is a fixed overhead involved in moving data from memory to registers. The
amount of control logic for the pipeline also increases in size proportional to the number of
stages, thus slowing down total execution.
--In addition, there are several conditions that result in “pipeline conflicts”, which keep us
from reaching the goal of executing one instruction per clock cycle. These include:
 Resource conflicts, eg. if one instruction is storing a value to memory while
another is being fetched from memory, both need to access memory. Solutions:
Priority Or Two separate pathways.
 Data dependencies, eg. arise when the result of one instruction, not yet available,
is to be used as an operand to a following instruction. Solutions: Special hardware
added to detect instructions whose source operands are destinations for
instructions further up the pipeline Or letting the compiler resolve the conflict
(reordering instruction).
 Conditional branch statements, eg branch instructions alter the flow of execution
in a program. Solutions: branch prediction (using logic to make the best guess as
to which instructions will be needed next Or Compilers (rearranging the machine
code to cause a delayed branch)
--Superscalar chips have multiple ALUs and issue more than one instruction in each clock
cycle. But the logic to keep track of hazards becomes even more complex; more logic is
needed to schedule operations than to do them. (HARD to SCHEDULE PARALLEL operations)
--The limits of dynamic scheduling have led machine designers to consider a very different
architecture, explicitly parallel instruction computers (EPIC). Large instructions that shift the
burden to compiler.
--Two extremes of parallelism: program level parallelism (PLP) and Instruction level
parallelism (ILP)
--PLP allows parts of a program to run on more than one computer. This may sound simple,
but it requires coding the algorithm correctly so that this parallelism is possible, in addition
to providing careful synchronization between the various modules.
--ILP involves the use of techniques to allow the execution of overlapping instructions.
Essentially, we want to allow more than one instruction within a single program to execute
concurrently. There are two kinds of ILP. The first type decomposes an instruction into stages
and overlaps these stages. The second kind of ILP allows individual instructions to overlap.
--In addition to pipelined architectures, superscalar, superpipelining, and very long
instruction word (VLIW) architectures exhibit ILP.
6. Real-World Examples of ISAs
a) Intel
--Intel uses a little endian, two-address architecture, with variable-length instructions.
(register-memory architecture)
--The Pentium had two parallel five-stage pipelines, called the U pipe and the V pipe, to
execute instructions. Stages for pipelines: PrefetchInstruction DecodeAddress
GenerationExecuteWrite Back.
--Pentium II increased the number of stages to 12; Pentium III increased the stages to 14 and
Pentium IV to 24.
--Nowadays, companies are trying on hardware to increase the processor cores: 1 core2
core4 core8 core16 core (eg. windows i7 at least 4 cores)
b) MIPS
--MIPS architecture is a little endian, word-addressable, three-address, fixed-length ISA.
(load and store architecture)
--MIPS processors: R2000&R3000 have five-stage pipelines; R4000&R4400 have 8-stage
superpipelines. R10000 pipeline stages depends on the functional unit through which the
instruction must pass: five stages for integer instructions, six for load/store instructions, and
seven for floating-point instructions. Both MIPS5000 and 10000 are superscalar.
--MIPS ISA with five basic types of instructions: simple arithmetic (add, XOR, shift etc), data
movement (load, store, move), control (branch, jump), multi-cycle (multiply, divide), and
miscellaneous instructions (save PC, save register on condition).
--MIPS instructions refer to instruction set sheet provided in unit ece2071
c) Java Virtual Machine
--Java is platform independent. This means that if you compile code on one architecture,
and you wish to run your program on a different architecture, you can do so without
modifying or even recompiling your code.
--After compilation, however, to execute your program, you will need a Java Virtual Machine
(JVM) for the architecture on which your program will run.
--A virtual machine is a software emulation of a real machine. It is the JVM’s responsibility to
load, check, find, and execute bytecodes at run time. (JVM for a Pentium is different from
that of a Macintosh or others)
--Bytecodes are produced when a Java program is compiled. These bytecodes then become
input for the JVM. The JVM can be compared to a giant switch (or case) statement, analyzing
one bytecode instruction at a time. Each bytecode instruction causes a jump to a specific
block of code, which implements the given bytecode instruction.
--Differently, C++ program or others (C, Ada, FORTRAN, COBOL) compiled results in a n
assembly language program that is translated to machine code. The object code produced is
for that particular architecture.
--Some languages are interpreted each time the program run such as PhP, Perl, BASIC
language etc.
--The trade-off for the platform independence of interpreted languages is slower
performance—usually by a factor of 100 times.
--P-code languages, languages that are a bit of both compiled and interpreted.
--Python, Perl, and Java are actually P-code languages, which compiled into an intermediate
form, P-code, then interpreted. It executes from 5 to 10 times more slowly than compiled
languages.
--Because the JVM is a stack machine, no general registers are provided. This lack of general
registers is detrimental to performance, as more memory references are generated. We are
trading performance for portability.
Chapter 6—Memory
1. Introduction
--Most computers are built using the Von Neumann model, which is centred on memory.
2. Types of Memory
--The speed of memory has to keep pace with the improvements of CPU, otherwise a
bottleneck.
--Improving main memory to keep pace with the CPU is actually not as critical because of
the use of cache memory. Cache memory is a small, high-speed type of memory that serves
as a buffer for frequently accessed data.
--Two basic types of memory: RAM (random access memory) and ROM (read-only memory)
--Two general types of chips used to build the bulk of RAM memory: SRAM (D flip-flop)
(faster) (more expansive) (cache) and DRAM (capacitors) (denser, less power) (main
memory)
--DRAM for main memory and SRAM for cache.
--DRAM types including: Multibank DRAM (MDRAM), Fast-Page Mode (FPM) DRAM,
Extended Data Out (EDO) DRAM, Burst EDO DRAM (BEDO DRAM), Synchronous Dynamic
Random Access Memory (SDRAM), Synchronous-Link (SL) DRAM, Double Data Rate (DDR)
SDRAM, and Direct Rambus (DR) DRAM. Types of SRAM include asynchronous SRAM,
synchronous SRAM, and pipeline burst SRAM.
--ROM is not volatile and always retains its data.
--Five basic ROM types: ROM, PROM (programmable ROM) (fuses that can be blown to
program the chip), EPROM (erasable PROM) (the entire chip must first be erased), EEPROM
(electrically erasable PROM) (can erase portions of the chip, one byte at a time).
--Flash memory is essentially EEPROM with the added benefit that data can be written or
erased in blocks, removing the one-byte-at-a-time limitation. This makes flash memory
faster than EEPROM.
3. The Memory Hierarchy
--By using a hierarchy of memories, each with different access speeds and storage capacities,
a computer system can exhibit performance above what would be possible without a
combination of the various types. The base types that normally constitute the hierarchical
memory system include registers, cache, main memory, and secondary memory.
--Cache, where data from frequently used memory locations may be temporarily stored, is
connected to a much larger main memory, which is typically a medium-speed memory. This
memory is complemented by a very large secondary memory, composed of a hard disk and
various removable media. This allows designers to create a computer with acceptable
performance at a reasonable cost.
--Terminology used when referring to this memory hierarchy:
i. Hit—The requested data reside in a given level of memory.
ii. Miss—The requested data is not found in the given level of memory.
iii. Hit rate—The percentage of memory accesses found in a given level of memory.
iv. Miss rate—The percentage of memory accesses not found in a given level of
memory.
v. Hit time—The time required to access the requested information in a given level of
memory.
vi. Miss penalty—The time required to process a miss, which includes replacing a block
in an upper level of memory, plus the additional time to deliver the requested data to
the processor.
--The memory hierarchy is functional because programs tend to exhibit a property known as
locality, in which the processor tends to access the data returned for addresses X+1, X+2,
and so on. Thus, although there is one miss to, say cache, for X, there may be several hits in
cache on the newly retrieved block afterward, due to locality.
a) Locality of Reference
--Locality of reference, the clustering of memory references into groups.
--Three basic forms of locality:
i. Temporal locality—Recently accessed items tend to be accessed again in the near
future.
ii. Spatial locality—Accesses tend to be clustered in the address space
iii. Sequential locality—Instructions tend to be accessed sequentially.
--Only a small amount of the entire memory space is being accessed at any given time, and
values in that space are being accessed repeatedly. Therefore, we can copy those values
from a slower memory to a smaller but faster memory that resides higher in the hierarchy.
4. Cache Memory
--What cache memory does? It stores data that has been accessed and data that might be
accessed by the CPU in a faster, closer memory.
--Cache memory works on the same basic principles by copying frequently used data into
the cache rather than requiring an access to main memory to retrieve the data.
--NOTE: The computer really has no way to know, a priori, what data is most likely to be
accessed, so it uses the locality principle and transfers an entire block from main memory
into cache whenever it has to make a main memory access. If the probability of using
something else in that block is high, then transferring the entire block saves on access time.
The cache location for this new block depends on two things: the cache mapping policy and
the cache size.
--The size of cache memory can vary enormously. A typical personal computer’s level 2 (L2)
cache is 256K or 512K. Level 1 (L1) cache is smaller, typically 8K or 16K. L1 cache resides on
the processor, whereas L2 cache resides between the CPU and main memory.
--Cache is not accessed by address; it is accessed by content. So cache is also called content
addressable memory or CAM.
a) Cache Mapping Schemes
--The CPU uses a specific mapping scheme that ‘converts’ the main memory address into a
cache location.
--This address conversion is done by giving special significance to the bits in the main
memory address. We first divide the bits into distinct groups we call fields. Depending on
the mapping scheme, we may have two or three fields. How we use these fields depends on
the particular mapping scheme being used. The mapping scheme determines where the
data is placed when it is originally copied into cache and also provides a method for the CPU
to find previously copied data when searching cache.
--How do we use fields in the main memory address? One field of the main memory address
points us to a location in cache in which the data resides if it is resident in cache (a cache hit),
or where it is to be placed if it is not resident (cache miss). The cache block referenced is
then checked to see if it is valid. This is done by associating a valid bit with each cache block.
A valid bit of 0 means the cache block is not valid, and we must access main memory. A valid
bit of 1 means it is valid. We then compare the tag in the cache block to the tag field of our
address. If the tags are the same, then we have found the desired cache block. At this point
we need to locate the desired word in the block; this can be done using a different portion
of the main memory address called the word field. all cache mapping schemes require a
word field; however, the remaining fields are determined by the mapping scheme.
--Three main cache mapping scheme:
i. Direct Mapped Cache—using a modular approach
--Direct mapping maps block X of main memory to block Y of cache, mod N, where N is
the total number of blocks in cache.
--How CPU knows which block actually resides in cache block 0 any given time? The
answer is that each block is copied to cache and identified by the tag previously
described.
--The word field/offset field uniquely identifies a word from a specific block; Block field
selects a unique block of cache. The tag field is whatever left over.
ii. Fully Associated Cache
--Associative memory, allowing a main memory block to be placed anywhere in cache.
The only way to find a block mapped this way is to search all of cache. A single search
must compare the requested tag to all tags in cache to determine whether the desired
data block is present in cache. Associative memory requires special hardware to allow
associative searching and is, thus, quite expensive.
--With direct mapping, if a block already occupies the cache location where a new block
must be placed, the block currently in cache is removed (it is written back to main
memory if it has been modified or simply overwritten if it has not been changed). With
fully associative mapping, when cache is full, we need a replacement algorithm to
decide which block we wish to throw out of cache (called victim block). Algorithm such
as FIFO can be used.
iii. Set Associated Cache
--Owing to its speed and complexity, associative cache is very expensive. Although
direct mapping is inexpensive, it is very restrictive.
--N-way set associative cache mapping, combination of two approaches. The important
difference is that instead of mapping to a single cache block, an address maps to a set
of several cache blocks. All sets in cache must be the same size. This size can vary from
cache to cache.
b) Replacement Policies
--Replacement, the existing block is kicked out of cache to make room for the new block.
--Replacement Policies, the algorithm for determining replacement.
--Optimal algorithm: to keep values in cache that will be needed again soon, and throw out
blocks that won’t be needed again.
--Least recently used (LRU) algorithm, keep track of the last time each block was accessed
(assign a timestamp to the block), and select as the victim block the block that has been
used least recently.
--First in, first out (FIFO), the block has been in cache the longest would be removed.
--Random, although it sometimes throws out data that will be needed soon, never thrashes.
(out and in constantly of a block) Unfortunately, it is hard to make truly random and it can
decrease average performance.
c) Effective Access Time and Hit Ratio
--The performance of a hierarchical memory is measured by its effective access time (EAT),
or the average time per access.
d) When Does Caching Break Down?
--If programs exhibit bad locality, caching breaks down and the performance of the memory
hierarchy is poor. In particular, object-oriented programming can cause programs to exhibit
less than optimal locality. Another example of bad locality can be seen in two-dimensional
array access. Third example would be a program that loops through a linear array that does
not fit in cache.
e) Cache Write Policies
--Two basic write policies:
i. Write-through—Updates both the cache and the main memory simultaneously on
every write. (slower)
ii. Write-back/copyback—Only updates blocks in main memory when the cache block is
selected as a victim and must be removed from cache. (faster) If a process terminates
(crashes) before the write to main memory is done, the data in cache may be lost.
--To improve the performance of cache, one must increase the hit ratio by sing a better
mapping algorithm (20% increase), better strategies for write operations (15% increase),
better replacement algorithms (10% increase), and better coding practices (30% increase),
simply increase the size of cache may improve the hit ratio by roughly 1-4% but not
guaranteed.
--NOTE: Caching and Hashing and Bits.
 Hashing is a process that allows us to store and retrieve data in an average time
that does not depend on the size of the data set we are searching. Hashing is
simply the process of putting an item into a structure by transforming a key value
into an address. A hash table is used to store the hashed values, and a hashing
function performs the key-to-address transformation.
 Collisions are handled in several ways, the easiest way is chaining. Chaining is
simply the process of creating a list of items that map to a particular location.
When a key value maps to a list, more time is required to find the item because we
have to search the entire list. Designers choose the middle bits of the physical
address of a desired value as the key in cache mapping since the higher and lower
bits could interleaving.
f) Instruction and Data Caches
--So far, we have focused mainly on what is called a unified or integrated cache, that is,
cache that holds the more recently used data and instructions.
--Many modern computers employ a Harvard cache, which means they have separate data
and instruction caches.
--A data cache is reserved for storing data only.
--High instruction cache hit rates are imperative for good performance. Most program
instructions are executed sequentially, branching only occasionally for procedure calls, loops,
and conditional statements. Therefore, program instructions tend to have high locality. Even
when a procedure is called or a loop is executed, these modules are often small enough to
fit in one block of an instruction cache, thus increasing performance.
--Victim cache, a small, associative cache used to hold blocks that have been thrown out of
the CPU cache due to conflicts.
--Trace cache, is a variant of an instruction cache, used to store instruction sequences that
have already been decoded,.
g) Levels of Cache
--Many designers are applying the concepts of levels of memory to cache itself, and they are
now using a multilevel cache hierarchy in most systems—caches are using caching for
increased performance.
--L1 cache (8KB to 64 KB); L2 cache (64KB to 2MB); L3 cache (2MB to 256MB) <between the
processor and memory which include L2 cache as part of their architecture>
--Inclusive caches, caches at different levels that allow the data to be present at multiple
levels concurrently.
--A strictly inclusive cache guarantees that all data at one level is also found in the next
lower level. Exclusive caches guarantee the data to be in at most one level of cache.
--Intel uses non-blocking cache for its L2 caches. Most caches can process only one request
at a time. Non-blocking caches can process up to four requests concurrently.
5. Virtual Memory
--Virtual memory, to use the hard disk as an extension of RAM, thus increasing the available
address space a process can use.
--Most PC have a relatively small amount of main memory (<512MB). This is usually not
enough memory to hold multiple applications concurrently.
--This area used for virtual memory on the hard drive is called a page file, because it holds
chunks of main memory on the hard drive. All addressing issues are handled by the
operating system.
--Most common way to implement virtual memory is by using paging, a method in which
main memory is divided into fixed-size blocks and programs are divided into the same size
blocks.
--Because pieces of the program can be stored out of order, program addresses, once
generated by the CPU, must be translated to main memory addresses.
--When using virtual memory, every virtual address must be translated into a physical
address.
--Terminology:
i. Virtual address—The logical or program address that the process uses. Whenever the
CPU generates an address, it is always in terms of virtual address space.
ii. Physical address—The real address in physical memory.
iii. Mapping—The mechanism by which virtual addresses are translated into physical
ones.
v. Page frames—The equal-size chunks or blocks into which main memory (physical
memory) is divided.
vi. Pages—The chunks or blocks into which virtual memory is divided, each equal in size
to a page frame. Virtual pages are stored on disk until needed.
vii. Paging—The process of copying a virtual page from disk to a page frame in main
memory.
viii. Fragmentation—Memory that becomes unusable.
viiii. Page fault—An event that occurs when a requested page is not in main memory
and must be copied into memory from disk.
--Virtual memory can be implemented with different techniques, including paging,
segmentation, or a combination of both, but paging is the most popular.
a) Paging
--Idea: Allocate physical memory to processes in fixed size chunks (page frames) and keep
track of where the various pages of the process reside by recording information in a page
table.
--Every process has its own page table that typically resides in main memory and the page
table stores the physical location of each virtual page of the process.
--If there are pages of the process currently not in main memory, the page table indicates
this by setting a valid bit to 0. Therefore, each entry of the page table has two fields: a valid
bit and a frame number.
--A dirty bit/ modify bit could be added to indicate whether the page has been changed.
--A usage bit can be added to indicate the page usage. This bit is set to 1 whenever the page
is accessed.
--Virtual memory pages are the same size as physical memory page frames. Process memory
is divided into these fixed size pages, resulting in potential internal fragmentation when the
last page is copied into memory. The process may not actually need the entire page frame,
but no other process may use it.
--How it works? When a process generates a virtual address, the operating system must
dynamically translate this virtual address, the operating system must dynamically translate
this virtual address into the physical address in memory at which the data actually resides.
--To accomplish this address translation, a virtual address is divided into two fields: a page
field and an offset field, to represent the offset within that page where the requested data is
located.
--To access data at a given virtual address, the system performs the following steps:
1. Extract the page number from the virtual address.
2. Extract the offset from the virtual address.
3. Translate the page number into a physical page frame number by accessing the page
table.
A. Look up the page number in the page table
B. Check the valid bit for that page.
1. If the valid bit=0, the system generates a page fault and the operating system
must intervene to
a. Locate the desired page on disk
b. Find a free page frame
c. Copy the desired page into the free page frame in main memory.
d. Update the page table.
e. Resume executing of the process causing the page fault, continuing to Step
B2.
2. If the valid bit=1, the page is in memory.
a. Replace the virtual page number with the actual frame number
b. Access data at offset in physical page frame by adding the offset to the
frame number for the given virtual page.
(virtual page 0 maps to physical page frame 2=102)
b) Effective Access Time Using Paging
--For each memory access that the processor generates, there must now be two physical
memory accesses—one to reference the page table and one to reference the actual data we
wish to access.
--EAT=.99(200ns+200ns)+.01(10ms)=100 396 ns (1% page fault rate); 10ms for access a page
not in memory.
--EAT=1.00(200ns+200ns)=400 ns (100% of the pages were in main memory); which is
double the access time of memory.
--We can speed up the page table lookup by storing the most recent page lookup values in a
page table cache called a translate look-aside buffer (TLB)
--When using a TLB, the steps:
i. Extract the page number from the virtual address.
ii. Extract the offset from the virtual address.
iii. Search for the virtual page number in the TLB.
iv. If the pair (virtual page #, page frame #) is found in the TLB, add the offset to the
physical frame number and access the memory location.
v. If there is a TLB miss, go to the page table to get the necessary frame number. If the
page is in memory, use the corresponding frame number and add the offset to yield the
physical address.
vi. If the page is not in main memory, generate a page fault and restart the access when
the page fault is complete.
c) Putting It All Together: Using Cache, TLBs and Paging
d) Advantages and Disadvantages of Paging and Virtual Memory
--Disadvantages: time penalty alleviated by sing a TLB to cache page table entries; extra
resource consumption (the memory overhead for storing page tables. (Virtual memory and
paging also require special hardware and operating system support.
--Advantages: programs are not restricted by the available physical memory; run individual
programs whose virtual address space is larger than physical memory so programmers not
need to worry about the physical memory space limitations; allow to run more programs at
the same time; allow to share the machine among processes whose total address space
sizes exceed the physical memory size, resulting in an increase in CPU utilization and system
throughput; fixed size of frames and pages simplifies both allocation and placement from
the perspective of the operating system; allows the operating system to specify protection
on a per page basis.
e) Segmentation
--Segmentation, a second method to implement virtual memory. Instead of dividing the
virtual address space into equal, fixed-size pages, and the physical address space into
equal-size page frames, the virtual address space is divided into logical, variable-length units,
or segments.
--Each segment has a base address, indicating where it is located in memory, and a bounds
limit, indicating its size. Each program associates with segment table, which is simply a
collection of the base/bounds pairs for each segment.
--Memory accesses are translated by providing a segment number and an offset within the
segment.
--As with paging, segmentation suffers from fragmentation, which is called external
fragmentation. To combat external fragmentation, systems use some sort of garbage
collection to simply shuffles occupied chunks of memory to coalesce the smaller,
fragmented chunks into large, usable chunks.
f) Paging Combined with Segmentation
--Paging makes the program and main memory to be divided up into the same physical size
chunks.
--Segmentation, allows for logical portions of the program to be divided into variable-sized
partitions.
--In a combined approach, the virtual address space is divided into segments of variable
length, and the segments are divided into fixed-size pages. Main memory is divided into the
same size frames.
--Each segment has a page table, which means every program has multiple page tables. The
physical address is divided into three fields. The first field is the segment field, which points
the system to the appropriate page table. The second field is the page number, which is used
as an offset into this page table. The third field is the offset within the page.
--Combined segmentation and paging is very advantageous because it allows for
segmentation from the user’s point of view and paging from the system’s point of view.
6. A Real-World Example of Memory Management
(More details see the references)
Chapter 7—Input/Output and Storage Systems
1. Introduction
--I/O devices also exchange control and status information with the host system, other than
write or read to and from the host system.
2. I/O and Performance
--More often than not, the root cause of the problem is not in the processor or the memory
but in how the system processes its input and output (I/O) <if slow performance>
3. Amdahl’s Law
--It states that the overall speedup of a computer system depends on both the speedup in a
particular component and how much that component is used by the system.
4. I/O Architectures
--I/O subsystems include, but are not limited to:
 Blocks of main memory that are devoted to I/O functions
 Buses that provide the means of moving data into and out of the system
 Control modules in the host and in peripheral devices
 Interfaces to external components such as keyboards and disks
 Cabling or communications links between the host system and its peripherals
--Interfaces handle the details of making sure that devices are ready for the next
batch of data, or that the host is ready to receive the next batch of data coming in
from the peripheral device.
--The exact form and meaning of the signals exchanged between a sender and a
receiver is called a protocol. In most data-exchanging protocols, the receiver must
acknowledge the commands and data sent to it or indicate that it is ready to
receive data. This type of protocol exchange is called a handshake.
--External devices that handle large blocks of data are often equipped with buffer
memory. Buffers allow the large quantities of data exchanged in the fastest
manner possible, without having to wait until slow mechanical devices have
actually written the data.
--Device control circuits take data to or from on-board buffers and ensure that it
gets where it’s going.
--Disk and tape are forms of durable storage, not volatile main memory.
a) I/O Control Methods
--Because of the great differences in control methods and transmission modes among
various kinds of I/O devices, it is infeasible to try to connect them directly to the system bus.
Instead, dedicated I/O modules serve as interfaces between the CPU and its peripherals.
These modules perform many functions, including controlling device actions, buffering data,
performing error detection, and communicating with the CPU.
--Computer systems employ any of four general I/O control methods, including programmed
I/O, interrupt-driven I/O, direct memory access, and channel-attached I/O.
--The manner in which a computer controls its I/O greatly influences overall system design
and performance.
i. Programmed I/O
--It is the simplest way for a CPU communication, sometimes called polled I/O.
--The CPU continually monitors (polls) a control register associated with each I/O port.
When a byte arrives in the port, a bit in the control register is set. The CPU eventually
polls the port and notices that the ‘data ready’ control bit is set. The CPU resets the
control bit, retrieves the byte, and processes it according to instructions programmed
for that port. When the processing is complete, the CPU resumes polling the control
registers as before.
--Problems: ‘busy wait’ loop; frequency of polling has limitation as some devices
requires more frequent polls.
--It is hence best suited for special-purpose systems such as automated teller machines
and embedded systems that control or monitor environmental events.
ii. Interrupt-Driven I/O
--The devices tell the CPU when they have data to send. This communication takes
place through an intermediary interrupt controller. This circuit handles interrupt signals
from all I/O devices in the system.
--Whenever an interrupt line is asserted, the controller decodes the interrupt and raises
the Interrupt (INT) input on the CPU. When the CPU is ready to process the interrupt, it
asserts the Interrupt Acknowledge (INTA) signal. Once this happens, it can lower its INT
signal. When two or more I/O interrupts occur simultaneously, the interrupt controller
determines the precedence, based on the time-criticality of the device requesting the
I/O. Keyboard and mouse I/O are usually the least critical.
--Shared interrupts cause no problems when it is clear that no two devices will need
the same interrupt at the same time.
--The new disk’s manufacturer may provide a specialized device driver program to be
kept in memory along with code for the standard devices if OS not support the new
device. Installation of the device driver code involves updating the disk I/O vector to
point to code particular to the disk drive.
iii. Direct Memory Access
--When a system uses DMA, the CPU offloads execution of tedious I/O instructions. To
effect the transfer, the CPU provides the DMA controller with the location of the bytes
to be transferred, the number of bytes to be transferred, and the destination device or
memory address. This communication usually takes place through special I/O registers
on the CPU.
--On figure below, I/O and memory share the same address space, so it is one type of
memory-mapped I/O.
--Once the proper values are placed in memory, the CPU signals the DMA subsystem and
proceeds with its next task, while the DMA takes care of the details of the I/O. After the I/O
is complete, the DMA subsystem signals the CPU by sending it another interrupt.
--Shown in the figure, the DMA controller and the CPU share the bus. Only one of them at a
time can have control of the bus, be the bus master. Generally, I/O takes priority over CPU
memory fetches for program instructions and data because many I/O devices operate within
tight timing parameters. If they detect no activity within a specified period, they timeout
and abort the I/O process. To avoid device timeouts, the DMA uses memory cycles that
would otherwise be used by the CPU. This is called cycle stealing. Fortunately, I/O tends to
create bursty traffic on the bus: data is sent in blocks, or clusters. The CPU should be granted
access to the bus between bursts, though this access may not be of long enough duration to
spare the system from accusations of ‘crawling during I/O’.
v. Channel I/O
--DMA methods are all block-oriented, interrupting the CPU only after completion (or failure)
of transferring a group of bytes. After the DMA signals the I/O completion, the CPU may give
it the address of the next block of memory to be read from or written to. In the event of
failure, the CPU is solely responsible for taking appropriate action. Thus, DMA I/O requires
only a little less CPU participation than does interrupt-driven I/O. Such overhead is fine for
small, single-user systems; however, it does not scale well to large, multi-user systems such
as mainframe computers. Most large computer systems use an intelligent type of DMA
interface known as an I/O channel. Although channel I/O is traditionally used on mainframe
computers, it is becoming common on file servers and storage networks.
--With channel I/O, one or more I/O processor control various I/O pathways called channel
paths. Channel paths for ‘slow’ devices such as terminals and printers can be combined
(multiplexed), allowing management of several of these devices through only one controller.
On IBM mainframes, a multiplexed channel path is called a multiplexor channel. Channels
for disk drives and other ‘fast’ devices are called selector channels.
--I/O channels are driven by small CPUs called I/O processors (IOPs), which are optimized for
I/O. Unlike DMA circuits, IOPs have the ability to execute programs that include
arithmetic-logic and branching instructions.
--IOPs execute programs that are placed in main system memory by the host processor.
These programs, consisting of a series of channel command words (CCWs), include not only
the actual transfer instructions, but also commands that control the I/O devices. These
commands include such things as device initializations, printer page ejects, and tape rewind
commands, to name a few. Once the I/O program has been placed in memory, the host
issues a start subchannel (SSCH) command, informing the IOP of the location in memory
where the program can be found. After the IOP has completed its work, it places completion
information in memory and sends an interrupt to the CPU. The CPU then obtains the
completion information and takes action appropriate to the return codes.
--The principal distinction between standalone DMA and the channel I/O lies in the
intelligence of the IOP. The IOP negotiates protocols, issues device commands, and
translates storage coding to memory coding, and can transfer entire fiels or groups of files
independent of the host CPU. The host has only to create the program instructions for the
I/O operation and tell the IOP where to find them.
--Like standalone DMA, an IOP must steal memory cycles from the CPU. Unlike standalone
DMA, channel I/O systems are equipped with separate I/O buses, which help to isolate the
host from the I/O operation. Thus, channel I/O is sometimes referred to as isolated I/O.
b) Character I/O Versus Block I/O
--Each key controls a small switch that closes a connection in a matrix of conductors that
runs horizontally and vertically beneath the keys. When a key switch closes, a distinct scan
code is read by the keyboard circuitry. The scan code is then passed to a serial interface
circuit, which translates the scan code into a character code. The interface places the
character code in a keyboard buffer that is maintained in low memory. Immediately
afterward, an I/O interrupt signal is raised. The characters wait patiently in the buffer until
they are retrieved—one at a time—by a program (or until the buffer is set).
<interrupt-driven I/O processing>
--Magnetic disks and tapes store data in blocks. Block I/O lends itself to DMA or channel I/O
processing. Determining an ideal block size can be an important activity when a system is
being tuned for optimum performance.
c) I/O Bus Operation

A system bus is a resource shared among many components of a computer
system.
 Access to this shared resource must be controlled. This is why a control bus is
required.
--It is evident that the memory bus and the I/O bus can be separate entities. One good
reason for having memory on its own bus is that memory transfers can be synchronous,
using some multiple of the CPU’s clock cycles to retrieve data from main memory. I/O buses,
on the other hand, cannot operate synchronously. I/O devices cannot always be ready to
process an I/O transfer. Because the handshakes of determining communication I/O device
take place every time the bus is accessed, I/O buses are called asynchronous.
--The address and data buses consist of a number of individual conductors, each of which
carries one bit of information. The number of data lines determines the width of the bus.
--To write data to the disk drive, our example bus executes the following sequence of
operations:
i. The DMA circuit places the address of the disk controller on the address lines, and
raises (asserts) the Request and Write signals.
ii. With the Request signal asserted, decoder circuits in the controller interrogate the
address lines.
iii. Upon sensing its own address, the decoder enables the disk control circuits. If the
disk is available for writing data, the controller asserts a signal on the Ready line. At this
point, the handshake between the DMA and the controller is complete. With the Ready
signal raised, no other devices may use the bus.
iv. The DMA circuits then place the data on the lines and lower the Request signal.
v. When the disk controller sees the Request signal drop, it transfers the byte from the
data lines to the disk buffer, and then lowers its Ready signal.
--A small amount of time must be allowed for the signal level to stabilize, or ‘settle down’.
This settle time, although small, contributes to a large delay over long I/O transfers.
5. Data Transmission Modes
--Bytes can be transmitted between a host and a peripheral device by sending one bit at a
time or one byte at a time. These are called, serial and parallel transmission modes.
a) Parallel Data Transmission
--At least eight data lines (one for each bit) and one line for synchronization, sometimes
called a strobe.
nStrobe
Busy
nAck
Data
--The data signal represents eight different lines. Each of these lines can be either high or
low (signal 1 or 0). The signals on these lines are meaningless (shaded in diagram) before the
nStrobe signal is asserted and after nAck is asserted.
b) Serial Data Transmission
--Serial data transmission differs from parallel data transmission in that only one conductor
is used for sending data, one bit at a time, as pulses in a single data line. Other conductors
can be provided for special signals, as defined in particular protocols.
--Serial transfer methods can also be used for time-sensitive isochronous data transfers.
Isochronous protocols are used with real-time data such as voice and video signals.
6. Magnetic Disk Technology
--History: 1956, Random Access Method of Accounting and Control computer (RAMAC)
2000, IBM, high-capacity disk drive
--Disk drives are called random (or direct) access devices because each unit of storage, the
sector, has a unique address that can be accessed independently of the sectors around it.
--Zoned-bit recording is rarely used because it requires more sophisticated drive control
electronics than traditional systems.
--Sectors are divisions of concentric circles called tracks. Every track contains the same
number of sectors.
--Sectors may not be in consecutive order around the perimeter of a track. They sometimes
‘skip around’ to allow time for the drive circuitry to process the contents of a sector prior to
reading the next sector. This is called interleaving.
a) Rigid Disk Drives
--Rigid disks contain control circuitry and one or more metal or glass disks called platters to
which a thin film of magnetizable material is bonded.
--Read/write heads are typically mounted on a rotating actuator arm that is positioned in its
proper place by magnetic fields induced in coils surrounding the axis of the actuator arm.
When the actuator is energized, the entire comb of read/write heads move towards or away
from the center of the disk.
--Two mechanisms are used to reduce errors on the surface of the disk: special coding of the
data itself and error-correcting algorithms.
--Fixed disk heads never touch the surface of the disk. Instead, they float above the disk
surface on a cushion of air only a few microns thick. When the disk is powered down, the
heads retreat to a safe place. This is called parking the heads. If a read/write head were to
touch the surface of the disk, the disk would become unusable. This condition is known as a
head crash.
--To provide the most storage for the least money, disk drives with removable disks called
disk packs are produced. (drive housing opened, airborne impurities)
--Winchester became a generic term for any sealed disk unit. (closer head-to-disk
clearances)
--Seek time, is the time it takes for a disk arm to position itself over the required track.
--The disk directory maps logical file information.
--Rotational delay is the time that it takes for the required sector to position itself under a
read/write head. The sum of the rotational delay and seek time is known as the access time.
--Transfer time is the sum of access time and time to actually read the data from the disk.
--Latency is a direct function of rotational speed.
--Because the disk directory must be read prior to every data read or write operation, the
location of the directory can have a significant effect on the overall performance of the disk
drive.
--An allocation table listing the status of each sector would therefore consume over 200
megabytes of disk space. For the reason of time and space, the operating systems address
sectors in groups, called blocks or clusters, to make file management simpler. The number of
sectors per block determines the size of the allocation table, thus the speed. (larger size thus
slower speed)
b) Flexible (Floppy) Disks
--Flexible disks are organized in much the same way as hard disks. They are often called
floppy disks because the magnetic coating of the disk resides on a flexible Mylar substrate.
--Slower rotational speed due to the fact that read/write heads must touch the magnetic
surface of the disk.
--Floppy disks are more uniform than fixed disks in their organization and operation. Sector 0
is the boot sector of the disk. If the disk is bootable, this sector contains information that
enables the system to start by using the floppy disk instead of its fixed disk. Immediately
following the boot sector are two identical copies of the file allocation table (FAT).
--A FAT is a simple table structure that keeps track of each cluster on the disk with bit
patterns indicating whether the cluster is free, reserved, occupied by data, or bad.
--When we read this file, it happens like this:
i. The disk directory is read to find the starting cluster (121). The first cluster is read to
retrieve the first part of the file.
ii. To find the rest of the file, the FAT entry in location 121 is read, giving the next data
cluster of the file and FAT entry (124)
iii. Cluster 124 and the FAT entry for cluster 124 are read. The FAT entry points to the
next data at sector 126.
iv. The data sector 126 and FAT entry 126 are read. The FAT entry points to the next
data at sector 126.
v. The data sector 122 and FAT entry 122 are read. Upon seeing the <EOF> marker for
the next data sector, the system knows it has obtained the last sector of the file.
--FAT32, 32-bit FAT, can theoretically support drive up to 2 terabytes, but more efficient
system-dependent structure are now used.
--Various vendors use a number of proprietary schemes to pack higher data densities onto
floppy disks. The most popular among these technologies are Zip drives, pioneered by the
Iomega Corporation, and there are several magneto-optical designs that combine the
rewritable properties of magnetic storage with the precise read/write head positioning
afforded by laser technology.
--For purposes of high-volume long-term data storage, however, floppy disks are quickly
becoming outmoded by the arrival of inexpensive optical storage methods and portable
flash memory such as thumb drives or memory sticks.
7. Optical Disks
--Optical disks formats: CD-ROM (compact disk-read only memory); CD-R (CD-recordable),
CD-RW (CD-rewritable) and WORM (write once read many);
--For long-term archival storage of data, some computer systems send output directly to
optical storage rather than paper or microfiche. This is called computer output laser disk
(COLD). Robotic storage libraries called optical jukeboxes provide direct access to myriad
optical disks, unlike magnetic media, can be stored for 100 years without noticeable
degradation.
a) CD-ROM
--CD-ROM are polycarbonated (plastic) disks 120mm in diameter to which a reflective
aluminum film is applied. The aluminum film is sealed with a protective acrylic coating to
prevent abrasion and corrosion.
--The photodetector converts pulses of light into electrical signals, which it sends to decoder
electronics in the drive.
--Compact disks are written from the center to the outside edge using a single spiraling track
of bumps in the polycarbonate substrate. These bumps are called pits because they look like
pits when viewed from the top surface of the CD. Lineal spaces between the pits are called
lands.
--Data is stored in 2352-byte chunks called sectors that lie along the length of the track.
Sectors are made up of 98 588-bit primitive units called channel frames.
--Channel frames consist of synchronizing information, a header, and 33 17-bit symbols for a
payload. The 17-bit symbols are encoded using an RLL(2,10) code called EFM
(eight-to-fourteen modulation). The disk drive electronics read and interpret (demodulation)
channel frames to create yet another data structure called a small frame.
--Most compact disks operate at constant linear velocity (CLV), which means that the rate at
which sectors pass over the laser remains constant regardless of whether those sectors are
at the beginning or the end of the disk.
--After an arbitrary sector is read, the head follows the track to the desired sector. Sectors
can have one of three different formats, depending on which mode is used to record the
data.
--Modes 0 and 2, intended for music recording, have no error correction capabilities. Mode
1, intended for data recording, sports tow levels of error detection and correction.
--Sessions are delimited by a 4500-sector (1 mins) lead-in that contains the table of contents
for the data contained in the session and by a 6750- or 2250-sector lead-out (or runout) at
the end.
b) DVD
--Digital versatile disks, or DVDs (digital video disks), rotate at about three times the speed
of CDs. Pits are half of the size of CD pits. Track pitch is .74 micron.
--DVD uses a 650nm laser while CD employs a 780nm laser.
c) Blue-Violet Laser Disks
--405nm wavelength of the blue-violet laser increase the recording density.
--Two format: Blu-Ray Disc format and HD-DVD format
--Sony’s Professional Disk for Data (PDD) and Plasmon’s Ultra Density Optical disks (UDO)
can store up to 23 GB and 30 GB, respectively.
d) Optical Disk Recording Methods
--Heat-sensitive dye
--Lower-powered lasers are subsequently used to read the data. The higher-power lasers
permit different—and more durable—recording methods. Three of these:
 Ablative
 Bimetallic Alloy
 Bubble-Forming
--Universal Disk Format Specification, which allows an unlimited number of recording
sessions for each disk.
--This floating table of contents, called a virtual allocation table (VAT), is written to the
lead-out following the last sector of user data written on the disk.
8. Magnetic Tape
--Magnetic tape is the oldest and most cost-effective of all mass-storage devices.
--Data was written across the tap one byte at a time, creating one track for each bit.
--Serpentine recording methods place bits on the tape in series. Instead of the bytes being
perpendicular to the edges of the tape, as in the nine-track format, they are written
‘lengthwise’ with each byte aligning in parallel with the edge of the tape.
--Digital linear tape (DLT) and Quarter Inch Cartridge systems use serpentine recording with
50 or more tracks per tape.
--Digital audio tape (DAT) and 8mm tape systems use helical scan recording. DAT systems
pass tape over a tilted rotating drum (capstan), which has two read heads and two write
heads.
--LTO: Linear Tape Open. The reliability and manageability of LTO far surpass all formats that
came before it.
--Several vendors have produced a variety of robotic devices that can catalog, fetch, and
load tapes in seconds. Robotic tape libraries/tape silos, can be found in many large data
centers. The largest robotic tape library systems have capacities in the hundreds of terabytes
and can load a cartridge at user request in less than half a minute.
--The Long Future of Tape: A good deal of money can be saved using disk-to-disk backups
instead of disk-to-tape configurations. Another idea is information lifecycle management
(ILM).
9. RAID
--RAID-‘A Case for Redundant Arrays of Inexpensive/Independent Disks’
--Both reliability and performance improvements if they would employ some number of
‘inexpensive’ small disks instead of the single large expensive disks (SLEDs) typical of large
systems.
--Each of RAID levels as well as a few hybrid systems that combine different RAID levels to
meet particular performance or reliability objectives.
--Not all storage systems are automatically protected by RAID. Those systems are often
referred to as just a bunch of disks (JBOD).
a) RAID Level 0
--RAID-0, places data blocks in stripes across several disk surfaces so that one record
occupies sectors on several disk surfaces. This method is also called drive spanning, block
interleave data striping, or disk striping.
--Because it offers no redundancy, of all RAID configurations, RAID-0 offers the best
performance, particularly if separate controllers and caches are used for each disk. It is also
very inexpensive.
--The problem with RAID-0 lies in the fact that the overall reliability of the system is only a
fraction of what would be expected with a single disk.
--RAID-0 is recommended for non-critical data that requires high-speed reads and writes,
and low cost, and is used in applications such as video or image editing.
b) RAID Level 1
--RAID-1, or disk mirroring, gives the best failure protection of all RAID schemes. Each time
data is written, it is duplicated onto a second set of drives called a mirror set, or shadow set.
This arrangement offers acceptable performance, particularly when the mirror drives are
synchronized 180 degree out of rotation with the primary drives.
--RAID-1 is best suited for transaction-oriented, high-availability environments and other
applications requiring high-fault tolerance, such as accounting or payroll.
c) RAID Level 2
--RAID-2, takes the idea of data striping to the extreme. Instead of writing data in blocks of
arbitrary size, RAID-2 writes one bit per strip.
--All drives must be synchronized and hamming code generation is time-consuming; thus
RAID-2 is too slow for most commercial implementations.
d) RAID Level 3
--RAID-3, stripes data one bit at a time across all of the data drives. It uses only one drive to
hold a simple parity bit.
--The parity calculation can be done in hardware using an XOR operation one each data bit:
e) RAID Level 4
--RAID-4 array, like RAID-3, consists of a group of data disks and a parity disk. Instead of
writing data one bit at a time across all of the drives, RAID-4 writes data in strips of uniform
size, creating a strip across all of the drives. Bits in the data strip are XORed with each other
to create the parity strip.
f) RAID Level 5
--RAID-5 is RAID-4 with the parity disks spread throughout the entire array. RAID-5 offers the
best protection for the least cost.
g) RAID Level 6
--Most of the RAID systems just discussed can tolerate at most one disk failure at a time. The
trouble is that disk drive failures in large systems tend to come in clusters. Two reasons for
this: Disk drives manufactured at approximately the same time reach the end of their
expected useful life at approximately the same time; Disk drive failures are often caused by a
catastrophic event such as a power surge.
--RAID-6 provides an economical answer to the problem of multiple disk failures. It does this
by using two sets of error-correction strips for every rank of drives. A second level of
protection is added with the use of Reed-Soloman error-correcting codes in addition to
parity.
h) RAID DP
--A relatively new RAID technique employs a pair of parity blocks that protected overlapping
sets of data blocks. This methods goes by different names: double parity RAID (RAID DP);
EVENODD; diagonal parity RAID (RAID DP); RAID 5DP; advanced data guarding RAID (RAID
ADG) and RAID-6. The general idea is that any single disk data block is protected by two
linearly independent parity functions.
--Write performance of RAID DP is still somewhat degraded from RAID 5 because of the
need for dual reads and writes, but the tradeoff is in having much improved reliability. Like
RAID-6, RAID DP can tolerate the simultaneous loss of two disk drives without loss of data.
AP1 = A1⊕A2⊕A3⊕A4; BP2= A2⊕B3⊕C4⊕DP1 =>
--The recovery of A2 is provided by the overlap of equations AP1 and BP2
i) Hybrid RAID Systems
--Sometimes RAID schemes can be combined to form a ‘new’ kind of RAID.
10. The Future of Data Storage
--The smallest possible bit cell area is reached when the thermal properties of the disk cause
encoded magnetic grains to spontaneously change their polarity, causing a 1 to change to a
0 or a 0 to a 1. This behavior is called superparamagnetism, and the bit density at which it
occurs is called the superparamagnetic limit.
--Biological materials can store data in many different ways. The ultimate data storage is
found in DNA, where trillions of different messages can be encoded within a small strand of
genetic material.
--A hologram is a three-dimensional image rendered by the manipulation of laser beams.
Credit cards and some copyrighted CDs and DVDs are emblazoned with iridescent holograms
to deter counterfeiting.
--In holographic data storage, a laser beam is divided into two separated beams, an object
beam and a reference beam. The object beam passes through a modulator to produce a
coded data pattern. The modulated object beam then intersects with the reference beam to
produce an interference pattern in the polymer recording medium. Data is recovered from
the medium when it is illuminated by the reference beam, thereby reproducing the original
coded object beam.
--Micro-electro-mechanical (MEMS) devices offer another approach to transcending the
limits of magnetic storage.
Focus On Data Compression
A1. Introduction
--Compression factor:
--Information theory: the study of data compression techniques is a branch of a larger field
of study.
--Entropy, is the measure of information content in a message. Messages with higher
entropy carry more information than the lower ones.
--The entropy of the message is the weighted average of the number of bits required to
encode each of the symbols in the message. Entropy=H, symbol=x:
--Entropy establishes a lower bound on the number of bits required to encode a message.
Specifically, if we multiply the number of characters in the entire message by the weighted
entropy, we get the theoretical minimum of the number of bits that are required to encode
the message without loss of information. Bits in addition to this lower bound do not add
information. Therefore, they are redundant. The objective of data compression is to remove
redundancy while preserving information content.
--We can quantify the average redundancy for each character contained in a coded message
of length n containing code words of length l by the formula:
--Example: HELLO WORLD! has average symbol entropy is about 3.022. To reach the
theoretical maximum entropy, we would need only 3.022 bits per character x 12
characters=36.26 or 37 bits to encode the entire message. The 8-bit ASCII version of the
message, therefore, carries 96-37 or 59 redundant bits.
A2. Statistical Coding
--The entropy metric can be used as a basis for devising codes that minimize redundancy in
the compressed message. Generally, any application of statistical compression is a relatively
slow and I/O-intensive process, requiring two passes to read the file before it is compressed
and written.
--Two passes over the file are needed because the first pass is used for tallying the number
of occurrences of each symbol. These tallies are used to calculate probabilities for each
different symbol in the source message. Values are assigned to each symbol in the source
message according to the calculated probabilities. The newly assigned values are
subsequently written to a file along with the table of values needed to decode the file—are
smaller than the original file, we say that data compression has occurred.
a) Huffman Coding
b) Arithmetic Coding
--Huffman coding falls short of optimality because it is trying to map probabilities—which
are elements of the set of real numbers—to elements of a small subset of the set of
integers.
--Arithmetic coding, the real-to-real data compression method.
--Conceptually, arithmetic coding partitions the real number line in the interval between 0
and 1 using the probabilities in the symbol set of the message. More frequently used
symbols get a larger chunk of the interval.
--Example: HELLO WORLD!
A3. Ziv-Lempel (LZ) Dictionary Systems
--1977,LZ77 compression algorithm, it uses a text window in conjunction with a look-ahead
buffer.
A4. GIF and PNG Compression
--LZW data compression, is the fundamental algorithm behind the graphics interchange
format, GIF.
--PNG, offers many improvements over GIF. PNG uses two levels of compression: first,
information is reduced using Huffman coding. The Huffman code is then followed by LZ77
compression using a 32 KB text window.
--GIF can do one thing that PNG cannot: Support multiple images in the same file, giving the
illusion of animation (albeit stiffly). To correct this limitation, the Internet community
produced the multiple-image network graphics algorithm—MNG.
A5. JPEG Compression
--Pixels contain the binary coding for the image in a form that can be interpreted by display
and printer hardware. Three bits for each color components, 29-1 different colors in total.
--Photographic images lend themselves particularly well to lossy data compression because
of the human eye’s ability to compensate for minor imperfections in graphical images.




Convert the RGB components to the domain of luminance and chrominance
(brightness)
The image is divided into square blocks of eight pixels on each side. These 64-pixel
blocks are converted from the spatial domain (x,y) to a frequency domain (I,j) using a
discrete cosine transform (DCT):
i=0, j=0 is called the DC coefficient, others are called AC coefficient.
Before the frequency matrix is compressed, each value in the matrix is divided by its
corresponding element in a quantization matrix.

Chapter 8—System Software
1. Introduction
--Although our model of a computer system places only the operating system in the “system
software” level, the study of system software often includes compilers and other utilities, as
well as a category of complex programs sometimes called middleware. Generally speaking,
middleware is a broad classification for software that provides services above the operating
system layer, but below the application program layer.
2. Operating Systems
--Operating systems provide a necessary set of functions allowing software packages to
control the computer’s hardware. Without an operating system, each program you run
would need its own driver for the video card, the sound card, the hard drive, and so on.
--Whether looked at through the eyes of the user or the lines of code of an application, the
operating system is, in essence, a virtual machine that provides an interface from hardware
to software. It deals with real devices and real hardware so the application programs and
users do not have to.
--The operating system itself is a little more than an ordinary piece of software. It differs
from most other software in that it is loaded by booting the computer and is then executed
directly by the processor. The operating system must have control of the processor, because
one of its many tasks is scheduling the processes that use the CPU. It relinquishes control of
the CPU to various application programs during the course of their execution. The operating
system is dependent upon the processor to regain control when the application either no
longer requires the CPU or gives up the CPU as it waits for other resources.
--OS has three principal tasks: Process management is perhaps the most interesting of these
three. The other two are system resource management and protection of those resources
from errant processes.
a) Operating System History
--Single-user running machineBatch processing, professional operators combined decks of
cards into batches with the appropriate instructions allowing them to be processed with
minimal intervention.
--Example: There might be a batch of FORTRAN programs and then a batch of COBOL
programs. This allowed the operator to set up the machine for FORTRAN programs, read and
execute them all, then switch to COBOL. A program called a resident monitor allowed
programs to be processed without human interaction (other than placing the decks of cards
into the card reader).
--Monitors were the precursors of modern day operating systems. The monitor started the
job, gave control of the computer to the job, and when the job was done, the monitor
resumed control of the machine.
--Timers were added to monitors to prevent one process from monopolizing the system.
With the limitation of monitor without protection, a batch job could affection pending jobs.
--Computer systems were provided with specialized hardware, allowing the computer to
operate in either monitor mode or user mode.
--Increasing in CPU performance made punched card batch processing increasingly less
efficient. Magnetic tape offered one way to process decks faster. Timers were added to jobs
to allow for brief interruptions so the monitor could send pending I/O to the tape units. This
allows I/O and CPU computations to occur in parallel. This process known as Simultaneous
Peripheral Operation Online, or SPOOLing, and it is the simplest form of multiprogramming.
--Example: Card readers and printers were connected to smaller computers, which were
used to read decks of cards onto tape. One tape might contain several jobs. This allowed the
mainframe CPU to continually switch among processes without reading cards. The output
was written to tape, which was then removed and put on a smaller computer that
performed the actual printing. Timers used for monitor to periodically check whether an I/O
operation was needed.
--Multiprogramming systems extend the idea of spooling and batch processing to allow
several executing programs to be in memory concurrently. This is achieved by cycling
through processes, allowing each one to use the CPU for a specific slice of time.
--Monitors were able to handle multiprogramming to a certain extent. They could start jobs,
spool operations, perform I/O, switch between user jobs, and give some protection between
jobs. However, the monitor’s job was becoming more complex, necessitating software that
was more elaborate. Monitors evolved into the software—Operating Systems.
--Time-sharing systems allowed for users to submit their own jobs interactively, and get
immediate feedback. (Batch processing soon out-moded) In a timesharing system, the CPU
switches between user sessions very quickly, giving each user a small slice of processor time.
This procedure of switching between processes is called context switching. The operating
system performs these context switches quickly, in essence, giving the user a personal
virtual machine.
--The introduction of multiprogramming and timesharing required more complex operating
system software. During a context switch, all pertinent information about the currently
executing process must be saved, so that when the process is scheduled to use the CPU
again, it can be restored to the exact state in which it was interrupted. This requires that the
operating system know all the details of the hardware.
--Vacuum tubes and relaysTransistors with increase in speed and CPU capacityBatch
processing
(monitors
helped
with
processing,
protection
and
handling
interrupts)Integrated Circuits (spooling alone could not keep the CPU busy, so timesharing
was introduced) (virtual memory and multiprogramming necessitated a more sophisticated
monitor which evolved into an operating system)VLSI, allowed for the personal computing
market to flourish (Network operating systems and distributed systems are an outgrowth of
this technology) (minimization of circuitry allows more room for circuits that manage
pipelining, array processing, and multiprocessing)
--Early OSs were divergent in design. Although each computer in the 360 family of machines
differed greatly in performance and intended audience, all computers ran the same basic
operating system, OS/360.
--Unix is another operating system that exemplifies the idea of one operating system
spanning many hardware platforms. Because assembly languages are hardware specific, any
code written for one platform must be rewritten and assembled for a different platform.
Thompson was discouraged by the thought of rewriting his Unix code for different machines.
With the intention of sparing future labor, he created a new interpreted high-level language
called B. it turned out that B was too slow. Dennis Ritchie joined Thompson to develop the C
programming language, releasing the first C compiler in 1973. Because it was written in a
high-level language and could be compiled for different platforms, Unix was highly portable.
Real-time, Multiprocessor, and Distributed/Networked Systems
--Real-time systems are used for process control in manufacturing plants, assembly
lines, robotics, and complex physical systems such as the space station etc. Real-time
systems have severe timing constraints.
--In hard real-time systems, there can be no errors. In soft real-time systems, meeting
deadlines is desirable, but does not result in catastrophic results if deadlines are
missed.
--Multiprocessor systems present their own set of challenges, because they have more
than one processor that must be scheduled. The manner in which the operating system
assigns processes to processors is a major design consideration. The CPUs cooperate
with each other to solve problems, working in parallel to achieve a common goal.
Coordination of processor activities requires that they have some means of
communicating with one another.
--Tightly coupled multiprocessors share a single centralized memory, which requires
that an operating system must synchronize processes very carefully to ensure
protection. Symmetric multiprocessors (SMPs) are a popular form of tightly coupled
architecture. These systems have multiple processors that share memory and I/O
devices.
--Loosely coupled multiprocessors have a physically distributed memory and are known
as distributed systems. It can be viewed in two ways:
 A distributed collection of workstations on a LAN, each with its own operating
system, is typically referred to as a networked system. These systems were
motivated by a need for multiple computers to share resources.
--Real-time systems as well as embedded systems require an operating system of
minimal size and minimal resource utilization. Wireless network, which combine the
compactness of embedded systems with issues characteristic of networked systems,
have also motivated innovations in operating systems design.
Operating Systems for Personal Computers
--Operating systems for personal computers have one main objective: make the system
user friendly.
--Kildall: CP/M=Control Program for Microcomputers. The BIOS (basic input/output
system) allowed CP/M to be exported to different types of PCs easily because it provide
the necessary interactions with input/output devices. Because the I/O devices are the
most likely components to vary form system to system, by packaging the interfaces for
these devices into one module, the actual operating systems could remain the same for
various machines. Only the BIOS had to be altered.
--The deal ended up going to Microsoft with Kildall, which had purchased a disk-based
operating system named QDOS (Quick and Dirty Operating System) from the Seattle
Computer Products Company for $15000. The software was renamed MS-DOS, and the
rest is history.
--Alan Key, inventor of the GUI (graphical user interface), and Doug Engelbart, inventor
of the mouse, both of Xerox Palo Alto Research Center, changed the face of operating
systems forever when their ideas were incorporated into operating systems. Through
their efforts, command prompts were replaced by windows, icons, and drop-down
menus.
--Microsoft popularized these ideas through its Windows series of operating systems.
The Macintosh graphical operating system, MacOS, which preceded the Windows GUI
by several years, has gone through numerous versions as well. Unix is gaining
popularity in the personal computer world through Linux and OpenBSD. There are
many other disk operating systems, but none are as popular as Windows and the
numerous variants of Unix.
b) Operating System Design
--An operating system differs from most other software in that it is event driven, meaning it
performs tasks in response to commands, application programs, I/O devices, and interrupts.
--Four main factors drive operating system design: performance, power, cost and
compatibility.
--Two components are crucial in operating system design: the kernel and the system
programs. The kernel is the core of the operating system. It is used by the process manager,
the scheduler, the resource manager, and the I/O manager. The kernel is responsible for
scheduling, synchronization, protection/security, memory management, and dealing with
interrupts.
--Two extremes of kernel design are microkernel architectures and monolithic kernels.
Microkernels provide rudimentary operating system functionality, relying on other modules
to perform specific tasks, thus moving many typical operating system services into user
space. This permits many services to be restarted or reconfigured without restarting the
entire operating system. Microkernels can be customized and ported to other hardware
more easily than monolithic kernels. However, additional communication between the
kernel and the other modules is necessary, often resulting in a slower and less efficient
system. (Windows 2000, Mach, QNX)
Monolithic kernels provide all of their essential functionality through a single process.
Consequently, they are significantly larger than microkernels. It interacts directly with the
hardware, so they can be optimized more easily than can microkernel operating systems. It
is for this reason that monolithic kernels are not easily portable. (Linux, MacOS, DOS)
c) Operating System Services
--In its role as an interface, the operating system determines how the user interacts with the
computer, serving as a buffer between the user and the hardware. Each of these functions is
an important factor in determining overall system performance and usability.
The Human Interface
--The operating system provides a layer of abstraction between the user and the hardware
of the machine.
--OS provides three basic interfaces, each providing a different view for a particular
individual. Hardware developers are interested in the OS as an interface to the hardware.
Applications developers view the operating system as an interface to various application
programs and services. Ordinary users are most interested in the graphical interface, which
is the interface most commonly associated with the term interface.
--OS user interface can be divided into two general categories: command line interfaces and
graphical user interfaces (GUIs). Command line interfaces provide a prompt at which the
user enters various commands, including those for copying files, deleting files, providing a
directory listing, and manipulating the directory structure. Command line interfaces require
the user to know the syntax of the system, which is often too complicated for the average
user. GUIs, on the other hand, provide a more accessible interface for the casual user.
Modern GUIs consist of windows placed on desktops. They include features such as icons
and other graphical representations of files that are manipulated using a mouse.
--Examples of command line interfaces include Unix shells and DOS. Examples of GUIs
include the various flavors of Microsoft Windows and MacOS.
--The user interface is a program, or small set of programs, that constitutes the display
manager. This module is normally separated from the core operating system functions found
in the kernel of the operating system. Most modern operating systems create an overall
operating system package with modules for interfacing, handling files, and other
applications that are tightly bound with the kernel. The manner in which these modules are
linked with one another is a defining characteristic of today’s operating systems.
Process Management
--It rests at the heart of operating system services. It includes everything from creating
processes, to scheduling processes’ use of various resources, to deleting processes and
cleaning up after their termination. The operating system keeps track of each process, its
status, the resources it is using, and those that it requires. The operating system maintains a
watchful eye on the activities of each process to prevent synchronization problems, which
arise when concurrent processes have access to shared resources. These activities must be
monitored carefully to avoid inconsistencies in the data and accidental interference.
--Most processes are independent of each other. However, in the event that they need to
interact to achieve a common goal, they rely on the operating system to facilitate their
interprocess communication tasks.
--Process scheduling is a large part of the operating system’s normal routine. First, the
operating system must determine which processes to admit to the system (called long-term
scheduling). Then it must determine which process will be granted the CPU at any given
instant (short-term scheduling). To perform short-term scheduling, the operating system
maintains a list of ready processes, so it can differentiate between processes that are
waiting one resources and those that are ready to be scheduled and run. If a running
process needs I/O or other resources, it voluntarily relinquishes the CPU and places itself in
a waiting list, and another process is scheduled for execution. This sequence of events
constitutes a context switch. During a context switch, all pertinent information about the
currently executing process is saved, so that when that process resumes execution, it can be
restored to the exact state in which it was interrupted.
--A process can give up the CPU in two ways. In nonpreemptive scheduling, a process
relinquishes the CPU voluntarily. However, if the system is set up with time slicing, the
process might be taken from a running state and placed into a waiting state by the operating
system. This is called preemptive scheduling because the process is preempted and the CPU
is taken away. Preemption also occurs when processes are scheduled and interrupted
according to priority (queuing).
--The operating system’s main task in process scheduling is to determine which process
should be next in line for the CPU. Factors affecting scheduling decisions include CPU
utilization, throughput, turnaround time, waiting time, and response time.
--Short-term scheduling approaches including: fist-come, first-served (FCFS), shortest job
first (SJF), round robin, and priority scheduling.
--In FCFS scheduling, processes are allocated processor resources in the order in which they
are requested. Control of the CPU is relinquished when the executing process terminates.
FCFS scheduling is a nonpreemtive algorithm that has the advantage of being easy to
implement. However, it is unsuitable for systems that support multiple users because there
is a high variance in the average time a process must wait to use the CPU. In addition, a
process could monopolize the CPU, causing inordinate delays in the execution of other
pending processes.
--In shortest job first scheduling, the process with the shortest execution time takes priority
over all others in the system. SJF is a provably optimal scheduling algorithm. The main
trouble with it is that there is no way of knowing in advance exactly how long a job is going
to run. Systems that employ SJF apply some heuristics in making ‘guesstimeates’, of job run
time, but these heuristics are far from perfect. SJF can be nonpreemptive or preemptive.
--Round robin scheduling is an equitable and simple preemptive scheduling scheme. Each
process is allocated a certain slice of CPU time. If the process is still running when its
timeslice expires, it is swapped out through a context switch. However, the timeslices should
not be so small that the context switch time is large by comparison.
--Priority scheduling associates a priority with each process. FCFS gives equal priority to all
processes. SJF gives priority to the shortest job. The foremost problem with priority
scheduling is the potential for starvation, or indefinite blocking.
--Some OS offer a combination of scheduling approaches.
--Multitasking (allowing multiple processes to run concurrently) and multi-threading
(allowing a process to be subdivided into different threads of control) provide interesting
challenges for CPU scheduling. A thread is the smallest schedulable unit in a system. Threads
share the same execution environment as their parent process, including its CPU registers
and page table. Because of this, context switching among threads generates less overhead
so they can occur much faster than a context switch involving the entire process.
Resource Management
--Three major resources concerned to the OS: the CPU, memory, and I/O. access to the CPU
is controlled by the scheduler. Memory and I/O access require a different set of controls and
functions. Multiple processes can share one processor, multiple programs can share physical
memory, and multiple users and files can share one disk.
-Security and Protection
3. Protected Environments
a) Virtual Machines
b) Subsystems and Partitions
c) Protected Environments and the Evolution of Systems Architecture
4. Programming Tools
a) Assemblers and Assembly
b) Link Editors
c) Dynamic Link Libraries
d) Compilers
e) Interpreters
5. Java: All of the Above
6. Database Software
7. Transaction Managers
Chapter 9—Alternative Architecture
1. Introduction
2. RISC Machines
3. Flynn’s Taxonomy
4. Parallel and Multiprocessor Architectures
a) Superscalar and VLIW
b) Vector Processors
c) Interconnection Networks
d) Shared Memory Multiprocessors
e) Distributed Computing
5. Alternative Parallel Processing Approaches
a) Dataflow Computing
b) Neutral Networks
c) Systolic Arrays
6. Quantum Computing
Chapter 10—Topics in Embedded Systems
1. Introduction
2. An Overview of Embedded Hardware
a) Off-the-Shelf Embedded System Hardware
b) Configurable Hardware
c) Custom-Designed Embedded Hardware
3. An Overview of Embedded Software
a) Embedded Systems Memory Organization
b) Embedded Operating Systems
c) Embedded Systems Software Development
Chapter 11—Performance Measurement and Analysis
1. Introduction
2. Computer Performance Equations
3. Mathematical Preliminaries
a) What the Means Mean
b) The Statics and Semantics
4. Benchmarking
a) Clock Rate, MIPS, and FLOPS
b) Synthetic Benchmarks: Whetstone, Linpack, and Dhrystone
c) Standard Performance Evaluation Corporation Benchmarks
d) Transaction Processing Performance Council Benchmarks
e) System Simulation
5. CPU Performance Optimization
a) Branch Optimization
b) Use of Good Algorithms and Simple Code
6. Disk Performance
a) Understanding the Problem
b) Physical Considerations
c) Logical Considerations
Chapter 12—Network Organization and Architecture
1. Introduction
2. Early Business Computer Networks
3. Early Academic and Scientific Networks: The Roots and Architecture of the Internet
4.
Chapter 13—Selected Storage Systems and Interfaces
Appendix A Data Structures and the Computer