CSPB 2400 - Computer Systems
*Note: This course description is only applicable for the Computer Science Post-Baccalaureate program. Additionally, students must always refer to course syllabus for the most up to date information.
- Credits: 4.0
- Prerequisites: CSPB or CSCI 2270 Data Structures with minimum grade C-. This course requires a basic understanding of the C or C++ programming language including the user of pointers.
- Minimum Passing Grade: C-
- Textbook: "Computer Systems: A Programmers Perspective", 3rd Edition, David O’Halloran and Randall Bryant (domestic, international or online edition)
[video:https://youtu.be/GTUJjlJd7jc]
Brief Description of Course Content
Covers how programs are represented and executed by modern computers, including low level machine representations of programs and data, an understanding of how computer components and the memory hierarchy influence performance.
Topics include data and program representations, computer organization effect on performance and mechanisms used for program isolation and memory management.
Specific Goals for the Course
- Explain and perform common logical operations (and, or, negation, conversion) on binary variables and binary vectors and identify and apply common boolean algebraic laws such as DeMorgan’s laws, idempotence, etc.
- An ability to translate between integer binary and decimal data, detect and identify the outcome of operations due to limited data representations (e.g. overflow), distinguish between the data representations and ranges for signed and unsigned data types.
- Translate IEEE floating point representation to and from binary and real numbers and identify the limitations of fixed-precision floating point representation.
- An ability to related compiler-generated assembly programs to the corresponding higher level language structures with sufficient ability to enable debugging high level programs. Given a machine language representation of a program compiled in a higher level language, students should be identify and describe the operation of conditional statements, loops, function calls, switch statements.
- The ability to explain how higher level language functions are implemented using the stack of an underlying machine, including how local variables are allocated, trace the execution due to recursion and identify and trace the effect of buffer-overflow of the stack.
- An ability to explain how high level program structures can be restructured to facilitate optimization for pipelined architectures and cache memory hierarchies.
- An ability to explain how computer memory is organized and represented both to the programmer and to the computer architecture by the operating system through the use of virtual memory mapping.
- An understanding of how to use asynchronous signals, concurrent programs and the programming issues that arise with such programs, such as race conditions.
- Identify and construct processes on a common computer platform, identify and perform basic synchronization between processes and understand the costs and benefits of using processes.
- An ability to explain how global memory, function-local and dynamic memory allocation is performed and the performance benefits of each form of memory allocation.
- An ability to explain how programming errors may affect program correctness, including errors in function calls, memory allocation, integer and floating point data representations.
- An ability to measure program performance and use that measured information to determine how to improve program performance.
- An ability to use a machine-level debugger and inspect the memory and register state of programs.
- Number representation in computers
- Program representation
- Computer security: stack overflows and code injection
- Computer organization and its impact on computer performance
- Memory hierarchy and its impact on computer performance and security
- Cache organization
- Processes, exceptions and signals
- Virtual and dynamic memory management
- Linking and loading programs
Boolean logic & binary