\input ../GenCourseInfo/Preamble
\input TitleDate50
\input ../GenCourseInfo/Front1
\input ../GenCourseInfo/MustKnowNOW
\input MustKnowNOW50

\section{Prerequisite Issues}

\subsection{Official Prerequisite}

The prerequisite for this course is ECS 40 or equivalent.  This means
you must have had a two-course programming sequence, with the second
course having you write more sophisticated programs than the first, and
that you know C and C++.

\subsection{\label{strict}Prerequisities Strictly Enforced} 

\textbf{Please note that prerequisites are strictly enforced.} If you
are already enrolled but do not meet the requirements, please drop the
class immediately, as otherwise you would be dropped by the Registrar,
or get an E-NWS ({}``enrolled, no work submitted{}'') grade. The TA
would not accept any homework from you, and your Test papers would not
be graded.  Similarly, if you are on the waiting list, you would not be
allowed to enroll.

\subsection{Importance}     

Note also that the prerequisite material is likely to be used as
foundation in various Test questions.  In other words, it could happen
that you miss a Test question for lack of review of the prerequisite
material.  So, it is quite important that you make sure you have
reviewed the prerequisite material:

\subsection{ECS 40/C/C++/Unix}

This course has ECS 40 as a prerequisite. That means that you should
HAVE A WORKING KNOWLEDGE of basic programming and Unix concepts such as:

\begin{quote}

linked lists; files and directories, e.g. commands such as {\bf ls},
{\bf cd}, {\bf pwd}, {\bf chmod}; processes, e.g. use of ctrl-z, \& and
the {\bf bg/fg} and {\bf kill} commands; C library and include files;
{\bf argc/argv} command-line  variables; shell conveniences, e.g. file
name wild cards, aliases, etc.; modular  program  design,  including
separate compilation of source files; makefiles and the {\bf make}
program; pointers, \& and $*$ operators; recursion; {\bf fprintf()},
{\bf fscanf()}, and {\bf fopen()} or similar functions in C++; debugging
aids such as {\bf gdb}  

\end{quote}

\section{Course Web Page}

