https://medium.com/@chetan.singh9602/basics-of-operating-systems-every-programmer-needs-to-know-ffe0ac8506ea