IT628 Systems Programming
(IT628 Systems Programming)

IT628 Systems Programming course will cover topics listed below. For each of the topics covered in theory, there will be associated lab assignments to cover the practical aspect. This moodle is created for lab assignment submission where each student will need to submit the documents mentioned in the Lab Assignment Manual.

Introduction: SystemProgramming introduction, Unix Shell, Basic Shell Commands

C Programming: Using the C programming language, its constructs and grammar, to
create system software

Usage of Unix C compiler gcc, compiling, linking, object files, loading, symbol resolution,
shared and static libraries, debugging, and execution of system programs, makefiles

File IO: unbufferedIO (file descriptor, open, create, read and write files, file modes), buffered IO (file pointer, open, create, read, write files, file modes), advantage and disadvantage between both schemes, directories, symbolic links, permissions

Process: creationand termination of process, process states, exec family system functions, fork to create child process, process control, process communication using pipe

Signals: types of signals, signal actions, catching and handling signal,signal from process

Concurrent Programming: computingand communication type: multithreading, parallel computing (shared memory), distributed computing (message passing), threads vsprocess, user level vskernel level threads, POSIX threads: creation, termination, join, synchronization, critical section, mutual exclusion, mutexlocks, semaphores, deadlock, reader-writer problem, dining-philosopher problem

Network Programming: CommunicationLayers (Network, Transport), Protocols basics: Internet Protocol (IP) , TCP: connection oriented, UDP: connectionless, standard services and assigned ports, client-server communication using sockets

InterprocessCommunication (IPC):
Shared memory architectures: signals, named pipes and OpenMP(OpenMPuses multicore or multi-processor architecture on the same system)
Distributed memory architectures: massage passing interface such as OpenMPIor MPICH (MPI in addition to multi-core or multi-process architecture uses multiple systems to harness compute power of different systems)