Linux System Programming [LSYS]


At a Glance

Can be completed in 3 Week
Total Lectures 12
Course Validity 10 Week

Subscribe to this course

Basic      (INR) Standard (INR) Professional (INR)
Choose your package
Free

 

Sample lectures on YouTube

Course Details

Linux System Programming (LSYS) is an online course designed to introduce you to the exciting world of writing programs on a GNU/Linux system which interact with the OS kernel (Linux). This kind of programming is known as System Programming. Linux System Programming is a hot skill to pick up as more and more companies working in the area of networking, embedded software and system software are looking out for system developers. Additionally, understanding the guts of your programs makes you a better programmer.

This is not an advanced course on system programming. The goal is to have a good amount of breadth so that the student has a solid base to build upon. We start off by explaining some background concepts such as System calls, Application Binary Interface (ABI), GNU tool suite etc. Next we move on to Files and directories, a topic which is divided into two sections. Processes and threads section describes the multi-tasking capabilities of Linux. Then we discuss how to create processes, their states, scheduling, deadlocks, barriers, daemons etc. In memory management section, we look at the address translation on x86, a often misunderstood topic along with various operations which can be done with memory and its allocation. The section on Inter Process Communication (IPC) explains the various mechanisms of IPC on Linux such as shared memory, message passing etc.

Each of the large sections has a running project based on a database program. Students need to write the various pieces of the database program as they learn new concepts. Part II of the course explains different kinds of virtualization which students may have come across. It also introduces the latest industry coined acronyms around these such as Cloud Computing, Platform as a Service (PAAS) etc. The purpose of touching upon these topics is to make sure that the student understands the underlying concepts involved here and no longer treats them as black-boxes. This course can be completed in around 2 weeks time.

Highlights

  1. Strong focus on hands-on programming experience
  2. Gain insight into how your program is running and how to optimize it
  3. Develop familiarity with most of the common Linux System programming tasks
  4. Discuss with the instructors on the forums as much as you want

Instructors and Forum Moderators

This course is taught by Anup Gangwar. He will also be moderating the course forums.

Pre-requisites

This course assumes a sufficient background in the 'C' programming language and familiarity with programming on a GNU/Linux. If you have experience in working with any other UNIX system, then it is fine too. In case you do not have the required background, we recommend that you take up the courses User Level Linux and Programming With C to gain sufficient background before taking up this course.

Who should take the course

Depth

This course is at an intermediate level. Most of the topics are treated at a reasonable depth. Goal is to expose you to the various system programming tasks and libraries so that you are able to gather more information on your own as needed.

Detailed Description

  1. Introduction
    • Kernel and other basic OS concepts
    • What is meant by system programming
    • System calls
    • Application Binary Interface (ABI) including byte ordering, endianness etc.
  2. Development suite
    • GCC suite
    • binutils - ld, objdump etc.
    • make
    • gdb
  3. Files and Directories - I
    • Opening, closing, reading and writing to a file
    • Setting permissions on files
    • lseek and stat
    • fsync, fdatasync and sync
  4. Files and Directories - II
    • Inode structure of files
    • Hard and soft links
    • link and access
    • Binary IO
    • File locking
    • fcntl and file attributes
    • SVR4 log drivers, syslog and dmesg
    • Running exercise on a database
  5. Processes and Threads - I
    • Processes, threads and LWPs
    • Init process on Linux
    • Creation - fork, pthreads, vfork
    • Process states, zombie processes and process termination
    • Scheduling and concurrency - setjmp, longjmp etc.
    • APIs: exec, setrlimit, getrlimit, sigsetjmp, siglongjmp, sigproc
  6. Processes and Threads - II
    • Race conditions and deadlocks
    • Signals and handlers and masks etc.
    • Semaphores and Mutexes
    • Barriers
    • Daemons
    • Executing code from shared libraries
    • Running exercise on a database
  7. Memory Management
    • Addresses and translations (linear, virtual, physical)
    • Paging in processors
    • Process address map/space
    • Allocating and resizing memory
    • Memory allocation statistics
    • APIs: memset, memcmp, memmove, memchr, memfrob
    • Memory locking
    • Running exercise on a database
  8. Inter-Process Communication
    • Need for IPC
    • File locking for concurrent access
    • Pipes - popen/pclose
    • FIFOs
    • Shared Memory - using mmaps for allocating anonymous memory
    • Message passing
    • UNIX Sockets
    • Running exercise on a database
  9. Interacting With Hardware
    • Device special files, major and minor numbers
    • IOCTLs - introduction, retrieving information from TTYs
    • /proc file system - structure, tuning parameters, various other information available etc.
  10. Assembly Programming
    • Inline assembly
    • When to do inline assembly
    • SSE example
  11. Introduction to Virtualization
    • History and need
    • Types of virtualization
    • Overview of VMWare
    • Overview of Xen
    • Overview of KVM
    • Overview of BSD Jails
    • Overview of User mode Linux
    • Qemu and its accelerator
    • Hardware support
    • IO and bottlenecks
  12. Introduction to Cloud Computing
    • Cloud computing, Grid computing and other buzzwords
    • Data centers
    • Amazon EC2
    • Hadoop, PAAS (and related jargon)
    • Security in the cloud
  13. Conclusions
    • Relevant links
    • Good books

The objective of this course as outlined above is to help you understand common system programming tasks. After finishing this course, you will be able to understand the guts of your programs better as well as be suitable for starting positions in a large number of companies.

About Us | Resources | Contact Us
Terms of Use | Privacy Policy
© 2020 VirtuQ™ Education All right reserved.