Appendix A - Principles of Systems Design

Leedehai
Friday, June 2, 2017

Computer systems: filesystems, operating systems, compilation systems, database management systems, networks, and many large software.

This course is implementation-driven, but we have to step back and look at the bigger picture.

A.1 Abstraction

Separating behavior from implementation, defining clean interface to a component or subsystem that makes using and interacting with a system much, much easier.

A.2 Modularity and layering

Subdivision of a larger system into a collection of smaller systems, which themselves can be further subdivided. Layering is a form of modularity, which is the organization of several modules that interact in some hierachical manner, where each layer typically only opens its interface to the module above and beneath it.

A.3 Naming and name resolution

Names provide a way to refer to system resources, and name resolution is a means for converting between human-friendly names to machine-oriented ones.

A.4 Caching

A cache is a component that stores data so that requests can be handled more quickly.

A.5 Virtualization:

Abstraction that make manu hardware resources look like one, or make one look like many.

A.6 Concurrency

Run in real or pseudo parallelism. Multiprocessing, multithreading, signal and intercept handlers are all examples of concurrency.

A.7 Client-server request-and-response

Request/response is a way to organize functionality into modules that have a clear set of responsibilities. We've already had some experience with the request-and-response aspect of this.

EOF