Operating systems structure and operations; processes, threads and CPU scheduling; deadlocks characterization and management; main and virtual memory management; file system interface and implementation; mass-storage structure and I/O system management.
Shell commands in UNIX/Linux. The C programming language. UNIX/Linux system calls. System programming and inter-process communication in UNIX/Linux. Basics of kernel programming.
Required Textbook: Sistemi Operativi. A.Silberschatz & P.B.Galvin & G.Gagne, 10ed., Addison-Wesley.
- Sistemi Operativi. P.Ancillotti & M. Boari & A. Ciampolini & G. Lipari, 2ed., McGraw-Hill.
- I Moderni Sistemi Operativi. A.S. Tanenbaum & H. Bos, 4ed., Pearson.
Laboratory (reference textbooks)
- The Linux Command Line, W. Shotts.
- C didattica e programmazione, A. Kelley, I. Pohl, Pearson, 2nd Edition.
- Understanding the Linux kernel, D. Bovet, M. Cesati, O'Reilly.
- J. Erickson, L'arte dell'Hacking, vol 1, 2008.
Knowledge and understanding:
operating systems' internal structure; operations of operating systems' components; issues related to design and implementation of operating systems' components.
Practical application of knowledge and understanding:
deep comprehension of hardware/software relationships and of operating systems interaction with user programs; more conscious and effective use of operating systems and of the tools they provide.
Class lectures: 48 (hours).
Laboratory activities: 36 (hours).
Attendance to class lectures and laboratory activities: recommended.
Teaching Tools UNIFI E-Learning: https://e-l.unifi.it/.
Prof. Pugliese's office hours: usually on Tuesday from 2.00pm to 3.30pm, make an appointment by e-mail (firstname.lastname@example.org).
Dott. Ceccarelli's office hours: by appointment. Contact the teacher by e-mail (email@example.com).
Type of Assessment
The exam consists of two tests, one concerning the theory part (with weight 2/3 on the determination of the final mark) and one concerning the laboratory part (with weight 1/3).
The test concerning the theory part consists of an oral exam that may deal with any of the topics covered in class. The test includes both theory questions and exercises to be solved through the practical application of the theory. At the request of the student or the teacher, in case the student has achieved a score equal to or greater than 17 in the written exam is obtained, it is also possible to take an oral exam. In this case, the mark of the theory test is determined by arithmetic mean of the scores obtained in the written test and in the oral exam.
The theory test aims to evaluate the understanding of the internal structure of operating systems, of the functionality of their main components, and of the problems inherent in their design and implementation. In addition to the knowledge of the topics presented in class and the ability to apply the knowledge acquired to solve new problems, the clarity of the presentation, the appropriate use of specialist vocabulary, and the ability to relate different topics of the program to each other will also be assessed.
The test for the laboratory part consists of i) the development of a software project, and a short report, in groups of maximum 3 students, and ii) an oral test to discuss the project and verify of knowledge of the topics of the laboratory part. The mark of the laboratory part is the average of the evaluation of the software project and the oral test. The software project is evaluated according to the criteria: i) quality
of the report; ii) quality of the code; iii) quality of the structure and organization of the files; iv) quality of the compilation process; v) proper functional behaviour of the project. If the project and the related discussion are deemed sufficient, the oral test is based on two sets of questions (GROUP A, 20 questions, and GROUP B, 80 questions), which will be available on the course website. In particular, as a necessary condition for passing the oral test, no gaps are allowed in the answers to GROUP A questions. Answering only questions from GROUP A leads to a mark no higher than 20 to the laboratory part.
Operating systems main objectives and tasks. Resource management. Interrupt. Operating system services. User interfaces. System calls and APIs. Concurrent model and processes. States diagram. Process scheduling. Process operations. Processes and threads. Multithreading models. CPU management. Scheduling criteria and algorithms. Deadlock: characterization and management methods. Main memory management. Logical and physical address spaces. Swapping. Contiguous memory allocation. Segmentation. Paging. Page replacement algorithms. Secondary memory management. The file system: interface and implementation. Directories and files. File access and allocation methods. Free space management. Management of an I/O device: polling, interrupt, DMA. Disk structure and management. NVM devices. Scheduling of disk requests. RAID structure.
Laboratory module: Shell commands in UNIX/Linux. The C programming language UNIX/Linux system calls. System programming and inter-process communication in UNIX/Linux. Basic concepts of system administration UNIX/Linux. Kernel programming.