
Created a cache simulator from scratch in C with no starter code that simulated real world caches with traces, keeping track of cache hits, misses, clock cycles, etc.
Implemented Malloc, Free, Calloc, Realloc library functions with system calls. Maintained a heap with segmented explicit lists, constructing a heap consistency checker for debugging. Used various strategies to increase throughput as high as possible and reduce the internal fragmentation of the heap.
Worked with child and parent processes, signal handlers, and file descriptors to create a working shell capable of foreground and background tasks, output redirection, signal sending, and input redirection.
Used multithreading techniques, caching, sockets, and HTTP protocals to implement a web proxy that redirected traffic from the proxy to a webpage. Proxy cached recent results to increase speed, allowed for multiple clients at a time with multiple threads, and maintained the saftey of the cache with concurrent programming techniques like mutexes.