Operating systems provide a software interface to make the hardware of a computer more readily usable, and to provide cost-effective use of that hardware. This course covers how key aspects of operating systems can be implemented, including: process scheduling, memory management, file systems, input/output. In addition, the history of operating systems will be discussed and how they have developed in line with advances in hardware

Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software. It encompasses techniques and procedures, often regulated by a software development process, with the purpose of improving the reliability and maintainability of software systems. The effort is necessitated by the potential complexity of those systems, which may contain millions of lines of code.