Home - cbranton/computer-system-concepts GitHub Wiki

Computer System Concepts provides an integrated introduction to computer systems fundamentals. The course is intended to serve as a one semester substitute for dedicated undergraduate courses in Computer Organization and Operating Systems.

The overall purpose of the course is to give students a basic understanding of computer hardware and the software that connects the hardware to application programs. Topics include

  • basics of electricity and electronics,
  • computer architecture and major components,
  • Introduction to programming in C and C++. C and C++ are the languages of choice for system-level programming. Unlike VM-hosted languages like Java, or interpreted languages like Python, C/C++ are more tightly bound to system hardware. Learning how they work requires greater knowledge of OS service than other languages, and allows greater access to them
  • Operating system (OS) concepts and implementation techniques. The focus of the OS portion of the course is computer subsystems and their managers.
  • network theory, concepts and techniques.

Course objectives

The goal of this course is to familiarize students with the fundamentals of operating systems, computer hardware, and systems programming. Students finishing this course should be able to:

  1. Develop, compile, execute and debug simple programs using C++;
  2. Distinguish between current commonly used operating systems and their capabilities;
  3. Name and define the primary subsystems of a modern computer, and the corresponding OS management components;
  4. Utilize a command shell to accomplish common computer management tasks;
  5. List and define the primary issues of resource management and scheduling, and techniques for managing them;
  6. Understand storage of integer and floating-point numeric values;
  7. Discuss factors effecting computer system performance.

Course Materials

One objective of this course is to minimize expense for students. There is no required text. We utilize a number of open source resources instead.

We will begin by studying some of the electronics concepts used in computers. (This is optional, but has proven very helpful to students' understanding of hardware concepts. Students will need tools and components comparable to what is contained in the Elegoo Uno Super Starter Kit It is not necessary to have this particular brand or model. Anything with Arduino, bread board, LEDs, buttons, resistors, and some misc. sensors and motors will do. For example, the [official Arduino starter kit](https://store.arduino.cc/usa/arduino-starter-kit would work as well).
The tutorial manual for the Elegoo kit can be downloaded from their download page. https://www.elegoo.com/download/

Much of the electronics work is based on the first 10 lessons or so in that document.

Students will need access to a Unix-like operating system. Students using a Windows computer may wish to install the Windows Subsystem for Linux (WSL). MacOS qualifies as it is.

Resources for the course

This course is taught largely with open source materials. A list of helpful resources can be found here. We will use these as needed as references for our journey.

Sample schedule

The list of specific topics generally varies with the interests and needs of the class. A typical structure for a 16 week semester is:

Week 1-4: Hardware and electronics
Week 5-8: Memory hierarchy and executing programs
Week 9-12: Operating systems components
Week 13-16: Advanced topics

Each unit combines material on the relevant topics with hands-on experiences intended to reinforce the concepts. For example, Unit 1 features electronics exercises with Arduino microcontrollers. Unit 2 combines memory hierarchy and compiler toolchain with systems programming in C.