Course Overview
|
Course Synopsis
|
This course familiarizes you with the system programming basics with complete focus on the Microsoft’s Windows operating system. You will be able to know 32- and 64-bit architectures and what APIs are provided by the Microsoft Windows to write programs for these.
In this course you will learn how Microsoft Windows handle files, memory management, error and exceptions, heaps, Dynamic Link Libraries (DLLs), processes threads, and various synchronization constructs.
|
Course Learning Outcomes
|
At the end of the course, you should be able to understand:
- What is 32- and 64-bit source code and how Windows support these
- What is Windows File and Directory Management system
- How Windows report errors and its robust exception handling mechanism
- What is Windows Registry and Registry Keys
- Windows Memory Management through heaps
- Dynamic Link Libraries (DLLs) and DLL Version Management
- Window’s Processes and Threads management mechanism
- Multiprocessing, Multithreading, and Parallel Processing in Windows
- Synchronization constructs including Mutexes, Semaphores, Critical Sections etc.
- Support of Windows for inter-process communication
|
Course Calendar
|
|
Week 01
1
|
Windows Operating System
|
4
|
Windows, Standards, and Open Systems
|
6
|
32-bit and 64-bit Source Code Portability
|
7
|
When to use Standard C Library for File Operations
|
8
|
A simple File Copy Program using Standard C Library
|
9
|
A simple File Copy Program using Windows API
|
10
|
File Copy Program using Windows Convenience Function
|
12
|
File Naming Conventions
|
Week 02
13
|
Creating and Opening Files
|
14
|
Reading Writing a File
|
16
|
Unicode and Generic Characters
|
20
|
Example: Reporting Errors
|
22
|
Copying Multiple Files using Windows API
|
24
|
Windows File Management
|
Week 03
25
|
Windows Directory Management
|
27
|
Printing and Prompting on Console
|
28
|
Printing Current Directory
|
32
|
Specifying File Pointer Position using Overlapped Structure
|
34
|
Random Record Updates using File Pointer
|
35
|
File Attributes and Directory Processing
|
36
|
More on File and Directory Attributes
|
Week 04
38
|
Listing File Attributes
|
40
|
File Processing Strategies
|
43
|
Lock Logic Consequences
|
Week 05
48
|
Exception and their Handlers
|
52
|
Exception handling sequence
|
53
|
Floating point exceptions
|
55
|
Treating errors as Exceptions
|
57
|
Better Programs with Termination Handlers
|
Week 06
59
|
Console Control Handlers
|
60
|
Console Control Handler Example
|
61
|
Vectored Exception Handling
|
63
|
Windows Memory Management Overview
|
67
|
Heap size and Serialization
|
Week 07
70
|
A binary search tree using Heaps
|
73
|
Open Existing File Mapping Objects
|
74
|
Mapping Objects to Process address space
|
75
|
More about file Mapping
|
76
|
Sequential File Access using File Mapping
|
77
|
Sorting a memory mapped file
|
79
|
Based Pointers: Example
|
80
|
Dynamic Link Libraries (DLLs)
|
Week 08
82
|
Exporting and Importing Interfaces
|
84
|
Explicit Linking a File Conversion Function
|
86
|
DLL Version Management
|
87
|
Windows Processes and Threads
|
90
|
Specifying the Executable Image and the Command Line
|
92
|
Passing Inheritable Handles
|
Week 09
95
|
Exiting and Terminating a Process
|
97
|
Introduction to Environment Block (EB)
|
98
|
A Pattern Searching Example
|
99
|
Working in Multiprocessor Environment
|
100
|
Process Execution Times
|
101
|
Example of Process Execution Times
|
102
|
Generating Console Events
|
103
|
Simple Job Management shell
|
105
|
Listing Background Jobs
|
Week 10
115
|
More on Thread Management
|
Week 11
118
|
Multithreaded Pattern Searching
|
119
|
Boss-Worker and Other Thread Models
|
120
|
MergeSort: Exploiting Multiple Processors
|
121
|
MergeSort: Threading Example
|
122
|
Introduction to Program Parallelism
|
124
|
Processes and Thread Priority
|
126
|
Mistakes While Using Threads
|
Week 12
131
|
Need for Thread Synchronization
|
132
|
A Simple Solution to Critical Section Problem
|
134
|
Memory Architecture and Memory Barriers
|
135
|
Interlocked Functions
|
136
|
Local and Global Storage
|
137
|
How to Write Thread Safe Code
|
138
|
Thread Synchronization Objects
|
139
|
CRITICAL_SECTION Objects
|
140
|
CRITICAL_SECTION for Protecting Shared Variables
|
141
|
Protect a Variable With a Single Synchronization Object
|
Week 13
142
|
Producer-Consumer Problem
|
143
|
Sample Program for Producer-Consumer Problem
|
145
|
Mutexes, CRITICAL_SECTIONs and Deadlocks
|
146
|
Mutexes vs CRITICAL_SECTIONs
|
152
|
Producer-Consumer Solution Using Events
|
153
|
Windows Synchronization Objects
|
Week 14
154
|
Programming Guideline using Mutexes and CSs
|
155
|
More on Interlocked Functions
|
156
|
Memory Management Performance
|
157
|
Synchronization Performance Impact
|
158
|
Gauging Performance Impact of Synchronization
|
159
|
Performance Analysis of NS, IN, CS, and MX
|
160
|
False Sharing Contention
|
161
|
Tuning the Performance with CS Spin Counts
|
162
|
Setting the Spin Count
|
163
|
Slim Read/Write Locks (SRWs)
|
165
|
Improved Locking through SRWs
|
Week 15
166
|
Reducing Thread Contention
|
171
|
Alternate Methods for Submitting Callbacks
|
173
|
Other Threadpool Callback Types
|
176
|
Parallel programming Alternatives
|
177
|
Parallelism Framework
|
178
|
Challenges in Parallelism Programming
|
Week 16
181
|
Interprocess Communication
|
183
|
I/O Redirection using Anonymous Pipes
|
187
|
Named Pipe Client Connections
|
188
|
Named Pipe Status Functions
|
189
|
Named Pipe Connection Functions
|
190
|
Client-Server Named Pipe Connection
|
|
|
|