This repository includes the projects completed for the CSC 252 Computer Organization course at the University of Rochester. The projects included (1) recreating a dynamic memory allocator for C (implementing algorithms for malloc() and free()), (2) creating a simple Unix shell, (3) using spatial and temporal cache locality to optimize code, (4) understanding and implementing buffer overflow attacks, and (5) stepping through and debugging assembly code.
- Creating the dynamic memory allocator in the Malloc Lab involved allocating and deallocating memory blocks apropriately and tracking which memory spots were vacant/occupied. Furthermore, it required doing this allocation process efficiently and without causing memory fragmentation.
- The Unix Shell Lab involved writing background methods that the unix shell runs (eg parsing input, tracking processes, implementing fg and bg methods, catching signals with SIGSTOP, SIGCHILD) A handout was provided with skeleton code for the unix shell.
- The Cache Optimization Lab involved using loop unrolling, blocking, and other cache optimization techniques to minimize the number of CPE (cycles per element; a measure of computer time).
- The Buffer Overflow Lab involved writing code to do buffer overflow attacks in order to get a very detailed understanding of how the stack and heap interact and when things can go wrong.
- The <a href=”(5) The Assembly Bomb Lab involved stepping through the assembly code with the GNU debugger to understand a C program and discover the seed string that would prevent the call to an explode() method that would “explode the bomb.”