|Computer Systems Foundations
architecture and organization: CPU, cache, memory, input/output, bus
structures, interrupts; computer arithmetic: integer and floating
point; CPU: instruction sets, addressing modes, instruction encoding.
Input/output: programmed, interrupt-driven, block-oriented. Examples
from several modern processor families."
Lab experience: basic Intel assembly language programming
|Data Structures and Algorithms
|"In-depth experience in the
design and construction of computer programs involving data structures
and different programming paradigms. Data structures, formal
specification, abstract data types, graphs, recursion, finite state
machines and object-oriented programming."
Lab experience: linked lists, trees, hash tables, etc, in Java.
|Introductory Real-Time Systems
of event-driven systems. Review of computer organization. Assemblers
and linkers. Development of embedded applications. Programming external
interfaces, programmable timer. Input/output methods: polling,
interrupts. Real-time issues: concurrency, mutual exclusion, buffering.
Introduction to concurrent processes."
Lab experience: assembly language programming of Intel 8086 and Motorola 68HC12 CPUs, with a concentration on interrupts.
|OO Software Development
"Principles and practice of three software development paradigms with an
object-oriented programming language: developing classes from scratch,
reuse of existing classes, incremental extension of frameworks.
Development of expertise in designing, implementing, and testing
industrial-quality, reusable code."
Lab experience: design and implementation of a simple drawing program in Java using many principles of OO programming. Group of two.
|Operating Systems & Databases
"Operating systems and databases treated from a common perspective.
Management of CPU, processes, memory, files, and data. Implications of
concurrency. Concurrent programming, including interprocess
communication in distributed systems. Data models and query languages."
Lab experience: mutexes, semaphores, threads, IPC, buffers, etc., under Linux. The classic consumer/producer problem.
|Systems Analysis and Design
"Creating requirements specifications prior to designing and
implementing complex software systems. Software development lifecycles,
role of requirements analysis; functional decomposition, dataflow
modeling; database modeling, entity-relationship diagrams; finite state
machines; object-oriented analysis; use cases, use case maps; project
management; introduction to software design."
Lab experience: A lot of thinking and drawing of UML diagrams. Group of two.
|Real-Time Concurrent Systems
Principles and practice of a systems engineering approach to the
development of software for real-time, concurrent, distributed systems.
Designing to achieve concurrency, performance, and robustness, using
visual notations. Converting designs into programs. Introduction to
hard real-time systems. Team project.
Lab experience: We designed and implemented a muti-threaded TFTP server and client for transferring files. Groups of four. Except my group was a group of only two (started as three, but one dropped the course) during a compressed-time summer course. Many late nights! I've actually gotten some real-world use out of that program..
"Microprocessor-based system design for different microprocessor
families. Microprocessors: internal organization, instruction sets,
address generation, pin-outs, bus cycles, signalling waveforms.
Interfacing memory and I/O devices. Interrupt structures, direct memory
access. Floating point coprocessors. System bus standards. Introduction
Lab experience: got to play with an ancient 8086 under threats of death should it be damaged : ). Group of three.
"Simulation as a problem solving tool. Random variate generation,
general discrete simulation procedure: event table and statistical
gathering. Analyses of simulation data: point and interval estimation.
Confidence intervals. Overview of modeling, simulation, and problem
solving using SIMSCRIPT, MODSIM, and other languages."
Lab experience: Designed and implemented a call centre simulation in Java. Group of two. Quite fun.
|Distributed Network Processing
Software aspects of distributed networks. Client-server systems.
Internet and the WWW. LAN's and WAN's, routing protocols. Transportable
software, JAVA applets. Use of modern software tools in communication
network monitoring and analysis. Network management.
Lab experience: Java RMI, CORBA, mobile agents...
|Computer Systems Architecture
|"History of computers: evolution of concepts, influence of technology,
techniques to increase performance. Detailed analysis and design of
ALUs, control units, memory systems. Multiprocessor systems, pipeline
and array processing. Scalable, superscalar, RISC, CISC, fault
tolerant, and digital signal processing architectures."
"Layered protocol architectures, OSI. Physical media, physical layer
interfaces, data transmission. Data-link protocols, multiplexing,
polling. LANs, IEEE 802 standards, performance. Switched Ethernets,
FDDI, bridges. Wide area networks, packet-switching networks, X.25.
Frame relay, internetworking, DoD protocols, TCP, UDP. ATM LANs,
adaptation layers, traffic issues."
"Review of software lifecycles and requirements analysis. Software
design, with emphasis on methods for real-time systems. Testing,
verification and validation, quality assurance and control. Project
planning and management. Maintenance and configuration management.
Software reuse during design and maintenance."
More UML. Introduction to the Object Constraint Language. Open/closed strict/relaxed architecture.
|Computer Systems Design Lab
|"Developing professional-level expertise in selected, important areas of
the field by applying, honing, integrating, and extending previously
acquired knowledge in team projects in the laboratory. Lecture periods
are devoted to new knowledge required for the selected areas, to
project-related issues, and to student presentations."
Lab experience: designed and implemented an air-traffic control system for an airline using Rational Rose RealTime. Group of four.
|Circuits and Signals
|"Properties of signals. Basic
circuit elements: voltage and current sources. Kirchhoff's laws,
linearity, superposition. Thevenin and Norton's theorems. Circuit
simplification. AC steady-state analysis: impedance, admittance,
phasors, frequency response. Transient response of RL and RC circuits:
form of response, initial and final conditions. RLC circuits:
|"Boolean algebra, gate,
combinatorial circuits. DeMorgan notation, sum-of-product and
product-of-sum forms. Logic arrays, PLAs and PALs. Flip-flops, latches,
sequential circuits, state graphs and state minimization. Counters and
controllers. Hazards. Asynchronous sequential circuits, race free
One of my favourite courses: lots of logic; not so much dull memorization. "Figuring out" is so much more interesting than "calculating."
|Electronic Materials, Devices and Transmission Media
|"Review of solid-state theory,
conductors, semiconductors, superconductors, insulators, and optical
and magnetic properties. Devices used in modern high speed electronic
and communication systems: transistors, lasers, photodiodes, fiber
optics, Josephson junctions. Implications of material properties on
fabrication and operation of devices and circuits."
Lots of quantum theory. Mind bending.