COM2100 Systems Programming - Lecture Notes

  • Unit Overview

    • Introduction to COM2100 Systems Programming
    • Kate Stefanov (Lecturer) and Damien Jard (Co-lecturer)
    • Lachlan Patrick (Senior TA) will assist
  • Interactivity

    • Encouragement of questions during lectures for clarity
    • After-lecture consultations available for private queries
  • Workshops and Activities

    • Interactive mode in lectures and workshops
    • Importance of engaging with materials
    • Workshops to provide essential skills prior to project work
  • Course Content

    • Understanding how computers work:
    • Central Processing Unit (CPU)
    • Arithmetic Logic Unit (ALU)
    • Importance of memory in computing
    • Classification of memory: external vs internal
    • Introduction to programming concepts with C and assembly language
  • Learning Goals

    1. Master command line interface usage
    2. Produce system-level programming code
    3. Analyze data representation (integers, floats, etc.)
    4. Write and read assembly language (x86), identifying performance optimization
    5. Understand security implications in programming
  • Course Structure

    • Two types of labs:
    • Lab 1: C Programming
    • Lab 2: Assembly Language
    • Weekly quizzes contributing to the final grade (10% each)
  • Assessment Breakdown

    • 20% Data File Lab
    • 25% Assembly Lab
    • Midterm Exam and Final Exam % not specified
    • Weekly quizzes to monitor progression
  • Lecture Delivery

    • Lectures recorded for review (Echo360)
    • Approach will always aim for extensive interaction
    • Practical sessions also include consulting hours for extra support
  • Emphasis on Individual Work

    • Strict rules against unauthorized assistance
    • Individual assignment submissions emphasized
  • Technical Concepts

    • Overview of system architecture: OS, utility programs, language translators
    • Differences between compilers (translate entire programs) vs interpreters (execute line by line)
    • Importance of understanding binary, assembly language and machine language
  • Command Line Interface (CLI) Fundamentals

    • Basic commands: ls, pwd, cd, etc.
    • Usage of flags to modify command behavior
    • Learning UNIX/Linux commands through man manual pages
    • File handling commands: create, move, remove files
  • Introduction to Data Types in C

    • Various data types: integer, float, pointers
    • Understanding and using pointers in C for addressing memory
  • Practical Coding with C

    • Syntax and structure of printf statements
    • Distinction between C and Java syntax with respect to data types and structures
    • Learning how to debug and write efficient code in C
  • Reflection on Programming Concepts

    • Reiteration on the importance of grasping underlying machine principles for systems programming
    • C still largely used for system programming due to its efficiency and control over hardware interactions
  • Course Resources

    • Recommended textbook: "Computer Systems: A Programmer's Perspective"
    • Resources for online UNIX and C learning are available
    • Laboratory commands and due dates provided within the unit guide
  • Final Notes

    • Engaging actively is crucial for success
    • Utilize the resources and support provided throughout the semester
    • Upcoming tangible tasks include lab submissions, quizzes, and workshop attendance to solidify learning