|Subject Area||Software and Information System Engineering|
|Semester||Semester 6 – Spring|
- Introduction to operating systems, OS generations, special purpose OSs.
- Structure and organization of OSs, mechanisms and policies.
- Processes and threads, process/thread life cycle, context switch.
- CPU scheduling algorithms.
- Synchronization: necessity, algorithms and implementations, famous problems.
- Deadlocks, deadlock conditions, deadlock avoidance, detection, recovery.
- Memory segmentation (1 or multiple segments), implementation mechanisms, the external fragmentation problem
- Memory paging, paging mechanisms, the internal fragmentation problems, page size selection, page tables (flat and hierarchical), the role of the Translation Lookaside Buffer (TLB).
- Using disks as a level of the memory hierarchy (swapping), swapping mechanisms, page faults.
- Page replacement policies, the Belady anomaly, cache performance, thrashing, the notion of the working set, CPU scheduling and memory management policies interaction.
- User-level memory management, policies, memory usage patterns, differences in user- and kernel-level memory management, memory release, reclamation and garbage collection.
- Disk organization, disk latencies, disk branch scheduling algorithms, SSD disks.
- File system organization, file system caching, file system cache replacement policies, cache prefetching, failures, journaling filesystems. Unix FFS filesystem, the VFS virtual file system.
- Encoding principles, RAID storage organization.
- Input/Output management, polling, interrupts, DMA
- Protection mechanisms and policies, identification, authorization, enforcement.
- Famous attacks.
- Encryption (secret/public key), digital signatures, checksums, key distribution, trusted servers, trusted computing base, key distribution hazards.
- Virtualization and resource management in virtualized environments.
- Power management at the operating system level.
The course includes a series of homeworks in which students (in groups of 2-3) have the opportunity to work on a real operating system (Linux), understand the implementation of the concepts they are taught and introduce new code and functionality to the OS (system calls / modules, CPU scheduling, memory management, disk management).
After successfully fulfilling the requirements of the course, the student is capable of:
- Knowing the main services of operating systems and the main mechanisms and policies that implement these services.
- Understandung the design space for each operating system mechanism / policy and the appreciating the advantages / disadvantages of each design decision.
- Evaluating and also predicting the interaction between the operating system and application software and the effects of this interaction to system performance.
- Identifying the implementation of policies / mechanisms taught in class in the source code of a real operating system.
- Altering the implementation of existing policies / mechanisms and add new policies / mechanisms.
- Working with large-scale software systems (such as the operating systems), using the appropriate tools (make, compiler, diffs, patches, kernel debugger, virtual machines).
- Working synergistically, in small groups and managing projects concerning large-scale software systems under specific time constraints.