Base Knowledge
Knowledge of the matters listed below is absolutely essential and necessary:
- Programming in C (Introduction to Programming, Programming, 1st year)
- Computer architectures and technologies (Computer Technologies and Architectures, 1st year)
Teaching Methodologies
The classes are theoretical and practical. In the theoretical classes, an expository methodology is used to present the theoretical foundations of the subject with application examples, and student participation is encouraged with the aim of fostering an interactive learning environment. In the practical classes, students apply the knowledge from the theoretical lessons by developing applications under the supervision of the instructors, and student participation in the class is required. Outside of class, students work in pairs to develop a project that applies and deepens the topics covered in the lessons, and the project is subject to evaluation.
Learning Results
Skills to be acquired and developed by students in this course:
- Understand, explain and justify the inner workings of modern operating systems
- Understand, explain and plan the operation and administration of Unix/Linux systems
- Understand, plan, develop, explain, and justify the development of C applications for the Unix platform
- Plan and prepare technical documentation on software projects for systems.
Program
The course syllabus is organized into 3 themes:
- Introduction and functioning of the Unix system and environment and its operation.
- Development of Unix applications in C.
- Theoretical foundations of operating systems.
Introduction and operation of the Unix system and environment and its operation:
- Basic concepts and mechanisms underlying the operation of Linux from a configuration point of view.
- System startup and startup. Partitions and file systems. Typical Unix file system. Protection and permissions of users and files in Unix. sudo and setuid bit mechanisms. Configuration of Linux basics.
- Unix commands and Bash programming – System introduction and topics of using the Unix/Linux system from the command line from a user and administrator point of view.
- Introduction to the Unix system from the user’s point of view. i) Architecture and main components, ii) System startup, iii) login process, iv) File system
- Unix commands for i) file and directory manipulation, ii) Process management, iii) User management iv) Information extraction and manipulation in structured text files, v) Redirection.
- Introduction to Shell Script (Bash) programming
Unix application development in C.
- Introductory and fundamental aspects of application development for Unix environment.
- Build process. Source, object, library and executable files. Library functions and system functions.
- Programs and processes. Creation of processes. Fork and exec mechanisms. Processes management. PID
- Signals. Simple synchronization mechanisms with signals. Application examples
- Unix I/O. Files and file table. Redirection and anonymous pipes. Introduction to file system manipulation functions
- Named pipes in Unix. Applications in client-server model. Synchronous and asynchronous operation.
- Multithreaded programming in Unix
- Simple synchronization with binary semaphores and conditional variables
Theoretical foundations of operating systems. Theoretical concepts of operating systems covering 1) general topics, 2) architecture, 3) implementation topics, 4) process management, 5) memory management.
- 1 General concepts.
- Goals of operating systems. Programs, processes and threads. Types of systems. Operating system architecture. Operating systems kernel.
- 2 Topics in Multitasking and Synchronization Programming
- Multi-task programming. Introduction to Synchronization: Logical latches and mutexes. Conditional variables.
- 3 System Implementation Topics
- Process implementation. Execution Modes. Kernel space and user space. Interruptions control and their application for system implementation. System call implementation. Implementation of logical latches and mutexes. Kernel mode programming topics.
- 4 Process management
- Scheduling types and algorithms. State and life cycle of processes. Scheduling and performance metrics.
- 5 Memory management
- Fundamental concepts of memory management. Virtual Addressing. Types of virtual addressing. Virtual memory management algorithms.
Curricular Unit Teachers
Internship(s)
NAO
Bibliography
Main references
Marques, J. A., Guedes, P. (1998). Fundamentos de Sistemas Operativos (4rd ed.), Editorial Presença – 1A-3-114
Silberschatz, A., Galvin, P. B., Gagne, G. (2009). Operating Systems Concepts (8th ed.), Wiley & Sons – 1A-3-137
Matthew, N., Stones R., (1999). Beginning Linux Programming (2nd ed.), Wrox press – 1A-3-155
Complementary references
Stallings, W. (2017). Operating Systems: Internals and Design Principles (9th ed.), Pearson
Marques, J. A., Ferreira, P., Ribeiro, C., Veiga, L., Rodrigues, R. (2012). Sistemas Operativos (2nd ed.), FCA
Wirzenius L., (2021). The Linux System Administrators’ Guide, The Linux Documentation Project, online: https://tldp.org/