Aim of the course
Learning the structure and principle of operation of the operating system, its components and algorithms of their operation and the programming of the basic mechanisms of the system.
1. Types and structure of operating systems. Monolithic and layered systems. Micro-kernels. 2. Construction process. State of process. Creating processes. Ancestor and descendant. Threads. Construction of thread. User-level threads. Kernel threads. Lightweight processes. Models of multi-threading. Planning algorithms for processor allocation. 3. Synchronization. Critical section. Handling a critical section. Semaphores. Monitors. Problems of readers and writers, producers and consumers, philosophers. 4. Deadlocks. Factors of their occurrence. Graph of resources allocation. Prevention and avoidance. State and safe sequence. Banker's algorithm. 5. Communication between processes. 6. Memory management. Paging and segmentation. 7. Virtual memory. Exchange. Paging algorithms. 8. Libraries 9. File System. Construction of files and directories. Allocation of disk space. 10. Input/output management. Device drivers. Scheduling disk operations. RAID. 11. Security. Security threats. Protection. Attackers. Malicious programs. 12. Systems: Unix, Linux, Windows.
Overview of the course elements
The laboratory comprises performing laboratory exercises devoted to the use of selected system mechanisms and realizing a project intended to test the ability to apply the gained knowledge. Exercises include code optimization techniques, the use of make, gdb, gprof, strace, memory management, creation of static and dynamic libraries, timing, file operations, creation of processes, signals, unnamed and named pipes, message queues, semaphores and shared memory, creating and management of threads and their synchronization, sockets. In addition, the students need to get course credit for tests based on the topics addressed.
1. Abraham Silberschatz, Peter B. Galvin, Podstawy systemów operacyjnych, WNT, 2005 (wyd. 5 zmienione)
2. William Stallings, Systemy operacyjne. Struktura i zasady budowy, Wydawnictwo Naukowe PWN SA, 2006
3. W. Richard Stevens, Programowanie w środowisku systemu Unix, WNT, 2002
4. Mark Mitchell, Jeffrey Oldham, Alex Samuel, Linux. Programowanie dla zaawansowanych, Wydawnictwo ReadMe, 2002
5. W. Richard Stevens, Stephen A. Rago, Advanced programming in the Unix Environment, Second Edition, Addison Wesley Publishing Company, 2005