CSE 278 Systems I: Introduction to Systems Programming (3 credits)

Typically offered during both the fall and spring semesters.

Catalog description:

Principles of Von Neumann computer architecture through the C/C++ programming language. Data representation and computer arithmetic. Memory hierarchy. CPU structure and instruction sets. Network programming including use of sockets. Database programming through SQL.

Prerequisite: 

CSE 271

Required topics (approximate weeks allocated):

  • C/C++ (5 weeks)
    • Compilation on linux command line
    • Header files
    • Basic C/C++ syntax: if-else, while, for
    • C++ i/o -- cin, cout, printf, scanf
    • string, vector, set,unordered map, (STL)
    • algorithms – iterators, sort, search
    • pointers & references
    • dynamic memory – use shared_ptr
  • Basic computer architecture (3 weeks)
    • CPU components
    • stack, heap
    • pointers as addresses
    • registers
    • Number representation
  • Unix (Linux) tools (1.5 weeks)
    • Command Line basics
    • editing
    • Compiling tools
    • emacs, make,autoconf, package tools, profiling
    • SSH
    • keys
    • command line uses
    • scp/sftp
  • Intro to networks (2 weeks)
    • Network Overview - IP addresses, RFC1918 addresses, Ports.
    • TCP/IP Stack
    • TCP versus UDP
    • DNS
    • Socket programming in C++
  • Intro to databases (1.5 weeks)
    • Database Schemas
    • connecting to a db (command line client, phpmyadmin, c++ api
    • Intro to SQL
  • Testing (0.5 weeks)

Learning Outcomes:

1. Develop programs using a high level, systems programming language (currently C++) in a Linux environment.
2. Critique properties and characteristics of various computer architecture choices including the major components and their functions.
3. Analyze the salient aspects of machine instructions and memory addressing modes
4. Convert a high level language program to machine language, generate assembly code from high level programs using suitable tools.
5. Convert unsigned integers between the following representations: decimal, binary, and hexadecimal.
6. Demonstrate the use of compiler optimizations to improve performance (e.g., by address issues in a pipeline, etc.).
7. Use basic networking and socket programming concepts to develop a textual client-server program using sockets
8. Develop SQL statements to manipulate a simple database including the use of APIs (e.g., ODBC) to access a database from a program.
9. Use appropriate systems tools including those from a command line interface