Its purpose is to enable students to become more effective programmers with the ability to deal with performance, portability and robustness challenges using an in-depth understanding of hardware and operating system capabilities and their constraints.
The material covered in this module provides the foundation for students to delve deeper into key elements of the software engineering toolkit and offers a variety of methods and techniques to employ in solving real-world problems.
Main topics of the module include:
- Introduction: history of computers, main parts of computers, fundamental concepts of computing
- Processors: main components of a CPU, the fetch-execute cycle, instruction sets
- Processes and threads: implementation, scheduling, inter-process communication, synchronisation
- Deadlocks: detection and recovery, avoidance, prevention
- Memory storage: cache, internal and external memory
- Memory management: allocation and protection, virtual memory with paging and segmentation
- Input-Output systems: bus architecture, interrupt mechanism, OMA, device drivers, disk scheduling algorithms
- File systems: access and allocation methods
- Protection and security
- Multiple processor systems
Upon successful completion of this module, you will be able to:
- understand what computers do and how they achieve this.
- understand the complexity of computer systems.
- use different levels of abstraction that are needed for distinguishing between policy and mechanism, efficiency and fairness, centralised and distributed approaches, static and dynamic phenomena.
- understand the basic paradigms for designing computer systems and how design influences performance.
- use your knowledge of the principles of computer systems for clear design and efficient implementation of larger applications.
- use your experience with specific computer organisations and operating systems to enhance your ability to reason about the performance of computer systems.
- End of term coursework (100%)