Aug – Dec 2020
-
I learnt about fundamentals of systems design while completing the projects for this class.
- Specifically, I learnt how to :
- implement protocols for file transfer, using socket based API, between two multithreaded processes running on the same machine,
- implement protocols for file transfer, using shared memory based API, between two multithreaded processes running on the same machine, and
- implement remote procedure calls for file transfer in a distributed system.
-
Tools used: C, Valgrind, C++, gRPC, Protobuf, POSIX C API for multithreading, shared memory and synchronization using semaphores
- Theory concepts learnt
- Polices used by operating systems scheduler, such as,
First Come First Serve, Shortest Job First, Round Robin
- Memory managment techiques like
Paging and segmentation as well as caching policy using Least Recently Used(LRU)
- Virtualization concepts, models and techniques,
Virtual Machine Monitor/ Hypervisor responsibilites, paravirtualization, OS protection rings and modes
- Distributed File Systems and Distributed Shared Memory
consistency models such as sequential and weak, file sharing semantics like session based and periodic updates
- Cloud computing terminology
Infrastructure as a Service like Amazon EC2, Platform as a Service like Google App Engine, Software as a Service like Gmail
Selected Figures
Figure 1: Flow of control diagram, between two processes using shared memory, to showing read-write sequence implemented using
POSIX semaphores. Keyed off examples and notes here.
Figure 2: Flow of control (a)between a client and web proxy via sockets
and (b) between web proxy and a cache server using shared memory. CMQ in the figure represents a central message queue using POSIX API. SHM refers to Shared Memory.
Figure 3: Flow of Control diagram for Store command used in simple distributed file system. Locking for files prevents concurrent writes.