|
![]() |
|
||||
|
|
||||||
| Introduction | Textbooks | Communications | Grading | Assignment Overview |
This study guide provides the objectives, requirements, and timetable for this course.
Computer Science has been described as the ``mechanization of abstraction''. At the physical level computers are electronic machines that understand just two signals, a high voltage and a low voltage. We call the high voltage ``1'' and the low voltage ``0''. Thus computers are machines that perform simple computations such as arithmetic and logic operations on 1's and 0's. Every computer understands a number of instructions that are encoded as 1Ős and 0Ős and uses data that is encoded in 1's and 0's. Since it is very difficult to program using just 1's and 0's, higher level languages have been invented that are translated into 1's and 0's.
Languages such as Pascal, Scheme, and C++ enable the use of abstract instructions to create sophisticated programs. Yet every program written in one of these languages must be translated into 1's and 0's before it can be executed on a computer.
Every program that is written,then, regardless of the language and the level, must eventually be turned into machine language. This means that the abstractions that appear in higher level languages are directly related to real physical components in a machine. Thus to develop robust and efficient programs, it is essential to understand how your code will eventually be used.
This is easily evident in software that is "close to the metal", i.e. any program that contains assembly language code or that is written in C or C++. Examples include the obvious, operating systems (DOS, UNIX, OS/2, System 7, etc.) and compilers. It also includes many application programs like spreadsheets, word processors, statistical packages, etc. In all of this software, some assembly language is used, much C is used, and many machine dependencies exist.
The goal of this course is to study computer architecture. To make this study concrete, we will study RISC organizations and the MIPS architecture in particular. The course begins with a study of logic circuits. We will then discuss all aspects of a computer including memory, the CPU (control and arithmetic), buses and I/O organizations.
The objective is to understand as many architectural aspects of computers as possible.
We will work mostly at the digital logic level. Though many issues at this level are determined by lower level concepts, we do not have the time nor the need to understand the lower level concepts. Several excellent courese are offered by the physics department that cover architecture at the device level. The intension of this course is to work on abstraction levels from digital logic up to assembly language. The emphaises will be on the hardware/software interface. Thus we will examine pipelining in some detail since this is an issue that every compiler for RISC or RISC like machines (including the Pentium) must address.
Finally, we will consider parallel machines. Even though microprocessor speed increases dramatically every year, it is not increasing fast enough to satisfy the needs of modern complex software. Thus alternative architectures, especially parallel architectures, are becoming necessary and practical. We will consider some of the approaches and constraints to this approach.
You will not be an expert at either instruction set design or computer architecture at the end of the course, but you will have a good understanding of general issues and their effect on programming languages.
Warning. This is a difficult course. There are a myrid of intricate details that must be mastered. Though each detail is in itself easily grasped, the sum of details can be staggering and you will spend a lot of time on the computer completing assignments.
Computer Organization and Design, the Hardware/Software interface, 3rd ed. David A. Patterson and John L. Hennessy, Morgan Kaufmann Publishers, San Mateo, CA., 2005. This book contains the conceptual information. It will be used as the primary reference for the classroom discussions.
Grading will be based on the following events:
Problem Sets (weekly; 10-12 total; each 10 pts) 16%
Exams (2 exams, 1 final; each 100pts) 40%. Exams will take place
in class on Tuesday, 22 February and Tuesday, 29 March.
The final will be at 1:30 on Monday, 2 May.
Projects (2 total; 100pts each) 27%.
Paper or Final Project (1; 100pts) 13%.
Class Participation 4%.
Return to John Barr's Home Page
|
|
|
Last updated on
17 Jan 2005
by
John
Barr
|