Information about office hours etc. is available on our course Web site,  
\url{http://heather.cs.ucdavis.edu/~matloff/50.html}.

\section{Workload}

The workload for this course, in the way I teach it, is substantial:

\begin{itemize}

\item Lots of programming: There will probably be four or five homework
assignments, all or almost all of which will involve programming, in
both C/C++ and assembly language.  It will NOT be as much programming as
in ECS 40, but please note that I require much more programming than do
other instructors of ECS 50.

\item Lots of reading:  {\bf Plan on spending three or four hours per
week, every week, on the reading.} The reading is of vital importance to
doing well on the Tests, and it must be done slowly, carefully and
thoroughly.

\end{itemize}

\section{Course Content and Goals}

\subsection{It's NOT a Programming Course}

I know that you are thinking that ECS 50 is ``the assembly language
course," treating it as being devoted to learning just another
programming language like C or C++. {\bf THIS IS NOT TRUE.}  

We definitely will do a lot of programming in this course, but AS A
MEANS OF LEARNING ABOUT COMPUTER SYSTEMS, NOT AS THE MAIN GOAL.  The
main goal is to LEARN ABOUT COMPUTER SYSTEMS.

\subsection{So, What IS This Course About, Then?}

Instead of thinking of ECS 50 as ``the assembly language course," you
should think of it as follows:

\begin{itemize}

\item it's the ``Does this PC have enough cache memory?'' course

\item it's the ``What are the basics of device drivers?'' course

\item it's the ``What can I do when my machine won't boot up?'' course

\item it's the  ``What  can  I do when my program fails to link with a
library file?" course

\item (best of all) it's the ``What should I know so that I don't look
like an idiot when I interview for a job?'' course

\end{itemize}

{\bf This course is an introduction to computer systems:}

\begin{itemize}

\item {\it computer architecture}, i.e. high-level hardware structures

\item {\it system  software},  i.e. operating systems, linkers,
compilers and so on

\end{itemize}

Again: It is certainly true that you will do a large amount of assembly
language programming in this course, but it is a means to the above
goals, not an end in itself.

%  \subsection{Stories}
%  
%  This material is absolutely fundamental, expected of anyone who
%  interviews for a job involving knowledge of computers.  Following are
%  some stories related to the importance of ECS 50 and the importance of
%  taking a ``thinking" approach to all of your courses.  The stories are
%  focused on computer science majors, but they are highly relevant
%  whatever your major is.
%  
%  \begin{itemize}
%  
%  \item A few years ago a graduating senior with a 3.9 GPA, whom I'll call
%  Student X, greatly embarrassed herself in a job interview with HP.  She
%  was asked to explain how a program gets loaded into memory for
%  execution. She answered, ``It doesn't. Programs are never in
%  memory." This was egregiously wrong, something she should have
%  learned in ECS 50. (Needless to say, the interview rapidly went
%  downhill from that point onward.)
%  
%  \item A software project manager, after seeing a project develop
%  problems, suddenly blurted out to his group of programmers, ``Most of
%  you have Master's degrees and had good grades in school, whereas I
%  just barely finished my Bachelor's with a C average. So, how come I'm
%  smarter than you?"
%  
%  \item Once a PhD student taking his final oral exam missed a very easy
%  ECS 50 question. The next day, I ran into Tom Ku, an excellent
%  undergraduate student. Even though he had taken (the equivalent of)
%  ECS 50 two years earlier, he still remembered the material, off the
%  top of his head, without review---and he understood it, not just memorized
%  it. He even said, ``How could that PhD student miss such an easy
%  question? I always thought it was interesting that one could fool the
%  CPU by using such-and-such."\footnote{This was about something called
%  {\bf memory-mapped I/O}, but the technical details are not important
%  to this story; you will learn this concept later in the course. } Tom
%  went to work for Sun Microsystems after graduation, was quickly
%  promoted and after a few years was assigned to be head of all of
%  Sun's operations in England. Later he founded several companies of his
%  own.
%  
%  \end{itemize}
%  
%  The point is that Student X simply memorized things for exams when she
%  took 50 and her other courses, as did the people working for the
%  irritated manager, while Tom Ku and the manager were really learning
%  for its own sake.
%  
%  The moral of the story is:
%  
%  \begin{itemize}
%  
%  \item In this course, you will learn many things that are not in other
%  courses, but which are considered absolutely fundamental in the real
%  world of computers. So, keep this material in mind throughout your
%  university career, and especially after you graduate.
%  
%  \item Do not just memorize. Think about the ``why" of what we are
%  doing; see if it makes common sense; be skeptical.
%  
%  \end{itemize}

\subsection{What Is Different About My Version of ECS 50} 

All instructors of a given course are supposed to cover the material
listed in the Expanded Course Description (ECD) for the course.

However, there is still plenty of room left for individuality. My
version of ECS 50 differs from those of other instructors in that:

\begin{itemize}

\item As mentioned earlier, I require more programming work than other
instructors do in this course.

\item My course uses a real machine, rather than being
simulator-based. We will be working on PCs running Linux.  This is
hugely important.

\item Though I of course cover both computer architecture and systems
software as required in the ECD, I go into extra depth on systems
software (e.g.  how programs are loaded into memory).

\item I put a lot of emphasis on how the hardware and software interact
with each other. 

\end{itemize}

\subsection{Why Linux?}

There are several important reasons why the main computing platform in
our course will be Linux:

\begin{itemize}

\item I feel strongly that it is not enough to teach this course on a
simulator. Students learn much better on a real machine, i.e. real
hardware and a real operating system (OS).

\item Linux is open source, which means that all of its ``innards" are
visible to anyone who wants to look at them. This is perfect for us, as
{\bf ECS 50 is an ``innards" course}. We will for example look at
excerpts from the actual Linux source code, which we would not be able
to do with Microsoft Windows.

\item {\bf LINUX IS IMPORTANT FOR YOUR CAREER.}   See Section
\ref{machines}.

\end{itemize}

You are very strongly urged to install Linux on your home PC, if you
don't already have it there.  See Section \ref{linuxinstall} for
information.

\section{Textbook}

The textbook is my open source book.  You can buy it at the campus
bookstore (printed at cost), or can download it at
\url{http://heather.cs.ucdavis.edu/~matloff/50/PLN/CompSystesBookS2011.pdf}.

\input ../GenCourseInfo/Machines.tex

\subsection{Linux on Your Own PC at Home}
\label{linuxinstall}

I strongly encourage you to install Linux on your PC, if you have not
already done so.  It will be especially useful in our course, since {\bf
almost all of your homework assignments will be required to be done on
Linux/Intel-family platforms.}

You cannot do this on a Mac.  Even though Linux is also available for
Macs, and even though the Mac OS is Unix-based, it is different.

Similarly, you cannot do the work for our course using Cygwin in a
Windows environment.  The CPU type would be correct, but the OS wouldn't
be.  

You {\it could} run Linux as a virtual machine, but I would recommend
against it.  Certain aspects would be different, and may result in your
missing some concepts (and points on a Test).

And remember, it's not just an issue of homework.  For example, in our
textbook chapter on operating systems, we will discuss how Linux boots
up.  This is something you would not be able to watch on CSIF, but would
see on your own PC.

Indeed, the mere act of installing and maintaining your own Linux system
will in itself greatly deepen your insight into the course---it will be
roughly the equivalent of adding 10 points to your average Exam score. 

\input ../GenCourseInfo/SyllabusCore.tex


