|
1. Advanced C and Data Structures for System Programmers
Understanding a computer and a Program
- CPU
- Memory
- I/O controllers
- Executable Image contents
- Text/Code, Read only Data, Data, BSS
- Loading and running a program in Physical memory
- Loading and running a program in Virtual memory
Program with Multiple C files
- Why multiple C files
- Definition Vs Declaration
- Hiding data and functions
- Header files
Development tools in Linux
Compiler
- Compilation Stages
- Object file format
Linker
- Function of Linker
- Static linking Vs Dynamic linking
- Executable file format
- Executable file vs Executable Image in memory
Archive or Libray utility
Make utility
Debugger
Pointers and Its Applications
- Pointers Vs Integers
- Pointer type
- Pointer de-reference
- Pointers and arrays
- Pointer arithmetic
- Array of pointers
- Pointers and Dynamic memory
Structures
- Compound type
- Packing of elements within a structure
- Alignment and hole in the structure
- Structure pointers
- Accessing elements of a structure using structure pointers
- Dynamic allocation of memory for structures
- Self referential structures
- Passing structure parameters to functions
- Returning a structure or struct pointer by a function
Unions
- Differences between union and structure
- Uses of unions
Bit Operations
- Binary, Decimal and Hex conversions
- Logical versus Bit wise operations
- Masking a bit
- Testing a bit
- Setting a bit
- Testing a set of bits
- Setting a set of bits
- Conversion of numbers from Binary to String and vice versa
Functions
- Definition, Declaration/prototype, Invocation
- Function type and return value
- Output parameters
- Pass by value and pass by reference
- Local variables
- Static variables
- Function pointers
- Thread of execution(stack frames)
Module Concepts
- Module concept
- Interface functions
- Unit testing of module
- Test Driver
- Test Stub
Managing data in Arrays
- Operations on arrays
- Arrays Vs Strings
Managing data in Linked lists
- Single linked lists
- Operations on linked lists
- Double linked lists
Maintaining data with order
- Stack(LIFO) order
- Queue(FIFO) order
- Stacks using Arrays and Linked lists
- Queue using Arrays and Linked lists
- Circular queues
Maintaining data for Search
- Linear search
- Binary search
- Hash based search
Understanding and Using Messages
- Message concepts
- Text Vs Binary messages
- Framing of messages
- Parsing of messages
2.Linux System and Network Programming
Operating Systems Concepts
- What is OS
- Components of OS
- OS vs Kernel
- Kernel Services
- Types of operating systems
- Introduction to Linux
File and I/O Services
- File descriptors
- File types
- Stdin, Stdout and Stderr File descriptors
- Link or Relationship between File Descriptor and File or device
- File descriptors of same file but from multiple processes
- File I/O system calls (unbuffered i/o)
- open, create, close, lseek, read, write, dup, dup2
- fcntl, ioctl
- File types, IDs and Access permissions
Standard I/0 Library Functions
- fopen,fread,fwrite,fclose,fseek
- Relationship between file descriptor and FILE pointer
- Character at a time I/O
- Line at a time I/O
- Formatted I/O
Multi-threading
- Multi-threaded programming
- Synchronization and Mutual exclusion for threads
- POSIX Semaphores
- POSIX Mutexes
Multi-Processing
- Process Identifiers
- fork, exit, wait, waitpid, execv
Initial Process Relationships
Signals
- Signal Concepts
- Signal(), kill(), raise(), alarm() and pause()
Inter Process Communication
- Pipes
- FIFO (Named pipes)
- Message Queues
- Semaphores
- Shared Memory
Network Programming
- Concept of socket / socket pair
- Concept of Client and Server
- Concept connectionless and connection oriented protocols (UDP/TCP)
- Socket calls for UDP server and client
- Socket calls for TCP server and client
- Algorithms and Issues in Client software design
- Algorithms and Issues in Server software design
- Iterative, Connectionless Servers
- Iterative Connection-Oriented servers
- Concurrent, Connection-Oriented servers
- Serving multiple clients with a single process
- Serving multiple clients with one thread per client
Standard UDP/TCP Applications
3. Linux Kernel Programming and Device Drivers
Introduction to Linux Kernel
- Linux OS vs Linux Kernel
- Kernel Sources
- Configuring and Building Kernel
Kernel Modules
- Module Concepts
- Module tools
- Module Parameters
- Module stacking
Timing issues in the kernel
Concurrency in the Kernel
Character Drivers
Understanding Hardware
Memory, I/O and Interrupts
Advanced Character drivers
ProcFS, SysFS and Linux Driver Model
Serial Driver
PCI Bus
Network Drivers
Audio Drivers
Video Drivers
USB Drivers
Block Drivers
Debugging Device Drivers
Linux in Embedded Systems
|