COMP0019 Computer Systems

This database contains the 2018-19 versions of syllabuses.

Note: Whilst every effort is made to keep the syllabus and assessment records correct, the precise details must be checked with the lecturer(s).

Academic session

2018-19

Module

Computer Systems

Code

COMP0019

Module delivery

1819/A6U/T2/COMP0019 Undergraduate

Related deliveries

None

Prior deliveries

COMP3007

Level

Undergraduate

FHEQ Level

L6

FHEQ credits

15

Term/s

Term 2

Module leader

Karp, Brad

Contributors

Karp, Brad

Module administrator

Ball, Louisa

Aims

The aim for this module is to have our advanced undergraduates develop a “whole-stack” understanding of the complex interactions among modern computer system hardware (specifically, a modern, multi-core CPU and its memory hierarchy), a modern operating system, and the applications that run atop them. These interactions dictate application correctness and performance. These fundamental principles will be taught in the concrete framework of the x86 CPU architecture and the Linux/UNIX operating system. Students should not only understand these fundamental principles, but be able to put them into practice in real C programs.

Learning outcomes

On successful completion of the module, a student will be able to:

  1. understand the C and Linux/UNIX programming environment, from the hardware (memory hierarchy, memory model between cores) to low-level operating system functionality (file and network I/O, process management, virtual memory system, program linking and loading);
  2. understand the interactions between hardware and the C and Linux/UNIX programming environment that affect application correctness and performance;
  3. design correct applications that perform well in the C and Linux/UNIX programming environment.

Availability and prerequisites

This module delivery is available for selection on the below-listed programmes. The relevant programme structure will specify whether the module is core, optional, or elective.

We regret that given the size of the 3rd-year undergraduate cohort, this module is not available to Affiliate Students, nor as an option to any student.

Programmes on which available:

  • BSc Computer Science (Year 3)
  • MEng Computer Science (Year 3)
  • MEng Mathematical Computation (Year 3)

Prerequisites:

There are no formal prerequsities.

Content

This module teaches students topics in computer systems design and systems programming, with an emphasis on the C programming language, Intel CPU architecture, and UNIX/Linux operating system architecture. Topics covered will include:

  • Machine-level representation of code and data (assembly language; how C constructs are compiled into x86 assembly language; machine-level representations of data types and machine and C arithmetic; stack frame structure in C on the x86; array layout in memory; pointer arithmetic)
  • Use of the gdb debugger on C code in the Linux/UNIX environment
  • Undefined behaviour in the C language specification and real C programs, and its consequences
  • The memory hierarchy: registers, L1 caches, L2 caches, L3 caches, DRAM, SSD, disk; cache architectures; performance implications of caches on program performance
  • Linking: static linking, relocatable object code, symbol resolution, loading executables, dynamic linking and shared libraries, position-independent code, interposition
  • Processes, signals, context switches, exceptions, system call error handling, job control, process creation and management
  • Virtual memory: address translation, memory mapping, dynamic memory allocation, memory-related bugs in C
  • System I/O: filesystem I/O, system call interface and semantics
  • Concurrent systems programming: threads in C on Linux/UNIX, x86 memory consistency model, races, deadlocks

An indicative reading list is available at http://readinglists.ucl.ac.uk/departments/comps_eng.html.

Delivery

The module consists of lectures, individual programming courseworks, and one-on-one office hours (available throughout the term for students to use as they deem necessary). Systems principles cannot be fully grasped by reading and listening to lectures alone; they are only truly understood in depth by applying them in the building of significant systems. The module’s five substantial programming courseworks play this role.

Assessment

This module is assessed as follows:

#

Title

Weight (%

Notes

1

Written examination (2 hrs)

60

 

2

Programming courseworks (5 in the term)

30

 

3

In-class test

10

 

In order to pass this Module Delivery, students must:

  • achieve an overall weighted Module mark of at least 40.00%;

AND, when taken as part of BSc Computer Science; MEng Computer Science, and MEng Mathematical Computation:

  • achieve a mark of at least 30.00% in any Components of assessment weighed ≥ 30% of the module.

Where a Component comprises multiple Assessment Tasks, the minimum mark applies to the overall component.