Course Title: System Programming
Course Overview:
System Programming is a course that focuses on understanding the internals of operating systems and software development for system-level applications. Students will learn about system calls, processes, memory management, file systems, and device drivers. The course emphasizes hands-on programming, debugging, and system optimization techniques.
Course Objectives:
Understand the architecture and components of operating systems.
Learn about system calls, processes, and threads.
Study memory management techniques and virtual memory.
Explore file systems, I/O operations, and device management.
Gain practical experience in system-level programming and debugging.
Develop skills in system optimization and performance tuning.
Course Outline:
Introduction to System Programming
Overview of system software and operating systems
Role of system programmers
System programming languages and tools
System Calls and API
System calls and their categories (file, process, network)
POSIX API and system call conventions
User-level vs. kernel-level programming
Processes and Threads
Process management (creation, termination, scheduling)
Inter-process communication (IPC) mechanisms
Multi-threading and thread synchronization
Memory Management
Memory allocation and deallocation (malloc, free)
Virtual memory concepts (paging, segmentation)
Memory protection and address translation
File Systems
File system organization and structure
File operations (open, read, write, close)
File descriptors and file permissions
Input/Output Operations
I/O system calls (read, write, ioctl)
Buffered vs. unbuffered I/O
File locking and concurrent access
Device Drivers and Kernel Modules
Basics of device drivers
Writing device drivers and kernel modules
Device management and driver interfaces
Concurrency and Parallelism
Concurrent programming techniques
Thread synchronization mechanisms (mutex, semaphore, condition variable)
Parallel programming models (OpenMP, MPI)
System Performance Analysis
Profiling and benchmarking tools
Identifying performance bottlenecks
Optimization strategies and code tuning
System Debugging and Troubleshooting
Debugging techniques (printf debugging, gdb, valgrind)
Tracing system calls and signals
Handling system errors and exceptions
Assessment Methods:
Programming assignments and projects in system programming languages (e.g., C, C++)
System-level debugging and troubleshooting exercises
Performance optimization and benchmarking tasks
Analysis of system-level programming problems and solutions
Textbook:
“Advanced Programming in the UNIX Environment” by W. Richard Stevens and Stephen A. Rago
References:
“Operating Systems: Three Easy Pieces” by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
Online documentation and tutorials for system programming languages and tools
Admission Open for this course
Contact Number: 03307615544