<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="../../MD.css"?>
<!DOCTYPE MD PUBLIC "http://www.cs.bham.ac.uk/modules/MD.dtd" "../../MD.dtd">


<MD code="17423" academic-yr="2008">

<LastUpdate>29 Sep 2008</LastUpdate>

<Aims>
  <Aim>introduce C/C++ to the students</Aim>
  <Aim>explain explicit pointers in C/C++</Aim>
  <Aim>describe mechanisms for packaging software for distribution</Aim>
  <Aim>explain the peculiarities of kernel programming </Aim>
  <Aim>describe an operating system kernel</Aim>
</Aims>

<Outcomes>
  <Outcome>write programs in C/C++ <Assessed>Continuous Assessment, Examination</Assessed>
  </Outcome>
  <Outcome>write programs with explicit pointer manipulation
  <Assessed>Continuous Assessment, Examination</Assessed> 
  </Outcome>
  <Outcome>package software for distribution <Assessed>Continuous Assessment, Examination</Assessed>
  </Outcome>
  <Outcome>write low level systems programs <Assessed>Continuous Assessment, Examination</Assessed>
  </Outcome>
</Outcomes>


<Restrictions>
  <P>None</P>
</Restrictions>

<Prereqs>
  <P>06-019423 and 06-19321 Software System Components 1 and 2 (or equivalent)</P>
</Prereqs>

<Coreqs>
  <P>None</P>
</Coreqs>

<Teaching>
  <P>2 hrs lectures plus 2 hour lab session per week</P>
</Teaching>

<ContactHrs>35</ContactHrs>

<Assessment>
  <Normal>1.5 hr examination (80%), continuous assessment (20%).</Normal>
  <Resit>By examination only.</Resit>
</Assessment>

<Summary>
This module presents system programming in C/C++ together with the
necessary tools like Makefiles and package managers. The module also
describes the structure of an operating system kernel and explains how to modify it.
</Summary>

<Syllabus>

<P>How to write and execute programs. </P>
<P>How to do debugging and testing.</P>
<P> Basic I/O. Makefiles. Coding conventions (including Macros) </P>
<P> Pointers: Arrays, argument passing, lists, records. </P>
<P> Bigger programs (include-files, externals) </P>
<P> Packaging programs for distribution. </P>
<P> Objects in C++. </P>
<P> Linux kernel programming. System Calls, Modules, Networking
Layer. </P>
<P> Constructing a bigger example: firewall extension. </P>

</Syllabus>

<Books>
  <Book>
    <Title>The C Programming Language</Title>
    <Author>Brian W. Kernighan, Dennis M. Ritchie</Author>
    <Publisher>Prentice Hall</Publisher>
    <Year>1998</Year>
    <Comment>By far the best book on C. Written by its inventors.</Comment>
  </Book>
  <Book>
    <Title>Object-Oriented Programming in C++: A Tutorial for Newcomers</Title>
    <Author>N. Josuttis</Author>
    <Publisher>J. Wiley and sons</Publisher>
    <Year>2002</Year>
    <Comment>An Introduction into C++</Comment>
  </Book>
  <Book>
    <Title>Understanding the Linux Kernel</Title>
    <Author>D. P. Bovet</Author>
    <Publisher>O' Reilly</Publisher>
    <Year>2000</Year>
    <Comment>A Description of the Linux Kernel</Comment>
  </Book>
</Books>

<Links>
  <P><A href="http://www.cs.bham.ac.uk/~exr/teaching/lectures/systems/08_09/">
 Module Material [2008]</A></P>
</Links>

</MD>
